標(biāo)題:
51單片機(jī)加強(qiáng)版紅綠燈代碼 緊急情況/退出緊急情況/確認(rèn)按鈕程序Proteus仿真圖
[打印本頁]
作者:
JN0717
時(shí)間:
2022-5-13 17:20
標(biāo)題:
51單片機(jī)加強(qiáng)版紅綠燈代碼 緊急情況/退出緊急情況/確認(rèn)按鈕程序Proteus仿真圖
仿真原理圖如下(proteus仿真工程文件可到本帖附件中下載)
51hei.gif
(132.59 KB, 下載次數(shù): 55)
下載附件
2022-5-14 02:37 上傳
設(shè)置紅燈時(shí)間一定要大于綠燈
單片機(jī)源程序如下:
#define _MAIN_C
#include "use.h"
#include "main.h"
#include "time.h"
#include "key.h"
bit flag1s;
uchar count1s,NS_time,WE_time;
uchar GreenTime=30,RedTime=35;
uchar index=0;
enum eStaSysterm StaSysterm=NormalRun;
void main()
{
EA=1; //開總中斷
InintTimer0(); //初始化定時(shí)器0
while(1)
{
LEDScan(); //數(shù)碼管即LED掃描
KeyDriver(); //鍵盤驅(qū)動(dòng)掃描
if(flag1s)
{
flag1s=0;
NS_time--; //紅綠燈倒計(jì)時(shí)時(shí)間減
WE_time--;
}
}
}
void InintTimer0()
{
TMOD=0X01;
TH0=0X4C;
TL0=0X00;
ET0=1;
TR0=1;
}
void Timer0() interrupt 1
{
TH0=0XBB;
TL0=0X00;
KeyScan();
if(++count1s<50) return;
count1s=0;
if(StaSysterm==NormalRun) flag1s=1; //非正常運(yùn)行時(shí),不紅綠燈數(shù)值不減一
}
void LEDScan()
{
if(StaSysterm==NormalRun) //正常運(yùn)行
{
if(NS_time==0 || WE_time==0)
{
switch(index) //改變紅綠燈的狀態(tài),狀態(tài)機(jī)
{
case 0:
{
index=1;
NS_time=GreenTime;
WE_time=RedTime;
P2=0X09;
}break;
case 1:
{
index=2;
NS_time=RedTime-GreenTime;
P2=0X0A;
}break;
case 2:
{
index=3;
NS_time=RedTime;
WE_time=GreenTime;
P2=0X24;
}break;
case 3:
{
index=0;
WE_time=RedTime-GreenTime;
P2=0X14;
}break;
default:break;
}
}
Seg_Display(NS_time/10,0);
Seg_Display(NS_time%10,1);
Seg_Display(WE_time/10,2);
Seg_Display(WE_time%10,3);
}
else if(StaSysterm==UrgentRun)
{ //緊急情況運(yùn)行
P2=0x12;
Delayms(200);
P2=0x00;
Delayms(200);
}
else //設(shè)置調(diào)整紅綠燈時(shí)間
{
index=0;
NS_time=0;
WE_time=0; //重新初始化紅綠燈并運(yùn)行
UrgentScan();
}
}
復(fù)制代碼
Keil代碼與Proteus8.8仿真下載:
加強(qiáng)版紅綠燈.7z
(45.53 KB, 下載次數(shù): 52)
2022-5-14 02:37 上傳
點(diǎn)擊文件名下載附件
下載積分: 黑幣 -5
歡迎光臨 (http://www.torrancerestoration.com/bbs/)
Powered by Discuz! X3.1