|
大佬們我想問一下加了if(Temp)這里為什么按鍵就非常不靈敏了,不加判斷返回值是否為0代碼就能正確檢測到按鍵,這個if(Temp)判斷返回值是否為0為什么會導致按鍵操作不靈敏,這個是測試的,后面必須要用到判斷是否為0,不是很理解,求大佬能指點一二
單片機源程序如下:
#include <REGX52.H>
#include "LCD1602.H"
#include "AT24C02.H"
#include "Delay.H"
#include "Timer0Init.H"
#include "Key.H"
void main()
{
unsigned char Temp=0;
Timer0Init();
while(1)
{
Temp=Keynum_return();
if(Temp)//加了判斷按鍵就不靈敏,不加就很正常
{
if(Temp==1)
P2_0=~P2_0;
if(Temp==2)
P2_1=~P2_1;
if(Temp==3)
P2_2=~P2_2;
if(Temp==4)
P2_3=~P2_3;
}
}
}
void Timer0_Rountine(void) interrupt 1//中斷函數
{
static unsigned char count;//計數范圍為0-256
TL0 = 0x66;
TH0 = 0xFC;
count++;
if(count>=20)
{
count=0;
key_Interrupt();//按鍵中斷
}
}
這是Key里面的函數
#include <REGX52.H>
unsigned char Key_num;
unsigned char Keynum_return()
{
unsigned char Temp=0;
Temp=Key_num;
Key_num=0;
return Temp;
}
unsigned char Key_Timer0()
{
unsigned char KeyNumber=0;
if(P3_1==0){KeyNumber=1;}
if(P3_0==0){KeyNumber=2;}
if(P3_2==0){KeyNumber=3;}
if(P3_3==0){KeyNumber=4;}
return KeyNumber;
}
void key_Interrupt()//按鍵中斷函數
{
static unsigned char Last_Status=0,Now_Status=0;
Last_Status=Now_Status;
Now_Status=Key_Timer0();//現態次態檢測
if( Last_Status==1 && Now_Status==0)
{
Key_num=1;
}
if( Last_Status==2 && Now_Status==0)
{
Key_num=2;
}
if( Last_Status==3 && Now_Status==0)
{
Key_num=3;
}
if( Last_Status==4 && Now_Status==0)
{
Key_num=4;
}
}
|
-
-
秒表設計.rar
2024-4-7 20:54 上傳
點擊文件名下載附件
55.56 KB, 下載次數: 4
|