欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 1041|回復: 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

回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表