找回密码
 立即注册

QQ登录

只需一步,快速开始

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

时钟程序高级版(忙里偷闲的作品)

[复制链接]
跳转到指定楼层
楼主
ID:73477 发表于 2015-2-10 17:53 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

  1. #include<reg52.h>
  2. #define uint unsigned int
  3. #define uchar unsigned char
  4. sbit wei=P2^0;
  5. sbit duan=P2^1;
  6. sbit k1=P1^0;
  7. sbit k2=P1^1;
  8. uchar table[]={0x3f,0x06,0x5b,0x4f,
  9.                0x66,0x6d,0x7d,0x07,
  10.       0x7f,0x6f,0x40};      
  11. uchar num,num1,num2,shi,fen,miao,m,s;
  12. //        定义
  13. void delay(uint z)
  14. {
  15.   uint i,j;
  16. for(i=z;i>0;i--)
  17.   for(j=110;j>0;j--);
  18. }
  19. //      延时函数
  20. void display_shi(uchar shi)
  21. {
  22.   duan=1;
  23.   P0=table[shi/10];
  24. duan=0;
  25. wei=1;
  26. P0=0xfe;
  27. wei=0;
  28. delay(1);
  29. P0=0;
  30. duan=1;
  31.   P0=table[shi%10];
  32. duan=0;
  33. wei=1;
  34. P0=0xfd;
  35. wei=0;
  36. delay(1);
  37. P0=0;
  38. }
  39. //      显示小时
  40. void display_fen(uchar fen)
  41. {
  42.   duan=1;
  43.   P0=table[fen/10];
  44. duan=0;
  45. wei=1;
  46. P0=0xf7;
  47. wei=0;
  48. delay(1);
  49. P0=0;
  50. duan=1;
  51.   P0=table[fen%10];
  52. duan=0;
  53. wei=1;
  54. P0=0xef;
  55. wei=0;
  56. delay(1);
  57. P0=0;
  58. }
  59. //       显示分钟
  60. void display_miao(uchar miao)
  61. {
  62.   duan=1;
  63.   P0=table[miao/10];
  64. duan=0;
  65. wei=1;
  66. P0=0xbf;
  67. wei=0;
  68. delay(1);
  69. P0=0;
  70. duan=1;
  71.   P0=table[miao%10];
  72. duan=0;
  73. wei=1;
  74. P0=0x7f;
  75. wei=0;
  76. delay(1);
  77. P0=0;
  78. }
  79. //        显示秒数
  80. void display_sf()
  81. {
  82.   duan=1;
  83.   P0=table[10];
  84. duan=0;
  85. wei=1;
  86. P0=0xfb;
  87. wei=0;
  88. delay(1);
  89. P0=0;
  90. }
  91. //      时与分间的横线
  92. void display_fm()
  93. {
  94.   duan=1;
  95.   P0=table[10];
  96. duan=0;
  97. wei=1;
  98. P0=0xdf;
  99. wei=0;
  100. delay(1);
  101. P0=0;
  102. }
  103. //     分与秒间的横线
  104. void display_shi0()
  105. {
  106. duan=1;
  107.   P0=0;
  108. duan=0;
  109. wei=1;
  110. P0=0x3f;
  111. wei=0;
  112. delay(1);
  113. P0=0;
  114. }
  115. //             小时位置不显示
  116. void display_fen0()
  117. {
  118. duan=1;
  119.   P0=0;
  120. duan=0;
  121. wei=1;
  122. P0=0xe7;
  123. wei=0;
  124. delay(1);
  125. P0=0;
  126. }
  127. //            分钟位置不显示
  128. void display_miao0()
  129. {
  130. duan=1;
  131.   P0=0;
  132. duan=0;
  133. wei=1;
  134. P0=0xfc;
  135. wei=0;
  136. delay(1);
  137. P0=0;
  138. }
  139. //             秒位置不显示
  140. void display_1()
  141. {
  142.   display_shi(shi);
  143. display_sf();
  144. display_fen(fen);
  145. display_fm();
  146. display_miao(miao);
  147. }
  148. //        正常显示
  149. void display_2()
  150. {
  151.   if(m==1&&num2%2!=0)
  152. {
  153.    display_shi(shi);
  154.   display_sf();
  155.   display_fen(fen);
  156.   display_fm();
  157.   display_miao0();
  158. }
  159. if(m==2&&num2%2!=0)
  160. {
  161.    display_shi(shi);
  162.   display_sf();
  163.   display_fen0();
  164.   display_fm();
  165.   display_miao(miao);
  166. }
  167. if(m==3&&num2%2!=0)
  168. {
  169.    display_shi0();
  170.   display_sf();
  171.   display_fen(fen);
  172.   display_fm();
  173.   display_miao(miao);
  174. }
  175. while(num2%2==0)
  176.   display_1();
  177. }
  178. //         设计时显示函数
  179. void fun()
  180. {
  181. if(miao==60)
  182. {
  183.   miao=0;
  184.   fen++;
  185. }
  186. if(fen==60)
  187. {
  188.   fen=0;
  189.   shi++;
  190. }
  191. if(shi==24)
  192.   shi=0;
  193. }
  194. //     进位函数
  195. void init()
  196. {
  197. shi=0;
  198. fen=0;
  199. miao=0;
  200. m=0;
  201. s=0;
  202. num=0;
  203. num1=0;
  204. num2=0;
  205. TMOD=0x01;
  206.   TH0=(65536-46074)/256;  //    11.05768M.
  207. TL0=(65536-46074)%256;
  208. TH1=(65536-56074)/256;
  209. TL1=(65536-56074)%256;
  210. EA=1;      //    打开中断允许
  211. ET0=1;
  212. ET1=1;      //     开起计数器0
  213. EX0=1;   
  214. TR0=1;      //    开起定时器0
  215. }
  216. //      初始化函数
  217. void keyboard()
  218. {
  219. if(k1==0)
  220. delay(5);
  221. if(k1==0)
  222. {  TR0=0;
  223.     TR1=1;
  224.    m++;
  225.    if(m==4)
  226.    {
  227.     m=0;
  228.    TR1=0;
  229.    TR0=1;
  230.    }
  231.    while(!k1)display_1();
  232. }
  233. if(m!=0)
  234. {
  235.   if(k2==0)
  236.   {
  237.    delay(5);
  238.    s=1;
  239.     if(m==1&&s!=0)
  240.    {
  241.     miao++;
  242.     s=0;
  243.     fun();
  244.    }
  245.    if(m==2&&s!=0)
  246.       {
  247.     fen++;
  248.     s=0;
  249.     fun();
  250.    }
  251.    if(m==3&&s!=0)
  252.    {
  253.     shi++;
  254.     s=0;
  255.     fun();
  256.    }
  257.    while(!k2)display_1();
  258.   }
  259. }
  260. }
  261. //     键盘处理函数
  262. void main()
  263. {
  264. init();
  265.   while(1)
  266. {
  267.   keyboard();
  268.   if(num==20)
  269.   {
  270.    num=0;
  271.    miao++;
  272.    fun();
  273.   }
  274.   if(m!=0)
  275.    display_2();
  276.   else
  277.    display_1();
  278. }
  279. }
  280. //         主函数
  281. void time_0() interrupt 1
  282. {
  283.   TH0=(65536-46074)/256;
  284. TL0=(65536-46074)%256;
  285. num++;
  286. }
  287. //     定时器1,非设计时使用
  288. void time_1() interrupt 3
  289. {
  290.   TH1=(65536-56074)/256;
  291. TL1=(65536-56074)%256;
  292. num1++;
  293. if(num1==20)
  294. {
  295.    num1=0;
  296.   num2++;
  297. }
  298. }
  299. //    定时器2,设计时使用


  300. 这个程序虽比师哥的还差点,但是我会好好努力的!!
复制代码


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

使用道具 举报

沙发
ID:72872 发表于 2015-2-16 15:34 | 只看该作者
下载下来来学习学习
回复

使用道具 举报

板凳
ID:73872 发表于 2015-3-18 16:20 | 只看该作者
终于找到谢谢楼主
回复

使用道具 举报

地板
ID:29438 发表于 2015-3-20 13:55 | 只看该作者
能有线路图就好了。
回复

使用道具 举报

5#
ID:54731 发表于 2015-3-24 16:02 | 只看该作者
请问楼主有线路图吗?还有是不是郭老师的?
回复

使用道具 举报

6#
ID:77387 发表于 2015-5-10 11:55 | 只看该作者
下来试试看
回复

使用道具 举报

7#
ID:67984 发表于 2015-5-10 20:48 | 只看该作者
不错的程序,看看
回复

使用道具 举报

8#
ID:194701 发表于 2017-5-1 17:37 | 只看该作者
下载下来来学习学习
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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