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

標題: 簡單的交通燈,為什么進不了中斷 [打印本頁]

作者: Zach_m    時間: 2018-2-21 22:49
標題: 簡單的交通燈,為什么進不了中斷
#include <reg52.h>

#define u8 unsigned int
#define u16 unsigned char
#define GPIO_dig P0
#define GPIO_traffic P1

sbit LSA=P2^2;
sbit LSB=P2^3;
sbit LSC=P2^4;

sbit RED_1=P1^0;
sbit GREEN_1=P1^1;
sbit RED_2=P1^2;
sbit YELLOW_2=P1^3;
sbit GREEN_2=P1^4;
sbit RED_3=P1^5;
sbit YELLOW_3=P1^6;
sbit GREEN_3=P1^7;
sbit RED_4=P3^1;
sbit GREEN_4=P3^0;

u8 code smgduan[17]=
{0x3f,0x06,0x5b,0x4f,
0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0x77,0x7c,
0x39,0x5e,0x79,0x71};

u8 DisplayData[8];
u8 second;

void delay(u16 z)
{
    while(z--);
}

void DigDisplay()
{
    u8 i;
    for(i=0; i<8; i++)
    {
        switch(i)
        {
            case(0):
                LSA=0;LSB=0;LSC=0; break;//顯示第0位
            case(1):
                LSA=1;LSB=0;LSC=0; break;//顯示第1位
            case(2):
                LSA=0;LSB=1;LSC=0; break;//顯示第2位
            case(3):
                LSA=1;LSB=1;LSC=0; break;//顯示第3位
            case(4):
                LSA=0;LSB=0;LSC=1; break;//顯示第4位
            case(5):
                LSA=1;LSB=0;LSC=1; break;//顯示第5位
            case(6):
                LSA=0;LSB=1;LSC=1; break;//顯示第6位
            case(7):
                LSA=1;LSB=1;LSC=1; break;//顯示第7位            
        }
        GPIO_dig=DisplayData[i];
        delay(100);
        GPIO_dig=0x00;
    }
}

void Time0Init()
{
    TMOD|=0x01;
    TH0=0xFC;
    TL0=0x18;
    EA=1;
    ET0=1;
    TR0=1;
}

void main()
{
    second=1;
    Time0Init();
    while(1)
    {
        if(second==70)
        {
            second=1;
        }
        if(second < 31)
        {
            DisplayData[0] = 0x00;
            DisplayData[1] = 0x00;
            DisplayData[2] = smgduan[(30 - second) % 100 / 10];
            DisplayData[3] = smgduan[(30 - second) %10];
            DisplayData[4] = 0x00;
            DisplayData[5] = 0x00;
            DisplayData[6] = DisplayData[2];
            DisplayData[7] = DisplayData[3];
            DigDisplay();

            GPIO_traffic=0xff;
            RED_4=1;
            GREEN_4=1;

            GREEN_2=0;
            GREEN_1=0;
            RED_3=0;
            RED_4=0;
        }        

        else if(second < 36)
        {
            DisplayData[0] = 0x00;
            DisplayData[1] = 0x00;
            DisplayData[2] = smgduan[(35 - second) % 100 / 10];
            DisplayData[3] = smgduan[(35 - second) %10];
            DisplayData[4] = 0x00;
            DisplayData[5] = 0x00;
            DisplayData[6] = DisplayData[2];
            DisplayData[7] = DisplayData[3];
            DigDisplay();

            GPIO_traffic=0xff;
            RED_4=1;
            GREEN_4=1;

            GREEN_1=0;
            YELLOW_2=0;
            YELLOW_3=0;
            RED_4=0;
        }        

        else if(second < 66)
        {
            DisplayData[0] = 0x00;
            DisplayData[1] = 0x00;
            DisplayData[2] = smgduan[(65 - second) % 100 / 10];
            DisplayData[3] = smgduan[(65 - second) %10];
            DisplayData[4] = 0x00;
            DisplayData[5] = 0x00;
            DisplayData[6] = DisplayData[2];
            DisplayData[7] = DisplayData[3];
            DigDisplay();

            GPIO_traffic=0xff;
            RED_4=1;
            GREEN_4=1;
            
            RED_1=0;
            RED_2=0;
            GREEN_3=0;
            GREEN_4=0;
        }        

        else
        {
            DisplayData[0] = 0x00;
            DisplayData[1] = 0x00;
            DisplayData[2] = smgduan[(70 - second) % 100 / 10];
            DisplayData[3] = smgduan[(70 - second) %10];
            DisplayData[4] = 0x00;
            DisplayData[5] = 0x00;
            DisplayData[6] = DisplayData[2];
            DisplayData[7] = DisplayData[3];
            DigDisplay();

            GPIO_traffic=0xff;
            RED_4=1;
            GREEN_4=1;
            
            YELLOW_2=0;
            RED_1=0;
            YELLOW_3=0;
            GREEN_4=0;   
        }
    }
}

void Time0() interrupt 1
{
    static u16 a;
    TH0=0xFC;
    TL0=0x18;
    a++;
    if(a == 1000)
    {
        a=0;
        second ++;
    }
}



IMG20180221224747.jpg (4.86 MB, 下載次數: 33)

IMG20180221224747.jpg

作者: Zach_m    時間: 2018-2-21 22:50
數碼管不走路
作者: nhwuxi2008    時間: 2018-2-22 08:45
要開中斷的
作者: david888    時間: 2018-2-22 08:46
void main()
{
    second=1;
  //  Time0Init();
不用調用
作者: wulin    時間: 2018-2-22 09:48
因為你使用的數據類型與宏定義數據類型不一致,char是8位,int是16位.
#define u8 unsigned int
#define u16 unsigned char
void Time0() interrupt 1
{
    static u16 a;
    TH0=0xFC;
    TL0=0x18;
    a++;
    if(a == 1000)  //超過255
    {
        a=0;
        second ++;
    }
}




歡迎光臨 (http://www.raoushi.com/bbs/) Powered by Discuz! X3.1