㈠ 單片機C語言紅綠燈程序,要求:數碼管顯示時間倒計時、16*16LED點陣顯示模塊顯示紅綠黃燈、
#include <reg51.h>
#define uint unsigned int
#define uchar unsigned char
#define BLKN 2 //列鎖存器數
sbit G = P1^7; //P1.7為顯示允許控制信號埠
sbit RCLK = P2^0; //P2.0為輸出鎖存器時鍾信號端
sbit SCLR = P2^1; //P2.1為移位寄存器清○端
void delay(uint); //延時函數
uchar data display[32]; //顯示緩存
uchar code BMP[][32]={{16,0,16,0,37,248,36,64,120,64,8,64,16,64,32,64,124,64,0,64,0,64,12,64,112,64,3,252,0,0,0,0},
{16,0,19,240,32,16,41,240,120,16,19,252,32,64,122,72,1,80,0,224,25,80,102,76,0,64,1,192,0,0,0,0},
{4,64,4,64,63,248,4,64,127,252,1,0,31,240,17,16,31,240,17,16,31,240,8,32,16,16,32,8,0,0,0,0}}; //字模表'紅『』綠『『黃』
void main()
{
register uchar i,j;
SCON=0x00; //串口工作模式0:移位寄存器方式
TMOD=0x01; //定時器T0工作方式1:16位方式
P1=0x3f; //P1埠初值:允許接收、鎖存、顯示
TR0=1; //啟動定時器T0
ET0=1; //允許定時器T0中斷
EA=1; //開啟總中斷;
while(1)
{
delay(2000);
for(j=0;j<3;j++)
{
for(i=0;i<32;i++)
{
display[i]=~BMP[j][i];
if (i%2) delay(100);
}
delay(10000);
}
}
}
void delay(uint x)
{
register uchar i,j;
for (i=x;i>0;i--)
for (j=120;j>0;j--);
}
void leddisplay(void) interrupt 1 using 1
{
register uchar i, j=BLKN;
TH0 =(65536-100)/256; //設定顯示屏刷新率每秒60幀
TL0 =(65536-100)%256;
i = P1; //讀取當前顯示的行號
i = ++i & 0x0f; //行號加1,屏蔽高4位
while(j)
{
j--;
SBUF = display[i*BLKN + j]; //送顯示數據
while (!TI);
TI = 0;
} //完成一行數據的發送
G = 1; //消隱(關閉顯示)
P1 &= 0xf0; //行號埠清○
RCLK = 1; //顯示數據打入輸出鎖存器
P1 |= i; //寫入行號
RCLK = 0; //鎖存顯示數據
G = 0; //打開顯示
}
㈡ 求單片機交通燈控制系統設計的程序(最後有中文解析)
要求:
1、一路延時60S,
一路延時40S
(演示時為節省時間,一路延時15S,一路延時10S>>
兩路時間分別用不同的數碼管顯示;
--相同的,即可。
--比如:
--東西綠燈、南北紅燈,兩個方向的數字顯示,都是60s倒計時。
--東西紅燈、南北綠燈,兩個方向的數字顯示,都是40s倒計時。
--兩路時間雖然不同,數碼管顯示應該是相同的,完全可以用一組數碼管顯示。
2.緊急通行控制,如某一方向現為紅燈,通過按鍵強行切換為綠燈,而另一路改為紅燈,延時若干秒(10S)後,恢復原狀態(紅燈)繼續倒數
--不應恢復原狀態。
--比如:
--東西綠燈、南北紅燈,兩個方向的數字顯示,都是60s倒計時。
--在 59s 時,即僅僅剩下 1s 時,被強制轉換了紅綠燈。
--那麼 10s 後,再恢復原狀態 ?
--原狀態,僅僅有 1s,還恢復它干什麼 ?
--這時間,可能,都不夠汽車起步用的。
--恢復原來的半截狀態,顯然不合理。
㈢ 單片機交通燈的實驗項目中,「交通燈每個方向的倒計時可以獨立設置」是什麼意思求助大佬啊!
交通燈一般位於十字路口,每一個方向都有一組相對的交通燈,也就是說共有4個交通燈,每個方向倒計時應該是指兩個路口的紅燈和綠燈時間的倒計時可以分別修改,如一個方向的綠燈30秒,另一個可以設置為60秒,互不影響,而不是只能同時設置為一個值。
㈣ 用51單片機顯示交通燈倒計時原理是什麼
void main()
{
P3 = 0;
P1 = 0;
P2 = 0xff;
initTimer();
TR0=1;
ET0=1;
EA=1;
while(1)
{
switch(state)
{
// 狀態跳轉
case 0:
if(ct == 0)
{
P3=0;P1=0;P2=0xff;
ct = 10;
state = 1;
}
break;
case 1:
if(ct == 0)
{
P3=0;P1=0;P2=0xff;
ct = 2;
state = 2;
}
break;
case 2:
if(ct == 0)
{
P3=0;P1=0;P2=0xff;
ct = 2;
state = 3;
}
break;
case 3:
if(ct == 0)
{
P3=0;P1=0;P2=0xff;
ct = 10;
state = 4;
}
break;
case 4:
if(ct == 0)
{
P3=0;P1=0;P2=0xff;
ct = 2;
state = 5;
}
break;
case 5:
if(ct == 0)
{
P3=0;P1=0;P2=0xff;
ct = 2;
state = 0;
}
break;
default:break;
}
// 執行
switch(state)
{
case 0:
//東西綠燈,南北紅燈,倒計時30秒;
E_G = 1;W_G = 1;S_R = 1;N_R = 1;
break;
case 1:
//數碼管倒計時10秒;
E_G = 1;W_G = 1;S_R = 1;N_R = 1;
display(ct,0);
display(ct,2);
display(ct+2,1);
display(ct+2,3);
break;
case 2:
//東西黃燈,倒計時2秒;
E_Y = 1;W_Y = 1;S_R = 1;N_R = 1;
display(ct,1);
display(ct,3);
break;
case 3:
//南北綠燈,東西紅燈,倒計時30秒;
E_R = 1;W_R = 1;S_G = 1;N_G = 1;
break;
case 4:
//數碼管倒計時10秒;
E_R = 1;W_R = 1;S_G = 1;N_G = 1;
display(ct,1);
display(ct,3);
display(ct+2,0);
display(ct+2,2);
break;
case 5:
//南北黃燈,倒計時2秒;
E_R = 1;W_R = 1;S_Y = 1;N_Y = 1;
display(ct,0);
display(ct,2);
break;
default:break;
}
}
}
㈤ 單片機中斷實驗交通燈的實驗原理
根據圖3.2電路,用單片機的IO口控制4組紅綠黃共12個發光二極體,使發光二極體按照一定規則與次序發光與閃亮以實現模擬交通燈的功能。假設初始狀態為:(南北通行狀態)南北綠燈、東西紅燈(25s);後轉為過度狀態:南北黃燈、東西紅燈(5s);再轉為東西通行狀態:東西綠燈、南北紅燈25(s)。再轉為過渡狀態:東西黃燈、南北紅燈(5s),然後循環往復。
要求採用定時器實現所需要的定時時間。
2、鍵控交通燈。
按一下K1鍵
,保持南北通行狀態;按一下K2鍵
,保持東西通行狀態;按一下K3鍵
,保持正常交通燈。
要求在中斷中進行按鍵處理。
3、具有閃爍的交通燈。
在2的基礎上增加,綠燈最後5s閃爍,即亮0.5S滅0.5S閃爍。
四、實驗原理圖
圖3.2交通燈實驗電路原理圖
圖3.2共有4個按鍵K1、K2、K3、K4,分別連接到單片機P2.0、P2.1、P2.2、P2.3引腳,按鍵後對應引腳為低電平,通過4個二極體D17、D18、D19、D20連接到P3.2(外部中斷0),這是二極體構成的相與電路,即任意按一個鍵能在P3.2上產生一個低電平或下降,作為中斷觸發信號。
五、軟體設計思想
1、定時思想。
採用定時器T0或T1的方式1定時500ms,每500ms中斷進行計數,計數10次即0.5s,計數20次即1s,對秒計數實現所需要的定時時間。
2、亮燈控制思想。
單片機控制燈引腳與燈對應如下,0點亮。
一共有四種狀態S0、S1、S2、S3,
a、南北通行S0狀態:
南北綠燈、東西紅燈,P0=11110111=0xf7,P1=10011110=0x9e;
南北通行S0
b、過渡狀態S1:
南北黃燈、東西紅燈,P0=11111011=0xfb,P1=10101110=0xae;
過渡狀態S1
c、東西通行狀態S2:
東西綠燈、南北紅燈,P0=11111100=0xfc,P1=11110011=0xf3;
東西通行狀態S2
d、過渡狀態S3:
東西黃燈、南北紅燈,P0=11111101=0xfd,P1=01110101=0x75;
過渡狀態S3
設置一個秒計數單元SEC每秒+1,設置兩個控制值變數a,b。