找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]
跳转到指定楼层
楼主
自动售货机仿真原理图如下(proteus仿真工程文件可到本帖附件中下载)


单片机源程序如下:
  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. }
复制代码

所有资料51hei提供下载:
自动售货机.rar (22.78 KB, 下载次数: 126)
自动售货机控制系统设计.doc (511.95 KB, 下载次数: 93)


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

使用道具 举报

沙发
ID:651497 发表于 2019-11-28 15:42 | 只看该作者
可以,完成度很高
回复

使用道具 举报

板凳
ID:489394 发表于 2019-12-10 10:58 | 只看该作者
可以 参考一下~感觉不错
回复

使用道具 举报

地板
ID:659263 发表于 2019-12-12 17:50 | 只看该作者
led 为啥不亮
回复

使用道具 举报

5#
ID:625113 发表于 2019-12-16 09:06 来自手机 | 只看该作者
不错不错,刚好需要,谢谢分享
回复

使用道具 举报

6#
ID:572991 发表于 2019-12-26 22:42 来自手机 | 只看该作者
sz的波妞 发表于 2019-12-12 17:50
led 为啥不亮

不会吧。我调试的是好的啊
回复

使用道具 举报

7#
ID:787555 发表于 2020-6-25 13:32 来自手机 | 只看该作者
右上角那一部分电路是什么意思呀
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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