基于单片机的交通控制系统源程序

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

/**********************************************文件名:基于单片机的交通控制系统作者:风雪子郁时间:2012/11/22邮箱:fxziyu@qq.com地址:四川信息职业技术学院(雪峰校区)**********************************************//**************************液晶显示函数源程序**************************/#includeintrins.h#defineLCD_databusP0//LCD8位数据口sbitRS=P2^2;//RS为0命令;1数据sbitRW=P2^1;//RW为1--写;0--读sbitEN=P2^0;//使能端sbitCS1=P2^4;//片选1低电平有效,控制左半屏sbitCS2=P2^3;//片选1低电平有效,控制右半屏控制右半屏unsignedcharnum;voidDelay(unsignedintt){unsignedinti,j;for(i=0;it;i++)for(j=0;j110;j++);}voidRead_busy()//读“忙”函数-----数据线的最高位DB71则busy{P0=0x00;RS=0;RW=1;EN=1;while(P0&0x80);EN=0;}voidwrite_LCD_command(unsignedcharvalue){Read_busy();//每次读写都要忙判断RS=0;//选择命令RW=0;//读操作LCD_databus=value;EN=1;//EN由1----0锁存有效数据_nop_();_nop_();EN=0;}voidwrite_LCD_data(unsignedcharvalue)//写数据函数{Read_busy();RS=1;//选择数据RW=0;LCD_databus=value;EN=1;//EN由1----0锁存有效数据_nop_();_nop_();EN=0;}voidSet_page(unsignedcharpage)//设置“页”LCD12864共8页,一页是8行点阵点{page=0xb8|page;//页的首地址为0xB8write_LCD_command(page);}voidSet_line(unsignedcharstartline)//设置显示的起始行{startline=0xC0|startline;//起始行地址为0xC0write_LCD_command(startline);//设置从哪行开始:共0--63;一般从0行开始显示}voidSet_column(unsignedcharcolumn)//设置显示的列{column=column&0x3f;//列的最大值为64column=0x40|column;//列的首地址为0x40write_LCD_command(column);//列位置}voidSetOnOff(unsignedcharonoff)//显示开关函数:0x3E是关显示,0x3F是开显示{onoff=0x3e|onoff;//0011111x,onoff只能为0或者1write_LCD_command(onoff);}voidSelectScreen(unsignedcharscreen)//选屏{switch(screen){case0:CS1=0;CS2=0;break;//全屏case1:CS1=0;CS2=1;break;//左半屏case2:CS1=1;CS2=0;break;//右半屏default:break;}}voidClearScreen(unsignedcharscreen)//清屏{unsignedchari,j;SelectScreen(screen);for(i=0;i8;i++)//控制页数0-7,共8页{Set_page(i);Set_column(0);for(j=0;j64;j++)//控制列数0-63,共64列{write_LCD_data(0x00);//写入0,地址指针自加1}}}voidInitLCD()//LCD的初始化{Read_busy();SelectScreen(0);SetOnOff(0);//关显示SelectScreen(0);SetOnOff(1);//开显示SelectScreen(0);ClearScreen(0);//清屏Set_line(0);//开始行:0}voidDisplay(unsignedcharss,unsignedcharpage,unsignedcharcolumn,unsignedchar*p)//显示汉字{unsignedchari;SelectScreen(ss);Set_page(page);//写上半页Set_column(column);//控制列for(i=0;i16;i++)//控制16列的数据输出{write_LCD_data(p[i]);//汉字的上半部分}Set_page(page+1);//写下半页Set_column(column);//控制列for(i=0;i16;i++)//控制16列的数据输出{write_LCD_data(p[i+16]);//汉字的下半部分}}voidDisplayNC(unsignedcharss,unsignedcharpage,unsignedcharcolumn,unsignedchar*p)//显示数字或字符{unsignedchari;SelectScreen(ss);Set_page(page);//写上半页Set_column(column);//控制列for(i=0;i8;i++)//控制16列的数据输出{write_LCD_data(p[i]);//汉字的上半部分}Set_page(page+1);//写下半页Set_column(column);//控制列for(i=0;i8;i++)//控制16列的数据输出{write_LCD_data(p[i+8]);//汉字的下半部分}}voiddisplay_BMP(unsignedchara[][64])//显示图形的左边部分{unsignedchari,j;for(j=0;j8;j++){SelectScreen(1);Set_page(j);Set_column(0);for(i=0;i64;i++)//显示左屏{write_LCD_data(a[2*j][i]);//每隔一行取一次数组中的数据}SelectScreen(2);Set_page(j);Set_column(0);for(i=0;i64;i++)//显示右屏{write_LCD_data(a[2*j+1][i]);//每隔一行取一次数组中的数据}}}/**************************主机源程序**************************/#includereg51.hunsignedcharcodeduan[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};//段选码unsignedcharmodel=0;//三机通信变量unsignedchartemp=0,tab=0;//通行状态模式unsignedchartime[7][4];voidinit()//初始化函数{TMOD=0x21;TH0=(65536-50000)/256;TL0=(65536-50000)%256;ET0=1;TH1=0xfd;TL1=0xfd;TR1=1;SCON=0x50;PCON=0x00;ES=1;EA=1;}voidsysint()//时间初值{//东西停,南北通time[0][0]=time[0][2]=30;//东西倒计时长time[0][1]=time[0][3]=25;//南北倒计时长//东西停,南北等time[1][0]=time[1][2]=5;//东西倒计时长time[1][1]=time[1][3]=5;//南北倒计时长//东西通,南北停,time[2][0]=time[2][2]=25;//东西倒计时长time[2][1]=time[2][3]=30;//南北倒计时长//东西等,南北停,time[3][0]=time[3][2]=5;//东西倒计时长time[3][1]=time[3][3]=5;//南北倒计时长}voidsysint2()//特殊情况时间初值{unsignedcharj,k;for(j=4;j=6;j++)for(k=0;k4;k++)time[j][k]=10;}voiddelay()//延时{unsignedcharj=100;while(j--);}voidseri(unsignedchari)//数据发送{SBUF=i;delay();while(!TI);TI=0;}voidseg()//正常交通数码管显示{unsignedchari=0x01,n;for(n=0;n4;n++){P2=i;P0=duan[time[temp][n]/10];delay();i=1;P2=i;P0=duan[time[temp][n]%10];delay();i=1;}}voidseg2()//特殊情况数码管显示{unsignedchari=0x01,n;for(n=0;n4;n++){P2=i;P0=duan[time[tab][n]/10];delay();i=1;P2=i;P0=duan[time[tab][n]%10];delay();i=1;}}voidzcjt()//正常交通{switch(temp){case0:seri(0xa0);P1=0x21;break;//东西停,南北通case1:P1=0x11;break;//东西停,南北等case2:seri(0xa1);P1=0x0c;break;//东西通,南北停case3:P1=0x0a;break;//东西等,南北停default:break;}}voidmain(){unsignedchartempp,tabb;init();while(!model)delay();sysint();sysint2();TR0=1;while(1){tabb=tab;tempp=temp;switch(tab){case0:zcjt();break;//正常交通case1:P1=0x09;break;//禁止通行case2:P1=0x21;break;//东西停,南北通case3:P1=0x0c;break;//东西通,南北停default:break;}while(tempp==temp&&!tab)seg();while(tabb==tab&&tab)seg2();}}voidt0()interrupt1//1s函数中断{unsignedchara,n;EA=0;TH0=(65536-50000)/256;TL0=(65536-50000)%256;a++;//是否满1sif(a==24){a=0;for(n=0;n4;n++){if(!tab){if(time[temp][n])time[temp][n]--;else{temp++;if(temp==4)temp=0;sysint();break;}}else{if(time[tab][n])time[tab][n]--;else{tab=0;sysint2();break;}}}}EA=1;}voidserial()interrupt4//数据接收中断{EA=0;delay();while(!RI);RI=0;model=SBUF;switch(model){case0xb1:tab=0;break;case0xb2:tab=4;sysint2();break;case0xb3:tab=5;sys

1 / 26
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功