|
城市居民樓內(nèi)一般安裝有樓道燈,方便夜間居民上下樓,其工作特點(diǎn)是人來(lái)燈亮,人走燈滅。以熱釋電型樓道燈為例,其基本工作原理是:熱釋電傳感器能檢測(cè)人體是否進(jìn)入感應(yīng)范圍,當(dāng)人體未進(jìn)入感應(yīng)范圍,即離樓道燈還有一定距離時(shí),傳感器輸出低電平;當(dāng)人體進(jìn)入感應(yīng)范圍,即靠近樓道燈時(shí),傳感器輸出高電平。根據(jù)傳感器的輸出,單片機(jī)可決定是否點(diǎn)亮樓道燈。由于樓道燈屬本單元全體居民共用,為便于電費(fèi)結(jié)算,現(xiàn)要求設(shè)計(jì)一套簡(jiǎn)易樓道燈電費(fèi)計(jì)價(jià)系統(tǒng),系統(tǒng)能自動(dòng)計(jì)算樓道燈在一個(gè)月內(nèi)的總點(diǎn)亮?xí)r間,并據(jù)此計(jì)算出應(yīng)繳電費(fèi)額度。
系統(tǒng)由電源電路、熱釋電傳感器、單片機(jī)、按鍵以及顯示器組成,樓道燈供電為220市電,功率2kW(實(shí)際燈泡功率一般不會(huì)這么大�?紤]到實(shí)驗(yàn)演示時(shí)間有限,故假設(shè)此燈泡功率為該值)。其中電源采用5V,熱釋電傳感器的輸出采用按鍵按下與否進(jìn)行模擬,單片機(jī)采用51,顯示器采用4位數(shù)碼管,電價(jià)按5.86元/千瓦時(shí)(實(shí)際電價(jià)一般為0.58。考慮到實(shí)驗(yàn)演示時(shí)間有限,故假設(shè)電價(jià)為該值),要求電費(fèi)計(jì)算精度精確到0.01元。用戶可用按鍵查詢本月樓道燈總點(diǎn)亮?xí)r間(精度0.01小時(shí)),以及本月總電費(fèi)。
三. 實(shí)驗(yàn)?zāi)康?br />
理解、掌握51單片機(jī)I/O口高級(jí)應(yīng)用、定時(shí)器、中斷、繼電器、按鍵及數(shù)碼管的綜合應(yīng)用
仿真原理圖如下(proteus仿真工程文件可到本帖附件中下載)
wsda.png (85.2 KB, 下載次數(shù): 76)
下載附件
proteus仿真
2019-7-5 15:15 上傳
單片機(jī)程序流程圖:
5613.jpg (421.9 KB, 下載次數(shù): 57)
下載附件
流程圖1
2019-7-5 15:39 上傳
456156.jpg (454.13 KB, 下載次數(shù): 51)
下載附件
流程圖2
2019-7-5 15:39 上傳
單片機(jī)源程序如下:
- #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; //負(fù)邊沿觸發(fā)
- TMOD|=0x01; //T0mode1 有1置1
- TMOD&=0xf1; //有0置0
- TH0=(65635-50000)/256; //設(shè)置計(jì)數(shù)值
- 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; //若數(shù)碼管顯示達(dá)上限,清零重新計(jì)算
- }
- }
- void show(int x) //顯示函數(shù)
- { ando[0]=x/1000;
- ando[1]=x/100%10;
- ando[2]=x%100/10;
- ando[3]=x%10;
- scan=1; //設(shè)置掃描初值
- for(i=0;i<4;i++) //掃描四次
- {
- if(i==1) //第二位掃描時(shí)數(shù)字+小數(shù)點(diǎn)
- P2=(TAB[ando[i]])&0x7f;
- else
- P2=TAB[ando[i]];
- P1=scan; //輸出掃描信號(hào)
- delay1(10);
- P2=0xff; //消隱
- scan<<=1;} //掃描信號(hào)左移一位
- }
-
- void timer0(void) interrupt 1
- { TH0=(65635-50000)/256; //重置計(jì)數(shù)值
- TL0=(65635-50000)%256; //低8位
- if(++Q==20) //定時(shí)達(dá)1秒
- { Q=0;
- k++;
- n++;
- }
- if(n==36) //定時(shí)達(dá)36秒
- { n=0;
- TR0=0;
- LED=1;
- }
-
- }
- void my_int0(void) interrupt 0 //外部中斷
- { if(++z==4)
- z=1;
- }
復(fù)制代碼
所有資料51hei提供下載(仿真工程):
單片機(jī)設(shè)計(jì).7z
(31.99 KB, 下載次數(shù): 22)
2019-7-6 03:40 上傳
點(diǎn)擊文件名下載附件
代碼及仿真 下載積分: 黑幣 -5
|
評(píng)分
-
查看全部評(píng)分
|