⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 ad_key._c

📁 AVR单片机系统开发经典实例部分源程序
💻 _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 + -