久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 3177|回復: 2
收起左側

基于51單片機的交通燈原理圖加代碼

[復制鏈接]
ID:325127 發表于 2019-11-7 09:03 | 顯示全部樓層 |閱讀模式
#include<reg51.H> // 對單片機的口進行了定義

#define uint unsigned int

#define uchar unsigned char

uchar code a[10]={0x40,0x79,0x24,0x30,0x19,0x12,0x02,0x78,0x00,0x10};//段碼組合,共陽極

uchar code b[4]={0x01,0x02,0x04,0x08}; //位碼組合

uchar code c[4]={0xcc,0xd4,0x78,0xb8};/P1 綠紅、黃紅、紅綠、紅黃/

//12MHz

//*************************************************************************************

uchar NB=25,DX=30,NBG=25,DXG=15,H=5; /數碼管顯示值設置/

uchar i,k=0,cnt=0,j=0;

sbit K0=P3^4; /支干道通行/

sbit K1=P3^5; /主干道通行/

sbit K4=P3^6; /返回/

sbit K3=P3^2; /設置時間/

sbit K2=P3^3; /緊急剎車/

void delay(uchar t); /定義延時程序/

void key(); /定義鍵盤程序/

void display(); /定義顯示程序/

void settime(); /定義時間設置顯示程序/

//程序初始********************

void init(void)

{

TMOD=0x01; /使用定時器0模式一/

TH0=0x3c; /(65536-5000)/256/

TL0=0xb0; /(65536-5000)%256/

IT0=1; //開中斷

ET0=1;

TR0=1;

EA=1;

EX0=1;

EX1=1;

P1=c[k]; //開啟交通燈

}

//中斷0處理程序**************

void int0(void) interrupt 0 // 通行時間設置

{

EA=0;

P1=0xd8; /紅燈全亮/

for(;?

{

settime();

if(K1==0)       /*P3^6=0設置主干道通行時間*/

{  

      delay(40);

      if(K1==0)

{

         while(!K1)

         {settime();}

DXG++;    /*主干道通行時間加1*/

         if(DXG==100)

         DXG=0;   

      }

}



if(K0==0)        /*P3^5=0設置支干道通行時間*/

{  

         delay(40);

         if(K0==0)

   {

           while(!K0)

           {settime();}

  NBG++;      /*支干道通行時間加1*/

           if(NBG==100)

           NBG=0;  

         }

}



if(K4==0)          /*P3^7=0返回*/

   {  

     delay(40);

  if(K4==0)

  {

     while(!K4)

  {

  }

         k=0;P1=c[k];

  NB=NBG,DX=NBG+H;

     display();

  EA=1;



        break;

  }               

   }

}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
}

//***************中斷1處理程序

void int1(void) interrupt 2 //緊急情況

{

    /*東西南北紅燈亮*/
1
EA=0;

TR0=!TR0; /停止計數/

for(;? /主支干道顯示全為0/

{

P1=0xd8,

P0=a[0];

P2=b[0];

delay(20);



P2=b[1];

delay(20);

P2=b[2];

delay(20);

P2=b[3];

delay(20);



if(K4==0)         /*返回*/
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
{

delay(20);

EA=1;

P1=c[k]; /返回緊急前狀態開始計數/

TR0=!TR0; /重啟計數/

break;

}

}

}

void time1(void) interrupt 1 /交通燈控制程序/

{

TH0=0x3c; /定時50ms/

TL0=0xb0;

cnt++;

if(cnt>=20) /每2050ms=1s自減一*/

{

NB–;

DX–;

cnt=0;

if(NB0||DX0)

{

k++;

if(k>3) /k取0,1,2,3/

k=0;

switch(k)

{

case 0:NB=NBG,DX=NBG+H;j=0;P1=c[k];break;   /*主干道通行顯示綠紅*/

   case 1:NB=H;j=1;P1=c[k];break;        /*主干道黃燈閃爍*/

case 2:NB=DXG+H,DX=DXG;j=0;P1=c[k];break;   /*支干道通行顯示紅綠*/

case 3:DX=H;j=2;P1=c[k];break;        /*支干道黃燈閃爍*/
1
2
3
4
5
6
7
}

}

}

}

void delay(uchar t) //延時程序延時0.1*nms

{

uchar i;

do

{

for(i=0;i<20;i++)

;;;
1
2
3
} while(t–);

}

void settime()

{

P2=b[0],P0=a[(NBG+H)%10]; /*顯示主干道通行時間  */

   delay(20);



P2=b[1],P0=a[(NBG+H)/10];

delay(20);



P2=b[2],P0=a[(DXG+H)%10];  /*顯示支干道通行時間*/

delay(20);



   P2=b[3],P0=a[(DXG+H)/10];

delay(20);
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
}

void key() //鍵盤程序用KO K1模擬一道有車一道無車

{

if(K1==0)        /*主干道有車支干道無車*/

{  

   delay(40);

   if(K1==0)   

   {

      while(!K1)

      {  

        display();

      }

  k=0,P1=c[k];cnt=0;

      NB=NBG, DX=NBG+H;

     display();

   }

}

if(K0==0)         /*支干道有車主干道無車*/

{  

   delay(40);

   if(K0==0)

   {

      while(!K0)

      {

       display();

      }

     k=2,P1=c[k];cnt=0;

      NB=DXG+H,DX=DXG;

        display();

}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
}

}

void display() //顯示程序

{

P2=b[0],P0=a[NB%10]; /由k的不同值進入確定顯示數值/

delay(20);

P2=b[1],P0=a[NB/10];

delay(20);

P2=b[2],P0=a[DX%10];

delay(20);

P2=b[3],P0=a[DX/10];

delay(20);

}

void main(void)

{ //主程序

init();

for(;?

{

display();

key();

//黃燈閃爍程序

while(j==1) /主干道黃燈閃爍/

   {              

   P1=0xdc;         /*給黃燈一高電平黃燈滅*/   

for(i=83;i>0;i--){display();}      /*執行for循環延時*/   

P1=c[k];         /*再給黃燈一低電平黃燈亮*/

for(i=83;i>0;i--){display();}
1
2
3
4
5
6
7
8
9
}

while(j==2)

     {              /*支干道黃燈閃爍*/



P1=0xf8;

for(i=83;i>0;i--){display();}

P1=c[k];

for(i=83;i>0;i--){display();}
1
2
3
4
5
6
7
8
9
10
11
}

}

}



2019072118042053.png
回復

使用道具 舉報

ID:639511 發表于 2019-11-19 09:10 | 顯示全部樓層
緊急模式燈是怎么亮的
回復

使用道具 舉報

ID:775396 發表于 2020-6-12 11:17 | 顯示全部樓層
請問有Proteus仿真文件嗎
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

手機版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 一区二区在线 | 91久久精 | 欧美美女爱爱视频 | 亚洲精品自在在线观看 | 一区二区三区视频在线 | 亚洲成人久久久 | 国产精品久久久久久久一区探花 | 国产福利91精品一区二区三区 | 四季久久免费一区二区三区四区 | 亚洲精品视频免费看 | 久久亚洲国产精品 | 亚洲一区中文字幕 | 成人在线观看免费 | 国产高清精品一区二区三区 | 一级免费毛片 | 国产成人在线一区二区 | 久久一区二区精品 | 欧美黑人体内she精在线观看 | 91精品导航 | 成人免费在线观看视频 | 九九天堂网 | 久久精品69 | 九九成人 | 日韩av在线免费 | 国产一区二区影院 | 精品美女| 国产亚洲精品精品国产亚洲综合 | 九九热这里 | 夜夜夜夜草 | 欧美亚洲一区二区三区 | 青青草视频免费观看 | 99精品欧美一区二区三区综合在线 | 黄网站在线观看 | 操操操操操 | 日韩免费一区二区 | 九一精品 | 欧美精品1区2区3区 精品国产欧美一区二区 | 欧美在线一区二区三区 | 男人的天堂中文字幕 | 亚洲 中文 欧美 日韩 在线观看 | 一区二区三区免费 |