在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

如何用51單片機實現交通信號燈

麥辣雞腿堡 ? 來源:CSDN博客 ? 作者:J.T.L ? 2023-01-28 17:46 ? 次閱讀

實驗環境

軟件: Keil5+Proteus7

元件(主要):

AT89C51 * 1,

BUTTON * 1,

7SEG-MPX2-CA * 1,

LED-GREEN * 8,

LED-RED * 4,

LED-YELLOW * 4

實驗原理

7SEG-MPX2-CA數碼管

? 7SEG-MPX2-CA數碼管是一個兩位數的陽極數碼管,有10個針腳,通過標號a-dp八個針腳控制,LED燈的顯示,通過標號為1,2的針腳控制顯示的是個位或是十位的數碼管。

? 要通過數碼管顯示具體數字,7SEG-MPX2-CA由于是一個陽極的數碼管,所以需要接收在針腳上接收相應的低電平來顯示,如如果要顯示數字0,則標號a-dp的針腳需要接收1100 0000也就是0xF9的信號,同時如果不設置針腳1,2信號,便會個,十位都顯示相同的數字1,于是需要通過對針腳1設置低電平,針腳2設置為高電平實現個位的發光,相反設置則十位的發光。

? 通過人眼的余暉效應,我們可以設置1,2信號變化,來讓兩個單片機顯示自己想要的不同數字,由于人眼的分辨頻率,遠遠跟不上數碼管閃爍的頻率,雖然是個十位數碼管,不同時間進行閃爍,但在人眼看來仿佛是一起亮起來的。

計時器/計數器

? 定時/計數器T0和T1分別是由兩個8位的專用寄存器組成,即定時/計數器T0由TH0和TL0組成,T1由TH1和TL1組成。此外,其內部還有2個8位的特殊功能寄存器TMOD和TCON,TMOD負責控制和確定T0和T1的功能和工作模式,TCON用來控制T0和T1啟動或停止計數,同時包含定時/計數器的狀態。

? 16位的定時器/計數器實質上就是一個加1計數器,其控制電路受軟件控制、切換。 當定時器/計數器為定時工作方式時,計數器的加1信號由振蕩器的12分頻信號產生,即每過一個機器周期,計數器加1,直至計滿溢出為止。

? 定時器的定時時間與系統的振蕩頻率有關。因一個機器周期等于12個振蕩周期,所以計數頻率fcount=1/12osc。

兩個字節最大數據為65536(十進制),或者0FFFFH。

高字節為TH0=(65536-X)/256,就是除以256后的整數部分。

低字節為TL0=(65536-X)%256,減去高字節后余下的部分。

代碼實現

//名稱: LED模擬交通燈

#include

#define uint unsigned int

#define uchar unsigned char

#define SEG P3

sbit E_RED=P0^0; //東西紅燈

sbit E_YELLOW=P0^1; //東西黃燈

sbit E_GREEN=P0^2; //東西綠燈

sbit N_RED=P0^3; //南北紅燈

sbit N_YELLOW=P0^4; //南北黃燈

sbit N_GREEN=P0^5; //南北綠燈

sbit E_LEFT=P0^6; //南轉東向綠燈亮,北轉西向綠燈亮

sbit N_LEFT=P0^7; //東轉北綠燈亮,西轉南的綠燈亮

sbit btn = P1^0; //外部中斷開關

/*sbit P30=P3^0; //測試led燈是否能亮

sbit P31=P3^1;

sbit P32=P3^2;

sbit P33=P3^3;

sbit P34=P3^4;

sbit P35=P3^5;

sbit P36=P3^6;

sbit P37=P3^7;*/

sbit SCON1 = P2^0; //控制數碼管個位十位顯示

sbit SCON2 = P2^1;

uchar num=10,ge,shi; //定義倒計時初始值

uchar a=0; //定義交通燈種類

uchar count=0; //控制兩位數碼管

uchar flag; //計時器是否達到1s

//定義表格存放共陽極LED的點陣碼

unsigned char code ledTab[]={

0xC0, // 1100 0000 數字0

0xF9, // 1111 1001 數字1

0xA4, // 1010 0100 數字2

0xB0, // 1011 0000 數字3

0x99, // 1001 1001 數字4

0x92, // 1001 0010 數字5

0x82, // 1000 0010 數字6

0xF8, // 1111 1000 數字7

0x80, // 1000 0000 數字8

0x90 // 1001 0000 數字9

};

//type = 1; //操作類型變量

//i = 0; //循環變量

//1毫秒延遲子程序

void Delay_Ms(uint x){

uchar t;

while(x--)

{

for(t=50;t>0;t--);

}

}

int0()interrupt 0

{

TR0=~TR0;

}

//緊急暫停函數

void stop(){

//當按鈕接受到低電平的時候,停止倒計時,所有路口變成紅燈

if(btn==0){

Delay_Ms(1000); //取消抖動

TR0=~TR0; //停止倒計時

N_RED = 0;N_YELLOW = 1;N_GREEN = 1; N_LEFT=1;

E_RED = 0;E_YELLOW = 1;E_GREEN = 1; E_LEFT=1;

}

}

//交通燈切換程序 此程序采用共陽極接法,所以低電平0有效

/*void traffic_light()

{

switch (type)

{

case 1: //南北綠,東西紅

N_RED = 1;N_YELLOW = 1;N_GREEN = 0; N_LEFT=1;

E_RED = 0;E_YELLOW = 1;E_GREEN = 1; E_LEFT=1;

Delay_Ms(5000);

type = 2;

break;

case 2: //南北閃黃燈,東西紅燈

N_RED=1;N_YELLOW = 0; N_GREEN=1; N_LEFT=1;

E_RED=0; E_YELLOW =1; E_GREEN=1; E_LEFT=1;

Delay_Ms(5000);

type = 3;

break;

case 3: //南轉東向綠燈亮,北轉西向綠燈亮

N_RED = 1; N_YELLOW = 1;N_GREEN = 1; N_LEFT=0;

E_RED = 0; E_YELLOW =1; E_GREEN=1; E_LEFT=1;

Delay_Ms(5000);

type = 4;

break;

case 4: //南北閃黃燈,東西紅燈

N_RED = 1;N_YELLOW = 0; N_GREEN = 1; N_LEFT=1;

E_RED = 0; E_YELLOW =1; E_GREEN=1; E_LEFT=1;

Delay_Ms(5000);

type = 5;

break;

case 5: //南北應該亮紅燈,東西要亮綠燈

N_RED = 0;N_YELLOW = 1; N_GREEN = 1; N_LEFT=1;

E_RED = 1; E_YELLOW =1; E_GREEN=0; E_LEFT=1;

Delay_Ms(5000);

type = 6;

break;

case 6: //東西閃黃燈,南北亮紅燈

N_RED = 0;N_YELLOW = 1; N_GREEN = 1; N_LEFT=1;

E_RED = 1; E_YELLOW =0; E_GREEN=1; E_LEFT=1;

Delay_Ms(5000);

type = 7;

break;

case 7: //東轉北綠燈亮,西轉南的綠燈亮

N_RED = 0;N_YELLOW = 1; N_GREEN = 1; N_LEFT=1;

E_RED = 1; E_YELLOW =1; E_GREEN=1; E_LEFT=0;

Delay_Ms(5000);

type = 8;

break;

case 8: //東西閃黃燈,南北亮紅燈

N_RED = 0;N_YELLOW = 1; N_GREEN = 1; N_LEFT=1;

E_RED = 1; E_YELLOW =0; E_GREEN=1; E_LEFT=1;

Delay_Ms(5000);

type = 1;

break;

}

}*/

void T0INTinit() //定時器T0初始化1秒

{

TMOD=0x01;

TH0=(65536-50000)/256;

TL0=(65536-50000)%256;

EA=1;

ET0=1;

TR0=1;

}

void T0INT() interrupt 1

{

TH0=(65536-50000) / 256;

TL0=(65536-50000) % 256;

flag++;

if(flag==20)//當定時到1秒時執行花括號里面的語句

{

flag=0;

num--;

if (num == 0 && a%2 == 0) //控制黃燈倒計時

{

num = 5;

a++;

} else if (num == 0 && a%2 == 1){ //控制紅綠燈倒計時

num =10;

a++;

}

switch (a%8)

{

case 0: //南北綠,東西紅

N_RED = 1;N_YELLOW = 1;N_GREEN = 0; N_LEFT=1;

E_RED = 0;E_YELLOW = 1;E_GREEN = 1; E_LEFT=1;

break;

case 1: //南北閃黃燈,東西紅燈

N_RED=1; N_YELLOW = ~N_YELLOW; N_GREEN=1; N_LEFT=1;

E_RED=0; E_YELLOW = 1; E_GREEN=1; E_LEFT=1;

break;

case 2: //南轉東向綠燈亮,北轉西向綠燈亮

N_RED = 1; N_YELLOW = 1;N_GREEN = 1; N_LEFT=0;

E_RED = 0; E_YELLOW =1; E_GREEN=1; E_LEFT=1;

break;

case 3: //南北閃黃燈,東西紅燈

N_RED = 1;N_YELLOW = ~N_YELLOW; N_GREEN = 1; N_LEFT=1;

E_RED = 0; E_YELLOW =1; E_GREEN=1; E_LEFT=1;

break;

case 4: //南北應該亮紅燈,東西要亮綠燈

N_RED = 0;N_YELLOW = 1; N_GREEN = 1; N_LEFT=1;

E_RED = 1; E_YELLOW =1; E_GREEN=0; E_LEFT=1;

break;

case 5: //東西閃黃燈,南北亮紅燈

N_RED = 0;N_YELLOW = 1; N_GREEN = 1; N_LEFT=1;

E_RED = 1; E_YELLOW = ~E_YELLOW; E_GREEN=1; E_LEFT=1;

break;

case 6: //東轉北綠燈亮,西轉南的綠燈亮

N_RED = 0;N_YELLOW = 1; N_GREEN = 1; N_LEFT=1;

E_RED = 1; E_YELLOW =1; E_GREEN=1; E_LEFT=0;

break;

case 7: //東西閃黃燈,南北亮紅燈

N_RED = 0;N_YELLOW = 1; N_GREEN = 1; N_LEFT=1;

E_RED = 1; E_YELLOW = ~E_YELLOW; E_GREEN=1; E_LEFT=1;

break;

}

}

}

//主程序

void main(){

T0INTinit();

while(1){ //死循環

stop();

SEG=0xff; //消影,不然只顯示一位

shi = num / 10;

ge = num % 10;

switch(count){

//通過余暉效應,雖然是不同時間,但人眼感覺是一起亮的

case 0: SCON1=0; SCON2=1; SEG=ledTab[ge]; break;

case 1: SCON1=1; SCON2=0; SEG=ledTab[shi]; break;

}

count++;

if(count>1) count=0;

//traffic_light(); //不斷執行交通燈切換程序

}

}

成果圖

當倒計時結束時候,進入黃燈閃爍,后在進入紅燈

當按下緊急暫停按鈕后,所有路口變為紅燈,倒計時停止,再次點擊后恢復

原文鏈接:https://blog.csdn.net/qq_47200222/article/details/124027531

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 單片機
    +關注

    關注

    6064

    文章

    44932

    瀏覽量

    647515
  • 信號燈
    +關注

    關注

    2

    文章

    72

    瀏覽量

    26662
收藏 人收藏

    評論

    相關推薦
    熱點推薦

    【作品】交通信號燈

    新手寫的交通信號燈,請指教。
    發表于 07-16 21:33

    交通信號燈

    求用multisim10設計交通信號燈
    發表于 01-18 21:07

    arduino交通信號燈

    交通信號燈:模仿交通信號燈,用到的器材有數碼管,三個LED燈,arduino控制板。(涉及PWM,I/O數字口,數碼管原理)
    發表于 03-03 15:06

    51單片機控制交通信號燈的相關資料分享

    51單片機控制交通信號燈說明:最近接了一個小項目,要在一個十字路口用單片機實現交通信號燈的控制我
    發表于 11-10 08:25

    何用51單片機實現交通信號燈

    51單片機實現交通信號燈1、新建工程項目及文件1.1 新建工程1.2 新建文件2、新建protues電路2.1 新建工程2.2 選擇元器件2.3 連接元器件3、導入文件并仿真3.1
    發表于 11-18 06:31

    單片機控制的交通信號燈

    單片機控制的交通信號燈 介紹一種用8031單片機控制的交通信號燈的硬件結構與軟件
    發表于 03-14 15:16 ?1988次閱讀
    用<b class='flag-5'>單片機</b>控制的<b class='flag-5'>交通信號燈</b>

    交通信號燈的硬件原理圖

    單片機控制的交通信號燈 介紹一種用8031單片機控制的交通信號燈的硬件結構與軟件設計,并給出了其硬件原理圖和MCS-51匯編語言源程序。
    發表于 03-14 15:17 ?6827次閱讀
    <b class='flag-5'>交通信號燈</b>的硬件原理圖

    交通信號燈的硬件原理圖

    交通信號燈的硬件原理圖
    發表于 05-18 21:43 ?5321次閱讀
    <b class='flag-5'>交通信號燈</b>的硬件原理圖

    基于51單片機交通信號燈原理圖

    基于51單片機交通信號燈原理圖,采用STC89C51單片機、二位數碼管倒計時。
    發表于 05-19 15:32 ?102次下載

    單片機交通信號燈控制系統設計

    單片機交通信號燈控制系統設計(局部地區通信網絡英文縮寫)-為基于單片機交通信號燈控制系統設計講解文檔摘要:
    發表于 09-30 11:50 ?20次下載
    <b class='flag-5'>單片機</b>的<b class='flag-5'>交通信號燈</b>控制系統設計

    項目實戰:51單片機控制交通信號燈 PROTEUS 和51單片機教程(附仿真文件+源代碼)

    51單片機控制交通信號燈說明:最近接了一個小項目,要在一個十字路口用單片機實現交通信號燈的控制我
    發表于 11-05 09:50 ?28次下載
    項目實戰:<b class='flag-5'>51</b><b class='flag-5'>單片機</b>控制<b class='flag-5'>交通信號燈</b> PROTEUS 和<b class='flag-5'>51</b><b class='flag-5'>單片機</b>教程(附仿真文件+源代碼)

    基于51單片機交通信號燈設計

    基于51單片機交通信號燈設計這里寫目錄標題基于51單片機交通信號燈設計摘要:一.前言二、實驗
    發表于 11-20 20:21 ?31次下載
    基于<b class='flag-5'>51</b><b class='flag-5'>單片機</b>的<b class='flag-5'>交通信號燈</b>設計

    模擬交通信號燈 PROTEUS 和51單片機教程(附仿真文件+源代碼)

    模擬交通信號燈 PROTEUS 和51單片機教程程序功能:模擬十字路口的交通信號燈,先是綠燈亮,然后黃燈亮三秒后,紅燈亮禁行。開始前PROTEUS仿真:模擬東西通行,南北禁行:模擬東
    發表于 11-23 17:06 ?58次下載
    模擬<b class='flag-5'>交通信號燈</b>  PROTEUS 和<b class='flag-5'>51</b><b class='flag-5'>單片機</b>教程(附仿真文件+源代碼)

    基于51單片機的簡單交通信號燈

    方案介紹一種簡單的基于AT89C51單片機交通信號燈,控制IO口電瓶從而輸出紅黃綠燈,利用延時函數實現紅路燈的計時功能。從而實現各個路口的
    發表于 12-16 15:54 ?15次下載

    基于單片機交通信號燈控制系統設計論文

    單片機交通信號燈系統加 功能串口通信 緊急通知 恢復?
    發表于 05-22 16:12 ?1次下載
    主站蜘蛛池模板: 美女免费视频一区二区三区 | 亚洲欧美日韩特级毛片 | 99久久免费精品国产免费高清 | 国产精品一区二区三区免费视频 | 色综合久久98天天综合 | 日韩精品网址 | 日本一区二区在线视频 | 女人成午夜大片7777在线 | 四虎精品久久久久影院 | 69日本xxxxxxxxx78 69日本xxxxxxxxx96 | 酒色影院 | 在线视频这里只有精品 | 色综合久久天天综合绕观看 | 免费在线播放毛片 | 最新亚洲情黄在线网站 | 日本三级香港三级人妇99视 | 午夜刺激爽爽视频免费观看 | 在线观看免费视频资源 | 看片国产 | 欧美黄色tv | 一区二区三区久久 | 久久夜色精品国产亚洲噜噜 | 8888奇米四色在线 | 日本视频免费高清一本18 | 男女在线视频 | 91一区二区三区四区五区 | 婷婷视频网站 | 天堂视频在线视频观看2018 | 亚洲天天做日日做天天欢毛片 | 不卡一级毛片免费高清 | 午夜影视啪啪免费体验区入口 | 日本一本一道久久香蕉免费 | 色噜噜狠狠成人中文小说 | 黄.www| 成人欧美一区二区三区黑人3p | 久久精品免费观看视频 | 好硬好湿好爽再深一点h视频 | 天堂在线免费视频 | 你懂得国产 | 精品一区二区三区在线视频 | 免费成人黄色 |