2301_77450812 2023-08-20 13:43 采纳率: 75%
浏览 25
已结题

51单片机stc89c52独立按键控制LCD流水灯状态,为什么没有流水灯现象,按按键也没有反应

以下是模块化编程,各头文件已经设置在该程序同目录下(烧到板子上现象只有D1亮,没有向左流水灯的现象)

img

#include <REGX52.H>
#include <INTRINS.H>
#include "Key.h"
#include "Timer.h"

unsigned char KeyNum,LEDMode=0;

void main()
{
    P2=0xFE;
    Timer_Init();

    while(1)
    {        
        KeyNum=Key();
        if(KeyNum==1)
        {
            LEDMode++;
            if(LEDMode>=2)
                LEDMode=0;
        }
    }
}

/*定时器中断函数*/
void Timer0_Routine() interrupt 1        //定时器0的中断号是interrupt 1
{
    static unsigned char TimerNum;        //静态全局变量
    TMOD &= 0xF0;                        //定时器1ms后到中断函数会置零,所以重新赋值
    TMOD |= 0x01;
    TimerNum++;
    if(TimerNum>=500)                     //500ms
    {
        TimerNum=0;
        if(LEDMode==0)                     //按下K1流水灯反向
            P2=_crol_(P2,1);
        if(LEDMode==1)
            P2=_cror_(P2,1);
    }
}


#include <REGX52.H>

void Timer0_Init(void)        //1毫秒@12.000MHz
{
    TMOD &= 0xF0;            //设置定时器模式     与置零,保留高四位(定时器1),第四位置零
    TMOD |= 0x01;            //设置定时器模式     或置一,保留高四位(定时器1),最低位置一
    TL0 = 0x18;                //设置定时初始值     64535到64535共1000微妙,即1毫秒
    TH0 = 0xFC;                //设置定时初始值     TL0=64535%257,TH0=64535/256
    TF0 = 0;                //清除TF0标志
    TR0 = 1;                //定时器0开始计时
    ET0=1;
    EA=1;
    PT0=0;
}


#include <REGX52.H>
#include "Delay1ms.h"

unsigned char Key()
{
    unsigned char KeyNum;

    if(P1_4==0)    {Delay1ms(20);while(P1_4==0);Delay1ms(20);KeyNum=1;}
    if(P1_5==0)    {Delay1ms(20);while(P1_5==0);Delay1ms(20);KeyNum=2;}
    if(P1_6==0)    {Delay1ms(20);while(P1_6==0);Delay1ms(20);KeyNum=3;}
    if(P1_7==0)    {Delay1ms(20);while(P1_7==0);Delay1ms(20);KeyNum=4;}
    if(P3_5==0)    {Delay1ms(20);while(P3_5==0);Delay1ms(20);KeyNum=5;}

    return KeyNum;



void Delay1ms(unsigned char xms)        //@12.000MHz
{
    unsigned char data i, j;
    while(xms)
    {
        i = 2;    
        j = 239;
        do
        {
            while (--j);
        } while (--i);
        xms--;
    }
}

img


img

  • 写回答

3条回答 默认 最新

  • CSDN-Ada助手 CSDN-AI 官方账号 2023-08-20 16:06
    关注

    【以下回答由 GPT 生成】

    根据所提供的代码,可能的问题是以下几点:

    1. 第一点,可能是因为使用了未定义的函数/头文件。在代码中看到了Key.hTimer.h的引用,但是在代码中没有找到这两个文件的定义。所以可能需要检查是否正确引用了相应的头文件,并且这些头文件中定义了所需的函数。

    2. 第二点,可能是因为定时器没有正确初始化。在代码中看到了Timer_Init()函数的调用,但是没有找到这个函数的定义。同时,在Timer0_Init()函数中看到了定时器的初始化代码,但是没有调用该函数进行初始化。所以可能需要确保定时器正确初始化,以便定时器中断函数能够正常工作。

    3. 第三点,可能是定时器中断函数未启用。在代码中看到了Timer0_Routine()函数是一个定时器中断函数,但是在代码中没有看到对定时器中断的配置和启用。所以可能需要在合适的位置配置定时器中断,并启用中断,以确保定时器中断函数能够正确被调用。

    综上所述,建议检查并解决以下几点问题:

    1. 确认是否正确引用了Key.hTimer.h头文件,并确保这些文件中有定义所需的函数。
    2. 确认定时器是否正确初始化,并在合适的位置调用Timer0_Init()函数进行初始化。
    3. 确认定时器中断是否正确配置并启用,以确保定时器中断函数能够正常工作。

    如果以上问题都没有解决流水灯和按键无反应的问题,可能还需要进一步检查其他代码逻辑或硬件连接是否正确。



    【相关推荐】



    如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^
    评论

报告相同问题?

问题事件

  • 已结题 (查看结题原因) 8月23日
  • 修改了问题 8月21日
  • 修改了问题 8月21日
  • 修改了问题 8月20日
  • 展开全部

悬赏问题

  • ¥17 pro*C预编译“闪回查询”报错SCN不能识别
  • ¥15 微信会员卡接入微信支付商户号收款
  • ¥15 如何获取烟草零售终端数据
  • ¥15 数学建模招标中位数问题
  • ¥15 phython路径名过长报错 不知道什么问题
  • ¥15 深度学习中模型转换该怎么实现
  • ¥15 HLs设计手写数字识别程序编译通不过
  • ¥15 Stata外部命令安装问题求帮助!
  • ¥15 从键盘随机输入A-H中的一串字符串,用七段数码管方法进行绘制。提交代码及运行截图。
  • ¥15 TYPCE母转母,插入认方向