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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 2111|回復(fù): 0
打印 上一主題 下一主題
收起左側(cè)

單片機紅綠顯示屏切換交通燈仿真程序

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:825397 發(fā)表于 2022-6-16 14:51 | 只看該作者 |只看大圖 回帖獎勵 |倒序瀏覽 |閱讀模式
本交通燈程序貼合實際,除了可以顯示時間外,還可以切換紅綠顯示。原理圖利用595控制數(shù)碼管位,減少IO口的占用。如果想減少595,也可以將雙向同色顯示屏的位接在一起。注意:仿真必須用proteus8.12版本才能打開。!
仿真原理圖如下(proteus仿真工程文件可到本帖附件中下載)


單片機源程序如下:
#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;
        }
        
}


Keil代碼與Proteus仿真下載:
注意:仿真必須用proteus8.12版本才能打開,如果沒有8.12的話就不要下載了
交通燈51單片機.7z (247.58 KB, 下載次數(shù): 36)

評分

參與人數(shù) 1黑幣 +50 收起 理由
admin + 50 共享資料的黑幣獎勵!

查看全部評分

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏2 分享淘帖 頂1 踩
回復(fù)

使用道具 舉報

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

本版積分規(guī)則

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

Powered by 單片機教程網(wǎng)

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 成人性视频在线 | 中文字幕欧美在线观看 | 日韩国产一区二区三区 | 国产精品毛片一区二区在线看 | 欧美精品久久久 | 国产专区在线 | 亚洲视频一区 | 天天综合国产 | 国产精品国产馆在线真实露脸 | 成人免费视频网站 | 男人天堂999 | 久久99精品久久久久久 | 国产精品国产a级 | 国产在线观看一区二区 | 特级毛片 | 久久久精品在线 | 国产一级黄色网 | 日韩欧美中文字幕在线观看 | 午夜小影院 | 亚洲视频一区 | 欧美日韩国产精品一区 | 久久久久国 | 天天爽夜夜爽精品视频婷婷 | 小草久久久久久久久爱六 | 密室大逃脱第六季大神版在线观看 | 日韩国产一区 | 日本一卡精品视频免费 | 欧美成人一区二区三区 | 亚洲精品一二三 | 岛国午夜| 91秦先生艺校小琴 | 美日韩一区二区 | 久久99精品久久久久久国产越南 | 久草日韩| 福利视频网站 | 中文字幕中文字幕 | 色综合99| 国产欧美日韩一区 | 国产精品久久九九 | 动漫www.被爆羞羞av44 | h视频网站在线观看 |