找回密码
 立即注册

QQ登录

只需一步,快速开始

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

单片机数字计数器的protues仿真

[复制链接]
跳转到指定楼层
楼主
这是一个数字计数器的设计,有图,有源程序,还有仿真结果。附件里是所有资料。

down 减1


rest 归零


stop 停止


UP加1


播放音乐


记步器


单片机源程序如下:
  1. #include<reg51.h>                     
  2. #define uint unsigned int
  3. #define uchar unsigned char
  4. sbit up=P1^0;
  5. sbit down=P1^3;
  6. sbit stop=P1^6;
  7. sbit reset=P1^7;
  8. sbit Beep=P3^7;  
  9. uint gw,sw,gww,sww,temp;  
  10. uchar code table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
  11. uchar code SONG_TONE[]={212,212,190,212,159,169,212,212,190,212,142,159,212,212,106,126,159,169,190,119,119,126,159,142,159,0};   
  12. uchar code SONG_LONG[]={9,3,12,12,12,24,9,3,12,  12,12,24,9,3,12,12,12,12,12,9,3,12,12,12,24,0};   
  13. void delay(uint z)
  14. {  
  15. uint x,y;
  16. for (x=z;x>0;x--)   
  17. for(y=110;y>0;y--);  
  18. }  
  19. void PlayMusic( )  
  20. {
  21. uint i=0,j,k;
  22. while (SONG_LONG[i]!=0||SONG_TONE[i]!=0)  
  23. {   
  24. for(j=0;j<SONG_LONG[i]*20;j++)  
  25. {   
  26.         Beep=~Beep;
  27. for (k=0;k<SONG_TONE[i]/2;k++);      
  28. }   
  29. delay (10);  
  30. i++;   
  31. }
  32. }  
  33. void init( )
  34. {  
  35. gw=0;  
  36. gww=0;   
  37. sw=0;      
  38. sww=0;  
  39. temp=0;  
  40. P0=0;  
  41. P2=0xff;  
  42. P3=0xff;  
  43. Beep=0;  
  44. P0=table[sw];  
  45. P2=table[gw];  
  46. IT0=1;  
  47. EX0=1;   
  48. }  
  49. void keyscan( )
  50. {   
  51. if(temp==0)   
  52. {   
  53. if(up==0)   
  54. {        
  55. delay(5);      
  56. if(up==0)     
  57. {     
  58. while(!up);     
  59. if(gw==9)     
  60. {      
  61. gw=0;      
  62. P2=table[gw];      
  63. if(sw==9)      
  64. {        
  65. sw=0;        
  66. P0=table[sw];        
  67. }      
  68. else      
  69. {        
  70. sw++;        
  71. P0=table[sw];      
  72. }      
  73. }     
  74. else      
  75. {      
  76. gw++;      
  77. P2=table[gw];           
  78. }
  79. }   
  80. }   
  81. if(down==0)  
  82. {
  83. delay(5);
  84. if(down==0)   
  85. {     
  86. while(!down);     
  87. if(gw==0)     
  88. {      
  89. gw=9;     
  90. P2=table[gw];      
  91. if(sw==0)      
  92. {      
  93. sw=9;      
  94. P0=table[sw];      
  95. }      
  96. else      
  97. {        
  98. sw--;        
  99. P0=table[sw];        
  100. }      
  101. }      
  102. else      
  103. {      
  104. gw--;      
  105. P2=table[gw];      
  106. }      
  107. }   
  108. }
  109. }
  110. if(stop==0)     
  111. {        
  112. delay(5);        
  113. if(stop==0)   
  114. {   
  115. while(!stop);   
  116. if((gw!=0) || (sw!=0))   
  117. {      
  118. temp++;     
  119. if(temp==1)      
  120. EA=1;      
  121. if(temp==2)      
  122. EA=0;     
  123. if(temp==3)   
  124. {      
  125. temp=1;      
  126. EA=1;      
  127. }     
  128. }   
  129. }   
  130. }     
  131. if(reset==0)   
  132. {     
  133. delay(5);   
  134. if(reset==0)   
  135. {     
  136. while(!reset);         
  137. if((gw!=0) || (sw!=0))
  138. {      
  139. gw=0;      
  140. sw=0;     
  141. P2=table[gw];      
  142. P0=table[sw];      
  143. Beep=0;      
  144. init( );      
  145. EA=1;      
  146. }     
  147. }        
  148. }  
  149. }   
  150. void main()  
  151. {  
  152. init();  
  153. while(1)
  154. {   
  155. keyscan();   
  156. }  
  157. }  
  158. ……………………

  159. …………限于本文篇幅 余下代码请从51黑下载附件…………
复制代码

所有资料51hei提供下载:
智能仪表.rar (339.01 KB, 下载次数: 42)


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

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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