钻石会员
主题
回帖0
积分36261
阅读权限50
注册时间2011-4-27
最后登录1970-1-1
在线时间 小时
|
我之前玩过AD按键 不过 MCU 是 12C60S2 给你贴出来参考下吧 程序是我在官方下的,反正我好用的
/*----------------------------
Get ADC result
----------------------------*/
unsigned char GetADCResult(unsigned char ch)
{
ADC_CONTR = ADC_POWER | ADC_SPEEDLL | ch | ADC_START;
_nop_(); //Must wait before inquiry
_nop_();
_nop_();
_nop_();
while (!(ADC_CONTR & ADC_FLAG));//Wait complete flag
ADC_CONTR &= ~ADC_FLAG; //Close ADC
return ADC_RES; //Return ADC result
}
键盘扫描
unsigned char KEYSCAM()
{
unsigned char KEY=0,ADVal;
ADVal=GetADCResult(7);
if(ADVal<0X1B)
{
KEY=0X01;
while(GetADCResult(7)<0XDC);
ZONE1=~ZONE1;
write_add(1,ZONE1);
DelayMS(1);
return KEY;
}
if((0X1B<ADVal)&(ADVal<0X59))
{
KEY=0X02;
while(GetADCResult(7)<0XDC);
ZONE2=~ZONE2;
write_add(2,ZONE2);
DelayMS(1);
return KEY;
}
if((0X59<ADVal)&(ADVal<0X90))
{
KEY=0X03;
while(GetADCResult(7)<0XDC);
ZONE3=~ZONE3;
write_add(3,ZONE3);
DelayMS(1);
return KEY;
}
if((0X90<ADVal)&(ADVal<0XB9))
{
KEY=0X04;
while(GetADCResult(7)<0XDC);
ZONE4=~ZONE4;
write_add(4,ZONE4);
DelayMS(1);
return KEY;
}
if((0XB9<ADVal)&(ADVal<0XE3))
{
KEY=0X05;
while(GetADCResult(7)<0XDC);
if(P0<0X0F)
P0=0X0F;
else
P0=0X00;
write_add(1,ZONE1);
DelayMS(1);
write_add(2,ZONE2);
DelayMS(1);
write_add(3,ZONE3);
DelayMS(1);
write_add(4,ZONE4);
return KEY;
}
return 0;
}
新手程序 高手莫笑 |
|