下面是我写的一串代码,实现了1602的正常显示
#include<reg51.h>
#define uchar unsigned char
#define uint unsigned int
sbit rs=P2^5;
sbit rw=P2^6;
sbit e=P2^7;
uchar sz1[]=" a !";
uchar sz2[]="--------56---- ";
void delay_50us(uint t)
{
uchar j;
for(;t>0;t--)
for(j=19;j>0;j--);
}
void delay_50ms(uint t)
{
uint j;
for(;t>0;t--)
for(j=6245;j>0;j--);
}
void write_com(uchar com)
{
e=0;
rs=0;
rw=0;
P0=com;
delay_50us(100);
e=1;
delay_50us(100);
e=0;
}
void write_data(uchar dat)
{
e=0;
rs=1;
rw=0;
P0=dat;
delay_50us(100);
e=1;
delay_50us(100);
e=0;
}
void init(void)
{
delay_50us(300);
write_com(0x38);
delay_50us(100);
write_com(0x38);
delay_50us(100);
write_com(0x38);
write_com(0x38);
write_com(0x08);
write_com(0x01);
write_com(0x06);
write_com(0x0c);
}
void main()
{
uchar k;
init ();
write_com(0x81);
for(k=0;k<16;k++)
{
write_data(sz1[k]);
delay_50us;
}
write_com(0x80 + 0x40);
for(k=0;k<16;k++)
{
write_data(sz2[k]);
delay_50us;
}
while(1);
}
但是想让1602显示一个变量,想实现传感器传回来的任意值都能显示出来,但是想了很久都没找到办法,还请大神指教
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
这是我当时用的函数/***************在制定位置显示一个字符***************************************************/
/*******************显示字符串*********************************************************/
void Disp_1602(unsigned char x,unsigned char y,char *p)//unsigned char count)
{
unsigned char i=0;
while(*p)
{
if(i==0){WriteOrder(0x80+x);}
if(i==16){WriteOrder(0xC0+y);} //发送显示地址
WriteData(*p); //发送要显示的字符编码
i++;
p++;
}
//少于32个自动补空格
/*
unsigned char i;
for(i=0;i<count;i++)
{
if (0 == y) x |= 0x80; //当要显示第一行时地址码+0x80;
else x |= 0xC0; //在第二行显示是地址码+0xC0;
WriteOrder(x); //发送地址码
WriteData(*p); //发送要显示的字符编码
x++;
p++;
}
*/
}
懂了么?
对于这个函数,当时我们C语言老师有讲过,呵呵 看看就恍然醒悟
一周热门 更多>