版權(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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2024學(xué)校維修合同書
- 2024年度網(wǎng)站域名合作契約
- 新建住宅購買合同樣本
- 藥品銷售代理合同范例
- 高中生宿舍管理規(guī)定范本
- 建筑機(jī)械租賃合同簡易格式
- 2024年資產(chǎn)抵債協(xié)議書
- 房屋房基流轉(zhuǎn)協(xié)議書-合同范本
- 制造企業(yè)員工合同樣本
- 產(chǎn)品加工合同典范
- 電力工程施工售后保障方案
- 2024年小學(xué)心理咨詢室管理制度(五篇)
- 第16講 國家出路的探索與挽救民族危亡的斗爭 課件高三統(tǒng)編版(2019)必修中外歷史綱要上一輪復(fù)習(xí)
- 機(jī)器學(xué)習(xí) 課件 第10、11章 人工神經(jīng)網(wǎng)絡(luò)、強(qiáng)化學(xué)習(xí)
- 北京市人民大學(xué)附屬中學(xué)2025屆高二生物第一學(xué)期期末學(xué)業(yè)水平測試試題含解析
- 書籍小兵張嘎課件
- 氫氣中鹵化物、甲酸的測定 離子色譜法-編制說明
- 2024秋期國家開放大學(xué)專科《機(jī)械制圖》一平臺在線形考(形成性任務(wù)四)試題及答案
- 2024年經(jīng)濟(jì)師考試-中級經(jīng)濟(jì)師考試近5年真題集錦(頻考類試題)帶答案
- 2024年黑龍江哈爾濱市通河縣所屬事業(yè)單位招聘74人(第二批)易考易錯模擬試題(共500題)試卷后附參考答案
- 私募基金管理人-廉潔從業(yè)管理準(zhǔn)則
評論
0/150
提交評論