微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 嵌入式设计 > 第48节:利用DS1302做一个实时时钟

第48节:利用DS1302做一个实时时钟

时间:11-22 来源:互联网 点击:

  1. CK 0xC3//用来检查芯片的备用电池是否用完了的地址
  2. #define READ_SECOND 0x81
  3. #define READ_MINUTE 0x83
  4. #define READ_HOUR 0x85
  5. #define READ_DATE 0x87
  6. #define READ_MONTH 0x89
  7. #define READ_YEAR 0x8D
  8. #define WRITE_PROTECT 0x8E
  9. void initial_myself(void);
  10. void initial_peripheral(void);
  11. void delay_short(unsigned int uiDelayShort);
  12. void delay_long(unsigned int uiDelaylong);
  13. //驱动数码管的74HC595
  14. void dig_hc595_drive(unsigned char ucDigStatusTemp16_09,unsigned char ucDigStatusTemp08_01);
  15. void display_drive(void); //显示数码管字模的驱动函数
  16. void display_service(void); //显示的窗口菜单服务程序
  17. //驱动LED的74HC595
  18. void hc595_drive(unsigned char ucLedStatusTemp16_09,unsigned char ucLedStatusTemp08_01);
  19. void T0_time(void);//定时中断函数
  20. void key_service(void); //按键服务的应用程序
  21. void key_scan(void);//按键扫描函数 放在定时中断里
  22. void ds1302_alarm_service(void); //ds1302出错报警
  23. void ds1302_sampling(void); //ds1302采样程序,内部每秒钟采集更新一次
  24. void Write1302 ( unsigned char addr, unsigned char dat );//修改时间的驱动
  25. unsigned char Read1302 ( unsigned char addr );//读取时间的驱动
  26. unsigned char bcd_to_number(unsigned char ucBcdTemp);//BCD转原始数值
  27. unsigned char number_to_bcd(unsigned char ucNumberTemp); //原始数值转BCD
  28. //日调整 每个月份的日最大取值不同,有的最大28日,有的最大29日,有的最大30,有的最大31
  29. unsigned char date_adjust(unsigned char ucYearTemp,unsigned char ucMonthTemp,unsigned char ucDateTemp); //日调整
  30. sbit SCLK_dr =P1^3;
  31. sbit DIO_dr_sr =P1^4;
  32. sbit DS1302_CE_dr =P1^5;
  33. sbit key_sr1=P0^0; //对应朱兆祺学习板的S1键
  34. sbit key_sr2=P0^1; //对应朱兆祺学习板的S5键
  35. sbit key_sr3=P0^2; //对应朱兆祺学习板的S9键
  36. sbit key_sr4=P0^3; //对应朱兆祺学习板的S13键
  37. sbit key_gnd_dr=P0^4; //模拟独立按键的地GND,因此必须一直输出低电平
  38. sbit beep_dr=P2^7; //蜂鸣器的驱动IO口
  39. sbit eeprom_scl_dr=P3^7; //时钟线
  40. sbit eeprom_sda_dr_sr=P3^6; //数据的输出线和输入线
  41. sbit dig_hc595_sh_dr=P2^0; //数码管的74HC595程序
  42. sbit dig_hc595_st_dr=P2^1;
  43. sbit dig_hc595_ds_dr=P2^2;
  44. sbit hc595_sh_dr=P2^3; //LED灯的74HC595程序
  45. sbit hc595_st_dr=P2^4;
  46. sbit hc595_ds_dr=P2^5;
  47. unsigned int uiSampingCnt=0; //采集Ds1302的计时器,每秒钟更新采集一次
  48. unsigned char ucKeySec=0; //被触发的按键编号
  49. unsigned intuiKeyTimeCnt1=0; //按键去抖动延时计数器
  50. unsigned char ucKeyLock1=0; //按键触发后自锁的变量标志
  51. unsigned intuiKeyTimeCnt2=0; //按键去抖动延时计数器
  52. unsigned char ucKeyLock2=0; //按键触发后自锁的变量标志
  53. unsigned intuiKeyTimeCnt3=0; //按键去抖动延时计数器
  54. unsigned char ucKeyLock3=0; //按键触发后自锁的变量标志
  55. unsigned int uiKey4Cnt1=0;//在软件滤波中,用到的变量
  56. unsigned int uiKey4Cnt2=0;
  57. unsigned char ucKey4Sr=1;//实时反映按键的电平状态
  58. unsigned char ucKey4SrRecord=0; //记录上一次按键的电平状态
  59. unsigned intuiVoiceCnt=0;//蜂鸣器鸣叫的持续时间计数器
  60. unsigned charucVoiceLock=0;//蜂鸣器鸣叫的原子锁
  61. unsigned char ucDigShow8;//第8位数码管要显示的内容
  62. unsigned char ucDigShow7;//第7位数码管要显示的内容
  63. unsigned char ucDigShow6;//第6位数码管要显示的内容
  64. unsigned char ucDigShow5;//第5位数码管要显示的内容
  65. unsigned char ucDigShow4;//第4位数码管要显示的内容
  66. unsigned char ucDigShow3;//第3位数码管要显示的内容
  67. unsigned char ucDigShow2;//第2位数码管要显示的内容
  68. unsigned char ucDigShow1;//第1位数码管要显示的内容
  69. unsigned char ucDigDot8;//数码管8的小数点是否显示的标志
  70. unsigned char ucDigDot7;//数码管7的小数点是否显示的标志
  71. unsigned char ucDigDot6;//数码管6的小数点是否显示的标志
  72. unsigned char ucDigDot5;//数码管5的小数点是否显示的标志
  73. unsigned char ucDigDot4;//数码管4的小数点是否显示的标志
  74. unsigned char ucDigDot3;//数码管3的小数点是否显示的标志
  75. unsigned char ucDigDot2;//数码管2的小数点是否显示的标志
  76. unsigned char ucDigDot1;//数码管1的小数点是否显示的标志
  77. unsigned char ucDigShowTemp=0;

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top