找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2822|回复: 3
打印 上一主题 下一主题
收起左侧

单片机+DS1302显示年月日加星期程序与Proteus仿真图

[复制链接]
跳转到指定楼层
楼主
萌新程序,如果有错误望见谅。
仿真原理图如下(proteus仿真工程文件可到本帖附件中下载)


单片机源程序如下:
  1. #include<reg51.h>
  2. #include<intrins.h>
  3. #define uint unsigned int
  4. #define uchar unsigned char
  5. sbit rs=P1^0;
  6. sbit rw=P1^1;
  7. sbit e=P1^2;
  8. sbit RST=P1^6;
  9. sbit SCK=P1^4;
  10. sbit IO=P1^5;
  11. sbit set=P3^2;
  12. sbit add=P3^3;
  13. sbit dec=P3^4;
  14. uint m,f,h,t,a,mode,c;
  15. uchar shu1[8]={6,5,4,3,2,7,1};
  16. uchar shu2[8];
  17. void delay_LCD(uint z)
  18. {
  19. uint x,y;
  20. for(x=z;x>0;x--)
  21. for(y=110;y>0;y--);
  22. }

  23. void com(uchar com)
  24. {
  25. rs=0;
  26. e=0;
  27. rw=0;
  28. P0=com;
  29. delay_LCD(1);
  30. e=1;
  31. delay_LCD(1);
  32. e=0;
  33. }
  34. void shu(uchar shu)
  35. {
  36. rs=1;
  37. e=0;
  38. rw=0;
  39. P0=shu;
  40. delay_LCD(1);
  41. e=1;
  42. delay_LCD(1);
  43. e=0;
  44. }
  45. void chu( )       
  46. {
  47. com(0x38);
  48. com(0x0c);
  49. com(0x01);
  50. com(0x06);
  51. }
  52. ds1302_read(uchar add)
  53. {
  54. uint i,m1,m;
  55. RST=0;   _nop_();
  56. SCK=0;   _nop_();
  57. RST=1;
  58. for(i=0;i<8;i++)
  59. {
  60. IO=add&0x01;
  61. add=add>>1;
  62. SCK=1;_nop_();
  63. SCK=0;_nop_();
  64. }
  65. for(i=0;i<8;i++)
  66. {
  67. m1=IO;
  68. m=(m>>1)|(m1<<7);
  69. SCK=1;_nop_();
  70. SCK=0;_nop_();
  71. }
  72. RST=0;_nop_();
  73. SCK=1;
  74. _nop_();IO = 0;
  75. _nop_();IO = 1;
  76. _nop_();
  77. return m;
  78. }
  79. void ds1302_write(uchar add,uchar m)
  80. {
  81. uchar i;
  82. RST=0;
  83. _nop_();
  84. SCK=0;
  85. _nop_();
  86. RST=1;
  87. for(i=0;i<8;i++)
  88. {
  89. IO=add&0x01;
  90. add=add>>1;
  91. SCK=1;
  92. _nop_();
  93. SCK=0;
  94. _nop_();
  95. }
  96. for(i=0;i<8;i++)
  97. {
  98. IO=m&0x01;
  99. m=m>>1;
  100. SCK=1;
  101. _nop_();
  102. SCK=0;
  103. _nop_();
  104. }
  105. RST=0;
  106. _nop_();
  107. }

  108. read_ds1302()
  109. {       
  110. uchar i;
  111. shu1[6]=ds1302_read(0x81)&0x7f;
  112. shu1[5]=ds1302_read(0x83);
  113. shu1[4]=ds1302_read(0x85);
  114. shu1[3]=ds1302_read(0x87);
  115. shu1[2]=ds1302_read(0x89);
  116. shu1[7]=ds1302_read(0x8b);
  117. shu1[1]=ds1302_read(0x8d);
  118. for(i=1;i<8;i++)
  119. {
  120. shu2[i]=(shu1[i]>>4)*10+(shu1[i]&0x0f);
  121. }
  122. }
  123. void ds1302_init()
  124. {
  125. uint b;
  126. RST=0;
  127. SCK=0;
  128. ds1302_write(0x8e,shu1[b]);
  129. ds1302_write(0x80,shu1[b]);
  130. ds1302_write(0x82,shu1[b]);
  131. ds1302_write(0x84,shu1[b]);
  132. ds1302_write(0x8a,shu1[b]);
  133. ds1302_write(0x86,shu1[b]);
  134. ds1302_write(0x88,shu1[b]);
  135. ds1302_write(0x8c,shu1[b]);
  136. ds1302_write(0x8e,shu1[b]);
  137. }
  138. uchar code Data_table[7][3]={"Mon","Tue","Wed","Thu","Fri","Sat","Sun"};
  139. code uchar table_week[12]=(0,3,3,6,1,4,6,2,5,0,3,5);
  140. uchar Conver_week(uchar year,uchar month,uchar day)
  141. {
  142. uchar p1,p2,week;
  143. year+=0x64;
  144. p1=year/0x4;
  145. p2=year+p1;
  146. p2=p2%0x7;
  147. p2=p2+day+table_week[month-1];
  148. if(year%0x4==0&&month<3)p2-=1;
  149. week=p2%0x7;
  150. return week;
  151. }
  152. void main()
  153. {
  154. uchar xq,num;
  155. chu();


  156. while(1)
  157. {
  158. read_ds1302();
  159. com(0x82);
  160. shu(shu2[1]/10+0x30);
  161. shu(shu2[0]%10+0x30);
  162. shu(shu2[1]/10+0x30);
  163. shu(shu2[1]%10+0x30);
  164. shu('-');
  165. shu(shu2[2]/10+0x30);
  166. shu(shu2[2]%10+0x30);
  167. shu('-');
  168. shu(shu2[3]/10+0x30);
  169. shu(shu2[3]%10+0x30);
  170. com(0xc2);
  171. shu(shu2[4]/10+0x30);
  172. shu(shu2[4]%10+0x30);
  173. shu(':');
  174. shu(shu2[5]/10+0x30);
  175. shu(shu2[5]%10+0x30);
  176. shu(':');
  177. shu(shu2[6]/10+0x30);
  178. shu(shu2[6]%10+0x30);
  179. xq=Conver_week(shu2[1],shu2[2],shu2[3]);
  180.    com(0x80+13);
  181.    for(num=0;num<3;num++)
  182.    { shu(Data_table[xq][num]);
  183. }
  184. }
  185. }
复制代码

Keil代码与Proteus8.8仿真下载:
显示年月日.zip (109.18 KB, 下载次数: 45)


评分

参与人数 1黑币 +40 收起 理由
admin + 40 共享资料的黑币奖励!

查看全部评分

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏3 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:278457 发表于 2022-6-1 17:16 | 只看该作者
为什么不用模块化编程
回复

使用道具 举报

板凳
ID:589800 发表于 2022-6-6 09:11 | 只看该作者
怎么设置
回复

使用道具 举报

地板
ID:1039671 发表于 2022-11-22 11:51 | 只看该作者
怎么感觉代码不完整
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表