#include "NEW_8051.H"
#include<intrins.h>
void sysinit(void);
void display(void);
void keyread();
sbit K_green=P1^6; //绿灯计时
sbit K_red=P1^7; //红灯计时
sbit OUT_red=P3^3; //红灯输出
sbit OUT_green=P3^4; //绿灯输出
unsigned char timea,timeb;
bit k_redbit,k_greenbit;
bit refh595;
bit rcler,gcler;
bit clerr,clerg;
bit startr,startg;
bit gettime_R,gettime_G;
bit dec_R,dec_G;
int time_red;
int time_green;
int rtime,gtime;
void main()
{
sysinit();
while(timea<99);
while(1)
{
keyread();
display();
}
}
void sysinit(void)
{
// SCON =0x58; //选择串口工作方式,打开接收允许
TMOD =0x21; //定时器1工作在方式2,定时器0工作在方式1
// TH1 =0xF3; //实现波特率9600(系统时钟33.8688MHZ)
// TR1 =1; //启动定时器T1
ET1 =0;
TR0=1;
TH0=0xd8;
TL0=0xf0;
ET0=1;
// ES=1; //允许串行口中断
//PS=1; //设计串行口中断优先级
EA =1;
timea=0;
timeb=0;
time_red=0; //单片机中断允许
time_green=0;
K_red=1;
K_green=1;
k_redbit=0;
OUT_red=1;
OUT_green=1;
k_greenbit=0;
refh595=0;
rcler=0;
gcler=0;
clerr=0;
clerg=0;
startr=0;
startg=0;
gettime_R=0;
gettime_G=0;
dec_R=0;
dec_G=0;
}
void temer0(void)interrupt 1
{ WDT_CONTR=0x3C;
TH0=0xd8;
TL0=0xf0;
refh595=1;
timea++;
timeb++;
}
void keyread()
{
if(!K_green&&K_red) startr=1;
if(!K_red&&K_green) startg=1;
///////////////////////////////////////
if(startr)
{ if((k_redbit==0)&&(K_red==0))
{
if(rcler==0)
{
rcler=1;
timea=0;
time_red=0;
}
if(timea>=100)
{
time_red++ ;
timea=0;
}
}
if((K_green==0)&&(K_red==1)&&(time_red>0)&&(k_redbit==0)&&rcler)
{
k_redbit=1;
if(timea>50)
{time_red++;}
rtime=time_red;
timea=0;
}
if((k_redbit==1)&&(K_red==0)&&(K_green))
{ if(!gettime_G)
{ gettime_G=1;
if((gtime>1)&&dec_G){IAP_CONTR=0x20;}
gtime=time_green;
clerg=0;
}
if(clerr==0)
{ clerr=1;
timea=0;
}
if(timea>=100)
{
rtime--;
if(rtime<0){IAP_CONTR=0x20;}
dec_R=1;
gettime_R=0;
timea=0;
}
}
}
////////////////////////////////////////////////////////////////
if(startg)
{ if((k_greenbit==0)&&(K_green==0))
{
if(gcler==0)
{
gcler=1;
timeb=0;
time_green=0;
}
if(timeb>=100)
{
time_green++;
timeb=0;
}
}
if((K_green==1)&&(K_red==0)&&(time_green>0)&&(k_greenbit==0)&&gcler)
{
k_greenbit=1;
if(timeb>50)
{time_green++;}
gtime=time_green;
timeb=0;
}
if((k_greenbit==1)&&(K_green==0)&&(K_red))
{ if(!gettime_R)
{ gettime_R=1;
if((rtime>1)&& dec_R){IAP_CONTR=0x20;}
rtime=time_red;
clerr=0;
}
if(clerg==0)
{ clerg=1;
timeb=0;
}
if(timeb>=100)
{
gtime--;
if(gtime<0){IAP_CONTR=0x20;}
dec_G=1;
gettime_G=0;
timeb=0;
}
}
}
}
daojishi.rar_site:www.pudn.com_红绿灯倒计时
版权申诉
56 浏览量
2022-09-24
17:46:34
上传
评论
收藏 30KB RAR 举报
小波思基
- 粉丝: 72
- 资源: 1万+
最新资源
- 基于QT+C++的智能云监护仪项目,能够实时显示使用者心电、血氧、血压波形及其它各种参数+源码(毕业设计&课程设计&项目开发)
- 基于java开发的app接收硬件端传输的心音信号,具有显示心音波形,发出心音的功能+源码(毕业设计&课程设计&项目开发)
- Python 程序语言设计模式思路-行为型模式:职责链模式:将请求从一个处理者传递到下一个处理者
- 9241703124789646.16健身系统2.apk
- postgresql-16.3-1-windows-x64.exe
- Python 程序语言设计模式思路-结构型模式:装饰器讲解及利用Python装饰器模式实现高效日志记录和性能测试
- 基于YOLOv5和DeepSORT的多目标跟踪仿真与记录
- Python 程序语言设计模式思路-创建型模式:原型模式:通过复制现有对象来创建新对象,面向对象编程
- 卸载软件geek卸载软件geek
- Python 程序语言设计模式思路-创建型模式:单例模式,确保一个类的唯一实例(装饰器)面向对象编程、继承
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈