河南理工大学微机原理与单片机实验、课程设计交通灯.doc
文本预览下载声明
实验四 交通灯实验
一、实验目的
⑴按键、数码管、发光二极管综合应用编程技术
⑵数据存储于EEPROM的技术(也可以不使用)
⑶定时中断技术
⑷按键中断技术
二、实验实现的功能
⑴通过1、2、3、4号按键对每个路口(主干道、次干道)的绿灯时间,及黄灯时间的设定。
⑵紧急按键功能,当按下6键时,所有路口变成红灯,相当于交警指挥特殊车辆通过。再按6键,恢复正常显示。
三、系统硬件设计
四、系统软件设计
#includestc.h
bit i=0;
unsigned char b;
sbit L0=P0^0;
sbit L1=P0^1;
sbit L2=P0^2;
sbit L3=P0^3;
sbit L5=P0^5;
sbit L6=P0^6;
sbit L7=P0^7;
void Delay300ms() //300ms延时
{
unsigned char i, j, k;
i = 13;
j = 156;
k = 83;
do
{
do
{
while (--k);
} while (--j);
} while (--i);
}
void Delay500us() //500ms延时
{
unsigned char i, j;
i = 6;
j = 93;
do
{
while (--j);
} while (--i);
}
Scan_Key() //按键扫描
{
unsigned char FLAG=0;
P3=P3|0x80;
P3=P30xbf;
if(L5==0)
{FLAG=1;}
if(L6==0)
{FLAG=2;}
if(L7==0)
{FLAG=3;}
P3=P3|0x40;
P3=P30x7f;
if(L5==0)
{FLAG=4;}
if(L6==0)
{FLAG=5;}
if(L7==0)
{FLAG=6;}
return FLAG;
}
main()
{
unsigned char a[]={0xbf,0x86,0xdb,0xcf,0xe6,0xed,0xfd,0x87,0xff,0xef};
unsigned char b[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
unsigned char v=9,w=5,y=9,z=5,n,g,x,s,t,m,q;
P1M0=0xff; //设置红绿灯时间
P1M1=0x00;
P3=0xff;
while(1)
{n=Scan_Key();
if(n==1)
v--;
if(n==2)
w--;
if(n==3)
y--;
if(n==4)
z--;
if(n==5)
{
Delay300ms();
break;
}
for(g=0;g100;g++) //显示调节时间
{
L3=0;L2=1;L1=1;L0=1;
P1=a[v];
Delay500us();
P1=0x00;
Delay500us();
L3=1;L2=0;L1=1;L0=1;
P1=b[w];
Delay500us();
P1=0x00;
Delay500us();
L3=1;L2=1;L1=0;L0=1;
P1=a[y];
Delay500us();
P1=0x00;
Delay500us();
L3=1;L2=1;L1=1;L0=0;
P1=b[z];
Delay500us();
P1=0x00;
Delay500us();
}
}
TMOD=0x10;
TH1=0xd8;
TL1=0xf0;
ET1=1;
EA=1;
TR1=1;
n=Scan_Key();
m=0;t=0;
for(;n==0;) //无按键按下开始倒计时
{
if(m==0t==0) //左侧数码管不起作用,右侧数码管计时
{ x=v;
s=w;
for(;s=0;)
{
for(;x=0;)
{n=Scan_Key();
if(n==6) //6键按下视为紧急情况,红灯亮
wh
显示全部