十字路口交通灯控制系统
delay(100);
P0=nanShiwei; //显示南北十位 P2&=0x70;
P2|=0x02; //在保护1602控制口的同时选择了第三个数码管亮 delay(100); //短暂延时
P0=nanGewei; //显示南北个位
P2&=0x70; //在保护1602控制口的同时选择了第四个数码管亮 P2|=0x03; delay(100); }
P2|=0x8f; anjian();
if(Be)
{ Bel(100);//nr=0;ny=0;ng=0;dr=0;dy=0;dg=0; Be=0; t=0; } } }
22
贺州学院本科生毕业论文(设计)
LCD1602函数
#include
unsigned char nian1=20,nian2=11,yue=3,ri=1,day=2; unsigned int year=2011;
unsigned char code set[]={%unsigned char code set0[]={%unsigned char code tab1[]=\ 2011-03-1 TUE%unsigned char
xing[7][3]={{'S','U','N'},{'M','O','N'},{'T','U','E'},{'W','E','D'},{'T','H','U'},{'F','R','I'},{'S','A','T'}}; bit s; //数码管和1602的标志符号 unsigned char l=0; //573的标志符号 unsigned char second=0,count,fen=0,shi=0; void xianshi(); //声明 显示函数 void anjian(); //声明 按键盘函数
unsigned char nr=30,ny=5,ng=20,dr=30,dy=5,dg=20;//设置灯亮的时间
/******************************************************************/ /* 微秒延时函数 */ /******************************************************************/ void DelayUs(unsigned char us) {
unsigned char uscnt;
uscnt=us>>1; /*12MHz频率*/ while(--uscnt); }
/******************************************************************/ /* 毫秒函数声明 */ /******************************************************************/ void DelayMs(unsigned char ms) {
while(--ms) {
DelayUs(250); DelayUs(250); DelayUs(250); DelayUs(250); } }
void WriteCommand(unsigned char c)
code
十字路口交通灯控制系统
{
RS=0;
DelayMs(3); RW=0;
Data&=0x0f; Data|=c; E=1; E=0; c<<=4;
Data&=0x0f; Data|=c; E=1; E=0; }
/******************************************************************/ /* 写入数据函数 */ /******************************************************************/ void WriteData(unsigned char c) {
RS=0;
DelayMs(3); RS=1; RW=0;
Data&=0x0f; //保留低四位 Data|=c; E=1; E=0; c<<=4;
Data&=0x0f; //保留低四位 Data|=c; E=1; E=0; }
/******************************************************************/ /* 写入字节函数 */ /******************************************************************/ void ShowChar(unsigned char pos,unsigned char c) {
WriteCommand (pos);//写命令 WriteData (c); //写数据 }
/******************************************************************/ /* 1602中对年月日的处理函数声明 */
24
贺州学院本科生毕业论文(设计)
/******************************************************************/ void writ_str(unsigned char dat1,unsigned char dat2) {
shiw=dat2/10; gew=dat2; WriteCommand(dat1); WriteData(0x30+shiw); //液晶在确定的地址开始写两个字节 WriteData(0x30+gew); //液晶在确定的地址开始写两个字节 }
/******************************************************************/ /* 初始化函数 */ /******************************************************************/ void InitLcd() {unsigned char i; DelayMs(5);
WriteCommand(0x28); //display mode 28的为四个数据模式,38的为八个数据模式 WriteCommand(0x06); //显示光标移动位置 WriteCommand(0x0c); //显示开及光标设置 WriteCommand(0x01); //显示清屏
WriteCommand(0x80); //显示年月日入口地址 for(i=1;i<15;i++)
WriteData(tab1[i]); //初始化日期 }
/******************************************************************/ /* 延时子程序 */ /******************************************************************/ void delay(unsigned int s) { while(--s); }
/******************************************************************/ /* 1602显示函数 */ /******************************************************************/ void xianshi() { P2&=0x70; P2|=0x8f; l++; switch(l) //分开来显示 { case 1:ShowChar(0XC6,'0'+second/10); ShowChar(0XC7,'0'+second); break; case 2:ShowChar(0Xc3,'0'+fen/10); ShowChar(0Xc4,'0'+fen); break; case 3:ShowChar(0Xc0,'0'+shi/10);
十字路口交通灯控制系统
ShowChar(0Xc1,'0'+shi); break; case 4:ShowChar(0X8c,xing[day][0]); ShowChar(0X8d,xing[day][1]); ShowChar(0X8e,xing[day][2]); break; case 5:ShowChar(0X81,'0'+nian1/10); ShowChar(0X82,'0'+nian1); break; case 6:ShowChar(0X83,'0'+nian2/10); ShowChar(0X84,'0'+nian2); break; case 7:;ShowChar(0X85,'-'); ShowChar(0X86,'0'+yue/10); ShowChar(0X87,'0'+yue); break; case 9:ShowChar(0X88,'-'); ShowChar(0X89,'0'+ri/10); ShowChar(0X8a,'0'+ri); break; case 10:ShowChar(0XC5,':'); ShowChar(0XC2,':'); l=0;break; } P2&=0x7f; }
/******************************************************************/ /* 1602时间设置显示函数 */ /******************************************************************/ void xianshis() {
ShowChar(0Xc0,'0'+shi/10); ShowChar(0Xc1,'0'+shi); ShowChar(0XC2,':'); ShowChar(0Xc3,'0'+fen/10); ShowChar(0Xc4,'0'+fen); ShowChar(0XC5,':'); ShowChar(0XC6,'0'+second/10); ShowChar(0XC7,'0'+second); ShowChar(0X8c,xing[day][0]); ShowChar(0X8d,xing[day][1]); ShowChar(0X8e,xing[day][2]); ShowChar(0X81,'0'+nian1/10); ShowChar(0X82,'0'+nian1);
26