51单片机驱动ADC0832模数转换程序lcd1602显示

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

51单片机驱动ADC0832模数转换程序

-lcd1602显示

/*这个芯应用不多*/

#include ;

#define uchar unsigned char

#define uint unsigned int

uchar Chan0Value,Chan1Value;

sbit RS=P1^0; //1602各控制脚

sbit RW=P1^1;

sbit EN=P1^2;

sbit Cs0832= P2^0;

//0832各控制脚

sbit Clk0832= P3^6;

sbit Di0832= P3^7;

sbit Do0832= P3^7;

void delay1ms(unsigned int ms)//延时1毫秒(不够精确的)

{

int i,j;

for(i=0;i;>;i;

}

for(i=0;i<8;i++)

//从低到高取一次数

{

if(Do0832) Dat2|=0x01<

Clk0832=1; //下降沿有效

Clk0832=0;

}

Cs0832=1;

Di0832=1;

Clk0832=1; //数据读取完成,释放所有数据线

if(Dat1==Dat2)

return Dat1; //校验两次数相等,输出

}

/*本程序与其他一般程序最大的不同就是要读两次

一次从最高位到最低位,一次从最低位到最高位,

两次所读值相等即为正常,可以输出*/

/******************************LCD1602*********** ***************************/

/*************************lcd1602程序

**************************/

void wr_com(unsigned char com)//写指令// { delay1ms(1);

RS=0;

RW=0;

EN=0;

P0=com;

delay1ms(1);

EN=1;

delay1ms(1);

EN=0;

}

void wr_dat(unsigned char dat)//写数据// { delay1ms(1);

RS=1;

RW=0;

EN=0;

P0=dat;

delay1ms(1);

EN=1;

delay1ms(1);

EN=0;

}

void lcd_init()//初始化设置//

{

delay1ms(15);

wr_com(0x38);delay1ms(5);

wr_com(0x80);delay1ms(5);

wr_com(0x01);delay1ms(5);

wr_com(0x06);delay1ms(5);

wr_com(0x0c);delay1ms(5);

}

void writevalue(uchar add,uchar dat) {

wr_com(0x80+add);

wr_dat(dat);

}

void zifuchuan(uchar *ch)

{

while(*ch!=0)

wr_dat(*ch++);

delay1ms(20);

}

void main(void)

{

lcd_init();

while(1)

{

Chan0Value=GetValue0832(0);

delay1ms(100);

Chan1Value=GetValue0832(1);

wr_com(0x80);

zifuchuan("Chanal 0:");

writevalue(10,Chan0Value/100+0x30);

writevalue(11,Chan0Value%100/10+0x30);

writevalue(12,Chan0Value%100%10+0x30);

wr_com(0x80+0x40);

zifuchuan("Chanal 1:");

writevalue(0x40+10,Chan1Value/100+0x30);

writevalue(0x40+11,Chan1Value%100/10+0x30); writevalue(0x40+12,Chan1Value%100%10+0x30); delay1ms(1000);

}

}

/*此程序只为调通ADC0832,没有对电压值进行转换

要想得到准确电压值,请把Chan0Value和Chan1Value 的值乘以5再除以255即可。当某一通道没有输入而

悬空时,有可能会显示256的中间值128,这是干扰,可以不理会*/

相关文档
最新文档