📄 traffic6.c
字号:
#include <reg51.h>
#define uchar unsigned char
#define uint unsigned int
uint a;
uchar temp,time,flag;
sbit lcd_rw =P2^5;
sbit lcd_rs =P2^6;
sbit lcd_en =P2^4;
#define lcd_data P1//P1作为数据口
sbit NSRed=P3^0;
sbit NSGreen=P3^1;
sbit EWRed=P3^2;
sbit EWGreen=P3^3;
/*一下八行定义液晶和键盘*/
uchar code table[]="1=>E & W BUSY:";
uchar code table1[]="2=>S & N BUSY:";
sbit commonkey=P0^4;
sbit key1=P0^0; //东西繁忙控制
sbit key2=P0^1; //南北繁忙控制
void run1();
void run2();
void delay(uint z)
{
uint i,j;
for(i=z;i>0;i--)
for(j=114;j>0;j--);
}
void write_data(uchar dat)
{
lcd_rs=1;
lcd_rw=0;
lcd_data=dat;
delay(5);
lcd_en=0;
lcd_en=1;
delay(5);
lcd_en=0;
}
void write_com(uchar dat)
{
lcd_rs=0;
lcd_rw=0;
lcd_data=dat;
delay(5);
lcd_en=0;
lcd_en=1;
delay(5);
lcd_en=0;
}
/*液晶初始化*/
void lcd_init()
{
lcd_rw=0;
write_com(0x38);//设置显示模式
write_com(0x38);
write_com(0x08);//显示关闭
write_com(0x01);//显示清屏
write_com(0x06);//指针向右加1
write_com(0x0c);//不显示光标
}
void Time0_init()
{
EA=1;
ET0=1;
TMOD=0x01;
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
}
void Time0_intt() interrupt 1 using 3
{
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
temp++;
if(temp==20)
{
temp=0;
time--;
if(flag==1)
write_com(0x80+14);
if(flag==2)
write_com(0x80+14+0x40);
write_data(time/10+0x30);
write_data(time%10+0x30);
/* if(time==0)
{
flag++;
if(flag==1) time=9;
if(flag==2) time=11;
if(flag==3)
{
time=7;
flag=0;
}
if(flag==0) time=16;
} */
}
}
void main()
{
uchar i;
lcd_init();
Time0_init();
write_com(0x80);
for(i=0;i<14;i++)
write_data(table[i]);
write_com(0x80+0x40);
for(i=0;i<14;i++)
write_data(table1[i]);
commonkey=0;
while(1)
{
if(key1==0)
{
delay(20);
if(key1==0)
{
while(!key1);
flag=1;
while(1)
{
run1();
}
}
}
if(key2==0)
{
delay(5);
if(key2==0)
{
while(!key2);
flag=2;
while(1)
{
run2();
}
}
}
}
}
void run1()
{
EWGreen=0;
NSRed=0;
TR0=1;
time=15;
write_com(0x80+14);
write_data(time/10+0x30);
write_data(time%10+0x30);
while(time);
TR0=0; //东西通,南北可右转,15s
a=40;
while(a--) //开始闪烁7s
{
EWGreen=1;
NSRed=1;
delay(100);
EWGreen=0;
NSRed=0;
delay(100);
}
P3=0XFF;
EWRed=0;
NSRed=0; //以下让东西红灯,南北黄灯6秒
NSGreen=0;
TR0=1;
time=6;
write_com(0x80+14);
write_data(time/10+0x30);
write_data(time%10+0x30);
while(time); //东西止,南北可左转,约8s
TR0=0;
a=25;
while(a--) //开始闪烁4s
{
EWRed=1;
NSRed=1;
NSGreen=1;
delay(100);
EWRed=0;
NSRed=0;
NSGreen=0;
delay(100);
}
P3=0XFF;
/*以下东西和南北转换****/
NSGreen=0;
EWRed=0;
TR0=1;
time=10;
write_com(0x80+14);
write_data(time/10+0x30);
write_data(time%10+0x30);
while(time);
TR0=0;
a=25;
while(a--)
{
NSGreen=1;
EWRed=1;
delay(100);
NSGreen=0;
EWRed=0;
delay(100);
}
P3=0XFF;
NSRed=0;
EWRed=0;
EWGreen=0;
TR0=1;
time=6;
write_com(0x80+14);
write_data(time/10+0x30);
write_data(time%10+0x30);
while(time);
TR0=0;
a=15;
while(a--)
{
NSRed=1;
EWRed=1;
EWGreen=1;
delay(100);
NSRed=0;
EWRed=0;
EWGreen=0;
delay(100);
}
P3=0XFF;
}
void run2()
{
EWGreen=0;
NSRed=0;
TR0=1;
time=10;
write_com(0x80+14);
write_data(time/10+0x30);
write_data(time%10+0x30);
while(time);
TR0=0; //东西通,南北可右转,15s
a=40;
while(a--) //开始闪烁7s
{
EWGreen=1;
NSRed=1;
delay(100);
EWGreen=0;
NSRed=0;
delay(100);
}
P3=0XFF;
EWRed=0;
NSRed=0; //以下让东西红灯,南北黄灯6秒
NSGreen=0;
TR0=1;
time=6;
write_com(0x80+14);
write_data(time/10+0x30);
write_data(time%10+0x30);
while(time); //东西止,南北可左转,约8s
TR0=0;
a=25;
while(a--) //开始闪烁4s
{
EWRed=1;
NSRed=1;
NSGreen=1;
delay(100);
EWRed=0;
NSRed=0;
NSGreen=0;
delay(100);
}
P3=0XFF;
/*以下东西和南北转换****/
NSGreen=0;
EWRed=0;
TR0=1;
time=15;
write_com(0x80+14);
write_data(time/10+0x30);
write_data(time%10+0x30);
while(time);
TR0=0;
a=25;
while(a--)
{
NSGreen=1;
EWRed=1;
delay(100);
NSGreen=0;
EWRed=0;
delay(100);
}
P3=0XFF;
NSRed=0;
EWRed=0;
EWGreen=0;
TR0=1;
time=6;
write_com(0x80+14);
write_data(time/10+0x30);
write_data(time%10+0x30);
while(time);
TR0=0;
a=15;
while(a--)
{
NSRed=1;
EWRed=1;
EWGreen=1;
delay(100);
NSRed=0;
EWRed=0;
EWGreen=0;
delay(100);
}
P3=0XFF;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -