實驗說明:在源程序中計算初值為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)
2020-7-29 11:46 上傳
點擊文件名下載附件
啤酒瓶計數
|