• C51单片机项目:红绿灯


    #include<reg52.h>
    sbit ENLCD=P1^5;
    sbit ENLED=P1^4;
    sbit ADDR3=P1^3;
    sbit ADDR2=P1^2;
    sbit ADDR1=P1^1;
    sbit ADDR0=P1^0;
    
    unsigned char ge1=5,shi1=1,ge2=0,shi2=1,LED1;
    unsigned long cnt=0,n=0,j=0;
    unsigned char LED[]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90};
    void dongxi();
    void nanbei();
    void dongxishu(unsigned char sec);
    void nanbeishu(unsigned char sec);
    
    void delay()
    {
        unsigned int i;
          for(i=0;i<=1000;i++);
    }
    void main()
    {
        ENLCD=0;
        ENLED=0;
        ADDR3=1;
        EA=1;
        ET1=1;
           TMOD=0x10;
           TH1=0xFC;
           TL1=0x66;
           TR1=1;
        while(1){
            if(0<cnt && cnt<=10000)
            {LED1=0x7E;}//0111 1110
            else if(10000<cnt && cnt<=15000)
            {LED1=0xBE;}//0111 1101
            else if(15000<cnt && cnt<=25000)
            {LED1=0xDB;}
            else if(25000<cnt && cnt<=30000)
            {LED1=0xBD;
            cnt=0;}
                
            dongxi(); //东西数码管的显示
            nanbei(); //南北对应数码管的显示
                    
        }
    }
    void nanbei()
    { //8s---0s---2s---0s---8s---0s…………
        static unsigned char a=0,m=10;
        if(n==1000){
            n=0;
            m--;//8s
            nanbeishu(m);
        }
        if(m==0){
            a++;
            if(a==1){      
                m=5;  //2s
            }
            else if(a==2){
                m=15;a=0;  //8s
            }
        }
        
    }
    void dongxi()
    { //8s---0s---2s---0s---8s---0s…………
        static unsigned char a=0,k=15;
        if(j==1000){
            j=0;
            k--; //8s
            dongxishu(k);
        }
        if(k==0){
            a++;
            if(a==1){
                k=10;  //2s
            }
            else if(a==2){
                k=5;a=0;  //8s
            }
        }
        
    }
    
    void dongxishu(unsigned char sec)
    {
        ge1=sec%10;
        shi1=sec/10%10;    
    }
    
    void nanbeishu(unsigned char sec1)
    {
        ge2=sec1%10;
        shi2=sec1/10%10;    
    }
        
    void interrupt_deng()interrupt 3
    {
        static unsigned char i=0;
        TH1 = 0xFC;
        TL1 = 0X66;      //cnt为LED灯的秒数
        cnt++;j++,n++;//j为东西方向数码管的秒数,n为南北方向数码管的秒数
        switch(i)
        {
        case 0: ADDR2=0;ADDR1=0;ADDR0=0;i++;P0=LED[ge1];break;//东西数码管
        case 1: ADDR2=0;ADDR1=0;ADDR0=1;i++;P0=LED[shi1];break;//东西数码管
        case 2: ADDR2=1;ADDR1=0;ADDR0=0;i++;P0=LED[ge2];break;//南北数码管
        case 3: ADDR2=1;ADDR1=0;ADDR0=1;i++;P0=LED[shi2];break;//南北数码管
        case 4:    ADDR2=1;ADDR1=1;ADDR0=0;P0=LED1;i=0;break;    
        } 
    }    

    东西方向一组红黄绿灯,南北方向一组红黄绿灯,倒计时秒数在数码管上显示。

      东西方向 南北方向  
    时间 红(led0) 黄(led1) 绿(led2) 红(led5) 黄(led6) 绿(led7) P0
    10s 亮 15s         亮 10s 01111110    0x7E
    5s       亮 5s   10111110    0xBE
    10s     亮 10s 亮 15s     11011011    0xDB
    5s   亮 5s       11011101    0xBD
  • 相关阅读:
    PHP程序员7小时学会Kotlin 第二小时
    PHP程序员7小时学会Kotlin系列
    PHP程序员7小时学会Kotlin系列
    技术人员如何形成正确的价值观
    景德镇特色的部门级别与权限
    hhvm的正确安装姿势 http://dl.hhvm.com 镜像
    有钱没钱
    SB心结
    优秀的技术Leader
    BaaS模式的开发思路
  • 原文地址:https://www.cnblogs.com/Timenow/p/6790634.html
Copyright © 2020-2023  润新知