×
嵌入式 > 技术百科 > 详情

STC12C5410AD学习板---AD按键测试程序

发布时间:2020-06-20 发布时间:
|

/************ STC12C5410AD学习板 ******************/
/*功能描述:AD按键练习                            */
/*作者:郑 文   ClimberWin                        */
/*编写时间:2008.8.15                             */
/*功能:采集按键电压;分配键值,并把键值传给PC机   */
/*外部晶振22.1184 MHZ                             */
/*把波特率设置为51的12倍,现在波特率 115200       */
/*注意:需要测得实际电源电压作为参考电压          */
/*L7805稳压在4.88-4.98V之间,根据实际测量确定电压 */
/**************************************************/
/*修改时间:                                      */
/*修改内容:  还需要添加按键去抖                  */


#include          
#include
#include
#include
#define uchar unsigned char
#define uint  unsigned int
#define ulong unsigned long

sbit PWM0 = P3^7; //pwm口定义green
sbit PWM1 = P3^5; //pwm口定义blue
sbit PWM2 = P2^0; //pwm口定义
sbit PWM3 = P2^4; //pwm口定义red

sbit AD0 = P1^0;   //电位器和外部电压输入共用同一AD口,用跳帽来选择。
sbit AD1 = P1^1;   //用做AD按键的输出口。
sbit AD2 = P1^2;   //温度测量,测量热敏电阻的参数。


void Delay1ms(unsigned int count);
void init_rs232(void);           //串口初始化
void STC12C5410AD_int(void);     //AD初始化


void Delay1ms(unsigned int count);
void init_rs232(void);           //串口初始化

/***************************1秒延时子程序start***************************/
void Delay1ms(unsigned int count)
{
 unsigned int i,j;
 for(i=0;i  for(j=0;j<120;j++);
}

/***************************1秒延时子程序end***************************/

/* 串口通信初始化设置 */
void init_rs232(void)
 {
 AUXR=74;       //设置波特率是普通51的12倍 ,允许AD中断
 SCON=0x50;
 PCON=0x00;
 TH1=0xFA;    //波特率 115200  22.1184MHZ 时候(F4 4800  FA 9600  FDH 9600)*12
 TL1=0XFA;
 TMOD=0X20;
 TR1=1;    
 }
 

/*STC12C5410AD的AD初始化程序*/
// ADC_CONTR=[ADC_POWER] [SPEED1] [SPEED0] [ADC_FLAG] [ADC_START] [CHS2] [CHS1] [CHS0]
// ADC_DATA 高8位  ADC_LOW2 //低2位
void STC12C5410AD_int(void)
{
ADC_CONTR=0x80 ;  //开转换电源 设置转换速度为1080个时钟周期转换一次,选择AD0通道
Delay1ms(20);     //稍做延时,大于1ms就可以

/*I/O口作为AD使用,设置漏极开路模式*/ 
P1M0=1;
P1M1=1;
}

/*******************************************/ 
 
/*****************主程序************************/
 main()
 {       //main start
 //uchar w;
 uint ad_temp; //AD数据保存的地址
 float f;   //存放AD采集过来的数据,格式00.000,总共5位

 Delay1ms(5000);

 init_rs232();  //串口初始化
 TI=1;

 printf("STC12C5410AD学习板 AD按键练习\n");
 printf("ClimberWin 2008.8.15\n\n");
 Delay1ms(5000);


 printf("串口初始化成功\n\n");
 Delay1ms(5000);

 

/*************************************************/
  
   STC12C5410AD_int();   //AD初始化
   printf("A/D初始化成功\n");
   ADC_CONTR|=0x01;            //选择AD1通道  ,AD按键
   printf("选择通道AD1\n\n");

   printf("按键测试开始:\n\n");


  while(1)
  {
 ADC_CONTR|=0x08;            //开始AD转换(ADC_START=1)

    while(!(ADC_CONTR & 0x10)); //判断AD是否转换结束

 ADC_CONTR&=0xef;//转换结束后标志位ADC_FLAG清零
  //AD采集进来的数据进行转化
    ad_temp=ADC_LOW2;
    ad_temp=ad_temp+  ((uint)ADC_DATA)<<2;
    f=(4.961*ad_temp)/1024;      //基准电压调整,用7805做稳压需要测得实际电源电压
 //通过串口打印AD采集进来的数据
  //  printf("%.3f   ",f);    //串口传输AD采集数据
    Delay1ms(1000);
/**************键值判断*******************************/
if (f>4.590&f<4.650)
  { printf("K1按下\n\n");}
else if (f>4.500&f<4.550)
  { printf("K2按下\n\n");}
else if (f>4.400&f<4.490)
  { printf("K3按下\n\n");}
else if (f>4.200&f<4.350)
  { printf("K4按下\n\n");}
else if (f>3.700&f<4.100)
  { printf("K5按下\n\n");}
else if (f>3.000&f<3.500)
  { printf("K6按下\n\n");}
else
{;}
   Delay1ms(1000);
/*******************************************************/
  }

}   //mian end



『本文转载自网络,版权归原作者所有,如有侵权请联系删除』

热门文章 更多
ADI 高精度低功耗精密放大器