标题:
51单片机交通灯程及Proteus仿真文件 按键控制东西南北禁止通行等4种模式
[打印本页]
作者:
不悲伤
时间:
2022-12-5 18:27
标题:
51单片机交通灯程及Proteus仿真文件 按键控制东西南北禁止通行等4种模式
“基础篇综合测试”项目1说明
功能要求:
1、仿真开始:东西(马路)与南北(人行道)的所有红、黄、绿灯熄灭,两位数码管不显示。
2、K1按下松手:东西南北禁止通行
东西( 马路 )-- 红灯 -- 常亮
南北(人行道)-- 红灯 -- 常亮
3、K2按下松手:东西南北谨慎通行
东西( 马路 )-- 黄灯 -- 亮0.5秒、灭0.5秒循环闪烁
南北(人行道)-- 黄灯 -- 亮0.5秒、灭0.5秒循环闪烁
要求使用定时器T0完成定时功能
4、K3按下松手:东西(马路)通行,南北(人行道)禁止通行
东西( 马路 )-- 绿灯 -- 常亮
南北(人行道)-- 红灯 -- 常亮
5、K4按下松手:南北(人行道)有行人请求通行
东西( 马路 )-- 红 灯 亮 11 秒 -- 绿灯常亮
南北(人行道)-- 绿灯亮8秒--黄灯亮3秒 -- 红灯常亮
要求使用定时器T1完成定时功能
6、在功能要求5的基础上,使用两位数码管,显示南北(人行道)通行倒计时,即按键K4按下松手,两位数码管显示11、10、09、08、.......、03、02、01、00。
注:仿真电路不允许修改,所有按键均采用外部中断0来检测识别。
仿真电路如下所示:
51hei.gif
(80.09 KB, 下载次数: 32)
下载附件
2022-12-12 03:49 上传
单片机源程序如下:
#include <reg52.h>
#include <intrins.h>
#define uchar unsigned char
#define uint unsigned int
unsigned char code table[] = {0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F};
uchar key_mode=0;
uint t,s,shi,ge,i;
uchar RXD_time=11;
sbit H_RED=P1^0;
sbit H_GREEN=P1^1;
sbit H_YELLOW=P1^2;
sbit L_RED=P1^4;
sbit L_GREEN=P1^5;
sbit L_YELLOW=P1^6;
sbit k1=P2^0;
sbit k2=P2^1;
sbit k3=P2^2;
sbit k4=P2^3;
sbit LED_com1=P2^6;
sbit LED_com2=P2^7;
//sbit DX=P0;
void delay_LED(unsigned int i)
{
unsigned int j;
for(j=0;j<i;j++);
}
void int0() interrupt 0
{
if (k1==0)
{delay_LED(1000);
if(k1==0){
key_mode=1; }
while(!k1);
}
if (k2==0)
{delay_LED(1000);
if(k2==0){
key_mode=2;}
while(!k2)
;}
if (k3==0)
{ delay_LED(1000);
if(k3==0){
key_mode=3; }
while(!k3);
}
if (k4==0)
{delay_LED(1000);
if(k4==0){
key_mode=4; }
while(!k4);
}
}
void display();
void jinxing()
{
if(key_mode==1)
{
H_RED=1;L_RED=1;}
}
void dxnbshenxing()
{
if(key_mode==2)
{ //P1=0;
TR0=1;
H_RED=0;L_RED=0;
//H_RED=1;L_RED=1;
if(i==5)
{
H_YELLOW=~H_YELLOW;
L_YELLOW=~L_YELLOW;
i=0;
}
}
}
void kkk3()
{
if(key_mode==3)
{ TR0=0;
//P1=0;
L_GREEN=1;
H_RED=1;
H_YELLOW=0;
L_YELLOW=0;
}
}
void KKK4()
{
if (key_mode==4)
{
TR0=0;
TR1=1;
if(s<11){L_RED=1;
L_GREEN=0;
H_RED=0; }
if(s<=8) {H_GREEN=1;}
if(s>8){H_GREEN=0;}
if(s<=3) {H_YELLOW=1;}
if(s>3) {H_YELLOW=0;}
if(s>=11)
{
L_GREEN=1;
L_RED=0;
H_RED=1;
if(RXD_time ==0)
{TR1=0;
}
}
}
}
void display()
{
if(key_mode==4)
{ shi=RXD_time/10;
ge=RXD_time%10;
// int k=0;
//for(k=0;k<2;k++)
LED_com1=0;P0=table[shi];delay_LED(100);LED_com1=1; delay_LED(100);
LED_com2=0;P0=table[ge];delay_LED(100);LED_com2=1;delay_LED(100);
}
}
/////////////////////////////////////////////////////////////////
//定时器T0服务函数 ///
//作用:黄灯0.5秒闪烁 ///
/////////////////////////////////////////////////////////////////
void T0_int() interrupt 1
{
//uint i;
TH0=0X18 ;
TL0=0XFC ;
i++;
}
/////////////////////////////////////////////////////////////////
//定时器T1服务函数 ///
//作用:南北(人行道)倒计时定时 ///
/////////////////////////////////////////////////////////////////
void T1_int() interrupt 3
{
uint i;
TH1=0X18 ;
TL1=0XFC ;
i++;
if(i==10)
{ s++;
RXD_time --;
i=0;
}
}
void main(void)
{
IT0=1 ;
EX0=1 ;
TMOD=0X11 ;
TL0 = 0xFC;
TH0 = 0x18;
TF0 = 1;
//TR0 = 1;
ET0=1 ;
TL1 = 0xFC;
TH1 = 0x18;
TF1 = 1;
//TR1 = 1;
ET1=1;
EA=1;
P1=0x00;
while(1){ jinxing();
dxnbshenxing();
kkk3();
KKK4();
display();
}
}
复制代码
51hei.png
(13.37 KB, 下载次数: 30)
下载附件
2022-12-12 03:49 上传
所有资料51hei附件下载:
基础篇综合测试 项目1yzf.zip
(204.81 KB, 下载次数: 48)
2022-12-5 18:26 上传
点击文件名下载附件
51单片机交通灯程序及仿真
下载积分: 黑币 -5
作者:
heicad
时间:
2022-12-13 03:30
好资料,51黑有你更精彩!!!
欢迎光临 (http://www.51hei.com/bbs/)
Powered by Discuz! X3.1