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

標(biāo)題: 十字路口交通信號燈單片機(jī)資料-源代碼 [打印本頁]

作者: 大叔大嬸1111    時(shí)間: 2018-6-12 17:16
標(biāo)題: 十字路口交通信號燈單片機(jī)資料-源代碼
源程序:
#include<reg51.h>
#define uchar unsigned char
#define uint unsigned int
uchar code table[]={         //共陰極數(shù)碼管碼表
0x3f,0x06,0x5b,0x4f,
0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0x77,0x7c,
0x39,0x5e,0x79,0x71,
0xC9,0xFF,0x40     };//設(shè)置碼,測試碼,不計(jì)時(shí)碼

void delay(uint x);//延時(shí)函數(shù)
void display(uchar,uchar,uchar,uchar);        //數(shù)碼管顯示函數(shù)
void scankeys();        //鍵盤函數(shù)
void traffic();        //交通燈函數(shù)

uchar num,num1,num2,  //1南北 2東西
shi1,ge1,shi2,ge2,
value1,value2,//南北 綠燈時(shí)間 黃燈時(shí)間
value3,value4,//東西 綠燈時(shí)間 黃燈時(shí)間
count1,count2,flag1,flag2; //南北標(biāo)記 東西標(biāo)記        南北設(shè)置標(biāo)記 東西設(shè)置標(biāo)記

void main()
{       
               
                TMOD=0x01;                        //設(shè)置定時(shí)器0位工作模式1(M1,M0位0,1)
                TH0=(65536-45872)/256;         //裝初值11.0592M晶振定時(shí)50ms數(shù)為45872
                TL0=(65536-45872)%256;
                EA=1;                //開總中斷
                ET0=1;                //開定時(shí)器0中斷
                TR0=1;                //啟動定時(shí)器0
                /*初狀態(tài)*/
                value1=40;                 //南北 黃綠燈默認(rèn)值
                value2=5;          
                value3=60;          //東西 黃綠燈默認(rèn)值
                value4=5;

                num1=value1; //南北數(shù)碼管先綠燈時(shí)間
                num2=value2+value1;//東西紅燈時(shí)間  20s

                P1=0x41;//初始狀態(tài):東西紅燈 南北綠燈          20 15

                while(1){
                        if(num==20)           //定時(shí)器1s
                        {
                                num=0;
                                num1--;
                                num2--;
                                traffic();
                                       
                                shi1=num1/10;
                                ge1=num1%10;

                                shi2=num2/10;
                                ge2=num2%10;

                        }
                          scankeys();
                          display(shi1,ge1,shi2,ge2);               
                          
                }

}


/************************紅綠燈主控制程序*******************

說明:        南北方向紅綠燈時(shí)間:  紅燈 15s  綠燈 40s  黃燈        5s
                東西方向紅綠燈時(shí)間:  紅燈 20s  綠燈 60s  黃燈        5s

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

void traffic()
{
        if(num1==0){                                                             //1南北           
                        count1++;                                                     //南北標(biāo)志位
                        if(count1==1){                           //南北方向紅燈15s倒計(jì)時(shí)結(jié)束,
                                P1=0x42;                      //東西方向仍為紅燈,南北方向變?yōu)辄S燈       
                                num1=value2;                                  //黃燈時(shí)間為5s
                        }
                        if(count1==2){                                          //南北方向黃燈5s倒計(jì)時(shí)結(jié)束,
                                P1=0x14;                                          //東西方向變?yōu)榫G燈,南北方向變?yōu)榧t燈
                                num1=value3+value4;                          //南北方法紅燈時(shí)間為15s
                        }
                        if(count1==3){                                          //南北方向紅燈15s倒計(jì)時(shí)結(jié)束,
                                P1=0x41;                                          //東西方向變?yōu)榧t燈,南北方向變?yōu)榫G燈
                                num1=value1;                                  //南北方向綠燈時(shí)間15s
                                count1=0;                                          //重置南北標(biāo)志位               
                        }
        }
        if(num2==0){                                                        // 2東西
                        count2++;                                                   //東西標(biāo)志位
                        if(count2==1){                                           //東西方向紅燈20s倒計(jì)時(shí)結(jié)束,
                                P1=0x14;                                          //東西方向變?yōu)榫G燈,南北方向變?yōu)榧t燈  
                                num2=value3;                                    //東西方向綠燈時(shí)間10s
                        }
                        if(count2==2){                                          //東西方向綠燈10s倒計(jì)時(shí)結(jié)束,
                                P1=0x24;                                          //東西方向變?yōu)辄S燈,南北方向變?yōu)槿詾榧t燈
                                num2=value4;                                  //東西方向黃燈時(shí)間5s
                        }
                        if(count2==3){                                          //東西方向黃燈時(shí)間5s倒計(jì)時(shí)結(jié)束,
                                P1=0x41;                                          //東西方向變?yōu)榧t燈,南北方向變?yōu)榫G燈
                                num2=value1+value2;                   //東西方向紅燈時(shí)間20s
                                count2=0;                                          //重置東西標(biāo)志位
                        }
                                       
        }
}

/************************************數(shù)碼管顯示子函數(shù)********************************************/

void display(uchar shi1,uchar ge1,uchar shi2,uchar ge2)       
{               
                uchar temp;
                temp=P2;
                P2=0xfe;
                P0=table[shi1];
                delay(5);
               
                P2=0xfd;
                P0=table[ge1];
                delay(5);
       
                P2=0xfb;
                P0=table[shi2];
                delay(5);
               
                P2=0xf7;
                P0=table[ge2];
                delay(5);               
}
/*************************************延時(shí)子函數(shù)********************************************/
void delay(uint x)
{
        uint i,j;
        for(i=x;i>0;i--)
                for(j=110;j>0;j--);
}
/*************************4*4矩陣鍵盤功能子函數(shù)********************
說明:



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

void scankeys()  
{
        uchar temp,key;
        P3=0xfe;                        //第一行線
        temp=P3;
        temp=temp&0xf0;
        if(temp!=0xf0)
        {
                delay(10);                   //按鍵去抖
                temp=P3;
                temp=temp&0xf0;
                if(temp!=0xf0)
                {
                                temp=P3;
                                switch(temp)
                                {
                                        case 0xee:        key=0;         break;
                                        case 0xde:        key=1;         break;
                                        case 0xbe:        key=2;         break;
                                        case 0x7e:        key=3;         break;
                                }
                                while(temp!=0xf0)
                                {
                                        temp=P3;
                                        temp=temp&0xf0;
                                }
                        if(key==0)                                    //按鍵1:
                        {                       
                                TR0=~TR0;                             //定時(shí)器取反
                                flag1=~flag1;                   //南北能夠設(shè)置標(biāo)志 0有效
                                flag2=~flag2;          //東西能夠設(shè)置標(biāo)志
                        }
       
                        if(key==1&&flag1==0)           //按鍵2:
                        {       
                                TR0=0;
                                P1=0x44;                           //禁止東南西北車輛 全為紅燈 可以設(shè)置
                                shi1=ge1=shi2=ge2=16;  //數(shù)碼管顯示設(shè)置符號
                        }
       
                        if(key==2&&flag2==0)           //按鍵3:
                        {       
                                TR0=1;
                                num=0;                                    //定時(shí)器初始化
                                P1=0x41;                            //重新開始初狀態(tài)
                                num1=value1;                    //南北數(shù)碼管綠燈時(shí)間
                                num2=value2+value1;    //東西數(shù)碼管紅燈時(shí)間
                                shi1=num1/10;                  
                                ge1=num1%10;
                                shi2=num2/10;
                                ge2=num2%10;
                        }
       
                        if(key==3&&P1==0x44){         //按鍵4:
                                P1=0xff;
                                delay(1000);
                                P1=~P1;
                                shi1=ge1=shi2=ge2=17;
                                P1=0x44;
                        }
       
                }
        }

        P3=0xfd;//第二行線
        temp=P3;
        temp=temp&0xf0;
        if(temp!=0xf0)
        {
                delay(10);
                temp=P3;
                temp=temp&0xf0;
                if(temp!=0xf0){
                        temp=P3;
                        switch(temp)
                        {
                                case 0xed: key=0; break;
                                case 0xdd: key=1; break;
                                case 0xbd: key=2; break;
                                case 0x7d: key=3; break;
                        }
                while(temp!=0xf0)
                {
                        temp=P3;
                        temp=temp&0xf0;
                }
                 
                if(key==0&&P1==0x44){        //按鍵5:

                        num1=value1;
                        if(num2!=159){ //@@@@保證交通合理,紅燈最大值計(jì)時(shí)159s,綠燈不再增加
                                num1++;
                                value1=num1;
                        }

                        shi1=num1/10;
                        ge1=num1%10;

                        num2=value1+value2;//顯示東西紅燈時(shí)間
                        shi2=num2/10;
                        ge2=num2%10;


                }
                if(key==1&&P1==0x44){        //按鍵6:
                        num1=value2;
                        if(num2!=159)
                        {
                                num1++;
                                value2=num1;
                        }

                        shi1=num1/10;
                        ge1=num1%10;
                        num2=value1+value2;//顯示東西紅燈時(shí)間
                        shi2=num2/10;
                        ge2=num2%10;

                }
                if(key==2&&P1==0x44&&value1>3){        //按鍵7:
                        num1=value1;

                        num1--;
                        value1=num1;

                        shi1=num1/10;
                        ge1=num1%10;
                        num2=value1+value2;//顯示東西紅燈時(shí)間
                        shi2=num2/10;
                        ge2=num2%10;

                }
                if(key==3&&P1==0x44&&value2>3){        //按鍵8:  
                        num1=value2;

                        num1--;
                        value2=num1;

                        shi1=num1/10;
                        ge1=num1%10;
                        num2=value1+value2;//顯示東西紅燈時(shí)間
                        shi2=num2/10;
                        ge2=num2%10;

                }
                }
       
        }
   ////||||||||||||||||||

        P3=0xfb;//第三行線
        temp=P3;
        temp=temp&0xf0;
        if(temp!=0xf0)
        {
                delay(10);
                temp=P3;
                temp=temp&0xf0;
                if(temp!=0xf0){
                        temp=P3;
                        switch(temp)
                        {
                                case 0xeb:        key=0; break;
                                case 0xdb:        key=1; break;
                                case 0xbb:        key=2; break;
                                case 0x7b:        key=3; break;
                        }
                while(temp!=0xf0)
                {
                        temp=P3;
                        temp=temp&0xf0;
                }
                if(key==0&&P1==0x44){        //按鍵9:
       
                        num2=value3;
                        if(num1!=159){
                                num2++;
                                value3=num2;
                        }

                        shi2=num2/10;
                        ge2=num2%10;

                        num1=value3+value4;//顯示南北紅燈時(shí)間
                        shi1=num1/10;
                        ge1=num1%10;



                }
                if(key==1&&P1==0x44){        //按鍵10:
                        num2=value4;

                        if(num1!=159){
                                num2++;
                                value4=num2;
                        }

                        shi2=num2/10;
                        ge2=num2%10;
                        num1=value3+value4;//顯示南北紅燈時(shí)間
                        shi1=num1/10;
                        ge1=num1%10;

                }
                if(key==2&&P1==0x44&&value3>3){        //按鍵11:
                        num2=value3;

                        num2--;
                        value3=num2;

                        shi2=num2/10;
                        ge2=num2%10;

                        num1=value3+value4;//顯示南北紅燈時(shí)間
                        shi1=num1/10;
                        ge1=num1%10;


                }
                if(key==3&&P1==0x44&&value4>3){        //按鍵12:
                        num2=value4;

                        num2--;
                        value4=num2;

                        shi2=num2/10;
                        ge2=num2%10;
                        num1=value3+value4;//顯示南北紅燈時(shí)間
                        shi1=num1/10;
                        ge1=num1%10;


                }
                }
       
        }

        P3=0xf7;//第四行線                  2未用
        temp=P3;
        temp=temp&0xf0;
        if(temp!=0xf0)
        {
                delay(10);
                temp=P3;
                temp=temp&0xf0;
                if(temp!=0xf0){
                        temp=P3;
                        switch(temp)
                        {
                                case 0xe7:
                                        key=0;
                                        break;
                                case 0xd7:
                                        key=1;
                                        break;
                                case 0xb7:
                                        key=2;
                                        break;
                                case 0x77:
                                        key=3;
                                        break;
                        }
                while(temp!=0xf0)
                {
                        temp=P3;
                        temp=temp&0xf0;
                }
                if(key==0&&P1==0x44){        //按鍵13:
                        P1=0x41;
                        shi1=ge1=shi2=ge2=18;       

                }
                if(key==1&&P1==0x44){        //按鍵14:
                        P1=0x14;
                        shi1=ge1=shi2=ge2=18;       
                }
                if(key==2&&P1==0x44){//按鍵15:
                       
                }
                if(key==3&&P1==0x44){//按鍵16:
                       
                }
                }
       
        }



}
/************************定時(shí)器T0 中斷子程序*********************************/

void T0_time() interrupt 1        
{
        TH0=(65536-45872)/256;           //定時(shí)50ms
        TL0=(65536-45872)%256;
        num++;
}







歡迎光臨 (http://www.zg4o1577.cn/bbs/) Powered by Discuz! X3.1
主站蜘蛛池模板: 久草精品在线 | 久一久| 日本中文在线 | 日本在线视频一区二区 | 日韩美女爱爱 | 欧美色偷拍 | 欧洲成人免费视频 | 91精品国产乱码久久久久久久久 | 国产午夜精品久久久 | 国产精品久久九九 | 国产日韩精品一区 | caoporn国产| 欧美日韩亚洲国产 | 一区二区免费在线观看 | 亚洲国产一区二区三区四区 | 亚洲天堂日韩精品 | 色黄网站| 久久亚洲一区二区 | 国产精品成人一区二区三区 | 欧美日韩一区在线 | 天天欧美 | 国产精品高清在线 | 午夜视频大全 | 久久久久网站 | 午夜性视频 | 久久精品国产99国产 | xxxxx免费视频 | 色婷婷久久久久swag精品 | 色精品| 国产综合久久久久久鬼色 | 欧美成人性生活 | 国产精品欧美一区二区三区 | 成人在线精品视频 | 亚洲精品一区二区三区蜜桃久 | 青青草华人在线视频 | 亚洲欧美在线观看 | 操久久| 嫩草视频网 | 亚州春色 | 久久极品 | a视频在线观看 |