找回密码
 立即注册

QQ登录

只需一步,快速开始

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

九齐芯片实现非阻塞按键功能,但代码程序出现错误,求解答

[复制链接]
跳转到指定楼层
楼主
ID:1159575 发表于 2025-9-25 10:56 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
想按下按键1时io口翻转,但功能实现不了


#include <ny8.h>
#include "ny8_constant.h"
#include "main.h"
//--------------- Global Definition ----------------------------------------
//--------------------------------------------------------------------------
unsigned char key_num;

void delay(int);
void DriverInit();
void key_tick();
unsigned char key_getnum();
unsigned char key_getstate();
//--------------------------------------------------------------------------
void main(void)
{
        DriverInit();
        key_num = key_getnum();

        while(1)
        {
                if(key_num == 1)
                {
                        PB0 = !PB0;
                        PB1 = !PB1;
                        PB2 = !PB2;
                        PB3 = !PB3;
                }
       
       
        }

}

void DriverInit()
{
        DISI();
//;Initial GPIO   
    IOSTA = C_PA0_Input | C_PA1_Input;   
    PORTA = 0xFF;                           
    APHCON = 0b11111100;
   
    IOSTB = C_PB_Output;     
    PORTB = 0x00;                          
  

//;Initial Timer0
        PCON1 = C_TMR0_Dis;                                                // Disable Timer0
        TMR0 = 0x7C;                                                                // 初始值125
        T0MD = C_PS0_TMR0 | C_PS0_Div32 ;               
       
       
        INTE = C_INT_TMR0;       
        T0IF = 0;//中断标志位

       
//;Enable Timer0 & Global interrupt bit
        PCON1 = C_TMR0_En;                                                 // Enable Timer0
        ENI();                                                                        // Enable all unmasked interrupts                       
       
   


}


unsigned char key_getnum()
{
        uchar temp;
       
        if(key_num)
        {
                temp = key_num;
                key_num= 0;
                return temp;
        }
        return 0;
}



unsigned char key_getstate()
{
       
        if(KEY1 == 0)
        {
                return 1;
        }
        if(KEY2 == 0)
        {
                return 2;
        }
        return 0;
}


void key_tick()
{
        static uchar count;
        static uchar now,last;
        count++;
        if(count % 5 ==0)
        {
                last = now;
                now = key_getstate();
                if(last == 0 && now != 0)
                {
                        key_num = now;
                }
        }
}




//--------------------------------------------------------------------------
void isr(void) __interrupt(0)
{
       
        if(INTFbits.T0IF)
        {
                key_tick();
                INTF= (unsigned char)~(C_INT_TMR0);        // Clear T0IF flag bit               
               
        }

}

//--------------------------------------------------------------------------
void delay(int count)
{
        int i;
        for(i=1;i<=count;i++)
        ;
}
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:1096929 发表于 2025-9-27 10:19 | 只看该作者
具体问题出现是什么,你这个貌似没有消抖啊
回复

使用道具 举报

板凳
ID:1159575 发表于 2025-9-28 16:54 | 只看该作者
我在定时器里面每20ms检测一次按键,消抖了应该。
unsigned char key;
void main(void)
{
        DriverInit();
        key = key_getnum();
        while(1)
        {
                if(key == 1)
                {
                        PB0 = !PB0;
                        PB1 = !PB1;
                        PB2 = !PB2;
                        PB3 = !PB3;
                }  
        }
}
我之前主函数漏了一个变量,但是改完还是实现不了功能,我是按照b站江科大的案例进行写的, 我初始化改为PORTB = 0xF0;   我PB口设置为输出灯仿真,初始状态就是灯一直闪.然后按键功能实现不了。哪里出问题了我看不出来
回复

使用道具 举报

地板
ID:1159575 发表于 2025-9-29 09:20 | 只看该作者
cqycqy666 发表于 2025-9-28 16:54
我在定时器里面每20ms检测一次按键,消抖了应该。
unsigned char key;
void main(void)

解决了,就是没有关看门狗
回复

使用道具 举报

5#
ID:1096929 发表于 2025-9-29 10:42 | 只看该作者
cqycqy666 发表于 2025-9-28 16:54
我在定时器里面每20ms检测一次按键,消抖了应该。
unsigned char key;
void main(void)

这个问题你把代码输入到通义千问里面看看
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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