找回密码
 立即注册

QQ登录

只需一步,快速开始

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

基于单片机51的数字钟设计:内容包括完整程序和仿真及实验报告

[复制链接]
跳转到指定楼层
楼主
ID:340872 发表于 2018-5-29 22:58 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
一、        实验名称:电子钟表设计
二、        试验任务:
      利用51单片机、键盘、1602液晶显示屏等电子元器件,编写电子表的程序,实现电子表正常工作,显示时、分、秒;按键可以控制电子表的设置与调整。
三、        软件设计:利用isis软件仿真进行电子表的仿真图如下
     
四、        实验步骤:
1.    运用仿真软件isis画实验原理图,摆放所需要的电子元器件并进行连线。
2.    按照任务要求进行程序模块儿的分析,大概需要函数声明、1602初始化函数、延时函数、中断函数、按键程序、主程序等部分。
3.    按照软件原理图的接口,定义相应的单片机I/O口。

五、        实验程序
  1. #include<reg51.h>
  2. #define uint unsigned int
  3. #define uchar unsigned char
  4. sbit wela=P2^7;
  5. sbit dula=P2^6;
  6. sbit lcdrs=P2^1;
  7. sbit lcden=P1^6;
  8. sbit lcdrw=P1^5;
  9. sbit shezhi=P3^2;
  10. sbit jia=P3^3;
  11. sbit jian=P3^4;
  12. uchar count,num;
  13. char shi,fen,miao;
  14. uchar code table[]="  2012.11.1 Wed";
  15. uchar code table1[]="    00:00:00  ";
  16. void delay(uint z)
  17. {
  18. uint x,y;
  19. for(x=0;x<z;x++)
  20.      for(y=0;y<110;y++);
  21. }
  22. voidwrite_com(uchar com)
  23. {
  24.   lcdrs=0;
  25.   lcdrw=0;
  26.   lcden=0;
  27.   P0=com;
  28.   delay(5);
  29.   lcden=1;
  30.   delay(5);
  31.   lcden=0;
  32. }
  33. voidwrite_data(uchardate)
  34. {
  35.   lcdrs=1;
  36.   lcdrw=0;
  37.   lcden=0;
  38.   P0=date;
  39. delay(5);
  40. lcden=1;
  41. delay(5);
  42. lcden=0;
  43. }
  44. voidinit()
  45. {
  46. uchar num;
  47. dula=0;
  48. wela=0;
  49. lcden=0;
  50. write_com(0x38);    //功能设置,8位数据接口,2行显示,5*7点阵
  51. write_com(0x0c);    //显示开关控制,开显示,关光标,关闪烁
  52. write_com(0x06);    //输入方式设置,AC自动增一,画面不动
  53. write_com(0x01);    //清屏
  54. write_com(0x80);    //首地址为第一行
  55. for(num=0;num<15;num++)
  56. {
  57. write_data(table[num]);
  58. delay(20);
  59. }
  60. write_com(0x80+0x40);//第二行
  61. for(num=0;num<15;num++)
  62. {
  63. write_data(table1[num]);
  64. delay(20);
  65. }
  66. /* 定时器做中断设置*/
  67. TMOD=0X01;    //定时器0的方式1
  68. TH0=(65536-50000)/256;
  69. TL0=(65536-50000)%256;
  70. EA=1;
  71. ET0=1;
  72. TR0=1;
  73. }
  74. /*刷新地址及数据*/
  75. void write_sfm(uchar
  76. add,uchar date)
  77. {
  78. uchar shi,ge;
  79. shi=date/10;
  80. ge=date%10;
  81. write_com(0x80+0x40+add);
  82. write_data(0x30+shi);
  83. write_data(0x30+ge);
  84. }
  85. /*功能键控制函数*/
  86. voidkeyscan()
  87. {
  88. if(shezhi==0)
  89. {
  90. delay(5);
  91. if(shezhi==0)
  92. {
  93. num++;
  94. while(!shezhi);
  95. if(num==1)
  96. {
  97. TR0=0;
  98. write_com(0x80+0x40+10);
  99. write_com(0x0f);
  100. }
  101. if(num==2)
  102. {
  103. write_com(0x80+0x40+7);
  104. }
  105. if(num==3)
  106. {
  107. write_com(0x80+0x40+4);
  108. }
  109. if(num==4)
  110. {
  111. num=0;
  112. write_com(0x0c);
  113. TR0=1;
  114. }
  115. }
  116. }
  117. if(shezhi!=0)
  118. {
  119. if(jia==0)
  120. {
  121. delay(5);
  122. if(jia==0)
  123. {
  124.   while(!jia);
  125.   if(num==1)
  126.   {
  127.   miao++;
  128.   if(miao==60)
  129.   miao=0;
  130.     write_sfm(10,miao);
  131. write_com(0x80+0x40
  132. +10);
  133.   }
  134. if(num==2)
  135.   {
  136.      fen++;
  137.      if(fen==60)
  138.      fen=0;
  139. write_sfm(7,fen);
  140. write_com(0x80+0x40+7);  
  141. }
  142. if(num==3)
  143. {
  144. shi++;
  145. if(shi==24)
  146. shi=0;
  147. write_sfm(4,shi);
  148. write_com(0x80+0x40+4);
  149. }
  150. }
  151. }
  152. if(jian==0)
  153. {
  154. delay(5);
  155. if(jian==0)
  156. {
  157. while(!jian);
  158. if(num==1)
  159. {
  160. miao--;
  161. if(miao==-1)
  162. miao=59;
  163. write_sfm(10,miao);
  164. write_com(0x80+0x40+10);
  165. }
  166. if(num==2)
  167. {
  168. fen--;
  169. if(fen==-1)
  170. fen=59;
  171. write_sfm(7,fen);
  172. write_com(0x80+0x40+7);
  173. }
  174. if(num==3)
  175. {
  176. shi--;
  177. if(shi==-1)
  178. shi=23;
  179. write_sfm(4,shi);
  180. write_com(0x80+0x40+4);
  181. }
  182. }
  183. }
  184. }
  185. }
  186. /*主函数*/
  187. void main()
  188. {
  189.   init();
  190.   while(1)
  191.   {
  192.      keyscan();
  193.   }
  194. }
  195. /*定时器中断函数*/
  196. oid timer0()interrupt 1
  197. {
  198. TH0=(65536-50000)/256;
  199. TL0=(65536-50000)%256;
  200. count++;
  201. if(count==20)
  202. {
  203.   count=0;
  204.   miao++;


  205. {
  206.   if(miao==60)
  207. miao=0;
  208. fen++;
  209. if(fen==60)
  210. {
  211. fen=0;
  212. shi++;
  213. if(shi==24)
  214. {
  215.   shi=0;
  216. }
  217. write_sfm(4,shi);    //时时钟动作
  218. }
  219. write_sfm(7,fen);     //分时钟动作
  220. }
  221. write_sfm(10,miao);   //秒时钟动作
  222. }
  223. }
复制代码


评分

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

查看全部评分

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

使用道具 举报

沙发
ID:667078 发表于 2019-12-18 10:38 来自手机 | 只看该作者
能说一下wela  dula是什么吗
回复

使用道具 举报

板凳
ID:667078 发表于 2019-12-18 17:24 来自手机 | 只看该作者
有没有硬件连接图啊,方便学习!
回复

使用道具 举报

地板
ID:985386 发表于 2021-11-27 18:54 | 只看该作者
有原理图吗,方便学习!
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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