91嫩草国产线免费观看_欧美日韩中文字幕在线观看_精品精品国产高清a毛片_六月婷婷网 - 一级一级特黄女人精品毛片

求教C51單片機控制的交通燈C語言程序,要求有左轉(zhuǎn)和直行兩組燈和數(shù)碼管,有外部中斷可調(diào)整時間加減

首頁 > 交通法規(guī)2021-12-31 17:52:08

用51單片機控制紅黃綠燈按時間亮與滅,都需要什么硬件,c語言怎么編。

只需要定時,和交通燈一樣,不需要數(shù)碼管顯示。我們要做出一個實物,需要什么硬件,C語言怎么編。財富值很多
這個 很容易實現(xiàn),只需要以下元器件即可 :
1、STC8951單片機一塊;
2、最小系統(tǒng)需要的 元件:晶振,復(fù)位電路 ,電阻電容等;
3、紅色和 黃色,綠色LED二極管

具體編程,也很簡單,打開51單片機定時器,定時控制IO 管腳高低電平,就可以實現(xiàn)紅黃綠燈的亮滅。

純屬原創(chuàng),樓主有什么 問題可以追問,望采納

51單片機C語言程序:交通燈系統(tǒng)

交通燈
設(shè)計一個系統(tǒng),實現(xiàn)交通燈功能。具體要求如下:
(1)硬件要求:設(shè)計原理圖,功能包括4個8段數(shù)碼管顯示電路、三個可中斷請求按鍵(復(fù)位、緊急、夜間),12盞燈(東、西、南、北四個方向每個方向紅黃綠各三盞燈)。
(2)軟件要求
a.帶緊急制動系統(tǒng),按鈕按下,所有方向亮紅燈,并顯示STOP;。
b.夜間模式按鈕按下,所有黃燈閃爍,并顯示PASS。
c.實時顯示綠燈黃燈亮的時間。
d.正常情況下,綠燈亮15秒鐘,轉(zhuǎn)黃燈亮3秒鐘并閃爍,再轉(zhuǎn)紅燈。
e.復(fù)位鍵可使系統(tǒng)恢復(fù)到正常模式。
f.要求可以通過按鍵實時切換緊急模式(全紅亮)、夜間模式(黃燈閃爍)、正常模式。

這種問題一般沒人會的,像 CSDN、程序員網(wǎng) 等等有類似的設(shè)計,你可以去看看

c51單片機c語言交通燈的程序

程序出不來

Proteus仿真原理圖:

程序如下:

#include <reg51.h>

#define uchar unsigned char

#define uint  unsigned int

uchar data buf[4];

uchar data sec_dx=20;//東西數(shù)默認(rèn)

uchar data sec_nb=30;//南北默認(rèn)值

uchar data set_timedx=20;

uchar data set_timenb=30;

int n;

uchar data b;//定時器中斷次數(shù)

sbit  k1=P1^6;//定義5組開關(guān)

sbit  k2=P1^7;

sbit  k3=P2^7;

sbit  k4=P3^0;

sbit  k5=P3^1;

sbit Yellow_nb=P2^5;       //南北黃燈標(biāo)志

sbit Yellow_dx=P2^2;       //東西黃燈標(biāo)志

sbit Green_nb=P2^4;

sbit Green_dx=P2^1;

sbit Buzz=P3^7;

bit Buzzer_Indicate;

bit time=0;//燈狀態(tài)循環(huán)標(biāo)志

bit   set=1;//調(diào)時方向切換鍵標(biāo)志

uchar code table[11]={       //共陰極字型碼

0x3f,  //--0

0x06,  //--1

0x5b,  //--2

0x4f,  //--3

0x66,  //--4

0x6d,  //--5

0x7d,  //--6

0x07,  //--7

0x7f,  //--8

0x6f,  //--9

0x00   //--NULL

};

//函數(shù)的聲明部分

void delay(int ms);//延時子程序

void key();//按鍵掃描子程序

void key_to1();//鍵處理子程序

void key_to2();

void key_to3();

void display();//顯示子程序

void logo();   //開機LOGO

void Buzzer();

//主程序

void main()

{

TMOD=0X01;    

TH0=0XD8;

TL0=0XF0;

EA=1;

ET0=1;

TR0=1;

EX0=1;

EX1=1;

logo();

P2=0Xc3;// 開始默認(rèn)狀態(tài),東西綠燈,南北黃燈

sec_nb=sec_dx+5;

while(1)

{       

key(); //調(diào)用按鍵掃描程序

display(); //調(diào)用顯示程序

Buzzer();

}     

}

//函數(shù)的定義部分

void key()    //按鍵掃描子程序

{

if(k1!=1)

{

delay(10);

if(k1!=1)

{

while(k1!=1)

{

key_to1();

for(n=0;n<40;n++)

{ display();}

}

}

}

if(k2!=1)

{

delay(10);

if(k2!=1)

{

while(k2!=1)

{

key_to2();

for(n=0;n<40;n++)

{ display();}

}

}

}

if(k3!=1)

{     

TR0=1;   //啟動定時器

Buzzer_Indicate=0;

sec_nb=set_timenb;  //從中斷回復(fù),仍顯示設(shè)置過的數(shù)值

sec_dx=set_timedx;

if(time==0)

{ P2=0X99;sec_nb=sec_dx+5; }

else { P2=0xC3;sec_dx=sec_nb+5; }

}       

if(k4!=1)

{

delay(5);

if(k4!=1)

while(k4!=1);

set=!set;

}

}

if(k5!=1)

{

delay(5);

if(k5!=1)

{

while(k5!=1)    

key_to3();

}

}

}

void display() //顯示子程序

{    

buf[1]=sec_dx/10; //第1位 東西秒十位

buf[2]=sec_dx%10; //第2位 東西秒個位

buf[3]=sec_nb/10; //第3位 南北秒十位

buf[0]=sec_nb%10; //第4位 南北秒個位       

P1=0xff;                                // 初始燈為滅的

P0=0x00;

P1=0xfe;                              //片選LCD1

P0=table[buf[1]];

delay(1);

P1=0xff;

P0=0x00;

P1=0xfd;                           //片選LCD2

P0=table[buf[2]];

delay(1);

P1=0xff;

P0=0x00;

P1=0Xfb;              //片選LCD3

P0=table[buf[3]];

delay(1);

P1=0xff;

P0=0x00;

P1=0Xf7;

P0=table[buf[0]];               //片選LCD4  

delay(1);

}

void time0(void) interrupt 1 using 1  //定時中斷子程序

{

b++;

if(b==19)                        // 定時器中斷次數(shù)

{      b=0;

sec_dx--;

sec_nb--;

if(sec_nb<=5&&time==0)  //東西黃燈閃       

{  Green_dx=0;Yellow_dx=!Yellow_dx;}                                     

if(sec_dx<=5&&time==1)  //南北黃燈閃       

{  Green_nb=0;Yellow_nb=!Yellow_nb;}                                                     

if(sec_dx==0&&sec_nb==5)

sec_dx=5;

if(sec_nb==0&&sec_dx==5)

sec_nb=5;

if(time==0&&sec_nb==0)

{ P2=0x99;time=!time;sec_nb=set_timenb;sec_dx=set_timenb+5;}

if(time==1&&sec_dx==0)

{P2=0Xc3;time=!time;sec_dx=set_timedx;sec_nb=set_timedx+5;}

}    

}

void key_to1()    //鍵盤處理子程序之+

{

TR0=0;          //關(guān)定時器  

if(set==0)

set_timenb++;    //南北加1S

else

set_timedx++;    //東西加1S

if(set_timenb==100)

set_timenb=1;

if(    set_timedx==100)

set_timedx=1;   //加到100置1

sec_nb=set_timenb ;    //設(shè)置的數(shù)值賦給東西南北

sec_dx=set_timedx;  

}

void key_to2()       //鍵盤處理子程序之-

{

TR0=0;         //關(guān)定時器

if(set==0)

set_timenb--;  //南北減1S

else

set_timedx--;  //東西減1S

if(set_timenb==0)

set_timenb=99;  

if(    set_timedx==0 )

set_timedx=99;   //減到1重置99

sec_nb=set_timenb ;    //設(shè)置的數(shù)值賦給東西南北

sec_dx=set_timedx;  

}

void key_to3()   //鍵盤處理之緊急車通行

{

TR0=0;

P2=0Xc9;

sec_dx=00;

sec_nb=00;

Buzzer_Indicate=1;

}

void int0(void) interrupt 0 using 1  //只允許東西通行

{

TR0=0;

P2=0Xc3;

Buzzer_Indicate=0;

sec_dx=00;

sec_nb=00;

}

void int1(void) interrupt 2 using 1       //只允許南北通行

{

TR0=0;

P2=0X99;

Buzzer_Indicate=0;

sec_nb=00;

sec_dx=00;

}

void logo()//開機的Logo  "- - - -"

{ for(n=0;n<50;n++)

{

P0=0x40;

P1=0xfe;

delay(1);

P1=0xfd;

delay(1);

P1=0Xfb;

delay(1);

P1=0Xf7;

delay(1);

P1 = 0xff;

}

}

void Buzzer()

{

if(Buzzer_Indicate==1)

Buzz=!Buzz;

else Buzz=0;

}

void delay(int ms)            //延時子程序

{

uint j,k;

for(j=0;j<ms;j++)

for(k=0;k<124;k++);

}


#include <reg52.h>
#define uchar unsigned char
#define uint unsigned int

uint t1oc=20; //20*50000us=1s
uint count;

uchar tp[8];
uchar t1,t2,t3,t4;
uchar d1,d2,d3,d4;

//數(shù)碼管顯示代碼
unsigned char code tab[]={
0x3f,0x06,0x5b,0x4f,
0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0x77,0x7c,
0x39,0x5e,0x79,0x71,
0x40,0x80};
//0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
//0 1 2 3 4 5 6 7 8 9 A B C D E F - .

unsigned char code tab_p[]={
0xbf,0x86,0xdb,0xcf,
0xe6,0xed,0xfd,0x87,
0xff,0xef,0xf7,0xfc,
0xb9,0xde,0xf9,0xf1};//帶小數(shù)點的16個數(shù)碼

unsigned char code tab_w[]={
0x7F,0xBF,0xDF,0xEF,0xF7,0xfb,0xfd,0xfe};//位選擇代碼 從右到左

void delay1ms(unsigned int count) //延時1ms
{
unsigned char j;
for(;count>0;count--)
for(j=0;j<120;j++);
}

void led_ex(unsigned char dat,unsigned char N)
{
P0=dat;
P2=0x01<<N;
delay1ms(1);
P2=0x00;
}

void display(unsigned char num,unsigned char wei,bit p)
{
P3=tab_w[wei];
if(!p)
P1=tab_p[num];
else
P1=tab[num];
delay1ms(1);
P1=0x00;
}

//定時器0 50000us 12MHz
void initTimer(void)
{
TMOD=0x1;
TH0=0x3c;
TL0=0xb0;
}

//定時器0 定時中斷
void timer0(void) interrupt 1
{
TH0=0x3c;
TL0=0xb0;
t1oc--;
if(t1oc==0)
{
t1oc=20; //20*50000us=1s
t1--;
if(t1==0)
{
t1=d1;
led_ex(0xFF,0);
}
tp[0]=t1%10;
tp[1]=t1/10;

t2--;
if(t2==0)
{
t2=d2;
led_ex(0x00,1);
}
tp[2]=t2%10;
tp[3]=t2/10;

t3--;
if(t3==0)
{
t3=d3;
led_ex(0x00,2);
}
tp[4]=t3%10;
tp[5]=t3/10;

t4--;
if(t4==0)
{
t4=d4;
led_ex(0x00,3);
}
tp[6]=t4%10;
tp[7]=t4/10;
}
}

void main()
{
unsigned char i;
initTimer();
TR0=1;
ET0=1;
EA=1;

d1= 60;
d2= 30;
d3= 50;
d4= 45;

t1=1;
t2=1;
t3=1;
t4=1;

while(1)
{
for(i=0;i<8;i++)
{
display(tp[i],i,i%2);
}
}
}
如果你設(shè)計的五一單片機C語言交通燈的程序出不來,你肯定是有相應(yīng)的錯誤,編譯也是通過不了的,你應(yīng)該仔細(xì)的閱讀一下自己的程序

51單片機交通燈Proteus仿真和C語言程序。交通燈仿真




懂事電子設(shè)計 Vgz

單片機c語言交通燈的程序。語言交通燈的程序,只是這個程序是向前向后向左向右。

相關(guān)推薦:

車禍撞死人怎么處理(車禍如果撞死了人怎么處理)

交通事故訴訟費有哪些(交通事故法院起訴費用標(biāo)準(zhǔn)多少)

交通違章當(dāng)事人該怎么辦(交通違章不服怎么申訴)

駕照扣幾分需要學(xué)習(xí)(駕駛證扣多少分需要重新學(xué)習(xí))

潮汐車道逆行扣幾分(潮汐車道標(biāo)線是什么)

熱門標(biāo)簽