void adc_init(void)
{
ADCON=Bin(10010010);/* 使能ADC模块,使用外部参考电压 */
ADT=Bin(11100111);
/*ADC时钟为系统时钟的32分频,T(ad)=32/12M)=8/3us
ADC采样时间为15个ADC时钟 T(s)= (14+1)*T(ad) = 40us
ADC全部转换时间=12tAD+采样时间=12*(8/3)+40=72us*/
ADCH = Bin(00000010);/* P4.1用作ADC通道1 AN1 */
ADCON |= Bin(00000001); /*设置开始AD转换*/
EADC=1;
}
void adc(void)interrupt 6 //ADC中断
{
EA=0;
ADCON &= Bin(10111111); /* 清ADC中断请求标志,ADCIF=0 */
adc_num+=ADDH; //将采样寄存器的值
if(++num1==256) /* 计数器:AD采样次数计数器 */
{
num2=HIBYTE(adc_num);
adc_num = 0x00;/* 清AD值寄存器 */
num1= 0x00;/* 清256次计数器 */
ADCON &= Bin(01111111); /* 关闭ADCs */
}
adc_temp=(ulong)num2*(5000/1024);
ADCON |= Bin(00000001); //GO/DONE标志
EA=1;
}
void main(void)
{
CLK_Init();//初始化时钟
GPIO_Init(); //初始化引脚
adc_init();//ADC初始化
timer2();//定时器初始化
System_DelayMicrosecond(500);
/*---------------------------数码管自检显示-------------------------------*/
NixieTube_DisplayOff(0x01);//关闭数码管模块1显示,避免开机显示乱码
NixieTube_DisplayOff(0x02);//关闭数码管模块1显示,避免开机显示乱码
while(1)
{
//adc_valuve=adcprocess();//获取ADC的值
//adc_temp=(ulong)adc_valuve*(5000/1024);
NixieTube_DisplayIntegerNumber(adc_temp,0x02);
}
} |