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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 1846|回復: 1
收起左側

交通燈仿真圖和程序

[復制鏈接]
ID:628948 發(fā)表于 2021-11-15 21:25 | 顯示全部樓層 |閱讀模式
#include<reg52.h>
#define uchar unsigned char
#define uint unsigned int
sbit dula=P3^6;          //段選鎖存器鎖存端
sbit wela=P3^7;          //位選鎖存器鎖存端

uchar time1=13;  //初值南北13秒
uchar time2=10;  //初值東西10秒
uchar t1=13,t2=10,chose=0;
uchar time1_2,temp=0,p=0,tab;
uchar shi1,ge1,shi2,ge2,q;
uchar status,key,flag;

//共陰極數(shù)字顯示編碼
uchar code table[]={0x3f,0x06,0x5b,0x4f,
                       0x66,0x6d,0x7d,0x07,
                       0x7f,0x6f};
uchar code wei[]={0xfd,0xfe,0xf7,0xfb,
                                  0xdf,0xef,0x7f,0xbf}; //位選

void delay(uint x)
{
                uint i,j;
                for(i=x;i>0;i--)                        //定時x毫秒
                        for(j=110;j>0;j--);
}
void display(uint ge1,uint shi1,uint ge2,uint shi2)        //數(shù)碼管顯示
{
        //顯示北
        wela=1; //打開位選鎖存器
        P0=wei[0];        //送入位選碼(北個位)
        wela=0; //關閉位選鎖存器
        P0=0;  //消影
        dula=1; //打開段選鎖存器
        P0=table[ge1]; //送入段選
        dula=0;        //關閉段選鎖存器
        delay(1);

        wela=1; //打開位選鎖存器
        P0=wei[1];        //送入位選碼(北十位)
        wela=0; //關閉位選鎖存器
        P0=0;
        dula=1; //打開段選鎖存器
        P0=table[shi1]; //送入段選
        dula=0;        //關閉段選鎖存器
        delay(1);

        //顯示東西
        wela=1; //打開位選鎖存器
        P0=wei[2];        //送入位選碼(東個位)
        wela=0; //關閉位選鎖存器
        P0=0;
        dula=1; //打開段選鎖存器
        P0=table[ge2];
        dula=0;        //關閉段選鎖存器
        delay(1);

        wela=1; //打開位選鎖存器
        P0=wei[3];        //送入位選碼(東十位)
        wela=0; //關閉位選鎖存器
        P0=0;        
        dula=1; //打開段選鎖存器
        P0=table[shi2];
        dula=0;        //關閉段選鎖存器
        delay(1);
}
void key1_6()
{
        //第一個按鍵(南北通行)
        if(key==1)
        {
                TR0=0;  //定時器0停止計時
                P1=0x0c; //南北通行
                p=1;        //數(shù)碼管顯示99
        }
        //第二個按鍵(東西通行)
        if(key==2)
        {
                TR0=0;  //定時器0停止計時
                P1=0x21; //東西通行
                p=1;
        }
        //第三個按鍵(夜間模式)
        if(key==3)
        {
                TR0=0;  //關閉定時器
                p=1;
        }
        //第四個按鍵(減時間)
        if(key==4)
        {
                p=0;                        
                TR0=0;  //定時器0停止計時
                P1=0;        //燈滅
                if(chose==0)  //減南北方向
                {
                        if(time1>0)          //最低減到0
                        {
                                time1--;
                                t1=time1;
                        }
                }
                if(chose==1)  //減東西方向
                {
                        if(time2>0)
                        {
                                time2--;
                                t2=time2;
                        }
                }
        }
        //第五個按鍵(加時間)
        if(key==5)
        {
                p=0;
                TR0=0;  //定時器0停止計時
                P1=0;        //燈滅
                if(chose==0)  //加南北方向
                {
                        if(time1<99)   //最多加到99
                        {
                                time1++;
                                t1=time1;
                        }
                }
                if(chose==1)  //加東西方向
                {
                        if(time2<99)
                        {
                                time2++;
                                t2=time2;
                        }
                }
        }
        //第六個按鍵(加減后確定工作)
        if(key==6)
        {
                if(time1>time2)
                        time1=time2+3;
                else
                        time2=time1+3;
                temp=0;         //計數(shù)值清零
                p=0;
                P1=0x21;  //南北紅燈,東西綠燈        
                TR0=1;  //定時器0開始計時
        }
        //第七個按鍵(切換)
        if(key==7)
        {
                p=0;
                chose=!chose;  
        }
}
void dis()
{
        wela=1;
        P0=0xff;
        wela=0;
}         
void main()
{
        P1=0x21;  //剛開始南北的紅燈亮,東西的綠燈亮
        TMOD=0x01;
        TH0=(65535-50000)/256;
        TL0=(65535-50000)%256;   //初值
        EA=1;           //打開總中斷
        ET0=1;           //定時器0允許中斷
        TR0=1;           //定時器0開始計時
        EX0=1;           //外部中斷0允許位
        IT0=1;           //外部中斷0觸發(fā)方式(下降沿)
        while(1)
        {
                if(flag)
                {
                        switch(status)                   //判斷按鍵
                        {
                                case 0xfe:key=1;break;
                                case 0xfd:key=2;break;
                                case 0xfc:key=3;break;
                                case 0xfb:key=4;break;
                                case 0xfa:key=5;break;
                                case 0xf9:key=6;break;
                                case 0xf8:key=7;break;
                        }
                        key1_6();   //按鍵程序
                        flag=0;
                }        
                if(!p)
                {
                        shi1=time1/10;        //南北十位
                        ge1=time1%10;        //南北個位
                        shi2=time2/10;        //東西十位
                        ge2=time2%10;        //東西個位        
                        display(ge1,shi1,ge2,shi2); //顯示函數(shù)
                }
            if(p)
                        dis();         //不顯示函數(shù)
                if(key==3)          //夜間模式
                {
                        P0=0xff;
                        q=!q;
                        if(q!=0)
                                P1=0x12;
                        else
                                P1=0;
                        delay(200);
                }
        }  
}         
void ext0() interrupt 0
{
        flag=1;
        status=P2;        
}
void timer() interrupt 1   //定時中斷程序
{
        TH0=(65535-50000)/256;
        TL0=(65535-50000)%256;                //重新賦初值
        temp++;
        if(temp==20)   //說明過去了1秒
        {
                temp=0;   //清零,重新加到20
                //東西方向南北方向時間自減
                time1--;
                time2--;
                if(time1>time2)        //南北大于東西
                {
                        time1=time2+3;
                        P1=0x21;        //南北紅燈亮起,東西綠燈亮起
                        if(time2==0&&time1==3)  
                        {
                                time2=3;  //重新賦南北和東西的差值,與南北方向一起倒計時
                                P1=0x11;  //東西黃燈亮起,東西綠燈關閉
                                tab=0;         //標志位
                        }        
                }
                if(time1<time2)        //南北小于東西
                {        
                        time2=time1+3;               
                        P1=0x0c;        //南北綠燈亮起,東西紅燈亮起
                        if(time1==0&&time2==3)  
                        {
                                time1=3;  //重新賦南北和東西的差值,與東西方向一起倒計時
                                P1=0x0a;  //南北黃燈亮起,南北綠燈關閉
                                tab=1;        //標志位
                        }        
                }
                if(!tab)                   //黃燈閃爍三秒
                {
                        if(time1==2&&time2==2)
                                P1=0x01;
                        if(time1==1&&time2==1)
                                P1=0x11;
                }
                if(tab)
                {
                        if(time1==2&&time2==2)
                                P1=0x08;
                        if(time1==1&&time2==1)
                                P1=0x0a;
                }        
                if(time1==0&&time2==0&&tab==0)  //東西倒計時結束
                {
                        time1=t1;
                        time2=t1+3;
                        P1=0x0c;   //東西紅燈,南北綠燈
                }
                if(time1==0&&time2==0&&tab==1)  //南北倒計時結束
                {
                        time1=t2+3;
                        time2=t2;
                        P1=0x21;   //南北紅燈,東西綠燈
                }        
        }        
} 18DF73AD5C62DFFC8C38D87D550072C4.png

回復

使用道具 舉報

ID:628948 發(fā)表于 2021-11-15 21:26 | 顯示全部樓層
希望對大家有用,謝謝
回復

使用道具 舉報

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

本版積分規(guī)則

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

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

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 精品国产一区二区三区久久久蜜月 | 夜色www国产精品资源站 | 91精品一区二区三区久久久久久 | 国产精品一区二区不卡 | 在线免费观看黄视频 | 在线成人av | 99国产精品久久久久 | 亚洲不卡一 | 久久久.com | 亚洲精品美女视频 | 亚洲人免费视频 | 狠狠爱视频| 国产成人精品午夜 | 成人性视频免费网站 | 黄色网址在线播放 | 国产成人综合在线 | 欧美成年人视频在线观看 | 亚洲va国产日韩欧美精品色婷婷 | 国产在线视频一区 | 青青久久久 | 日韩精品在线一区二区 | 97免费在线观看视频 | 国产精品久久久久久吹潮 | 黑人精品 | 在线国产一区二区三区 | 久久伊人亚洲 | 三级成人在线 | 国产做爰 | 久久精品中文字幕 | 国产精品亚洲一区二区三区在线观看 | 亚洲视频在线看 | 激情欧美一区二区三区中文字幕 | 久久综合一区二区 | 欧美一区免费 | 成人在线中文字幕 | 国产在线一区二区 | 一级欧美黄色片 | 天天操天天插天天干 | 久久性av| pacopacomama在线 | 亚洲激情综合 |