当前位置:   article > 正文

51单片机电子时钟(C语言)_单片机时钟程序设计代码

单片机时钟程序设计代码

硬件仿真

 全部硬件电路分为四大部分:

  1. 控制模块51单片机;
  2. 显示模块LCD1602,由P0口控制;
  3. 计时模块DS1302,由P1口控制;
  4. 输入按键,由P3口控制。

        实际设计硬件电路时应考虑到51单片机的电源、复位电路以及外接晶振,时钟芯片DS1302的备用电源等。

ff7b7f49aede467aa811dc17083f6ac8.png

51单片机动态功能

  1. 从1302的寄存器中读取数据(8421BCD码),转换后(2进制)送至1602显示
  2. 判断是否有按键输入,根据按键输入将数据写入1302寄存器

LCD1602

  1. 设置显示模式
  2. 接收数据,根据命令字显示

DS1302

  1. 自动计时
  2. 发送/接收数据

 程序源码

  1. #include<reg51.h>
  2. #include<intrins.h>
  3. //时钟芯片1302寄存器读写命令字
  4. #define SEC_write 0x80
  5. #define SEC_read 0x81
  6. #define MIN_write 0x82
  7. #define MIN_read 0x83
  8. #define HR_write 0x84
  9. #define HR_read 0x85
  10. #define DAY_write 0x86
  11. #define DAY_read 0x87
  12. #define MONTH_write 0x88
  13. #define MONTH_read 0x89
  14. #define YEAR_write 0x8c
  15. #define YEAR_read 0x8d
  16. //时钟芯片1302数据传输接口
  17. sbit SCLK=P2^0;
  18. sbit DATA=P2^1;
  19. sbit RST=P2^2;
  20. //向1302写一个字节数据
  21. void Write1302(unsigned char dat)
  22. {
  23. unsigned char i;
  24. SCLK=0;
  25. _nop_();
  26. for(i=0;i<8;i++)
  27. {
  28. DATA=dat&0x01;
  29. _nop_();
  30. SCLK=1;
  31. _nop_();
  32. SCLK=0;
  33. dat>>=1;
  34. }
  35. }
  36. //根据命令字,向1302写一个字节数据
  37. void WriteSet1302(unsigned char Cmd,unsigned char dat)
  38. {
  39. RST=0;
  40. SCLK=0;
  41. RST=1;
  42. _nop_();
  43. Write1302(Cmd);
  44. Write1302(dat);
  45. SCLK=1;
  46. RST=0;
  47. }
  48. //从1302读一个字节数据
  49. unsigned char Read1302(void)
  50. {
  51. unsigned char i,dat;
  52. _nop_();
  53. for(i=0;i<8;i++)
  54. {
  55. dat>>=1;
  56. if(DATA==1)
  57. dat|=0x80;
  58. SCLK=1;
  59. _nop_();
  60. SCLK=0;
  61. _nop_();
  62. }
  63. return dat;
  64. }
  65. //根据命令字,从1302读一个字节数据
  66. unsigned char ReadSet1302(unsigned char Cmd)
  67. {
  68. unsigned char dat;
  69. RST=0;
  70. SCLK=0;
  71. RST=1;
  72. Write1302(Cmd);
  73. dat=Read1302();
  74. SCLK=1;
  75. RST=0;
  76. return dat;
  77. }
  78. //1302进行初始化设置
  79. void Init_DS1302(void)
  80. {
  81. WriteSet1302(0x8E,0x00);
  82. WriteSet1302(SEC_write,((0/10)&
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/笔触狂放9/article/detail/408614
推荐阅读
相关标签
  

闽ICP备14008679号