📄 ad_key._c
字号:
//---------------------------- AD键盘驱动程序 ----------------------------
//
//简易AD键盘驱动程序
//代码作者:廖华明(师兄)
//时间:2009.7.8
//
//------------------------------------------------------------------------
#include "AD_key.h"
//---------全局变量定义----------//
uint8 AD_data,AD_data1,AD_data2;
uint8 tmp;
uint8 AD_Flag,AD_time;
uint8 key_num;
//-------------------------------//
//
// AD中断处理函数
//
//-------------------------------//
void AD_handler(void)
{
AD_data=ADCH;
if(AD_data>=0xF0)
{
AD_Flag=0;
AD_time=0;
}
else if(AD_Flag==0)
{
AD_time++;
if(AD_time==3)
{
if(AD_data1>AD_data2) tmp = AD_data2;
else tmp = AD_data1;
if(tmp>AD_data) tmp = AD_data;
if(tmp<0x0F) key_num = 1;
else if(tmp>0x7C&&tmp<0x8F)key_num=2;
else if(tmp>0xBC&&tmp<0xCA)key_num=3;
else if(tmp>0xA8&&tmp<0xBC)key_num=4;
else if(tmp>0xD2&&tmp<0xDF)key_num=5;
else if(tmp>0xC9&&tmp<0xD3)key_num=6;
else key_num=0;
AD_Flag=1;
}
else if(AD_time==1)AD_data1 = AD_data;
else if(AD_time==2)AD_data2 = AD_data;
}
}
//---------------------------------//
//
// AD初始化函数
//
//---------------------------------//
void AD_Init(void)
{
PORTA &= 0x7F; // PA7无上拉
DDRA &= 0x7F; // 设置PA7口为输入
ADMUX=0x67; // 基准AVCC,左对齐选择第7通道
ADCSRA=0xCE; // 采用单次转换模式,64分频
ADCSRA|=BIT(ADSC); // 启动一次哑转换
SREG=0x80; // 开中断
}
//---------------------------------//
//
// T/C0中断函数
//
//---------------------------------//
void TC0_handler(void)
{
ADCSRA|=BIT(ADSC); // 进行一次AD转换
}
//---------------------------------//
//
// T/C0初始化函数
//
//---------------------------------//
void TC0_Init(void)
{
// 16MHz模式下,16ms中断一次,作为AD采样间隔基准
TCNT0=0; // 定时器0初值
TCCR0 = BIT(CS02)| BIT(CS00); // 预分频 ck/1024 ,启动计数器
TIMSK = BIT(TOIE0); // T/C0 中断允许
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -