|
本交通燈程序貼合實際,除了可以顯示時間外,還可以切換紅綠顯示。原理圖利用595控制數(shù)碼管位,減少IO口的占用。如果想減少595,也可以將雙向同色顯示屏的位接在一起。注意:仿真必須用proteus8.12版本才能打開。!
仿真原理圖如下(proteus仿真工程文件可到本帖附件中下載)
2.jpg (1.3 MB, 下載次數(shù): 36)
下載附件
2022-6-16 15:03 上傳
3.jpg (1.32 MB, 下載次數(shù): 34)
下載附件
2022-6-16 15:03 上傳
單片機源程序如下:
#include<reg52.h>
#include<intrins.h>
#define uchar unsigned char
#define uint unsigned int
sbit duanla=P2^6;
sbit weila =P2^7;
/******控制紅綠燈切換******/
sbit SH_CP=P2^0;
sbit DS=P2^1;
sbit ST_CP=P2^2;
/******控制紅綠顯示屏切換******/
sbit SH_CP1=P2^3;
sbit DS1=P2^4;
sbit ST_CP1=P2^5;
sbit OE=P3^0;
sbit key1=P2^6;//緊急按鈕
sbit key2=P2^7;//回復(fù)運行按鈕
uchar count,time;//中斷次數(shù),時間分段
uchar a,b;//顯示時間變量
/******兩個方向的時間設(shè)置,以1分鐘為總時間******/
uchar Atime_red=30,Atime_green=25,Atime_yellow=5;
uchar Btime_red=30,Btime_green=25,Btime_yellow=5;
//uchar code duanma[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e};
uchar code duanma[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};//共陰數(shù)碼管段碼{0123456789}
void delay(uint z)//延時函數(shù)
{
while(z--);
}
/**************** 向HC595發(fā)送一個字節(jié)函數(shù),控制紅綠黃燈 ******************/
void send_595(uint dat)
{
uchar i;
for(i=0;i<16;i++)
{
dat <<= 1;
DS = CY; //溢出位賦值數(shù)據(jù)輸出端
SH_CP = 1; //移位時鐘
SH_CP = 0;
}
}
/**************** 向HC595發(fā)送一個字節(jié)函數(shù),控制紅綠顯示屏 ******************/
void send_595W(uint dat)
{
uchar i;
for(i=0;i<16;i++)
{
dat <<= 1;
DS1 = CY; //溢出位賦值數(shù)據(jù)輸出端
SH_CP1 = 1; //移位時鐘
SH_CP1 = 0;
}
}
void init()
{
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
TMOD=0X01;
EA=1;
ET0=1;
TR0=1;
SH_CP=0;
ST_CP=0;
SH_CP1=0;
ST_CP1=0;
OE=0;
}
void display_SN_R_EW_G()//南北紅燈-東西綠燈
{
send_595W(0xffbe);
ST_CP1=1;
ST_CP1=0;
P0=duanma[a/10];
delay(500);
send_595W(0xff7d);
ST_CP1=1;
ST_CP1=0;
P0=duanma[a%10];
delay(500);
send_595W(0xebff);
ST_CP1=1;
ST_CP1=0;
P0=duanma[b/10];
delay(500);
send_595W(0xd7ff);
ST_CP1=1;
ST_CP1=0;
P0=duanma[b%10];
delay(500);
}
void display_SN_R_EW_Y()//南北紅—東西黃燈
{
send_595W(0xffbe);
ST_CP1=1;
ST_CP1=0;
P0=duanma[a/10];
delay(500);
send_595W(0xff7d);
ST_CP1=1;
ST_CP1=0;
P0=duanma[a%10];
delay(500);
send_595W(0xffeb);
ST_CP1=1;
ST_CP1=0;
P0=duanma[b/10];
delay(500);
send_595W(0xffd7);
ST_CP1=1;
ST_CP1=0;
P0=duanma[b%10];
delay(500);
}
void display_SN_G_EW_R()//南北綠燈——東西紅
{
send_595W(0xbeff);
ST_CP1=1;
ST_CP1=0;
P0=duanma[a/10];
delay(500);
send_595W(0x7dff);
ST_CP1=1;
ST_CP1=0;
P0=duanma[a%10];
delay(500);
send_595W(0xffeb);
ST_CP1=1;
ST_CP1=0;
P0=duanma[b/10];
delay(500);
send_595W(0xffd7);
ST_CP1=1;
ST_CP1=0;
P0=duanma[b%10];
delay(500);
}
void display_SN_Y_EW_R()//南北黃燈——東西紅
{
send_595W(0xffbe);
ST_CP1=1;
ST_CP1=0;
P0=duanma[a/10];
delay(500);
send_595W(0xff7d);
ST_CP1=1;
ST_CP1=0;
P0=duanma[a%10];
delay(500);
send_595W(0xffeb);
ST_CP1=1;
ST_CP1=0;
P0=duanma[b/10];
delay(500);
send_595W(0xffd7);
ST_CP1=1;
ST_CP1=0;
P0=duanma[b%10];
delay(500);
}
void main()
{
init();
while(1)
{
if(time>=0&&time<25)display_SN_R_EW_G();
else if(time>=25&&time<30)display_SN_R_EW_Y();
else if(time>=30&&time<55)display_SN_G_EW_R();
else if(time>=55&&time<60)display_SN_Y_EW_R();
else
{
}
if(key1==0)
{
delay(20);
if(key1==0)
{
OE=1;//關(guān)閉顯示屏
send_595(0xfff0);//雙方向紅燈
ST_CP=1;
ST_CP=0;
TR0=0;//關(guān)閉定時器
}
while(!key1);//按鍵釋放
}
if(key2==0)
{
delay(20);
if(key2==0)
{
TR0=1;//開啟定時器,重新開始
return;
}
while(!key2);
}
}
}
void timer0() interrupt 1
{
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
count++;
if(count==20)
{
time++;
if(time>=0&&time<25)
{
send_595(0xff5a);
ST_CP=1;
ST_CP=0;
a=Atime_red--;
b=Btime_green--;
}
else if(time>=25&&time<30)
{
send_595(0xf5fa);
ST_CP=1;
ST_CP=0;
Btime_green=25;
a=Atime_red--;
b=Btime_yellow--;
}
else if(time>=30&&time<55)
{
send_595(0xffa5);
ST_CP=1;
ST_CP=0;
Atime_red=30;
Btime_yellow=5;
a=Atime_green--;
b=Btime_red--;
}
else if(time>=55&&time<60)
{
send_595(0xfaf5);
ST_CP=1;
ST_CP=0;
Atime_green=25;
a=Atime_yellow--;
b=Btime_red--;
}
else
{
time=0;
Atime_yellow=5;
Btime_red=30;
}
count=0;
}
}
1.jpg (5.89 MB, 下載次數(shù): 41)
下載附件
2022-6-16 15:03 上傳
Keil代碼與Proteus仿真下載:
注意:仿真必須用proteus8.12版本才能打開,如果沒有8.12的話就不要下載了
交通燈51單片機.7z
(247.58 KB, 下載次數(shù): 36)
2022-6-16 18:11 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
|
評分
-
查看全部評分
|