万年历时钟实验
一. 实验目的
进行一次实际开发的实验,提高用户实际开发的能力。
二. 实验设备及器件
ibm pc 机 一台
dp-51proc 单片机综合仿真实验仪 一台
三. 实验内容
结合i2c 总线控制的实时时钟、zlg7290 键盘led 控制器进行万年历时钟的设
计。
四. 实验要求
熟练掌握i2c 总线的控制,灵活运用i2c 主控器软件包,深刻理解实时时钟、
zlg7290 键盘led 控制的各种功能,并能把它们相结合,组成具有实际功能的万年历
时钟。
五. 实验步骤
1. 用导线连接d5 区的scl、sda 到a2 区的p16、p17(scl~p16、sda~p17),
连接d5 区的rst_l、int_key 到a2 区的p10、int0(/rst~p10、
int_key~int0),短接d5 区的jp1 跳线。
2. 模拟i2c 软件包“viic_c51.c”文件加入到keil c51 的项目中,开头包含
“viic_c51.h”头文件。修改viic_c51.c 文件中的sbit sda=p1^7;和 sbit
scl=p1^6;。另外还要增加zlg7290 软件包“zlg7290.c”文件加入到keil
c51 的项目中,开头包含“zlg7290.h”头文件。
3. 先编写显示的子函数,可以分别显示日期和显示时间。用按键来切换显示的内容(初
步设计用d5 区的s1 按键来切换)。
4. 然后再进行整体编程,如果还有困难可以先画流程图,再编写程序。
5. 显示结果为:上电运行时,8 位数码管显示时间,时分秒;按一下s1 切换到显示
年月日,再按一下s1 又切换回时分秒。
六. 实验预习要求
认真阅读pcf8563t、zlg7290 的数据手册和模拟i2c 软件包使用手册,理解硬
件结构,还可以先把程序编好,然后在keil c51 环境下进行软件仿真。
七. 实验参考程序
实时时钟程序:
#include reg52.h
#include viic_c51.h //包含vi2c 软件包
#include zlg7290.h
#define pcf8563 0xa2 //定义器件地址
#define wraddr 0x00 //定义写单元首地址
#define rdaddr 0x02 //定义读单元首地址
sbit key_int=p3^2;
sbit rst=p1^0;
unsigned char disp_buf[8]={0,0,0,0,0,0,0,0};//显示缓存
unsigned char key; //保存键值
bit swich_date=0;
unsigned char display_time(unsigned char *sd)
{
sd[0]=sd[0]&0x7f;//秒屏蔽保留位
sd[1]=sd[1]&0x7f;//分屏蔽保留位
sd[2]=sd[2]&0x3f;//时屏蔽保留位
disp_buf[0] =(sd[0]%16);
disp_buf[1] =(sd[0]/16);
disp_buf[2] = 31;
disp_buf[3] =(sd[1]%16);
disp_buf[4] =(sd[1]/16);
disp_buf[5] = 31;
disp_buf[6] =(sd[2]%16);
disp_buf[7] =(sd[2]/16);
zlg7290_sendbuf(disp_buf,8);
return 0;
}
unsigned char display_date(unsigned char *sd)
{
sd[0]=sd[0]&0x3f;//日屏蔽保留位
sd[2]=sd[2]&0x1f;//月屏蔽保留位
disp_buf[0] =(sd[0]%16);
disp_buf[1] =(sd[0]/16);
disp_buf[2] =(sd[2]%16)+0x80;//后面加小数点
disp_buf[3] =(sd[2]/16);
disp_buf[4] =(sd[3]%16)+0x80;//后面加小数点
disp_buf[5] =(sd[3]/16);
disp_buf[6] =0;
disp_buf[7] =2;
zlg7290_sendbuf(disp_buf,8);
return 0;
}
unsigned char delayns(unsigned char no)
{
unsigned char i,j; //延时参数
for(; no>0; no--)
for(i=0; i<100; i++)
for(j=0; j<100; j++);
return 0;
}
void main()
{
unsigned char code td[9]={ 0x00,0x12,0x00,0x30,0x12,
0x06,0x05,0x02,0x04};//定义初始化字
unsigned char rd[7]; //定义接收缓冲区
rst=0;
delayns(1);
rst=1;
//初始化pcf8563,如果需要的话可以去掉
isendstr(pcf8563,wraddr,td,0x5);
delayns(1);
//初始化pcf8563,如果需要的话可以去掉
isendstr(pcf8563,wraddr+5,&td[5],0x4);
while(1)
{
delayns(1);
ircvstr(pcf8563,rdaddr,rd,0x7); //读现在的时、分、秒
delayns(1);
if(swich_date)
display_date(rd+3); //调显示日期子程序
else
display_time(rd); //调显示时间子程序
if(key_int==0)
{
key=zlg7290_getkey();
if(key==1)
swich_date=~swich_date;
}
}
}
八. 实验思考题
(1)请用户思考一下,如果要断电还能不丢失时间应该做那些措施。
(2)请用户再思考一下,如果要降低功耗,软件设计时应做那些措施。
YY直播卖身百度的靴子终于落地
1D~4D雷达是如何区分出物体的?
使用赛灵思的功耗估计器和分析器工具协助功耗优化的步骤有哪些?
详细分析半导体芯片内部结构
展讯两款TD-SCDMA和EDGE芯片组正式商用
万年历时钟实验
为什么许多企业将物联网视为为未来做好准备的必要元素?
plc通讯故障一般怎么处理
鸿蒙系统更新了什么内容
苹果将向起亚汽车投资36亿美元合作生产电动汽车
洗衣机不使用时是否需要拔掉插头?
辐射测试中Antenna与EUT的测试距离换算
5G商用进入快车道,5G手机是否足够完美
SpiritPRD运动蓝牙耳机怎么样 值不值得买
国产手机逆袭最强旗舰一加3/3T迎安卓7.0 iPhone未来销量或略降
一文教你贴片功率电感如何检测好坏
还有人要敬业福?难道不知道支付宝万能福卡免费领取?
fireflyFace-RK3399主板FAQs方案
折叠技术不仅让折叠手机大火,也让航空领域大放异彩!
苹果购买商用无碳铝,推行保护环境重要