/************ 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
}
/***************************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_DA
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_DA
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