




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、/*文件名:基于单片机的交通控制系统作 者:风雪子郁时 间: 2012/11/22邮 箱:fxziyu地 址:四川信息职业技术学院(雪峰校区)*/*液晶显示函数源程序*/#include <intrins.h>#define LCD_databus P0 /LCD8 位数据口sbit RS=P22; /RS 为0 命令;1 数据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()/读“忙”函数-数据线的最高位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 锁存有效数据_nop_()
3、;_nop_();EN=0;void write_LCD_data(unsigned char value)/写数据函数Read_busy();RS=1; /选择数据RW=0;LCD_databus=value;EN=1; /EN 由1-0 锁存有效数据_nop_();_nop_();EN=0;void Set_page(unsigned char page)/设置“页”LCD12864 共8 页,一页是8 行点阵点page=0xb8|page; /页的首地址为0xB8write_LCD_command(page);void Set_line(unsigned char startline)
4、/设置显示的起始行startline=0xC0|startline; /起始行地址为0xC0write_LCD_command(startline); /设置从哪行开始:共0-63;一般从0 行开始显示void Set_column(unsigned char column) /设置显示的列column=column &0x3f; /列的最大值为64column= 0x40|column; /列的首地址为0x40write_LCD_command(column);/列位置void SetOnOff(unsigned char onoff) /显示开关函数:0x3E 是关显示,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+)/控制页数0-7,共8 页Set_page(i);Set_column(0);for(j=0;j<64;j+) /控制列数0-63,共64 列write_LCD_data(0x00); /写入0,地址指针自加1void InitLCD() /LCD 的初始化Read_busy();SelectScreen(0);SetOnOff(0); /关显示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 列的数据输出write_LCD_data(pi); /汉字的上半部分Set_page(page+1); /写下半页Set_column(column); /控制列for(i=0;i<16;i+) /控制16 列的
8、数据输出write_LCD_data(pi+16);/汉字的下半部分void DisplayNC(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<8;i+) /控制16 列的数据输出write_LCD_data(pi); /汉字的上半部分Set_page(page+1); /写下半页Set_colu
9、mn(column); /控制列for(i=0;i<8;i+) /控制16 列的数据输出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);/每隔一行取一次数组中的数据SelectScreen(2);Set_page(j);Set_column(0
10、);for(i=0;i<64;i+) /显示右屏write_LCD_data(a2*j+1i);/每隔一行取一次数组中的数据/*主机源程序*/#include <reg51.h>unsigned char code duan=0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90;/段选码unsigned char model=0;/三机通信变量unsigned char temp=0,tab=0;/通行状态模式unsigned char time74;void init()/初始化函数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)/数据发送SBUF=i;delay();while(!TI);TI=0;void seg()/正常交通数码管显示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()/特殊情况数码管显示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函数中断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/数据接收中断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;/*从机1源程序*/#include <reg51.h>#include<lcd128x64.h> /lcd驱动函数#include<ziku.h> /中文字库sbit bj=P25;/led报警sbit soud=P26;/蜂鸣报警unsigned char model=0;/三机通信变量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)/数据发送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() /标语,广告及提示模式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; /火灾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; /宣传标语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;/*从机2源程序*/#include <reg51.h>#include<lcd128x64.h> /lcd驱动函数#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;/三机通信变量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)/数据发送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. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 网络隔离机(卡)项目安全风险评价报告
- 遵义师范学院《中国通史古代》2023-2024学年第二学期期末试卷
- 江苏省南京市琅琊路小学明发滨江分校2025届小升初复习数学模拟试卷含解析
- 赣南医学院《空间构成与表现》2023-2024学年第二学期期末试卷
- 温州科技职业学院《城乡规划设计基础1》2023-2024学年第二学期期末试卷
- 三峡大学《流行音乐配器法(1)》2023-2024学年第二学期期末试卷
- 河北地质大学华信学院《民航服务礼仪》2023-2024学年第二学期期末试卷
- 甘肃林业职业技术学院《药理学及实验》2023-2024学年第二学期期末试卷
- 盐城师范学院《口述史实践》2023-2024学年第二学期期末试卷
- 吉林省延边重点中学2024-2025学年初三校际联合检测试题(二模)化学试题含解析
- 《欧式田园风》课件
- 2024年德州市人民医院高层次卫技人才招聘笔试历年参考题库频考点附带答案
- 订单与合同管理制度
- 【MOOC期末】《英美文学里的生态》(北京林业大学)期末中国大学慕课MOOC答案
- 外科患者疼痛护理与管理
- 《家校社协同育人“教联体”工作方案》专题培训
- 2024年六西格玛黄带认证考试练习题库(含答案)
- 儿童牙齿分龄护理方案
- 2023-2024学年广东省深圳市宝安区七年级(下)期中英语试卷
- DB43T 2558-2023 城镇低效用地识别技术指南
- 中国心力衰竭诊断和治疗指南2024解读(完整版)
评论
0/150
提交评论