標(biāo)題: 單片機(jī)循環(huán)點亮LED燈程序運行卡住? [打印本頁]

作者: jovew    時間: 2023-3-15 18:42
標(biāo)題: 單片機(jī)循環(huán)點亮LED燈程序運行卡住?
程序如下:為什么不能循環(huán)點亮LED燈?
#include"key.h"

void key_Proc(); //按鍵處理
void led_Proc();  //燈處理
void Timer0Init(); //中斷初始化
void led_Proc0();   //燈處理
   
void main()
{
      P2 = 0;
      P1 = 0;
    Timer0Init();  //中斷初始化

    while(1)
    {
        key_Proc();   //按鍵處理
        led_Proc();  //燈處理
        led_Proc0();   //燈處理
    }
}

void key_Proc()    //按鍵處理
{
    if(flag1ms)  //1ms時間標(biāo)志
    {
        flag1ms = 0;
        if(KEY)
        {
            if((keyTim>10)&&(keyTim<500))  //按鍵時間大于10ms小于50ms,是短按鍵
            {
                keyshort = 1;   //短按鍵標(biāo)志
            }
            keyTim = 0;        //按鍵時間清零
        }
        else
        {
            if(keyTim<10000)    //按鍵時間小于10S
            keyTim++;           //按鍵時間加
            if(keyTim==2000)    //按鍵時間為1S
            {
                keylong = 1;    //長按鍵標(biāo)志
            }
        }      
    }
}

void led_Proc()   //燈處理
{
    if((LEDON==0)&&(keylong==1))  //關(guān)燈狀態(tài)同時長按鍵按下就開燈
    {   
        keylong = 0;  //長按鍵松開
        LEDON = 1;    //關(guān)燈時就開燈
        LEDR = 1;     //RGB燈亮白光
        LEDG = 1;
        LEDB = 1;
    }        
    if((LEDON==1)&&(keylong==1)) //開燈狀態(tài)同時長按鍵按下就關(guān)燈
    {   
        keylong = 0;  //長按鍵松開
        LEDON = 0;    //開燈時就關(guān)燈
        LEDR = 0;     //RGB燈滅
        LEDG = 0;
        LEDB = 0;
    }
}

void led_Proc0()   //燈處理
{
    if(LEDON==1)  //開燈狀態(tài)同時短按鍵按下,亮燈模式切換
    {   

        switch(i)
        {
            case 0:LED3 = 1;LED4 = 0;LED5 = 0; if(num1==t1)num1=0; i=1;break; //紅
            case 1:LED3 = 1;LED4 = 1;LED5 = 0; if(num1==t2)num1=0; i=2;break; //黃
            case 2:LED3 = 0;LED4 = 1;LED5 = 0; if(num1==t3)num1=0; i=3;break; //綠
            case 3:LED3 = 0;LED4 = 1;LED5 = 1; if(num1==t1)num1=0; i=4;break; //青
            case 4:LED3 = 0;LED4 = 0;LED5 = 1; if(num1==t2)num1=0; i=5;break; //藍(lán)
            case 5:LED3 = 1;LED4 = 0;LED5 = 1; if(num1==t3)num1=0; i=6;break; //紫
            case 6:LED3 = 1;LED4 = 1;LED5 = 1; if(num1==t1)num1=0; i=0;break; //白                  
        }
    }
}

void Timer0Init()   //中斷初始化
{
    AUXR &= 0x80;   //定時器時鐘12T(12分頻)模式
    EA = 1;       //開中斷
    TMOD &= 0XF0; //中斷0模式1
    TMOD |= 0X01;
    TH0 = 0XFC;   //初值1ms
    TL0 = 0X66;
    ET0 = 1;     //允許T0中斷
    TR0 = 1;    //定時器0開始計時
}

void interruptTimer0() interrupt 1
{
   TH0 = 0XFC;
   TL0 = 0X66;
   flag1ms = 1; //1ms標(biāo)志
   sysTim++;  //系統(tǒng)時間
   
   if(sysTim==1000)
            {
            sysTim=0;
            j++;
            }
   if(j==num1)
            {
            j=0;
            }                                    
}

作者: glinfei    時間: 2023-3-16 06:40
flag1ms = 1; //1ms標(biāo)志 放到下邊的判斷里唄
作者: lkc8210    時間: 2023-3-16 09:00






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