性能指標(biāo): 自動(dòng)檢測車門外是否有人,有人就自動(dòng)打開車門,延時(shí)10s; 記錄從前門上車和后門下車的人數(shù),自動(dòng)判斷是否超重,超載人數(shù)可自行設(shè)置; 乘客可通過獨(dú)立按鍵來發(fā)出下車指示,從而司機(jī)打開后門記錄人數(shù)減一; 當(dāng)車內(nèi)人員未滿綠色顯示燈亮,如果有超載情況出現(xiàn)時(shí),車內(nèi)報(bào)警器自動(dòng)報(bào)警,同時(shí)車門紅色燈亮; 仿真原理圖如下(proteus仿真工程文件可到本帖附件中下載)
51hei.png (46.84 KB, 下載次數(shù): 36)
下載附件
2020-6-11 18:03 上傳
單片機(jī)源程序如下:
- #include <reg52.h>
- #define uchar unsigned char
- #define uint unsigned int
- sbit buz=P2^0;//超載時(shí)蜂鳴器報(bào)警
- sbit relay=P2^1;//超載時(shí)關(guān)閉客車發(fā)動(dòng)機(jī)
- sbit LED1=P2^2;//超載時(shí)紅燈警報(bào)
- sbit LED2=P2^3;//正常人數(shù)時(shí)綠燈指示
- sbit LED3=P2^4;//有人要下車時(shí)黃燈指示
- sbit SET=P2^5;//設(shè)置超載人數(shù)
- sbit getoff=P2^6;//乘客下車指示
- sbit geton=P2^7;//乘客上車檢測
- sbit up=P3^5;//增加超載人數(shù)上限
- bit set_st; //狀態(tài)標(biāo)志
- sbit P36=P3^6;
- sbit P37=P3^7;//定義數(shù)碼管引腳
- uchar max=5;//定義超載人數(shù)
- char count;//定義車內(nèi)人數(shù)
- uchar count1,count2,n1,n2;
- const uchar tab[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,}; //顯示0~9
- /*****延時(shí)子程序*****/
- void delay(uint num)
- {
- while( --num );
- }
- /*****外部中斷0*****/
- void int0() interrupt 0
- {
- count++; //上車人數(shù)記錄
- if (count>99)
- count=0;
- }
- /*****外部中斷1*****/
- void int1() interrupt 2
- {
- count--; //下車人數(shù)記錄
- if (count<0)
- count=0;
- }
- /*****設(shè)置超載人數(shù)*****/
- void set()
- {
- if(SET==0)
- {
- delay(200);
- TR1 = 1; //打開定時(shí)器1
- set_st=1;
- }
- else if(SET==1)
- set_st=0;
- }
- /*****顯示人數(shù)子程序*****/
- void Disp_num()
- {
- count2=count/10; //十位
- count1=count%10; //個(gè)位
-
- P1=tab[count1]; //個(gè)位顯示
- P36=1;
- delay(50);
- P36=0;
-
- P1=tab[count2]; //十位顯示
- P37=1;
- delay(50);
- P37=0;
-
- }
- /*****顯示超載人數(shù)子程序*****/
- void Disp_alarm()
- {
- n2=max/10; //十位
- n1=max%10; //個(gè)位
-
- P1=tab[n1]; //個(gè)位顯示
- P36=1;
- delay(50);
- P36=0;
-
- P1=tab[n2]; //十位顯示
- P37=1;
- delay(50);
- P37=0;
- }
- /*****定時(shí)器0*****/
- void timer0isr(void) interrupt 1
- {
- uchar i;
- TH0=(65536-50000)/256;
- TL0=(65536-50000)%256;//定時(shí)50ms
- i++;
- if(i==200) //延時(shí)10s
- {
- P0=0x03; //電機(jī)反轉(zhuǎn),關(guān)閉車門
- i=0;
- }
- }
- /*****定時(shí)器1*****/
- void timer1isr(void) interrupt 3
- {
- max++;
- if (max>99)
- max=0;
- }
-
- void main(void)
- {
-
- IT0=1;
- IT1=1; //設(shè)置邊沿觸發(fā)方式
- EX0=1; //打開 INT0 的中斷允許。
- EX1=1; //打開 INT1 的中斷允許。
- EA=1; //打開總中斷
-
- TMOD = 0x61; //設(shè)定T/C0工作在計(jì)數(shù)器
- TH1 = 256-1;
- TL1 = 256-1; //裝載計(jì)數(shù)初值
- ET1 = 1; //開T/C0中斷
- TH0=(65536-50000)/256;
- TL0=(65536-50000)%256;//定時(shí)50ms
- ET0 = 1; //開T/C0中斷
- buz=0;
- relay=0;
- LED1=1;
- LED2=1;
- LED3=1;
- P0=0x03; //初始化
-
- while(1)
- {
-
- if(geton==0)//乘客上車檢測
- {
- P0=0x06; //電機(jī)正轉(zhuǎn),打開車門
- TR0=1;//打開定時(shí)器0
- }
-
- if(count>max)//超載
- {
- relay=1;//超載時(shí)關(guān)閉客車發(fā)動(dòng)機(jī)
- LED1=0;//超載時(shí)紅燈警報(bào)
- LED2=1;//超載時(shí)關(guān)閉綠燈
-
-
- buz=~buz;//超載蜂鳴器報(bào)警
- delay(50);
-
- }
-
- else if(count<=max)//人數(shù)正常
- {
- buz=0;//正常人數(shù)時(shí)關(guān)閉蜂鳴器
- relay=0;//正常人數(shù)時(shí)打開客車發(fā)動(dòng)機(jī)
- LED1=1;//正常人數(shù)時(shí)關(guān)閉紅燈
- LED2=0;//正常人數(shù)時(shí)綠燈指示
- }
-
- if(getoff==0)//乘客下車檢測
- LED3=0; //有人要下車時(shí)黃燈指示
-
- else if(!INT1)//檢測乘客是否已經(jīng)下車
- LED3=1;//乘客下車后關(guān)閉黃燈
-
- set();//設(shè)置超載人數(shù)
-
- if(set_st==0) //顯示車內(nèi)人數(shù)
- {
- Disp_num();
- }
-
- if(set_st==1) //顯示超載人數(shù)上限值
- {
- Disp_alarm();
- }
- }
- }
復(fù)制代碼
所有資料51hei提供下載:
51hei設(shè)計(jì).zip
(164.87 KB, 下載次數(shù): 49)
2020-6-10 13:04 上傳
點(diǎn)擊文件名下載附件
免超載長途車自動(dòng)控制系統(tǒng) 下載積分: 黑幣 -5
|