城市居民樓內一般安裝有樓道燈,方便夜間居民上下樓,其工作特點是人來燈亮,人走燈滅。以熱釋電型樓道燈為例,其基本工作原理是:熱釋電傳感器能檢測人體是否進入感應范圍,當人體未進入感應范圍,即離樓道燈還有一定距離時,傳感器輸出低電平;當人體進入感應范圍,即靠近樓道燈時,傳感器輸出高電平。根據傳感器的輸出,單片機可決定是否點亮樓道燈。由于樓道燈屬本單元全體居民共用,為便于電費結算,現要求設計一套簡易樓道燈電費計價系統,系統能自動計算樓道燈在一個月內的總點亮時間,并據此計算出應繳電費額度。
系統由電源電路、熱釋電傳感器、單片機、按鍵以及顯示器組成,樓道燈供電為220市電,功率2kW(實際燈泡功率一般不會這么大。考慮到實驗演示時間有限,故假設此燈泡功率為該值)。其中電源采用5V,熱釋電傳感器的輸出采用按鍵按下與否進行模擬,單片機采用51,顯示器采用4位數碼管,電價按5.86元/千瓦時(實際電價一般為0.58。考慮到實驗演示時間有限,故假設電價為該值),要求電費計算精度精確到0.01元。用戶可用按鍵查詢本月樓道燈總點亮時間(精度0.01小時),以及本月總電費。
三. 實驗目的
理解、掌握51單片機I/O口高級應用、定時器、中斷、繼電器、按鍵及數碼管的綜合應用
仿真原理圖如下(proteus仿真工程文件可到本帖附件中下載)
wsda.png (85.2 KB, 下載次數: 76)
下載附件
proteus仿真
2019-7-5 15:15 上傳
單片機程序流程圖:
5613.jpg (421.9 KB, 下載次數: 57)
下載附件
流程圖1
2019-7-5 15:39 上傳
456156.jpg (454.13 KB, 下載次數: 51)
下載附件
流程圖2
2019-7-5 15:39 上傳
單片機源程序如下:
- #include <reg52.h>
- #define SEG P2
- sbit LED = P0^0;
- sbit K1 = P0^1;
- sbit K2 =P3^2;
- char code TAB[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};
- char ando[4]={0,0,0,0};
- int Q=0,i=0,j=0,z=0,n=0;
- char scan,M=0,T=0;
- float k=0;
- void show(int);
- void delay1(unsigned int x)
- {
- unsigned int w,i;
- for(i=0;i<x;i++)
- for(w=0;w<120;w++);
- }
- void main()
- { IE = 0x8b; //T1\T0\INT0 中斷允許
- TCON|=0x01; //負邊沿觸發
- TMOD|=0x01; //T0mode1 有1置1
- TMOD&=0xf1; //有0置0
- TH0=(65635-50000)/256; //設置計數值
- TL0=(65635-50000)%256;
- P0=0xff;
- P2=0xff; //初始化
- while(1)
- {
- if(K1==1)
- { TR0=1;
- LED=0;
- }
- // else
- // {TR0=0;
- // LED=1;
- // }
- if(z==1)
- {j=k*586/60/30;
- show(j);}
- if(z==2)
- { j=k*100/3600;
- show(j);
- }
- if(j==9999) k=0; //若數碼管顯示達上限,清零重新計算
- }
- }
- void show(int x) //顯示函數
- { ando[0]=x/1000;
- ando[1]=x/100%10;
- ando[2]=x%100/10;
- ando[3]=x%10;
- scan=1; //設置掃描初值
- for(i=0;i<4;i++) //掃描四次
- {
- if(i==1) //第二位掃描時數字+小數點
- P2=(TAB[ando[i]])&0x7f;
- else
- P2=TAB[ando[i]];
- P1=scan; //輸出掃描信號
- delay1(10);
- P2=0xff; //消隱
- scan<<=1;} //掃描信號左移一位
- }
-
- void timer0(void) interrupt 1
- { TH0=(65635-50000)/256; //重置計數值
- TL0=(65635-50000)%256; //低8位
- if(++Q==20) //定時達1秒
- { Q=0;
- k++;
- n++;
- }
- if(n==36) //定時達36秒
- { n=0;
- TR0=0;
- LED=1;
- }
-
- }
- void my_int0(void) interrupt 0 //外部中斷
- { if(++z==4)
- z=1;
- }
復制代碼
所有資料51hei提供下載(仿真工程):
單片機設計.7z
(31.99 KB, 下載次數: 22)
2019-7-6 03:40 上傳
點擊文件名下載附件
代碼及仿真 下載積分: 黑幣 -5
|