当前位置:   article > 正文

STC89C52RC单片机实现数码管时钟(文章末尾附源码获取方法)_单片机外接89c52,使数码管模拟数字时钟

单片机外接89c52,使数码管模拟数字时钟

源文件包含:仿真,代码以及参考报告

仿真电路图: 

代码展示:(完整版代码请加球球领取(因为某种不可抗的因素某些地方展示出来是乱码,因此此处代码部分地方不全,给您带来不便还请谅解))

  1. #define uint unsigned int
  2. #define uchar unsigned char
  3. #define CF P0
  4. uchar flag_set=0;
  5. uint hour=23;
  6. uint min = 59;
  7. uint sec=57;
  8. sbit K1=P3^2;
  9. sbit K2=P3^1;
  10. sbit K3=P3^0;
  11. sbit Key1=P3^3;
  12. sbit Key2=P3^4;
  13. sbit Key3=P3^5;
  14. sbit LED1=P2^0;
  15. sbit LED2=P2^1;
  16. sbit LED3=P2^2;
  17. sbit LED4=P2^3;
  18. sbit LED5=P2^4;
  19. sbit LED6=P2^5;
  20. sbit LED7=P2^6;
  21. sbit LED8=P2^7;
  22. uchar disbuff[]={0,0,0,0,0,0,0,0};
  23. uchar const num[10]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
  24. void Count();
  25. void KEY();
  26. void DigDisplay();
  27. void delay(int s)
  28. {
  29. uint i,j;
  30. for(i=0;i<s;i++)
  31. for(j=114;j>0;j--);
  32. }
  33. void DigDisplay()
  34. {
  35. LED1=1;LED2=1;LED3=1;LED4=1;LED5=1;LED6=1;LED7=1;LED8=0;
  36. CF = disbuff[0];
  37. delay(5);
  38. CF=0x00;//ÏûÒþ
  39. LED1=1;LED2=1;LED3=1;LED4=1;LED5=1;LED6=1;LED7=0;LED8=1;
  40. CF=disbuff[1];
  41. delay(5);
  42. CF=0x00; //ÏûÒþ
  43. LED1=1;LED2=1;LED3=1;LED4=1;LED5=1;LED6=0;LED7=1;LED8=1;
  44. CF=disbuff[2];
  45. delay(5);
  46. CF=0x00; //ÏûÒþ
  47. LED1=1;LED2=1;LED3=1;LED4=1;LED5=0;LED6=1;LED7=1;LED8=1;
  48. CF=disbuff[3];
  49. delay(5);
  50. CF=0x00; //ÏûÒþ
  51. LED1=1;LED2=1;LED3=1;LED4=0;LED5=1;LED6=1;LED7=1;LED8=1;
  52. CF=disbuff[4];
  53. delay(5);
  54. CF=0x00; //ÏûÒþ
  55. LED1=1;LED2=1;LED3=0;LED4=1;LED5=1;LED6=1;LED7=1;LED8=1;
  56. CF=disbuff[5];
  57. delay(5);
  58. CF=0x00; //ÏûÒþ
  59. LED1=1;LED2=0;LED3=1;LED4=1;LED5=1;LED6=1;LED7=1;LED8=1;
  60. CF=disbuff[6];
  61. delay(5);
  62. CF=0x00; //ÏûÒþ LED5=1;LED6=1;LED7=1;LED8=1;
  63. LED1=0;LED2=1;LED3=1;LED4=1;LED5=1;LED6=1;LED7=1;LED8=1;
  64. CF=disbuff[7];
  65. delay(5);
  66. CF=0x00; //ÏûÒþ
  67. }
  68. void Count()
  69. {
  70. disbuff[0]=num[sec%10];
  71. disbuff[1]=num[sec/10%10];
  72. disbuff[2]=0x40; //0x40±íʾ-ºá¸Ü
  73. disbuff[3]=num[min%10];
  74. disbuff[4]=num[min/10%10];
  75. disbuff[6]=num[hour%10];
  76. disbuff[7]=num[hour/10%10];
  77. }
  78. void KEY()
  79. {
  80. if(Key1==0)
  81. {
  82. delay(10);
  83. if(Key1==0)
  84. {
  85. flag_set++;
  86. if(flag_set==4)
  87. {flag_set=0;
  88. TR0=1;
  89. }
  90. }
  91. while(!Key1)DigDisplay(); Count(); //°´¼üÊÍ·Å
  92. }
  93. if(flag_set==1)
  94. {
  95. //TR0=0;
  96. if(Key2==0)
  97. {
  98. delay(10);
  99. if(Key2==0)
  100. {
  101. sec++;
  102. if(sec>59){
  103. sec=0;
  104. }
  105. while(!Key2) DigDisplay(); Count(); }
  106. }
  107. if(Key3==0)
  108. {
  109. delay(10);
  110. if(Key3==0)
  111. {
  112. if(sec>0)
  113. sec--;
  114. else{
  115. sec=59;Count();
  116. }
  117. while(!Key3) DigDisplay(); Count(); }
  118. }
  119. }
  120. if(flag_set==2)
  121. {
  122. if(Key2==0)
  123. {
  124. delay(10);
  125. if(Key2==0)
  126. {
  127. min++;
  128. if(min>59){
  129. min=0;
  130. }
  131. while(!Key2) DigDisplay(); Count(); }
  132. }
  133. if(Key3==0)
  134. {
  135. delay(10);
  136. if(Key3==0)
  137. {
  138. if(min>0)
  139. min--;
  140. else
  141. min=59;Count();
  142. while(!Key3) DigDisplay(); Count(); }
  143. }
  144. }
  145. if(flag_set==3)
  146. {
  147. if(Key3==0)
  148. {
  149. delay(10);
  150. if(Key3==0)
  151. {
  152. if(hour>0)
  153. hour--;
  154. else
  155. hour=23;Count();
  156. while(!Key3) DigDisplay(); Count();
  157. }
  158. }
  159. if(Key2==0)
  160. {
  161. delay(10);
  162. if(Key2==0)
  163. {
  164. hour++;
  165. if(hour>23){
  166. hour=0;
  167. }
  168. }
  169. while(!Key2) DigDisplay(); Count();
  170. }
  171. }
  172. if(K1==0)
  173. {TR0=1;}
  174. while(!K1) DigDisplay();Count();
  175. if(K2==0)
  176. {
  177. delay(5);
  178. if(K2==0)
  179. {
  180. TR0=0; //¹Ø±Õ¶¨Ê±Æ÷
  181. }
  182. } while(!K2)DigDisplay();Count();
  183. if(K3==0)
  184. {
  185. delay(10);
  186. if(K3==0)
  187. {
  188. sec=0;hour=0;min=0;
  189. TH0=0x3c;//É趨T0³õʼֵ£¨¸ß°Ë룩
  190. TL0=0xb0;
  191. }
  192. }while(!K3) DigDisplay();Count();
  193. }
  194. void main()
  195. {
  196. TMOD=0x11;
  197. TH0=0x3c;
  198. TL0=0xb0;
  199. ET0=1;
  200. EA=1;
  201. TR0=1;
  202. while(1)
  203. {
  204. KEY();
  205. Count();
  206. DigDisplay();
  207. }
  208. }
  209. void time1() interrupt 1
  210. {
  211. uchar m;
  212. TH0=0x3c;
  213. TL0=0xb0;
  214. m++;
  215. if(m==20)
  216. {
  217. m=0;
  218. if(flag_set==0)
  219. {
  220. sec++;
  221. if(sec>59)
  222. {
  223. sec=0;
  224. min++;
  225. if(min>59)
  226. {
  227. min=0;
  228. hour++;
  229. if(hour>23)
  230. {
  231. hour=0;
  232. }
  233. }
  234. }
  235. }
  236. }
  237. }

感谢您对我分享的支持。为了进一步提供深入、精彩的代码,我考虑将源码设为付费订阅(0米即可!!!这不收费呦,如果你想支持我就请关注我的公众号!我会不定期发一些stm32和单片机工程的!希望您能用得上!)。您的支持对我来说非常非常非常重要!!如果您接受的话还请麻烦您移步微信公众号:CV工程师猫猫头1号    回复:最简单的数码管时钟

   

Ciallo~(∠・ω< )⌒☆

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/我家自动化/article/detail/453280
推荐阅读
相关标签
  

闽ICP备14008679号