找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 3057|回复: 1
收起左侧

c51单片机电子表电路+程序

[复制链接]
ID:443301 发表于 2019-3-14 19:39 | 显示全部楼层 |阅读模式
电路原理图如下:
0.png

单片机源程序如下:
  1. #include<reg51.h>
  2. #define uchar unsigned char
  3. #define uint unsigned int
  4. sbit key1 = P3^7;
  5. sbit led = P3^0;
  6. sbit key2 = P1^7;
  7. sbit key3 = P1^6;
  8. sbit key4 = P1^5;
  9. sbit key5 = P1^4;
  10. sbit key6 = P1^3;
  11. sbit key7 = P1^2;
  12. sbit key8 = P1^1;
  13. sbit key9 = P1^0;
  14. code uchar abc[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};
  15. uchar cba[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf};
  16. uchar cp,k,b = 0,j,c;
  17. uchar key1_zt,key2_zt,key3_zt,key4_zt,key5_zt,key6_zt,key7_zt,key8_zt,key9_zt,key_ms;
  18. char sec = 55,min = 59,hou = 23,hou_nz,min_nz;
  19. void delay(uint x)
  20. {
  21. while(x--);//????while(x)x--;
  22. }
  23. void key(void)
  24. {
  25. if(key1 == 1)
  26. delay(200);
  27. if(key1 == 1)
  28. key1_zt = 1;
  29. if(key1_zt == 1 && key1 == 0)
  30. {
  31.   key1_zt = 0;
  32.   key_ms++;
  33.   if(key_ms == 9)key_ms = 0;  
  34. }
  35. if(key2 == 1)
  36. delay(200);
  37. if(key2 == 1)
  38. key2_zt = 1;
  39. if(key2_zt == 1 && key2 == 0 && key_ms == 1)
  40. {
  41.   key2_zt = 0;
  42.   hou++;
  43. }
  44. if(key3 == 1)
  45. delay(200);
  46. if(key3 == 1)
  47. key3_zt = 1;
  48. if(key3_zt == 1 && key3 == 0 && key_ms == 2)
  49. {
  50.   key3_zt = 0;
  51.   hou--;
  52.   if(hou < 0)hou = 23;
  53. }
  54. if(key4 == 1)
  55. delay(200);
  56. if(key4 == 1)
  57. key4_zt = 1;
  58. if(key4_zt == 1 && key4 == 0 && key_ms == 3)
  59. {
  60.   key4_zt = 0;
  61.   min++;
  62. }
  63. if(key5 == 1)
  64. delay(200);
  65. if(key5 == 1)
  66. key5_zt = 1;
  67. if(key5_zt == 1 && key5 == 0 && key_ms == 4)
  68. {
  69.   key5_zt = 0;
  70.   min--;
  71.   if(min < 0)min = 59;
  72. }
  73. if(key6 == 1)
  74. delay(200);
  75. if(key6 == 1)
  76. key6_zt = 1;
  77. if(key6_zt == 1 && key6 == 0 && key_ms == 5)
  78. {
  79.   key6_zt = 0;
  80.   hou_nz++;
  81.   if(hou_nz == 24)hou_nz = 0;
  82. }
  83. if(key7 == 1)
  84. delay(200);
  85. if(key7 == 1)
  86. key7_zt = 1;
  87. if(key7_zt == 1 && key7 == 0 && key_ms == 6)
  88. {
  89.   key7_zt = 0;
  90.   hou_nz--;
  91.   if(hou_nz < 0)hou_nz = 23;
  92. }
  93. if(key8 == 1)
  94. delay(200);
  95. if(key8 == 1)
  96. key8_zt = 1;
  97. if(key8_zt == 1 && key8 == 0 && key_ms == 7)
  98. {
  99.   key8_zt = 0;
  100.   min_nz++;
  101.   if(min_nz == 60)min_nz = 0;
  102. }
  103. if(key9 == 1)
  104. delay(200);
  105. if(key9 == 1)
  106. key9_zt = 1;
  107. if(key9_zt == 1 && key9 == 0 && key_ms == 8)
  108. {
  109.   key9_zt = 0;
  110.   min_nz--;
  111.   if(min_nz < 0)min_nz = 59;
  112. }
  113. }
  114. void timer0_isr(void)interrupt 1//?ж??????
  115. {
  116. TH0 = (65536 - 5000) / 256;
  117. TL0 = (65536 - 5000) % 256;
  118. cp++;
  119. if(cp == 100)
  120. {
  121.   cp = 0;
  122.   k++;
  123.   b = ~b;
  124. }
  125. if(k == 2)
  126. {
  127.   k = 0;
  128.   sec++;
  129. }
  130. if(sec == 60)
  131. {
  132.   sec = 0;
  133.   min++;

  134. }
  135. if(min == 60)
  136. {
  137.   min = 0;
  138.   hou++;
  139. }
  140. if(hou == 24)hou = 0;
  141. P0 = 0xff;
  142. if(key_ms == 0)
  143. {
  144.    switch(j)
  145.   {
  146.    case 0:P0 = abc[sec%10];P2 = cba[j];break;
  147.    case 1:P0 = abc[sec/10];P2 = cba[j];break;
  148.    case 2:P0 = abc[min%10]&(0x7f | b);P2 = cba[j];break;
  149.    case 3:P0 = abc[min/10];P2 = cba[j];break;
  150.    case 4:P0 = abc[hou%10]&(0x7f | b);P2 = cba[j];break;
  151.    case 5:P0 = abc[hou/10];P2 = cba[j];break;
  152.   }
  153.   j++;
  154.   if(j == 6)j = 0;
  155. }
  156. if(key_ms == 1)
  157. {
  158.    switch(j)
  159.   {
  160.    case 0:P0 = abc[sec%10];P2 = cba[j];break;
  161.    case 1:P0 = abc[sec/10];P2 = cba[j];break;
  162.    case 2:P0 = abc[min%10] & (0x7f | b);P2 = cba[j];break;
  163.    case 3:P0 = abc[min/10];P2 = cba[j];break;
  164.    case 4:P0 = abc[hou%10] & 0x7f | b;P2 = cba[j];break;
  165.    case 5:P0 = abc[hou/10] | b;P2 = cba[j];break;
  166.   }
  167.   j++;
  168.   if(j == 6)j = 0;
  169. }
  170. if(key_ms == 2)
  171. {
  172.    switch(j)
  173.   {
  174.    case 0:P0 = abc[sec%10];P2 = cba[j];break;
  175.    case 1:P0 = abc[sec/10];P2 = cba[j];break;
  176.    case 2:P0 = abc[min%10] & (0x7f | b);P2 = cba[j];break;
  177.    case 3:P0 = abc[min/10];P2 = cba[j];break;
  178.    case 4:P0 = abc[hou%10] & 0x7f | b;P2 = cba[j];break;
  179.    case 5:P0 = abc[hou/10] | b;P2 = cba[j];break;
  180.   }
  181.   j++;
  182.   if(j == 6)j = 0;
  183. }
  184.   if(key_ms == 3)
  185. {
  186.    switch(j)
  187.   {
  188.    case 0:P0 = abc[sec%10];P2 = cba[j];break;
  189.    case 1:P0 = abc[sec/10];P2 = cba[j];break;
  190.    case 2:P0 = abc[min%10] & 0x7f | b;P2 = cba[j];break;
  191.    case 3:P0 = abc[min/10] | b;P2 = cba[j];break;
  192.    case 4:P0 = abc[hou%10] & (0x7f | b);P2 = cba[j];break;
  193.    case 5:P0 = abc[hou/10];P2 = cba[j];break;
  194.   }
  195.   j++;
  196.   if(j == 6)j = 0;
  197. }
  198. if(key_ms == 4)
  199. {
  200.    switch(j)
  201.   {
  202.    case 0:P0 = abc[sec%10];P2 = cba[j];break;
  203.    case 1:P0 = abc[sec/10];P2 = cba[j];break;
  204.    case 2:P0 = abc[min%10] & 0x7f | b;P2 = cba[j];break;
  205.    case 3:P0 = abc[min/10] | b;P2 = cba[j];break;
  206.    case 4:P0 = abc[hou%10] & (0x7f | b);P2 = cba[j];break;
  207.    case 5:P0 = abc[hou/10];P2 = cba[j];break;
  208.   }
  209.   j++;
  210.   if(j == 6)j = 0;
  211. }
  212.   if(key_ms == 5)
  213. {
  214.    switch(j)
  215.   {
  216.    case 0:P0 = abc[0];P2 = cba[j];break;
  217.    case 1:P0 = abc[0];P2 = cba[j];break;
  218.    case 2:P0 = abc[min_nz%10] & (0x7f | b);P2 = cba[j];break;
  219.    case 3:P0 = abc[min_nz/10];P2 = cba[j];break;
  220.    case 4:P0 = abc[hou_nz%10] & 0x7f | b;P2 = cba[j];break;
  221.    case 5:P0 = abc[hou_nz/10] | b;P2 = cba[j];break;
  222.   }
  223.   j++;
  224.   if(j == 6)j = 0;
  225. }
  226. if(key_ms == 6)
  227. {
  228.    switch(j)
  229.   {
  230.    case 0:P0 = abc[0];P2 = cba[j];break;
  231.    case 1:P0 = abc[0];P2 = cba[j];break;
  232.    case 2:P0 = abc[min_nz%10] & (0x7f | b);P2 = cba[j];break;
  233.    case 3:P0 = abc[min_nz/10];P2 = cba[j];break;
  234.    case 4:P0 = abc[hou_nz%10] & 0x7f | b;P2 = cba[j];break;
  235.    case 5:P0 = abc[hou_nz/10] | b;P2 = cba[j];break;
  236.   }
  237.   j++;
  238.   if(j == 6)j = 0;
  239. }
  240.   if(key_ms == 7)
  241. {
  242.    switch(j)
  243.   {
  244.    case 0:P0 = abc[0];P2 = cba[j];break;
  245.    case 1:P0 = abc[0];P2 = cba[j];break;
  246.    case 2:P0 = abc[min_nz%10] & 0x7f | b;P2 = cba[j];break;
  247.    case 3:P0 = abc[min_nz/10] | b;P2 = cba[j];break;
  248.    case 4:P0 = abc[hou_nz%10] & (0x7f | b);P2 = cba[j];break;
  249.    case 5:P0 = abc[hou_nz/10];P2 = cba[j];break;
  250.   }
  251.   j++;
  252.   if(j == 6)j = 0;
  253. }
  254. if(key_ms == 8)
  255. {
  256.    switch(j)
  257.   {
  258.    case 0:P0 = abc[0];P2 = cba[j];break;
  259.    case 1:P0 = abc[0];P2 = cba[j];break;
  260.    case 2:P0 = abc[min_nz%10] & 0x7f | b;P2 = cba[j];break;
  261.    case 3:P0 = abc[min_nz/10] | b;P2 = cba[j];break;
  262.    case 4:P0 = abc[hou_nz%10] & (0x7f | b);P2 = cba[j];break;
  263.    case 5:P0 = abc[hou_nz/10];P2 = cba[j];break;
  264.   }
  265.   j++;
  266.   if(j == 6)j = 0;
  267. }
  268. }
  269. void timer0_init(void)//??????????????
  270. {
  271. TMOD = 0x01;
  272. TH0 = (65536 - 5000) / 256;
  273. TL0 = (65536 - 5000) % 256;
  274. EA = 1;
  275. ET0 = 1;
  276. TR0 = 1;
  277. }
  278. void main(void)
  279. {
  280.     timer0_init();
  281. while(1);
  282. {
  283. key();
  284. }

  285. }



复制代码

所有资料51hei提供下载:
电子表.zip (59.23 KB, 下载次数: 21)

评分

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

查看全部评分

回复

使用道具 举报

ID:523687 发表于 2019-4-28 15:07 | 显示全部楼层
感谢分享
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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