实验说明:在源程序中计算初值为0xf7,运用定时计数的方式2对程序进行计数,当程序开始运行,每按下一次按键(即每装一瓶啤酒)LED显示的计数就会+1直到8为止,当装满8瓶时再加1时LED的计数溢出就会跳转到0,这时相当于装满了9瓶,程序停止。直到下一箱啤酒开始装箱,依次反复进行。
仿真原理图如下(proteus仿真工程文件可到本帖附件中下载)
单片机源程序如下:
- #include<reg52.h>
- char led[]={0x3f,0x06,0x5b,0x4f,0x66,
- 0x6d,0x7d,0x07,0x7f,0x6f}; //led显示字模
- sbit P37=P3^7;
- sbit P34=P3^4;
- void delay(unsigned int time) //约4ms的延时函数
- {
- unsigned int j;
- for (;time>0;time--);
- for (j=0;j<500;j++);
- }
- void t0() interrupt 1
- {
- TR0=0; //停止计数
- P37=0; //启动电机运转
- delay(1000); //延时,等待下一空箱运转到位待装啤酒
- P37=1; //停止电机运转
- TR0=1; //启动计数
- }
- /**********主函数**************/
- void main()
- {
- char i;
- TMOD=0x06; //T0计数方式
- TL0=0xf7; //计数初值247
- TH0=0xf7;
- TR0=1; //启动T0计数
- ET0=1; //开中断
- EA=1;
- P37=1; //停止电机运转
- while(1)
- {
- i=256-TL0; //获取计数差值
- P0=led[9-i]; //显示已装了多少啤酒
- delay(1000);
- if(i==1) //是否已经装了(9-1)=8瓶
- {
- while(P34==1); //等待装最后一瓶
- P0=0x71; //显示已经装满符号
- delay(100);
- }
- }
- }
复制代码
所有资料51hei提供下载:
9瓶装啤酒瓶.zip
(69.34 KB, 下载次数: 15)
|