标题: 单片机啤酒瓶计数实验源程序+Proteus仿真 [打印本页]

作者: Treasure67    时间: 2020-7-29 11:46
标题: 单片机啤酒瓶计数实验源程序+Proteus仿真
实验说明:在源程序中计算初值为0xf7,运用定时计数的方式2对程序进行计数,当程序开始运行,每按下一次按键(即每装一瓶啤酒)LED显示的计数就会+1直到8为止,当装满8瓶时再加1时LED的计数溢出就会跳转到0,这时相当于装满了9瓶,程序停止。直到下一箱啤酒开始装箱,依次反复进行。

仿真原理图如下(proteus仿真工程文件可到本帖附件中下载)


单片机源程序如下:
  1. #include<reg52.h>
  2. char led[]={0x3f,0x06,0x5b,0x4f,0x66,
  3.             0x6d,0x7d,0x07,0x7f,0x6f};  //led显示字模
  4. sbit P37=P3^7;
  5. sbit P34=P3^4;
  6. void delay(unsigned int time)  //约4ms的延时函数
  7. {
  8.   unsigned int j;
  9.   for (;time>0;time--);
  10.     for (j=0;j<500;j++);
  11. }

  12. void t0() interrupt 1
  13. {
  14.   TR0=0;           //停止计数
  15.   P37=0;           //启动电机运转
  16.   delay(1000); //延时,等待下一空箱运转到位待装啤酒
  17.   P37=1;           //停止电机运转
  18.   TR0=1;           //启动计数
  19. }
  20. /**********主函数**************/
  21. void main()
  22. {
  23. char i;
  24. TMOD=0x06;                //T0计数方式
  25. TL0=0xf7;                //计数初值247
  26. TH0=0xf7;
  27. TR0=1;                        //启动T0计数
  28. ET0=1;                   //开中断
  29. EA=1;
  30. P37=1;                        //停止电机运转
  31. while(1)
  32. {
  33.   i=256-TL0;          //获取计数差值
  34.   P0=led[9-i];          //显示已装了多少啤酒
  35.   delay(1000);
  36.   if(i==1)                 //是否已经装了(9-1)=8瓶
  37.   {
  38.    while(P34==1);  //等待装最后一瓶
  39.    P0=0x71;                        //显示已经装满符号
  40.    delay(100);
  41.   }
  42. }
  43. }
复制代码

所有资料51hei提供下载:
9瓶装啤酒瓶.zip (69.34 KB, 下载次数: 15)






欢迎光临 (http://www.51hei.com/bbs/) Powered by Discuz! X3.1