標(biāo)題: 中微的單片機(jī)程序請教大神 發(fā)現(xiàn)IO口沒有檢測到上拉的5V,更是檢測不了按鍵 [打印本頁]

作者: cdiyy    時(shí)間: 2020-9-26 09:10
標(biāo)題: 中微的單片機(jī)程序請教大神 發(fā)現(xiàn)IO口沒有檢測到上拉的5V,更是檢測不了按鍵
以下這個(gè)程序我用CMS89F6285B來做的,但是發(fā)現(xiàn)IO口沒有檢測到上拉的5V。更是檢測不了按鍵。請問=大神幫忙看看是哪里錯(cuò)了

#include <cms.h>


#define                BSET(x,y)        x|=(1<<y)                //將寄存器x第y位置1
#define                BCLR(x,y)        x&=~(1<<y)                //將寄存器x第y位置0

#define                Key1                RB1                                //定義按鍵IO口
#define                Key2                RB2
#define                Key3                RB3
#define                Key4                RB4
#define                Led1                RE3                                //定義Led IO口


volatile unsigned char KeyData;                        //按鍵值
volatile unsigned char KeyFlag;                        //按鍵標(biāo)志,0位有按鍵、1位有短按鍵、2位有長按鍵
//函數(shù)聲明
void Kscan(void);        
void Maink(void);

//主程序
void main(void)
{

        TRISA = 0B11111111;                                //配置IO狀態(tài)
        TRISB = 0B11111111;
        TRISC = 0B11111111;
        TRISE = 0B00000000;
        
        //PORTB = 0B11111111;
        
        WPUA = 0B11111111;                                //配置上拉情況
        WPUB = 0B00011110;
        WPUC = 0B00000000;
        WPUE = 0B00000000;                                                //1為使能上拉,0為禁止上拉
        
        while(1)
        {
                asm("clrwdt");                                        //清看門狗
               
                Kscan();                                                //按鍵掃描
                Maink();                                                //按鍵處理
        }
}

/***********************************************
函數(shù)名稱:Kscan
函數(shù)功能:按鍵掃描
入口參數(shù):無
出口參數(shù):無
備注:
************************************************/
void Kscan()
{        
        static unsigned char keycount,nkeycount,keyold;
        static unsigned int keylong;
        
        KeyData = 0;
        
        if(!Key1)                                                        //為低時(shí)有按鍵
                BSET(KeyData,0);
        if(!Key2)               
                BSET(KeyData,1);
        if(!Key3)               
                BSET(KeyData,2);
        if(!Key4)        
                BSET(KeyData,3);
        
        if(KeyData)                                                        //有按鍵                                                
        {        
                if(KeyData == keyold)                        //鍵值等于舊鍵值
                {
                        if(KeyFlag & 0x02)                        //有按鍵判斷長按鍵
                        {
                                if((KeyData == 0x99) && (++keylong >= 200))//匹配有長按鍵的按鍵,如需長按鍵可修改KeyData匹配值
                                {
                                        keylong =0;
                                        BSET(KeyFlag,0);        //有按鍵標(biāo)志
                                        BSET(KeyFlag,2);        //長按鍵標(biāo)志                                       
                                }                                                                                       
                        }                        
                        else if(++keycount >= 5)        //消抖動(dòng)
                        {
                                BSET(KeyFlag,0);                //有按鍵標(biāo)志
                                BSET(KeyFlag,1);                //短按鍵標(biāo)志
                        }
                }
                else
                {
                        keyold =KeyData;
                        keycount =0;        
                }               
        }
        else                                                                //無按鍵
        {
                keycount =0;
                keylong =0;        
                if(++nkeycount >=5)                                //無按鍵超過5次時(shí)清標(biāo)志位
                {
                        KeyFlag =0;
                        KeyData =0;
                        keyold =0;
                }        
        }        
}
/***********************************************
函數(shù)名稱:Maink
函數(shù)功能:按鍵處理
入口參數(shù):無
出口參數(shù):無
備注:
************************************************/
void Maink()
{
        if(KeyFlag & 0x01)
        {        
                BCLR(KeyFlag,0);
                                
                switch(KeyData)
                {
                        case 0x01: Led1 = 1; break;
                        case 0x02: Led1 = 0; break;
                        case 0x04: Led1 = 1; break;
                        case 0x08: Led1 = 0; break;                                                                                       
                }
        }        
}


作者: 心有浮生    時(shí)間: 2020-9-26 14:12
電壓沒有的話找找電路原因
作者: cdiyy    時(shí)間: 2020-9-26 16:26
心有浮生 發(fā)表于 2020-9-26 14:12
電壓沒有的話找找電路原因

沒有電路了,我直接把單片機(jī)VCC,GND接2條線出來測試了同樣是沒有電壓,我也打開了上拉。求大神指教啊
作者: 心有浮生    時(shí)間: 2020-9-26 17:41
cdiyy 發(fā)表于 2020-9-26 16:26
沒有電路了,我直接把單片機(jī)VCC,GND接2條線出來測試了同樣是沒有電壓,我也打開了上拉。求大神指教啊

沒電壓怎么能驅(qū)動(dòng)芯片工作啊
作者: cdiyy    時(shí)間: 2020-9-27 09:57
心有浮生 發(fā)表于 2020-9-26 17:41
沒電壓怎么能驅(qū)動(dòng)芯片工作啊

5V是正常的,配置了IO口為輸入腳,同時(shí)打開了上拉電阻,可是該IO腳沒有輸入的檢測5V
作者: 梁廷明    時(shí)間: 2020-9-27 17:00
TRISA<7:0>: PORTA 三態(tài)控制位 1 = PORTA 引腳被配置為輸入(三態(tài)) 0 = PORTA 引腳被配置為輸出

作者: 梁廷明    時(shí)間: 2020-9-27 17:01
WPUA<7:0>: 弱上拉寄存器位 1 = 使能上拉 0 = 禁止上拉

作者: cdiyy    時(shí)間: 2020-9-29 14:09
梁廷明 發(fā)表于 2020-9-27 17:01
WPUA: 弱上拉寄存器位 1 = 使能上拉 0 = 禁止上拉

求大神幫忙看看如何修改啊,搞得懷疑人生了
作者: 梁先生·    時(shí)間: 2021-11-6 10:50
        TRISA = 0B11111111;                                //配置IO狀態(tài)
        TRISB = 0B11111111;
        TRISC = 0B11111111;
1全改為0試試




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