找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1236|回复: 2
打印 上一主题 下一主题
收起左侧

单片机循环点亮LED灯程序运行卡住?

[复制链接]
跳转到指定楼层
楼主
程序如下:为什么不能循环点亮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时间标志
    {
        flag1ms = 0;
        if(KEY)
        {
            if((keyTim>10)&&(keyTim<500))  //按键时间大于10ms小于50ms,是短按键
            {
                keyshort = 1;   //短按键标志
            }
            keyTim = 0;        //按键时间清零
        }
        else
        {
            if(keyTim<10000)    //按键时间小于10S
            keyTim++;           //按键时间加
            if(keyTim==2000)    //按键时间为1S
            {
                keylong = 1;    //长按键标志
            }
        }      
    }
}

void led_Proc()   //灯处理
{
    if((LEDON==0)&&(keylong==1))  //关灯状态同时长按键按下就开灯
    {   
        keylong = 0;  //长按键松开
        LEDON = 1;    //关灯时就开灯
        LEDR = 1;     //RGB灯亮白光
        LEDG = 1;
        LEDB = 1;
    }        
    if((LEDON==1)&&(keylong==1)) //开灯状态同时长按键按下就关灯
    {   
        keylong = 0;  //长按键松开
        LEDON = 0;    //开灯时就关灯
        LEDR = 0;     //RGB灯灭
        LEDG = 0;
        LEDB = 0;
    }
}

void led_Proc0()   //灯处理
{
    if(LEDON==1)  //开灯状态同时短按键按下,亮灯模式切换
    {   

        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; //蓝
            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标志
   sysTim++;  //系统时间
   
   if(sysTim==1000)
            {
            sysTim=0;
            j++;
            }
   if(j==num1)
            {
            j=0;
            }                                    
}
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏1 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:844772 发表于 2023-3-16 06:40 来自手机 | 只看该作者
flag1ms = 1; //1ms标志 放到下边的判断里呗
回复

使用道具 举报

板凳
ID:161164 发表于 2023-3-16 09:00 | 只看该作者

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表