交通灯(LED灯+数码管)

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
Y2=0;
}
else if(flag==45||flag==47||flag==49)
{
P1=0XFF;//主通道亮红灯、次通道黄灯灭三次,每次0.5秒。
R1=0;
Y2=1;
}
}
}
/**************************************************************
#include"reg52.h"
#define uchar unsigned char
#define uint unsigned int
/*定义P1.0~P01.2为主通道,分别为红、黄、绿。定义P1.5~P1.7为次通道,分别为红、黄、绿。*/
sbit R1=P1^0;
sbit R2=P1^5;
{
P1=0XFF;//主通道黄灯亮2S,次通道红灯亮
//主通道黄灯亮三次,每次0.5秒。次通道亮红灯
Y1=0;
R2=0;
}
else if(flag==25||flag==27||flag==29)
{
P1=0XFF;//主通道黄灯灭三次,每次0.5秒。次通道亮红灯
Y1=1;
R2=0;
}
else if(flag>30&&flag<=40)
使用说明:将P1.0~P1.7接到流水灯D1~D7;将P0.0~P0.7接到J182对应O11~018;将P2.0~P2.7接到74HC573输入端J181的对应I11~I18
晶振:11.0592
******************************************************/
delay_xms(1);
P0=duantable[shi2];
P2=0x10;
delay_xms(1);
P0=duantable[ge2];
P2=0x20;
delay_xms(1);
}
void delay_xms(uint xms)//延时xms毫秒
{
uint i,j;
for(i=xms;i>0;i--)
main()
{
EA=1; //开总中断
ET0=1; //定时器T0中断允许
TMOD=0x01; //使用定时器T0的模式2
TH0=(65536-46083)/256; //定时器T0的高8位赋初值
TL0=(65536-46083)%256; //定时器T0的高8位赋初值
TR0=1; //启动定时器T0
while(1)//无限循环等待中断
{
display(shi1,ge1,shi2,ge2);
if(flag<=20)//主通道绿灯亮10s,次通道亮红灯
{
P1=0XFF;
G1=0;
R2=0;
}
else if((flag>20&&flag<=24)||flag==26||flag==28||flag==30)
{
uchar i,j;
Байду номын сангаасi++;
j++;
TH0=(65536-46083)/256; //定时器T0的高8位重新赋初值
TL0=(65536-46083)%256; //定时器T0的高8位重新赋初值
if(i==10)
{
flag++;
i=0;
if(flag==50)//0.5秒记一次数,共25秒
flag=0;
}
if(j==20)
{
j=0;
ds++;
if(ds==25)
ds=0;
if(ds<=10)
{
if(num1==0)
num1=10;
if(num2==0)
num2=15;
shi1=num1/10;
ge1=num1%10 ;
shi2=num2/10;
ge2=num2%10;
num1--;
num2--;
}
uchar flag;//定义0.5秒记一次数的标志位
uchar ds;//定义1秒记一次数的标志位
uchar shi1,ge1,shi2,ge2;//定义主通道、次通道的显示位
uchar num1,num2;
void delay_xms(uint);//申明延时函数
void display(uchar,uchar,uchar,uchar);//申明数码显示函数
else if(ds>10&&ds<=15)
{
if(num1==0)
num1=5;
shi1=num1/10;
ge1=num1%10 ;
shi2=num2/10;
ge2=num2%10;
num1--;
num2--;
}
else if(ds>15&&ds<=20)
{
if(num1==0)
num1=10;
if(num2==0)
/*****************************************************
程序名称:交通灯(LED灯+数码管)
作者:陈善平
指导老师:王韧
时间:2014/7/17
功能:主通道首先放行,绿灯亮10秒后,黄灯开始亮2秒,接着黄灯闪烁3次,每次一秒,接着红灯亮,主通道停止放行;次通道开始放行,绿灯亮5秒后,黄灯开始亮2秒,接着黄灯闪烁3次,每次一秒,次通道停止放行;依次循环。
{
P1=0XFF;//主通道红灯亮、次通道绿灯亮5S
R1=0;
G2=0;
}
else if((flag>40&&flag<=44)||flag==46||flag==48||flag==50)
{
P1=0XFF;//主通道红灯亮、次通道黄灯亮2s
R1=0;//主通道亮红灯、次通道黄灯亮三次,每次0.5秒。
函数功能:定时器T0的中断服务程序
“interrupt”声明函数为中断服务函数
其后的1为定时器T0的中断编号;0表示使用第0组工作寄存器
**************************************************************/
void Time0(void) interrupt 1 using 0
for(j=110;j>0;j--);
}
sbit Y1=P1^1;
sbit Y2=P1^6;
sbit G1=P1^2;
sbit G2=P1^7;
uchar code duantable[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};//共阳极0~9编码所对应的段
uchar code weitable[]={0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80};//共阳极1~8对应的位
num2=5;
shi1=num1/10;
ge1=num1%10 ;
shi2=num2/10;
ge2=num2%10;
num1--;
num2--;
}
else if(ds>20&&ds<=25)
{
if(num2==0)
num2=5;
shi1=num1/10;
ge1=num1%10 ;
shi2=num2/10;
ge2=num2%10;
num1--;
num2--;
}
}
}
void display(uchar shi1,uchar ge1,uchar shi2,uchar ge2)
{
P0=duantable[shi1];
P2=0x01;
delay_xms(1);
P0=duantable[ge1];
P2=0x02;
相关文档
最新文档