一、怎样利用液晶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还是蛮熟悉的。大抵相识。
希望能帮到你。