標(biāo)題:
單片機(jī)交通燈程序
[打印本頁]
作者:
845464672
時間:
2022-11-21 16:36
標(biāo)題:
單片機(jī)交通燈程序
功能:Proteus模擬運(yùn)行,南北亮綠燈,東西亮紅燈,南北綠燈亮8s后,南北綠燈閃爍2s,接著南北黃燈常亮1s,東西依然紅燈,南北黃燈熄滅后,東西亮紂燈,南北亮紅燈,東西綠燈亮8s后,開始閃爍2s,之后黃燈亮1s,然后南北亮綠燈......程序開始循環(huán)。
單片機(jī)源程序如下:
#include<reg51.h>
#define uchar unsigned char
#define uint unsigned int
//東西
sbit GR_1=P1^5; //位定義
sbit YELLOW_1=P1^4;
sbit RED_1=P1^3;
sbit RED_2=P1^0;
sbit YELLOW_2=P1^1;
sbit GREEN_2=P1^2;
//北南
uchar times = 1;
uint sess=0, ses=0; //毫秒 秒
/*******************************************************************************
* 函 數(shù) 名 : delay
* 函數(shù)功能 : 延時函數(shù),i=1時,大約延時10us
*******************************************************************************/
void delay(uint i)
{
while(i--);
}
/*******************************************************************************
* 函 數(shù) 名 : Timer0Init
* 函數(shù)功能 : 定時器0初始化
* 輸 入 : 無
* 輸 出 : 無
*******************************************************************************/
void Timer0Init()
{
TMOD|=0X01;//選擇為定時器0模式,工作方式1,僅用TR0打開啟動。
TH0=0XfC; //給定時器賦初值,定時1ms
TL0=0X18;
ET0=1;//打開定時器0中斷允許
EA=1;//打開總中斷
TR0=1;//打開定時器
}
/*******************************************************************************
* 函 數(shù) 名 : void Timer0() interrupt 1
* 函數(shù)功能 : 定時器0中斷函數(shù)
* 輸 入 : 無
* 輸 出 : 無
*******************************************************************************/
void Timer0() interrupt 1
{
TH0=0XfC; //給定時器賦初值,定時1ms
TL0=0X18;
sess++; //毫秒
if(sess==1000) //1000毫秒 =1s
{
ses++; //s 加1
sess=0; //ms 等于0
if(ses==8)times=5; //亮8s南北綠燈后跳到5語句
if(ses==10)times=2; //亮2s南北閃爍綠燈后跳到2語句
if(ses==11)times=3; //跳到3語句
if(ses==19)times=6; //跳到3語句
if(ses==21)times=4; //跳到4語句
if(ses==22){times=1;ses=0;} //s 等于0 而且回答 跳到1語句
}
}
/*******************************************************************************
* 函 數(shù) 名 :main
* 函數(shù)功能 : 主函數(shù)
*******************************************************************************/
void main()
{
Timer0Init();//定時器初始化
while(1)
{
switch(times) //一開始times=1
{
case 1: GR_1=1; RED_1=0; //東西的紅綠燈
RED_2=1; GREEN_2=0; //南北的紅綠燈
YELLOW_1=1; //東西的黃燈
YELLOW_2=1; //南北的黃燈
break;
case 2:
GREEN_2=1; //南北的綠燈 高電平滅
YELLOW_1=1; //東西的黃燈
YELLOW_2=0; //南北的黃燈
break;
case 3: GR_1=0; RED_1=1; //東西的紅綠燈
RED_2=0; GREEN_2=1; //南北的紅綠燈
YELLOW_1=1; //東西的黃燈
YELLOW_2=1; //南北的黃燈
break;
case 4:
GR_1=1; //南北的綠燈 高電平滅
YELLOW_1=0; //東西的黃燈
YELLOW_2=1; //南北的黃燈
break;
case 5: GR_1=1; RED_1=0; //東西的紅綠燈
RED_2=1; GREEN_2=~GREEN_2; //南北的紅綠燈
YELLOW_1=1; //東西的黃燈
YELLOW_2=1; //南北的黃燈
delay(50000);
break;
case 6: GR_1=~GR_1; RED_1=1; //東西的紅綠燈
RED_2=0; GREEN_2=1; //南北的紅綠燈
YELLOW_1=1; //東西的黃燈
YELLOW_2=1;
delay(50000); //南北的黃燈
break;
}
}
}
復(fù)制代碼
Keil代碼與Proteus8.10版本的仿真下載(注意:不能兼容其他版本 只能用8.10打開):
1 交通燈(新版)定時器.rar
(82.67 KB, 下載次數(shù): 23)
2022-11-21 16:36 上傳
點(diǎn)擊文件名下載附件
交通燈
下載積分: 黑幣 -5
歡迎光臨 (http://www.torrancerestoration.com/bbs/)
Powered by Discuz! X3.1