標(biāo)題:
單片機(jī)c51交通燈
[打印本頁]
作者:
CZP710430861
時(shí)間:
2018-5-16 21:33
標(biāo)題:
單片機(jī)c51交通燈
很簡(jiǎn)單的一個(gè)單片機(jī)程序
仿真原理圖如下(proteus仿真工程文件可到本帖附件中下載):
0.jpg
(24.85 KB, 下載次數(shù): 17)
下載附件
2018-5-17 02:24 上傳
單片機(jī)源程序如下:
#include<reg51.h>
#include<absacc.h>
#define uchar unsigned char
#define uint unsigned int
#define PA XBYTE[0x0000] //8255 A口地址
#define PB XBYTE[0x0001] //8255 B口地址
#define PC XBYTE[0x0002] //8255 C口地址
#define PS XBYTE[0x0003] //8255 控制口地址
sbit button1=P3^3; //K0 接外部中斷1,緊急車輛通過指示開關(guān)
sbit button2=P1^0; //K1 支道狀態(tài)開關(guān)
sbit button3=P1^1; //K2 主道狀態(tài)開關(guān)
sbit button4=P3^2; //K3 接外部中斷0,調(diào)整紅綠時(shí)長
sbit button5=P0^4;
sbit wei1=P1^4;
sbit wei2=P1^5;
sbit wei3=P1^6;
sbit wei4=P1^7;
sbit wei5=P1^2;
sbit wei6=P1^3;
sbit wei7=P3^0;
sbit wei8=P3^1;
uint num0=0,num1=0;
uint k;
uchar dp1,dp2,dp3,dp4;
uchar code table[]= //共陰七段碼
{
0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f
};
void time0_int() //計(jì)時(shí)器初始化
{
TMOD =0x11; //設(shè)置定時(shí)器0位方式1
TH0=0x3C; //定時(shí)50毫秒,初值為15536=3CB0
TL0=0xB0;
EA=1; //開全局中斷
EX1=1; //開外部中斷1
EX0=1;
IT0=0;
IT1=0; //中斷1為低電平觸發(fā)
ET0=1; //開計(jì)時(shí)器0中斷
TR0=1; //啟動(dòng)計(jì)時(shí)器0
}
void delay(unsigned int z) //延時(shí)程序
{
uint x,y;
for(x=z;x>0;x--)
for(y=110;y>0;y--);
}
void ini() //兩路燈初始狀態(tài)
{
P3=0xff;
P1=0xff;
P2=0xff;
PA=0x21;
PB=0x0C;
}
void display0(uchar unit,uchar decade) //南北方向倒計(jì)時(shí)顯示
{
wei1=0; //顯示低位
P2=table[unit];
delay(2);
wei1=1;
wei2=0; //高位顯示
P2=table[decade];
delay(2);
wei2=1;
wei5=0;
P2=table[unit];
delay(2);
wei5=1;
wei6=0;
P2=table[decade];
delay(2);
wei6=1;
}
void display1(uchar unit,uchar decade) //東西方向倒計(jì)時(shí)
{
wei3=0; //顯示低位
P2=table[unit];
delay(10);
wei3=1;
wei4=0; //顯示高位
P2=table[decade];
delay(10);
wei4=1;
wei7=0;
P2=table[unit];
delay(10);
wei7=1;
wei8=0;
P2=table[decade];
delay(10);
wei8=1;
}
void main()
{
PS=0x80; //8255控制字寫入,A B C口均為輸出,均為方式0
time0_int();
ini();
while(1)
{
while((button1!=0)&&(button2!=0)&&(button3!=0))
{
if((button1!=0)&&(button2!=0)&&(button3!=0)) //南北方向
{
if(num0>0&&num0<540)
{
PA=0x0C; //綠燈亮27秒
dp1=(27-(num0-0)/20)%10;
dp2=(27-(num0-0)/20)/10;
display0(dp1,dp2); //倒計(jì)時(shí)顯示
}
if(num0>=540&&num0<600) //黃燈連續(xù)閃爍3秒
{
PA=0x12;
delay(200);
PA=0x00;
dp1=(3-(num0-540)/20)%10;
dp2=(3-(num0-540)/20)/10;
display0(dp1,dp2); //倒計(jì)時(shí)顯示
}
if(num0>=600&&num0<1200) //紅燈亮30秒
{
PA=0x21;
dp1=(30-(num0-600)/20)%10;
dp2=(30-(num0-600)/20)/10;
display0(dp1,dp2); //倒計(jì)時(shí)顯示
}
if(num0>=1200)num0=0;
}
if((button1!=0)&&(button2!=0)&&(button3!=0)) //東西方向
{
if(num1>0&&num1<600) //紅燈亮30秒
{
PB=0x0C;
dp3=(30-num1/20)%10;
dp4=(30-num1/20)/10;
display1(dp3,dp4); //倒計(jì)時(shí)顯示
}
if(num1>=600&&num1<1140) //綠燈亮27秒
{
PB=0x21;
dp3=(27-(num1-600)/20)%10;
dp4=(27-(num1-600)/20)/10;
display1(dp3,dp4); //倒計(jì)時(shí)顯示
}
if(num1>=1140&&num1<1200) //黃燈連續(xù)閃3秒
{
PB=0x12;
delay(200);
PB=0x00;
dp3=3-(num1-1140)/20;
dp4=0;
display1(dp3,dp4); //倒計(jì)時(shí)顯示
}
if(num1>1200)num1=0;
}
}
}
}
void time0() interrupt 1 //定時(shí)中斷響應(yīng)
{
TH0=0x3C; //定時(shí)1ms初值
TL0=0xB0;
num0++;
num1++;
}
void thing1() interrupt 0 //某一方向放行
{
display0(0,0);
display1(0,0);
while((button1!=0)&&(button2!=0)&&(button3==0)) //南北禁行,東西放行
{
PA=0x21;
PB=0x21;
dp1=8;
dp2=8;
display0(8,8);
display1(8,8);
}
while((button1!=0)&&(button2==0)&&(button3!=0)) //南北放行,東西禁行
{
PA=0x0C;
PB=0x0C;
dp1=8;
dp2=8;
display0(8,8);
display1(8,8);
}
}
void thing2() interrupt 2 //外部中斷器1響應(yīng)_緊急情況_兩道禁止通行
{
PA=0x21;
PB=0x0C;
display0(8,8);
display1(8,8);
}
復(fù)制代碼
所有資料51hei提供下載:
交通燈.rar
(87.73 KB, 下載次數(shù): 37)
2018-5-16 21:33 上傳
點(diǎn)擊文件名下載附件
下載積分: 黑幣 -5
作者:
小軍軍1
時(shí)間:
2019-12-19 14:05
這個(gè)有圖嗎
作者:
小軍軍1
時(shí)間:
2019-12-19 14:24
請(qǐng)問有圖嗎
歡迎光臨 (http://www.torrancerestoration.com/bbs/)
Powered by Discuz! X3.1