找回密码
 立即注册

QQ登录

只需一步,快速开始

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

单片机数码管程序乱跳怎么办?

[复制链接]
跳转到指定楼层
楼主
ID:430892 发表于 2018-12-11 20:53 来自手机 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
  1. #include<reg51.h>
  2. #define  uchar  unsigned  char
  3. #define  uint   unsigned   int
  4. sbit   RED_DONGXI    =  P1^0;
  5. sbit   YELLOW_DONGXI =  P1^1;
  6. sbit   GREEN_DONGXI  =  P1^2;
  7. sbit   RED_NANBEI    =  P1^3;
  8. sbit   YELLOW_NANBEI =  P1^4;
  9. sbit   GREEN_NANBEI  =  P1^5;
  10. sbit   DXweixuan1=  P1^6;
  11. sbit   DXweixuan2=  P1^7;
  12. sbit   NBweixuan1=  P3^0;
  13. sbit   NBweixuan2=  P3^1;
  14. uint aa,shi1,ge1,shi2,ge2;
  15. uint code table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};

  16. void  delay(uint z);
  17. void  display(uint shi1,uint ge1,uint shi2,uint ge2);
  18. void  init1();
  19. void  init2();
  20. void  init3();
  21. void  init4();
  22. void  init5();


  23. void main()
  24. {
  25. P0=0xFF;
  26. P1=0xFF;
  27. P3=0xFF;
  28. EA=1;
  29. ET0=1;
  30. TR0=0;
  31. init1();
  32. while(1)
  33. {
  34. init2();
  35. init3();
  36. init4();
  37. init5();
  38. }
  39. }
  40. void  init1()
  41. {
  42. uint temp;
  43. temp=5;
  44. TMOD=0x01;
  45. TH0=(65535-50000)/256;
  46. TL0=(65535-50000)%256;
  47. EA=1;
  48. ET0=1;
  49. TR0=1;
  50. while(1)
  51. {
  52. RED_DONGXI=0;            
  53. RED_NANBEI=0;
  54. GREEN_DONGXI=1;
  55. GREEN_NANBEI=1;
  56. YELLOW_DONGXI=1;
  57. YELLOW_NANBEI=1;
  58. if(aa==20)//??20*50MS=1S
  59. {
  60. aa=0;
  61. temp--;        
  62. shi1=shi2=temp/10;
  63. ge1=ge2=temp%10;
  64. }
  65. if(temp==0)\
  66. {temp=5;
  67. break;
  68. }
  69. display(ge1,shi1,ge2,shi2);
  70. }
  71. }      
  72. void  init2()
  73. {
  74. uint temp;
  75. temp=55;
  76. TMOD=0x01;
  77. TH0=(65535-50000)/256;
  78. TL0=(65535-50000)%256;
  79. EA=1;
  80. ET0=1;
  81. TR0=1;
  82. while(1)
  83. {     
  84. RED_DONGXI=1;
  85. RED_NANBEI=0;
  86. GREEN_DONGXI=0;
  87. GREEN_NANBEI=1;
  88. YELLOW_DONGXI=1;
  89. YELLOW_NANBEI=1;
  90. if(aa==20)//??20*50MS=1S
  91. {
  92. aa=0;
  93. temp--;
  94. shi1=(temp+5)/10;
  95. ge1=(temp+5)%10;
  96. shi2=temp/10;
  97. ge2=temp%10;
  98. }
  99. if(temp==0)
  100. {temp=55;
  101. break;
  102. }
  103. display(ge1,shi1,ge2,shi2);
  104. }
  105. }      
  106. void  init3()
  107. {
  108. uint temp;
  109. temp=5;
  110. TMOD=0x01;
  111. TH0=(65535-50000)/256;
  112. TL0=(65535-50000)%256;
  113. EA=1;
  114. ET0=1;
  115. TR0=1;
  116. while(1)
  117. {
  118. RED_NANBEI=0;
  119. GREEN_DONGXI=1;
  120. if(aa==20)//??20*50MS=1S
  121. {
  122. aa=0;
  123. temp--;
  124. YELLOW_DONGXI=~YELLOW_DONGXI;
  125. shi1=temp/10;
  126. ge1=temp%10;
  127. shi2=shi1;
  128. ge2=ge1;
  129. }
  130. if(temp==0)
  131. {
  132.         temp=5;
  133. break;
  134. }
  135. display(ge1,shi1,ge2,shi2);
  136. }
  137. }      
  138. void  init4()
  139. {
  140. uint temp;
  141. temp=55;
  142. TMOD=0x01;
  143. TH0=(65535-50000)/256;
  144. TL0=(65535-50000)%256;
  145. EA=1;
  146. ET0=1;
  147. TR0=1;
  148. while(1)
  149. {   
  150. RED_DONGXI=0;
  151. RED_NANBEI=1;
  152. YELLOW_DONGXI=1;
  153. GREEN_NANBEI=0;
  154. if(aa==20)
  155. {
  156. aa=0;
  157. temp--;
  158. shi1=temp/10;
  159. shi2=(temp+5)/10;
  160. ge1=temp%10;
  161. ge2=(temp+5)%10;  
  162. }  
  163. if(temp==0)
  164. {
  165.         temp=55;
  166. break;
  167. }
  168. display(ge1,shi1,ge2,shi2);
  169. }
  170. }      
  171. void  init5()
  172. {
  173. uint temp;
  174. temp=5;
  175. TMOD=0x01;
  176. TH0=(65535-50000)/256;
  177. TL0=(65535-50000)%256;
  178. EA=1;
  179. ET0=1;
  180. TR0=1;
  181. while(1)
  182. {
  183. RED_NANBEI=1;
  184. RED_DONGXI=0;
  185. GREEN_DONGXI=1;
  186. GREEN_NANBEI=1;
  187. if(aa==20)
  188. {
  189. aa=0;
  190. temp--;
  191. YELLOW_NANBEI=~YELLOW_NANBEI;
  192. shi1=temp/10;
  193. shi2=shi1;
  194. ge1=temp%10;
  195. ge2=ge1;
  196. }
  197. if(temp==0)
  198. {
  199.         temp=5;
  200. break;
  201. }
  202. display(ge1,shi1,ge2,shi2);
  203. }
  204. }      

  205. void display(uint shi1,uint ge1,uint shi2,uint ge2)
  206. {
  207.         DXweixuan1=1;
  208.         DXweixuan2=0;
  209.         NBweixuan1=0;
  210.         NBweixuan2=0;
  211.         P0=table[ge1];
  212.         delay(5);
  213.         DXweixuan1=0;
  214.         DXweixuan2=1;
  215.         NBweixuan1=0;
  216.         NBweixuan2=0;
  217.         P0=table[shi1];
  218.         delay(5);
  219.         DXweixuan1=0;
  220.         DXweixuan2=0;
  221.         NBweixuan1=1;
  222.         NBweixuan2=0;
  223.         P0=table[ge2];
  224.         delay(5);
  225.         DXweixuan1=0;
  226.         DXweixuan2=0;
  227.         NBweixuan1=0;
  228.         NBweixuan2=1;
  229.         P0=table[shi2];
  230.         delay(5);
  231. }                       
  232.                               
  233. void xtimer0() interrupt 1
  234. {
  235.         TH0=(65535-50000)/256;
  236.         TL0=(65535-50000)%256;
  237.         aa++;
  238. }
  239. void delay(uint z)
  240. {
  241.         uint x,y;
  242.         for(x=0;x<z;x++)
  243.         for(y=0;y<110;y++);
  244. }
  245. void delay(unsigned char j)
  246. {
  247.         unsigned char k;
  248.         unsigned int i;
  249.         for(;j>0;j--)
  250.         {
  251.                 for(i=1250;i>0;i--)
  252.         {
  253.                 for(k=180;k>0;k--);
  254.         }
  255. }
  256. }
复制代码


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

使用道具 举报

沙发
ID:430892 发表于 2018-12-11 22:41 来自手机 | 只看该作者
最后的void是不要的,请问有人知道这个数码管乱跳怎么解决吗?
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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