怎样利用液晶1602显示AD转换数据?以下是本人所写的程序。

一、怎样利用液晶1602显示AD转换数据?以下是本人所写的程序。

#include<reg51.h>

#define uint unsigned int

#define uchar unsigned char

sbit sta=P3^4;

sbit eoc=P3^3;

sbit oe=P3^2;

sbit clk=P3^1;

sbit lcdrs=P3^5;

sbit lcdrw=P3^6;

sbit lcdoe=P3^7;

uchar code table1[]=Voltage!;

uchar code table2[]=(V);

uchar tt0;

void delay(uint x)

{

uchar t;

while(x--) for(t=0;t<120;t++);

}

void timer0() interrupt 1

{

TH0=(65536-1000)/256;

TL0=(65536-1000)%256;

clk=~clk;

}

void write_com(uchar com)

{

lcdrs=0;

lcdoe=0;

P0=com;

lcdoe=1;

delay(5);

lcdoe=0;

delay(5);

}

void write_dat(uchar dat)

{

lcdrs=1;

lcdoe=0;

P0=dat;

lcdoe=1;

delay(5);

lcdoe=0;

delay(5);

}

void init_lcd()

{

uchar i;

lcdrw=0;

write_com(0x38);

write_com(0x0c);

write_com(0x06);

write_com(0x01);

write_com(0x84);

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

   {

   write_dat(table1[i]);

   delay(5);

   }

   write_com(0x80+0x48);

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

   {

   write_dat(table2[i]);

   delay(5);

   }

}

void display(uchar dat)

{

uchar v;

v=dat;

write_com(0x80+0x44);

write_dat(0x30+v/51);

write_com(0x80+0x45);

write_dat('.');

write_com(0x80+0x46);

write_dat(0x30+v%51/5.1);

write_com(0x80+0x47);

write_dat(0x30+(v%51%10));

}

void main()

{

init_lcd();

TH0=(65536-1000)/256;

TL0=(65536-1000)%256;

TMOD=0x01;

EA=1;

ET0=1;

TR0=1;

while(1)

{

sta=0;

sta=1;

sta=0;

while(eoc==0);

oe=1;

display(P2);

oe=0;

}

这是我以前做过的测试程序,或许对你有所帮助,不明白的话可以加976434210,也有ADC0832的测试程序。

二、51 单片机1602 液晶显示数字

1602显示要转换为ANSI码

如:

1602液晶要显示数字5-----

把0x35送1602的显示RAM(因为数字5的ANSI码是0x35)

三、有一段程序,应该是关于LCD1602的 ,看不懂。。所以求教

全部看不懂?不至于吧。

为什么+0x30呢,是把数字转化为ASCII,然后1602就以字符的形式显示。

void lcd_pos(uchar pos)//这个函数用于将光标移动到指定位置(如同显示器的鼠标一样,移动到指定位置然后进行写数据显示)

{

WriteCommandLCM(pos|0x80); //数据指针=80+地址变量

}

void play()

{

uchar i;

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

{

display2[i]=display[i]+0x30;

}

display2[5]=display[4]/10+0x30; //时单位数据处理//dispaly[4]/10得到小时,+0x30转为ASCII,用于液晶显示

display2[4]=display[4]%10+0x30;

lcd_pos(0x40);

WriteDataLCM(display2[5]); //显示时 (光标会自动+1,这个与初始化配置有关)

WriteDataLCM(display2[4]);

WriteDataLCM(0x3a); //显示':'

WriteDataLCM(display2[3]); //显示分

WriteDataLCM(display2[2]);

WriteDataLCM(0x3a); //显示':' //:对应的ACSII 应该是0x3a

WriteDataLCM(display2[1]); //显示秒

WriteDataLCM(display2[0]);

}

void ba()

{

display4[0]=display3[0]+0x30;

display4[1]=display3[1]+0x30;

display4[2]=display3[2]+0x30;

display4[3]=display3[3]+0x30;

display4[5]=display3[5]+0x30; //时单位数据处理

display4[4]=display3[4]+0x30;

lcd_pos(0x40);

WriteDataLCM(display4[5]);

WriteDataLCM(display4[4]); //显示秒WriteDataLCM(display4[5]);

WriteDataLCM(0x3a); //显示':'

WriteDataLCM(display4[3]);

WriteDataLCM(display4[2]); //显示分

WriteDataLCM(0x3a); //显示':'

WriteDataLCM(display4[1]);

WriteDataLCM(display4[0]); //显示时

}

大概就这样,长时间不用1602了,不过12864还是蛮熟悉的。大抵相识。

希望能帮到你。

上一篇:下一篇:海康威视网络摄像头200万,300万,400万效果区别大吗
下一篇:上一篇:返回栏目