找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 3491|回復: 7
打印 上一主題 下一主題
收起左側(cè)

時鐘程序高級版(忙里偷閑的作品)

[復制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:73477 發(fā)表于 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. //      延時函數(shù)
  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. //        顯示秒數(shù)
  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. //         設計時顯示函數(shù)
  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. //     進位函數(shù)
  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;      //     開起計數(shù)器0
  213. EX0=1;   
  214. TR0=1;      //    開起定時器0
  215. }
  216. //      初始化函數(shù)
  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. //     鍵盤處理函數(shù)
  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. //         主函數(shù)
  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 分享淘帖 頂 踩
回復

使用道具 舉報

沙發(fā)
ID:72872 發(fā)表于 2015-2-16 15:34 | 只看該作者
下載下來來學習學習
回復

使用道具 舉報

板凳
ID:73872 發(fā)表于 2015-3-18 16:20 | 只看該作者
終于找到謝謝樓主
回復

使用道具 舉報

地板
ID:29438 發(fā)表于 2015-3-20 13:55 | 只看該作者
能有線路圖就好了。
回復

使用道具 舉報

5#
ID:54731 發(fā)表于 2015-3-24 16:02 | 只看該作者
請問樓主有線路圖嗎?還有是不是郭老師的?
回復

使用道具 舉報

6#
ID:77387 發(fā)表于 2015-5-10 11:55 | 只看該作者
下來試試看
回復

使用道具 舉報

7#
ID:67984 發(fā)表于 2015-5-10 20:48 | 只看該作者
不錯的程序,看看
回復

使用道具 舉報

8#
ID:194701 發(fā)表于 2017-5-1 17:37 | 只看該作者
下載下來來學習學習
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規(guī)則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機教程網(wǎng)

快速回復 返回頂部 返回列表