码迷,mamicode.com
首页 > 其他好文 > 详细

C51单片机项目:红绿灯

时间:2017-05-01 00:27:40      阅读:304      评论:0      收藏:0      [点我收藏+]

标签:lcd   center   table   sbit   51单片机   rup   log   led   led灯   

#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

C51单片机项目:红绿灯

标签:lcd   center   table   sbit   51单片机   rup   log   led   led灯   

原文地址:http://www.cnblogs.com/Timenow/p/6790634.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!