您现在的位置是:首页 > 行业发展

ADC应用实例---电压表

智慧创新站 2025-06-05【行业发展】277人已围观

简介大家好,前面和大家分享了好多关于ADC的知识,今天来看一个实例,尽管这次用的芯片已经基本上没人用了,但是这不影响我们学习!话不多说了,直接上代码。主函数include""definepulse0832()_nop_();_nop_();CLK_0832=1;_nop_();_nop_...

大家好,前面和大家分享了好多关于ADC的知识,今天来看一个实例,尽管这次用的芯片已经基本上没人用了,但是这不影响我们学习!话不多说了,直接上代码。

主函数

include""

definepulse0832()_nop_();_nop_();CLK_0832=1;_nop_();_nop_();CLK_0832=0

//把模拟电压值转换成8位二进制数并返回

unsignedcharread0832()

{

unsignedchari,ch=0,ch1=0;

CS_0832=0;//片选,DO为高阻态

DI_0832=1;

//此处暂停T-SetUp:250ns(由pulse0832完成)

pulse0832();//第一个脉冲,起始位,DI置高

DI_0832=1;

pulse0832();//第二个脉冲,DI=1表示双通道单极性输入

DI_0832=1;

pulse0832();//第三个脉冲,DI=1表示选择通道1(CH2)

//51单片机为准双向IO口:应先写入1再读取

DI_0832=1;

//MSBFIRSTDATA

for(i=0;i8;++i){

pulse0832();

ch=1;

if(DO_0832==1)

ch|=0x01;

}

//MSBFIRST输出的最后一位与LSBFIRST输出的第一位是在

//同一个时钟下降沿之后,故此处先执行读取,后执行pulse

//LSBFIRSTDATA

for(i=0;i8;++i){

ch1=1;

if(DO_0832==1)

ch1|=0x80;

pulse0832();

}

CS_0832=1;//取消片选,一个转换周期结束

return(ch==ch1)?ch:0;//返回转换结果

}

LCD1602液晶驱动函数

defineLCD_RS_0LCD_RS=0

defineLCD_RW_0LCD_RW=0

defineLCD_EN_0LCD_EN=0

include""

#defineDELAY_1602delayms(5)

voidwrite1602_com(unsignedcharcom)

{

LCD_RS_0;

LCD1602=com;

DELAY_1602;

LCD_EN_1;

DELAY_1602;

LCD_EN_0;

}

voidwrite1602_dat(unsignedchardat)

{

LCD_RS_1;

LCD1602=dat;

DELAY_1602;

LCD_EN_1;

DELAY_1602;

LCD_EN_0;

}

voidinit1602(void)

{

LCD_RW_0;

write1602_com(0x38);

write1602_com(0x0C);

write1602_com(0x06);

write1602_com(0x01);

最后再来一张图

有问题欢迎大家一起讨论、一起学习

很赞哦!(31)