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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 948|回復: 0
打印 上一主題 下一主題
收起左側

交通燈

[復制鏈接]
跳轉到指定樓層
樓主
ID:439620 發表于 2018-12-4 21:54 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
#include <reg52.h>
#define uint unsigned int
#define uchar unsigned char
void display(void);
void delay(unsigned int m);
void InitTimer0(void);       

sbit s1 = P1^0;        //啟動按鍵
sbit s2 = P1^1;        //應急車
sbit s3 = P1^2;        //夜間模式
sbit s4 = P1^3;        //主干道通車時間加1,最大只能加到90秒
sbit s5 = P1^4;        //主干道通車時間減1,最大只能減到3秒
sbit s6 = P1^5;        //次干道通車時間加1,最大只能加到90秒
sbit s7 = P1^6;        //次干道通車時間減1,最大只能加到3秒

sbit r1 = P3^7;        //次綠
sbit h1 = P3^6;        //次黃
sbit g1 = P3^5;        //次紅

sbit r2 = P3^4;        //主綠
sbit h2 = P3^3;        //主黃
sbit g2 = P3^2;        //主紅

unsigned char code SMG[]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90,0xBF};        //送段碼0-9和"-"

unsigned char disp[]={0,6,7,5};
unsigned char disp1[]={10,10,10,10};
unsigned char disp2[]={10,10,10,10};
unsigned char dispw[]={0x01,0x02,0x10,0x20};//位選

unsigned char Num=0,num1=1,a=1;//定時器計數

char g=57,gg=60,c=57,d=27;
          
/*************顯示程序**************/
void display(void)                  
{
          unsigned char i;
          for(i=0;i<4;i++)
         {
                P0=SMG[disp[i]];
                P2=dispw[i];
                delay(100);         P0=0xff;P2=0x00;
         }
}

void display1(void)                  
{
          unsigned char i;
          for(i=0;i<4;i++)
         {
                P0=SMG[disp1[i]];
                P2=dispw[i];
                delay(100);        P0=0xff;P2=0x00;
         }
}
  void display2(void)                  
{
          unsigned char i;
          for(i=0;i<4;i++)
         {
                P0=SMG[disp2[i]];
                P2=dispw[i];
                delay(100);           P0=0xff;P2=0x00;
                disp2[0]=d%10;
                disp2[1]=d/10;
                disp2[2]=c%10;
                disp2[3]=c/10;
         }
}

/*************延時程序**************/                                                                                         
void delay(unsigned int m)                 
{
          while(--m);
}

/************定時器初始化****************/

void InitTimer0(void)
{
    TMOD = 0x11;
    TH0 = 0x3C;
    TL0 = 0x0B0;
        TH1 = 0x3C;
    TL1 = 0x0B0;
    EA = 1;
    ET0 = 1;
        ET1 = 1;
    TR0 = 0;
        TR1 = 0;
       
}

/*************定時器0*****************/

void Timer0Interrupt(void) interrupt 1        using 1           // 定時器0中斷
{
    TH0 = 0x3C;
    TL0 = 0x0B0;
        Num++;       
        if(Num==10)
                h1=1;  
        if(Num==10)
                h2=1;
        if(Num==20)
        {        Num=0;
                g--;gg--;
                if(g>0)           //主綠 次紅
                {
                        r1=1;
                        h1=1;
                        g1=0;
                        r2=0;
                        h2=1;
                        g2=1;
                        disp[2]=g%10;
                        disp[3]=g/10;
                        disp[0]=gg%10;
                        disp[1]=gg/10;                       
                }
                else if(g>-3 && g<=0)  //主黃 次紅
                {       
                        r1=1;
                        h1=0;
                        g1=1;
                        r2=0;
                        h2=1;
                        g2=1;
                        disp[2]=(g+3)%10;
                        disp[3]=(g+3)/10;
                        disp[0]=(gg)%10;
                        disp[1]=(gg)/10;
                }
                else if(gg>-d && gg<=0)         //主紅 次綠
                {
                        r1=0;
                        h1=1;
                        g1=1;
                        r2=1;
                        h2=1;
                        g2=0;
                    disp[2]=(g+d+6)%10;
                        disp[3]=(g+d+6)/10;       
                        disp[0]=(gg+d)%10;
                        disp[1]=(gg+d)/10;
                       
                                       
                }
                else if(gg>=-(d+3) && g<=-d) //主紅 次黃
                {
                        r1=0;
                        h1=1;
                        g1=1;
                        r2=1;
                        h2=0;
                        g2=1;
                        disp[2]=(g+d+6)%10;
                        disp[3]=(g+d+6)/10;
                        disp[0]=(gg+d+3)%10;
                        disp[1]=(gg+d+3)/10;                       
                        if(gg<=-(d+3))
                        {        g=c;gg=c+3;        }                               
                }
        }
}

void Timer0Interrupt1(void) interrupt 3        using 2           //定時器1 中斷
  {       
                    TH1 = 0x3C;
            TL1 = 0x0B0;
                num1++;       
                if(num1==10)
                {h1=1;         h2=1;}
                if(num1==20)
                { num1=0;h1=0; h2=0; }
  }          

/*************鍵掃描程序**************/
unsigned char keyscan()
{
unsigned char tmp;                         //列號,行號
P1=0xff;               //發全行0掃描碼
if((P1&0xff)!=0xff)     //若有鍵按下
  {
   delay(1000);          // 延時去抖   
   if((P1&0xff)!=0xff)          //有鍵按下
       {
                tmp=(P1&0xff);
            do{}while((P1&0xff)!=0xff);
                tmp=~tmp;
                if (tmp==128)
                return (0);                  
        return (tmp);                         //還回鍵值
          }                        
  }                                                                                                                       
   return (0);                                //無鍵按下,還回0
}

/*************主函數***************/
void main()
{          
     unsigned char v;
                 while(1)
                {
                        v=keyscan();
                        if(v==1)
                                break;
                    P2=0x01;
                         P0=0x0c;
                }
         InitTimer0();//定時器初始化
                    
         if(v==1)
           {        
         
                 while(1)
                   {
                       
                      switch (v)
                   {  

                             case 1: P3=0xff; g1=0;r2=0;  TR0=1;TR1=0;
                                         if (a==0)
                                         {g=c;gg=c+3;a=1;}
                                          while (v==1||v==0)
                                          {
                                                display();
                                                v=keyscan();                                                          
                                        }          
                                break;
                           case 2:  
                                            P3=0xff; TR0=0;TR1=0;
                                        while (v==2||v==0)
                                          {       
                                                r1=0;r2=0;
                                            v=keyscan();display1();                                                                 
                                        }
                                           break;
                           case 4:  
                                            P3=0xff; TR0=0; TR1=1;        h1=0;h2=0;
                                        while (v==4||v==0)
                                          {                                                       
                                            v=keyscan();display1();                                                                 
                                        }
                                           break;
                                case 8: TR1=0;
                                   while (v==8||v==0)
                                    {
                                          TR0=0;a=0;       
                                          while (v==8)
                                          {
                                            c++;
                                                if (c>90)
                                                c=90;v=keyscan();display2();       
                                          }
                                          v=keyscan();display2();
                                        }break;
                                case 16: TR1=0;
                                   while (v==16||v==0)
                                    {
                                          TR0=0;a=0;       
                                          while (v==16)
                                          {
                                            c--;
                                                if (c<3)
                                                c=3;v=keyscan();display2();       
                                          }
                                          v=keyscan();display2();
                                        }break;       
                                case 32:  TR1=0;
                                   while (v==32||v==0)
                                    {
                                          TR0=0;a=0;       
                                          while (v==32)
                                          {
                                            d++;
                                                if (d>90)
                                                d=90;v=keyscan();display2();       
                                          }
                                          v=keyscan();display2();
                                        }break;
                                case 64:  TR1=0;
                                   while (v==64||v==0)
                                    {
                                          TR0=0;a=0;       
                                          while (v==64)
                                          {
                                            d--;
                                                if (d<3)
                                                d=3;v=keyscan();display2();       
                                          }
                                          v=keyscan();display2();
                                        }break;                               
                          
                   }
                  
                   }
         }
}

交通燈.rar

85.42 KB, 下載次數: 7, 下載積分: 黑幣 -5

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

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 欧美日韩中文字幕 | 久久久精彩视频 | 国产精品九九九 | 日韩在线免费视频 | 国产99久久久久 | 精品国产乱码久久久久久闺蜜 | 国产激情视频网站 | 美女人人操 | 国产日韩在线观看一区 | 日本一区二区高清视频 | 国产男女视频网站 | 91精品国产综合久久精品 | 天天艹逼网 | 狠狠干天天干 | 国产一区不卡 | 国产午夜亚洲精品不卡 | 色毛片 | 亚洲综合精品 | 欧美视频在线看 | 欧美成人a | 欧美在线网站 | 成人三级影院 | 九九热在线观看 | 精品国产乱码久久久久久88av | 久久久久久久久淑女av国产精品 | 九九色综合| 日韩一区二区三区在线视频 | 成人av网站在线观看 | 亚洲av毛片成人精品 | 国产一区二区三区在线免费观看 | 久久精品成人 | 成人在线视频免费看 | 亚洲v区 | 日韩视频一区 | 男人的天堂亚洲 | 亚洲国产精品视频 | 久久久精品一区二区三区 | 国产精品mv在线观看 | 日韩成人免费视频 | 99视频在线播放 | 亚洲在线一区 |