找回密码
 注册

QQ登录

只需一步,快速开始

搜索

51单片机自动售货机Proteus仿真程序

[复制链接]
山海致远 发表于 2020-2-2 11:28:33 | 显示全部楼层 |阅读模式
仿真文件和c源码 自动售货机.zip (38.73 KB, 售价: 1 E币)
215407onz62cqoxcq66x6w.png

部分源码
  1. #include<reg52.h>
  2. sbit key1=P1^0;
  3. sbit key2=P1^1;
  4. sbit key3=P1^2;
  5. sbit key4=P1^3;
  6. sbit key5=P1^4;
  7. sbit key6=P1^5;
  8. sbit key7=P1^6;
  9. sbit key8=P1^7;
  10. sbit led1=P3^0;
  11. sbit led2=P3^1;
  12. sbit led3=P3^2;
  13. int step=1;
  14. int price=0;
  15. int num=1;
  16. int table1[]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x27,0x7F,0x6F}; //数码管显示0-9
  17. unsigned char dispbuf[8]={0,0,0,0,0,0,0,};
  18. int table2[]={0xe0,0xc0,0xa0,0x80,0x20};//控制退币
  19. int total_money=0;//所选商品总价格
  20. int back_money=0; //应退金额
  21. int in_money=0;
  22. /*
  23. 延时功能
  24. */
  25. void delay(int z)
  26. {
  27. int x,y;
  28. for(x=z;x>0;x--)
  29. for(y=110;y>0;y--);
  30. }
  31. //?调用时重新初始化??复位函数
  32. void reset()
  33. {
  34. step=1;
  35. price=0;
  36. num=1;
  37. total_money=0;
  38. back_money=0;
  39. in_money=0;
  40. }
  41. /*
  42. 选择商品函数?每个按键对应不同的物品价格及数量
  43. */
  44. void choose()
  45. {
  46. if(key1==0)
  47. {
  48. delay(80);
  49. if(key1==0)
  50. {
  51. num=1;
  52. price=4;
  53. }
  54. }
  55. else if(key2==0)
  56. {
  57. delay(80);
  58. if(key2==0)
  59. {
  60. price=6;
  61. num=1;
  62. }
  63. }
  64. else if(key3==0)
  65. {
  66. delay(80);
  67. if( key3==0)
  68. {
  69. price=10;
  70. num=1;
  71. }
  72. }
  73. }
  74. /*
  75. 确定及取消
  76. 确定则执行?step加一?取消则执行step減一
  77. */
  78. void apply()
  79. {
  80. if(key7==0)
  81. {
  82. delay(80);
  83. if(key7==0)
  84. {
  85. step++;
  86. }
  87. }
  88. else if(key8==0)
  89. {
  90. delay(80);
  91. if(key8==0)
  92. {
  93. step--;
  94. }
  95. }
  96. }
  97. /*
  98. 计算所选商品所需金额
  99. */
  100. void totalmoney()
  101. {
  102. total_money=price*num;
  103. }
  104. /*
  105. //累加投入币值
  106. */
  107. void inmoney()
  108. {
  109. if(key4==0)
  110. {
  111. delay(80);
  112. if(key4==0)
  113. in_money+=1;
  114. }
  115. else if(key5==0)
  116. {
  117. delay(80);
  118. if(key5==0)
  119. in_money+=5;
  120. }
  121. else if(key6==0)
  122. {
  123. delay(80);
  124. if(key6==0)
  125. in_money+=10;
  126. }
  127. }
  128. /*
  129. 计算所需退还币值
  130. */
  131. void backmoney()
  132. {
  133. back_money=in_money -total_money;
  134. }
  135. /*
  136. 显示函数?每一步显示不同的内容
  137. */
  138. void display ()
  139. {
  140. if(step==1)
  141. {
  142. P2=0x04;
  143. totalmoney();
  144. P0 =table1[total_money%10];
  145. delay(80);
  146. P2 = 0x08;
  147. P0 = table1[total_money/10];
  148. delay(80);
  149. }
  150. else if(step==2)
  151. {
  152. P2=0x04;
  153. inmoney();
  154. P0=table1[in_money%10];
  155. delay(80);
  156. P2=0x08;
  157. P0=table1[in_money/10];
  158. delay(80);
  159. }
  160. else if(step==3)
  161. {
  162. P2=0xf0;
  163. backmoney();
  164. if(back_money<0)
  165. {
  166. step--;
  167. P0=table1[in_money];
  168. }
  169. if(back_money>=0)
  170. {
  171. P2=0x04;
  172. backmoney();
  173. P0=table1[back_money%10];
  174. delay(80);
  175. P2=0x08;
  176. P0=table1[back_money/10];
  177. delay(80);
  178. reset();
  179. }
  180. else
  181. P0=table1[1];
  182. }
  183. }
  184. /*
  185. //主函数
  186. */
  187. void main()
  188. {
  189. while(1)
  190. {
  191. choose();
  192. apply();
  193. display();
  194. }
  195. /*?if(back_money>=10)
  196. {int?s=back_money/10;
  197. for(s;s>0;s--?)
  198. {led2=0;
  199. delay(1000);
  200. led2=1;
  201. back_money-=10;
  202. }
  203. }
  204. if(back_money<10&&back_money>0?)
  205. {
  206. led3=0;
  207. delay(1000);
  208. led3=1;
  209. }
  210. delay(1000);
  211. {
  212. led1=0;
  213. delay(1000);
  214. led1=1;
  215. delay(1000);
  216. led1=0;
  217. delay(1000);
  218. led1=1;
  219. delay(1000);
  220. led1=0;
  221. delay(1000);
  222. led1=1;
  223. delay(1000);
  224. }*/
  225. }
复制代码


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

本版积分规则

QQ|手机版|小黑屋|ELEOK |网站地图

GMT+8, 2024-12-22 11:42

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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