基于單片機(jī)的交通控制系統(tǒng)源程序_第1頁
基于單片機(jī)的交通控制系統(tǒng)源程序_第2頁
基于單片機(jī)的交通控制系統(tǒng)源程序_第3頁
基于單片機(jī)的交通控制系統(tǒng)源程序_第4頁
基于單片機(jī)的交通控制系統(tǒng)源程序_第5頁
已閱讀5頁,還剩22頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)

文檔簡介

1、/*文件名:基于單片機(jī)的交通控制系統(tǒng)作 者:風(fēng)雪子郁時 間: 2012/11/22郵 箱:fxziyu地 址:四川信息職業(yè)技術(shù)學(xué)院(雪峰校區(qū))*/*液晶顯示函數(shù)源程序*/#include <intrins.h>#define LCD_databus P0 /LCD8 位數(shù)據(jù)口sbit RS=P22; /RS 為0 命令;1 數(shù)據(jù)sbit RW=P21; /RW 為1-寫;0-讀sbit EN=P20; /使能端sbit CS1=P24; /片選1 低電平有效,控制左半屏sbit CS2=P23; /片選1 低電平有效,控制右半屏控制右半屏unsigned char num;void

2、 Delay(unsigned int t)unsigned int i,j;for(i=0;i<t;i+)for(j=0;j<110;j+);void Read_busy()/讀“忙”函數(shù)-數(shù)據(jù)線的最高位DB71 則busyP0=0x00;RS=0;RW=1;EN=1;while(P0 & 0x80);EN=0;void write_LCD_command(unsigned char value)Read_busy();/每次讀寫都要忙判斷RS=0; /選擇命令RW=0; /讀操作LCD_databus=value;EN=1; /EN 由1-0 鎖存有效數(shù)據(jù)_nop_()

3、;_nop_();EN=0;void write_LCD_data(unsigned char value)/寫數(shù)據(jù)函數(shù)Read_busy();RS=1; /選擇數(shù)據(jù)RW=0;LCD_databus=value;EN=1; /EN 由1-0 鎖存有效數(shù)據(jù)_nop_();_nop_();EN=0;void Set_page(unsigned char page)/設(shè)置“頁”LCD12864 共8 頁,一頁是8 行點(diǎn)陣點(diǎn)page=0xb8|page; /頁的首地址為0xB8write_LCD_command(page);void Set_line(unsigned char startline)

4、/設(shè)置顯示的起始行startline=0xC0|startline; /起始行地址為0xC0write_LCD_command(startline); /設(shè)置從哪行開始:共0-63;一般從0 行開始顯示void Set_column(unsigned char column) /設(shè)置顯示的列column=column &0x3f; /列的最大值為64column= 0x40|column; /列的首地址為0x40write_LCD_command(column);/列位置void SetOnOff(unsigned char onoff) /顯示開關(guān)函數(shù):0x3E 是關(guān)顯示,0x3F

5、是開顯示onoff=0x3e|onoff; /0011 111x,onoff只能為0 或者1write_LCD_command(onoff);void SelectScreen(unsigned char screen) /選屏switch(screen)case 0: CS1=0;CS2=0;break; /全屏case 1: CS1=0;CS2=1;break;/左半屏case 2: CS1=1;CS2=0;break;/右半屏default:break;void ClearScreen(unsigned char screen) /清屏unsigned char i,j;SelectSc

6、reen(screen);for(i=0;i<8;i+)/控制頁數(shù)0-7,共8 頁Set_page(i);Set_column(0);for(j=0;j<64;j+) /控制列數(shù)0-63,共64 列write_LCD_data(0x00); /寫入0,地址指針自加1void InitLCD() /LCD 的初始化Read_busy();SelectScreen(0);SetOnOff(0); /關(guān)顯示SelectScreen(0);SetOnOff(1); /開顯示SelectScreen(0);ClearScreen(0);/清屏Set_line(0); /開始行:0void D

7、isplay(unsigned char ss,unsigned char page,unsigned char column,unsigned char *p) /顯示漢字unsigned char i;SelectScreen(ss);Set_page(page); /寫上半頁Set_column(column); /控制列for(i=0;i<16;i+) /控制16 列的數(shù)據(jù)輸出write_LCD_data(pi); /漢字的上半部分Set_page(page+1); /寫下半頁Set_column(column); /控制列for(i=0;i<16;i+) /控制16 列的

8、數(shù)據(jù)輸出write_LCD_data(pi+16);/漢字的下半部分void DisplayNC(unsigned char ss,unsigned char page,unsigned char column,unsigned char *p) /顯示數(shù)字或字符unsigned char i;SelectScreen(ss);Set_page(page); /寫上半頁Set_column(column); /控制列for(i=0;i<8;i+) /控制16 列的數(shù)據(jù)輸出write_LCD_data(pi); /漢字的上半部分Set_page(page+1); /寫下半頁Set_colu

9、mn(column); /控制列for(i=0;i<8;i+) /控制16 列的數(shù)據(jù)輸出write_LCD_data(pi+8);/漢字的下半部分void display_BMP(unsigned char a64)/顯示圖形的左邊部分unsigned char i,j;for(j=0;j<8;j+)SelectScreen(1);Set_page(j);Set_column(0);for(i=0;i<64;i+) /顯示左屏write_LCD_data(a2*ji);/每隔一行取一次數(shù)組中的數(shù)據(jù)SelectScreen(2);Set_page(j);Set_column(0

10、);for(i=0;i<64;i+) /顯示右屏write_LCD_data(a2*j+1i);/每隔一行取一次數(shù)組中的數(shù)據(jù)/*主機(jī)源程序*/#include <reg51.h>unsigned char code duan=0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90;/段選碼unsigned char model=0;/三機(jī)通信變量unsigned char temp=0,tab=0;/通行狀態(tài)模式unsigned char time74;void init()/初始化函數(shù)TMOD=0x21;TH0=(65536-50

11、000)/256;TL0=(65536-50000)%256;ET0=1; TH1 = 0xfd;TL1 = 0xfd;TR1 = 1;SCON = 0x50;PCON = 0x00;ES = 1; EA = 1;void sysint()/時間初值/東西停,南北通time00=time02=30;/東西倒計時長time01=time03=25;/南北倒計時長/東西停,南北等time10=time12=5;/東西倒計時長time11=time13=5;/南北倒計時長/東西通,南北停,time20=time22=25;/東西倒計時長time21=time23=30;/南北倒計時長/東西等,南北停

12、,time30=time32=5;/東西倒計時長time31=time33=5;/南北倒計時長void sysint2()/特殊情況時間初值unsigned char j,k;for(j=4;j<=6;j+)for(k=0;k<4;k+)timejk=10;void delay() /延時unsigned char j=100;while(j-);void seri(unsigned char i)/數(shù)據(jù)發(fā)送SBUF=i;delay();while(!TI);TI=0;void seg()/正常交通數(shù)碼管顯示unsigned char i=0x01,n;for(n=0;n<4

13、;n+)P2=i;P0=duantimetempn/10;delay();i<<=1;P2=i;P0=duantimetempn%10;delay();i<<=1;void seg2()/特殊情況數(shù)碼管顯示unsigned char i=0x01,n;for(n=0;n<4;n+)P2=i;P0=duantimetabn/10;delay();i<<=1;P2=i;P0=duantimetabn%10;delay();i<<=1;void zcjt() /正常交通switch(temp)case 0: seri(0xa0);P1=0x21;

14、break;/東西停,南北通case 1: P1=0x11;break; /東西停,南北等case 2:seri(0xa1);P1=0x0c;break; /東西通,南北停case 3:P1=0x0a;break;/東西等,南北停default : break;void main() unsigned char tempp,tabb;init();while(!model) delay();sysint();sysint2();TR0=1;while(1)tabb=tab;tempp=temp;switch(tab)case 0: zcjt();break;/正常交通case 1: P1=0x

15、09;break;/禁止通行case 2: P1=0x21;break;/東西停,南北通case 3: P1=0x0c;break;/東西通,南北停default : break;while(tempp=temp && !tab) seg(); while(tabb=tab && tab) seg2();void t0() interrupt 1 /1s函數(shù)中斷unsigned char a,n;EA=0;TH0=(65536-50000)/256;TL0=(65536-50000)%256;a+;/是否滿1sif(a=24)a=0;for(n=0;n<4

16、;n+)if(!tab)if(timetempn)timetempn-;elsetemp+;if(temp=4) temp=0;sysint();break;elseif(timetabn)timetabn-;elsetab=0;sysint2();break;EA=1;void serial() interrupt 4/數(shù)據(jù)接收中斷EA = 0;delay();while(!RI);RI = 0;model = SBUF;switch(model)case 0xb1 : tab=0;break;case 0xb2 : tab=4;sysint2();break;case 0xb3 : tab

17、=5;sysint2();break;case 0xb4 : tab=6;sysint2();break;default : break;EA = 1;/*從機(jī)1源程序*/#include <reg51.h>#include<lcd128x64.h> /lcd驅(qū)動函數(shù)#include<ziku.h> /中文字庫sbit bj=P25;/led報警sbit soud=P26;/蜂鳴報警unsigned char model=0;/三機(jī)通信變量unsigned char temp=0,num=0,tab=1,key=0;void init()TMOD=0x21;

18、TH1 = 0xfd;TL1 = 0xfd;TR1 = 1;SCON = 0x50;PCON = 0x00;ES = 1;EA = 1;void delay() /延時unsigned char j=100;while(j-);void seri(unsigned char i)/數(shù)據(jù)發(fā)送SBUF=i;delay();while(!TI);TI=0;void Screen_Sys()Display(1,1,1,xi);Display(1,1,18,tong);Display(1,1,34,qi);Display(1,1,50,dong);Display(2,1,1,zhong);Display

19、(1,4,18,qing);Display(1,4,34,shao);Display(1,4,50,hou);Delay(1000);DisplayNC(2,1,48,num3);Delay(1000);Display(2,4,4,xingh);DisplayNC(2,1,48,num2);Delay(1000);Display(2,4,21,xingh);DisplayNC(2,1,48,num1);Delay(1000);Display(2,4,37,xingh);DisplayNC(2,1,48,num0);Delay(1000);void anjian()/按鍵處理if(P1 != 0

20、xff)delay();if(P1 != 0xff)key=P1;key=key;switch(key)case 0x01:temp=0xb1;break;case 0x02:temp=0xb2;break;case 0x04:temp=0xb3;break;case 0x08:temp=0xb4;break;case 0x10:num=0xb5;break;case 0x20:num=0xb6;break;case 0x40:num=0xb7;break;case 0x80:num=0xb8;break;if(key<=0x08) seri(temp);if(key>0x08)t

21、ab=0;seri(num); void zhishi()/交通模式示意switch(temp)case 0xa0 : case 0xa1 : case 0xb1 : display_BMP(jtzc);break;case 0xb2 : display_BMP(jztx);break;case 0xb3 :display_BMP(jj1);break;case 0xb4 : display_BMP(jj2);break;default : break;void biaoyu() /標(biāo)語,廣告及提示模式unsigned char i,keyy;switch (num)case 0xc0: ca

22、se 0xc1: case 0xc2: case 0xc3: display_BMP(jb_chd); break; /闖紅燈case 0xc4: case 0xc5: case 0xc6: case 0xc7: display_BMP(jb_qt); break; /橋塌case 0xc8: case 0xc9: case 0xca: case 0xcb: display_BMP(jb_hz); break; /火災(zāi)case 0xcc: case 0xcd: case 0xce: case 0xcf: display_BMP(jb_ch); break; /車禍 case 0xb5: cas

23、e 0xb6: case 0xb7:case 0xb8: display_BMP(xcbiaoyu); break; /宣傳標(biāo)語default: break;tab=1;if(num>=0xc0 && num<=0xcf)soud=1;bj=0;key=keyy;for(i=0;i<10;i+)Delay(200);anjian();if(key != keyy) soud=0;bj=1;break;soud=0;bj=1;void main()bj=1;soud=0;InitLCD();init(); Screen_Sys();display_BMP(sci

24、tc);Delay(1000);display_BMP(name);Delay(2000);ClearScreen(0);seri(0xb0);while(1)if(tab) zhishi();elsebiaoyu(); anjian(); void serial() interrupt 4EA = 0;delay();while(!RI);RI = 0;model = SBUF;if(model = 0xa0)temp=model;if(model = 0xa1)temp=model;if(model>=0xc0 && model<= 0xcf) tab=0;nu

25、m=model; EA = 1;/*從機(jī)2源程序*/#include <reg51.h>#include<lcd128x64.h> /lcd驅(qū)動函數(shù)#include<ziku.h> /中文字庫unsigned char code key_char44=0xc0,0xc1,0xc2,0xc3,0xc4,0xc5,0xc6,0xc7,0xc8,0xc9,0xca,0xcb,0xcc,0xcd,0xce,0xcf,;unsigned char model=0;/三機(jī)通信變量unsigned char temp=0,key=0;tab=1;void init()/初

26、始化TMOD = 0x21;TH1 = 0xfd;TL1 = 0xfd;TR1 = 1;SCON = 0x50;PCON = 0x00;ES = 1;EA = 1;P1=0x0f;void delay() /延時unsigned char j=100;while(j-);void seri(unsigned char i)/數(shù)據(jù)發(fā)送SBUF=i;delay();while(!TI);TI=0;void jzjp()/鍵盤掃描 unsigned char hang,lie;if(P1!=0x0f) delay();if(P1!=0x0f)switch(P1&0x0f)case 0x0e:

27、lie=0;break;case 0x0d:lie=1;break;case 0x0b:lie=2;break;case 0x07:lie=3;break;default: break;P1=0xf0;switch(P1&0xf0)case 0xe0:hang=0;break;case 0xd0:hang=1;break;case 0xb0:hang=2;break;case 0x70:hang=3;break;default: break; P1=0x0f;key=key_charhanglie;tab=0;/道路情況void ew_g_ns_s()/東西通,南北停display_B

28、MP(tra_pol_3);Delay(200);jzjp();display_BMP(tra_pol_4);Delay(200);jzjp();void ew_s_ns_g()/東西停,南北通display_BMP(tra_pol_1);Delay(200);jzjp();display_BMP(tra_pol_2);Delay(200);jzjp();void stop()/禁止通行display_BMP(stop_1);Delay(200);jzjp();display_BMP(stop_2);Delay(200);jzjp();void zhishi()/交通示意模式switch (temp)case 0xa0: ew_g_ns_s(); break; case 0xa1: ew_s_ns_g(); break;case 0xb2: stop(); break;case 0xb3: ew_g_ns_s();break;case 0xb4: ew_s_ns_g();break;default: brea

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論