STC12C5A60S2AD电压高级采集.docx
- 文档编号:23896450
- 上传时间:2023-05-22
- 格式:DOCX
- 页数:9
- 大小:36.04KB
STC12C5A60S2AD电压高级采集.docx
《STC12C5A60S2AD电压高级采集.docx》由会员分享,可在线阅读,更多相关《STC12C5A60S2AD电压高级采集.docx(9页珍藏版)》请在冰豆网上搜索。
STC12C5A60S2AD电压高级采集
STC12C5A60S2-AD电压高级采集
/*使用STC单片机内置10AD(仅用高八位,分辨率为5mV)做的简易电压表*/
/*本程序AD部分使用了深圳宏晶公司官方AD转换示范程序修改,特此鸣谢*/
/*使用STC12C5A60S21T单片机,12M外部晶振,KeilV3编译通过,AD转换脚定义为P1.1,*/
/*使用芯片本身5V电源为基准,在深圳精创电子的51/AVR开发板实现。
8位共阳LED字符码*/
/*接P0口,位线接在P2口,均为低电平显示,使用右4位。
本显示程序摘自网上,一并感谢。
*/
/*----2010.07.04writtenbyautopccopy()*/
#include
#include
0X6D,/*5*/
0X7D,/*6*/
0X07,/*7*/
0X7F,/*8*/
0X6F,/*9*/
0xFF
};
voidled(intn)//数码管显示及数据处理程序
{
P0=0xFF;
P0=DATA_LED[n%10];//个位
P20=0;
delay
(1);
P20=1;
P0=0xFF;
P0=DATA_LED[n/10%10];//十位
P21=0;
delay
(1);
P21=1;
P0=0xFF;
P0=DATA_LED[n/100%10];//百位
P22=0;
delay
(1);
P22=1;
P0=0xFF;
P0=DATA_LED[n/1000%10];//千位
P23=0;
P07=0;//千位显示小数点
delay
(1);
P23=1;
}
//---------------------------------------------------------------------
INT8Uget_AD_result(INT8Uchannel)//AD转换部分
{
INT8UAD_finished=0;//存储A/D转换标志
ADC_RES=0;//高八位
ADC_RESL=0;//低二位(本例未使用)
channel&=0x07;//0000,0111清0高5位
ADC_CONTR=AD_SPEED;
_nop_();
ADC_CONTR|=channel;//选择A/D当前通道
_nop_();
ADC_CONTR|=0x80;//启动A/D电源
delay
(1);//使输入电压达到稳定
ADC_CONTR|=0x08;//0000,1000令ADCS=1,启动A/D转换,
AD_finished=0;
while(AD_finished==0)//等待A/D转换结束
{
AD_finished=(ADC_CONTR&0x10);//0001,0000测试A/D转换结束否
}
ADC_CONTR&=0xE7;//1111,0111清ADC_FLAG位,关闭A/D转换,
return(ADC_RES);//返回A/D高8位转换结果
}
voiddelay(INT8Udelay_time)//延时函数
{
INT16Un;
while(delay_time--)
{
n=100;
while(--n);
}
}
//---------------------------同道选择------------------------------------------
voidADzhuanhuan1(INT8Uzh)
{
INT16UADC_result;
P1ASF=0x02;//0000,0010,将P1.1置成模拟口
AUXR1&=~0x04;//0000,0100,令ADRJ=0:
10位A/D转换结果的高8位放在ADC_RES寄存器,低2位放在ADC_RESL寄存器
ADC_CONTR|=0x80;//1000,0000打开A/D转换电源
while
(1)
{
ADC_result=get_AD_result(zh);//P1.1为A/D当前通道,测量并发送结果
led(ADC_result*19.53);//显示数值。
19.53是AD转换系数:
原公式是ADC_result/256*5V*1000
}
}
voidADzhuanhuan2(INT8Uzh)
{
INT16UADC_result;
P1ASF=0x04;//0000,0010,将P1.1置成模拟口
AUXR1&=~0x04;//0000,0100,令ADRJ=0:
10位A/D转换结果的高8位放在ADC_RES寄存器,低2位放在ADC_RESL寄存器
ADC_CONTR|=0x80;//1000,0000打开A/D转换电源
while
(1)
{
ADC_result=get_AD_result(zh);//P1.1为A/D当前通道,测量并发送结果
led(ADC_result*19.53);//显示数值。
19.53是AD转换系数:
原公式是ADC_result/256*5V*1000
}
}
voidADzhuanhuan3(INT8Uzh)
{
INT16UADC_result;
P1ASF=0x08;//0000,0010,将P1.1置成模拟口
AUXR1&=~0x04;//0000,0100,令ADRJ=0:
10位A/D转换结果的高8位放在ADC_RES寄存器,低2位放在ADC_RESL寄存器
ADC_CONTR|=0x80;//1000,0000打开A/D转换电源
while
(1)
{
ADC_result=get_AD_result(zh);//P1.1为A/D当前通道,测量并发送结果
led(ADC_result*19.53);//显示数值。
19.53是AD转换系数:
原公式是ADC_result/256*5V*1000
}
}
voidADzhuanhuan4(INT8Uzh)
{
INT16UADC_result;
P1ASF=0x10;//0000,0010,将P1.1置成模拟口
AUXR1&=~0x04;//0000,0100,令ADRJ=0:
10位A/D转换结果的高8位放在ADC_RES寄存器,低2位放在ADC_RESL寄存器
ADC_CONTR|=0x80;//1000,0000打开A/D转换电源
while
(1)
{
ADC_result=get_AD_result(zh);//P1.1为A/D当前通道,测量并发送结果
led(ADC_result*19.53);//显示数值。
19.53是AD转换系数:
原公式是ADC_result/256*5V*1000
}
}
//----------------------串口显示--------------------------------------------
voidtime()
{
TMOD|=0x02;
TH0=0xb6;
TL0=0xb6;
TR0=1;
}
voiduart(void)
{
SCON=0x50;
TMOD|=0x20;
TH1=0xfd;
TL1=0xfd;
TR1=1;
}
unsignedchargetc(void)
{
while(!
RI);
RI=0;
return(SBUF);
}
voidputc(unsignedcharch)
{
SBUF=ch;
while(!
TI);
TI=0;
}
//---------------------------------------------------------------------
voidmain()
{
INT16UADC_result,k;
uart();
time();
//ADzhuanhuan1
(1);
//ADzhuanhuan2
(2);
//ADzhuanhuan3(3);
P1ASF=0x10;//0000,0010,将P1.1置成模拟口
AUXR1&=~0x04;//0000,0100,令ADRJ=0:
10位A/D转换结果的高8位放在ADC_RES寄存器,低2位放在ADC_RESL寄存器
ADC_CONTR|=0x80;//1000,0000打开A/D转换电源
while
(1)
{
ADC_result=get_AD_result(4);//P1.1为A/D当前通道,测量并发送结果
led(ADC_result*19.53);//显示数值。
19.53是AD转换系数:
原公式是ADC_result/256*5V*1000
k=ADC_result*19.53;
putc(DATA_LED[k/100%10]);
}
}
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- STC12C5A60S2AD 电压 高级 采集