第48节:利用DS1302做一个实时时钟
时间:11-22
来源:互联网
点击:
- CK 0xC3//用来检查芯片的备用电池是否用完了的地址
- #define READ_SECOND 0x81
- #define READ_MINUTE 0x83
- #define READ_HOUR 0x85
- #define READ_DATE 0x87
- #define READ_MONTH 0x89
- #define READ_YEAR 0x8D
- #define WRITE_PROTECT 0x8E
- void initial_myself(void);
- void initial_peripheral(void);
- void delay_short(unsigned int uiDelayShort);
- void delay_long(unsigned int uiDelaylong);
- //驱动数码管的74HC595
- void dig_hc595_drive(unsigned char ucDigStatusTemp16_09,unsigned char ucDigStatusTemp08_01);
- void display_drive(void); //显示数码管字模的驱动函数
- void display_service(void); //显示的窗口菜单服务程序
- //驱动LED的74HC595
- void hc595_drive(unsigned char ucLedStatusTemp16_09,unsigned char ucLedStatusTemp08_01);
- void T0_time(void);//定时中断函数
- void key_service(void); //按键服务的应用程序
- void key_scan(void);//按键扫描函数 放在定时中断里
- void ds1302_alarm_service(void); //ds1302出错报警
- void ds1302_sampling(void); //ds1302采样程序,内部每秒钟采集更新一次
- void Write1302 ( unsigned char addr, unsigned char dat );//修改时间的驱动
- unsigned char Read1302 ( unsigned char addr );//读取时间的驱动
- unsigned char bcd_to_number(unsigned char ucBcdTemp);//BCD转原始数值
- unsigned char number_to_bcd(unsigned char ucNumberTemp); //原始数值转BCD
- //日调整 每个月份的日最大取值不同,有的最大28日,有的最大29日,有的最大30,有的最大31
- unsigned char date_adjust(unsigned char ucYearTemp,unsigned char ucMonthTemp,unsigned char ucDateTemp); //日调整
- sbit SCLK_dr =P1^3;
- sbit DIO_dr_sr =P1^4;
- sbit DS1302_CE_dr =P1^5;
- sbit key_sr1=P0^0; //对应朱兆祺学习板的S1键
- sbit key_sr2=P0^1; //对应朱兆祺学习板的S5键
- sbit key_sr3=P0^2; //对应朱兆祺学习板的S9键
- sbit key_sr4=P0^3; //对应朱兆祺学习板的S13键
- sbit key_gnd_dr=P0^4; //模拟独立按键的地GND,因此必须一直输出低电平
- sbit beep_dr=P2^7; //蜂鸣器的驱动IO口
- sbit eeprom_scl_dr=P3^7; //时钟线
- sbit eeprom_sda_dr_sr=P3^6; //数据的输出线和输入线
- sbit dig_hc595_sh_dr=P2^0; //数码管的74HC595程序
- sbit dig_hc595_st_dr=P2^1;
- sbit dig_hc595_ds_dr=P2^2;
- sbit hc595_sh_dr=P2^3; //LED灯的74HC595程序
- sbit hc595_st_dr=P2^4;
- sbit hc595_ds_dr=P2^5;
- unsigned int uiSampingCnt=0; //采集Ds1302的计时器,每秒钟更新采集一次
- unsigned char ucKeySec=0; //被触发的按键编号
- unsigned intuiKeyTimeCnt1=0; //按键去抖动延时计数器
- unsigned char ucKeyLock1=0; //按键触发后自锁的变量标志
- unsigned intuiKeyTimeCnt2=0; //按键去抖动延时计数器
- unsigned char ucKeyLock2=0; //按键触发后自锁的变量标志
- unsigned intuiKeyTimeCnt3=0; //按键去抖动延时计数器
- unsigned char ucKeyLock3=0; //按键触发后自锁的变量标志
- unsigned int uiKey4Cnt1=0;//在软件滤波中,用到的变量
- unsigned int uiKey4Cnt2=0;
- unsigned char ucKey4Sr=1;//实时反映按键的电平状态
- unsigned char ucKey4SrRecord=0; //记录上一次按键的电平状态
- unsigned intuiVoiceCnt=0;//蜂鸣器鸣叫的持续时间计数器
- unsigned charucVoiceLock=0;//蜂鸣器鸣叫的原子锁
- unsigned char ucDigShow8;//第8位数码管要显示的内容
- unsigned char ucDigShow7;//第7位数码管要显示的内容
- unsigned char ucDigShow6;//第6位数码管要显示的内容
- unsigned char ucDigShow5;//第5位数码管要显示的内容
- unsigned char ucDigShow4;//第4位数码管要显示的内容
- unsigned char ucDigShow3;//第3位数码管要显示的内容
- unsigned char ucDigShow2;//第2位数码管要显示的内容
- unsigned char ucDigShow1;//第1位数码管要显示的内容
- unsigned char ucDigDot8;//数码管8的小数点是否显示的标志
- unsigned char ucDigDot7;//数码管7的小数点是否显示的标志
- unsigned char ucDigDot6;//数码管6的小数点是否显示的标志
- unsigned char ucDigDot5;//数码管5的小数点是否显示的标志
- unsigned char ucDigDot4;//数码管4的小数点是否显示的标志
- unsigned char ucDigDot3;//数码管3的小数点是否显示的标志
- unsigned char ucDigDot2;//数码管2的小数点是否显示的标志
- unsigned char ucDigDot1;//数码管1的小数点是否显示的标志
- unsigned char ucDigShowTemp=0;
DS1302实时时 相关文章:
- 如何实现DS1302实时时钟表显示在1602LCD液晶(11-18)
- LCD1602液晶显示DS1302实时时钟Proteus仿真(11-13)
- AT89C2051+LCD1602+DS1302实时时钟设计(c51)(11-10)
- Windows CE 进程、线程和内存管理(11-09)
- RedHatLinux新手入门教程(5)(11-12)
- uClinux介绍(11-09)