新聞中心

EEPW首頁(yè) > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > STC12c5a60s2單片機(jī)內(nèi)部ADC應(yīng)用測(cè)試外部電壓

STC12c5a60s2單片機(jī)內(nèi)部ADC應(yīng)用測(cè)試外部電壓

作者: 時(shí)間:2016-12-03 來源:網(wǎng)絡(luò) 收藏
#include

#include /*use _nop_() function*/
#define uchar unsigned char
#define uint unsigned int

本文引用地址:http://butianyuan.cn/article/201612/325259.htm

uint k;
uchar ch ;
/*******************延時(shí)****************/
void Delay (uint j)
{
uint i;
while(j--)
{
i=111;while(i--);
}
}
void InitADC()
{
P1M0=0X01;
P1M1=0X01;
P1ASF=0XFF; //相應(yīng)端口當(dāng)ADC使用時(shí),端口要置位
ADC_RES=0;
ADC_CONTR=0XE0; //1110 0000 開電源,最高速
Delay(50);
}
int GetADC(uchar ch)
{
int result;
ADC_CONTR|=ch; //選擇通道
_nop_(); _nop_();
_nop_(); _nop_();
ADC_CONTR|=0x08; //0000 0100 開始AD轉(zhuǎn)換
while(!(ADC_CONTR&ADC_FLAG)); //查詢ADC_FLOG是否置位1 轉(zhuǎn)換結(jié)束
ADC_CONTR &= ~ADC_FLAG; //Clear ADC interrupt flag
//result=ADC_RES;//1111 0111 結(jié)束AD轉(zhuǎn)換
result=ADC_RES*4+ADC_RESL;
return(result);
}

/////////////////////平均濾波//////////////////////
#define N 100
float filter(uchar ch)
{
float value=0;
uchar count;
for(count=0;count{
value+=GetADC(ch); //100次采樣求平均
}
value/=202.5;//單片機(jī)電壓5.05V
//value/=205;
//value/=2048;
//value/=512;
//value/=100;
//value=value*5.0/1024;
return (value);
}
/****************1602液晶******************/
sbit RS = P2^4;
sbit RW = P2^5;
sbit E = P2^6;
/*******************查表0~f****************/
uchar code LCD_display_code[16]=
{
0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,
0x38,0x39,0x41,0x42,0x43,0x44,0x45,0x046
};
void lcd_Write_com(uchar com)
{
RS=0; //定義指令寄存器
RW=0; //寫允許
P0=com; //寫指令
Delay(5);E=1;//片選端上拉
Delay(5);E=0;//下降沿鎖存
}
void lcd_write_date(uchar date)
{
RS=1;//定義數(shù)據(jù)寄存器
RW=0;//寫允許
P0=date;//寫數(shù)據(jù)
Delay(5);E=1;//片選端上拉
Delay(5);E=0;//下降沿鎖存
}
void dis_lcd1602(uchar x,uchar y,uchar dat)
{
uchar add;
if(y==1) add=(0x80+x);
if(y==2) add=(0xc0+x);
lcd_Write_com(add);//寫指令
lcd_write_date(dat);//寫數(shù)據(jù)
}
void lcd1602_init()
{
lcd_Write_com(0x38);//設(shè)置8位格式,2行,5*7
lcd_Write_com(0x01);//清屏
lcd_Write_com(0x0c);//整體顯示,關(guān)光標(biāo),不閃爍
lcd_Write_com(0x06);//設(shè)定輸入方式,增量不移位
lcd_Write_com(0x80);//初始坐標(biāo)
}
/*******************液晶顯示漢字程序****************/
void hz_lcdDis(uchar x,uchar y,uchar *p) //漢字顯示
{
uchar i=0,temp;
if(x)temp = 0x40; else temp = 0;
for(i=y;*p!=