lcd1602显示两行怎么写程序呀
#include<reg52.h>
#define uint unsigned int //预定义一下
#define uchar unsigned char
sbit rs=P2^2; //1602的数据/指令选择控制线
sbit rw=P2^1; //1602的读写控制线
sbit en=P2^0; //1602的使能控制线
uchar code table[]="LCD1602-wjz-tjdz"; //要显示的内容1放入数组tablel
uchar code table1[]=" QQ:544806579 "; //要显示的内容2放入数组table1
void delay(uint z) //延时函数
{
uint x,y;
for(x=z;x>0;x--)
for(y=122;y>0;y--);
}
void lcd_wcom(uchar com) //1602写命令函数
{
rs=0; //选择指令寄存器
rw=0; //选择写
P0=com; //把命令字送入P2
delay(5); //延时一小会儿,让1602准备接收数据
en=1; //使能线电平变化,命令送入1602的8位数据口
en=0;
}
void lcd_wdat(uchar dat) //1602写数据函数
{
rs=1; //选择数据寄存器
rw=0; //选择写
P0=dat; //把要显示的数据送入P2
delay(5); //延时一小会儿,让1602准备接收数据
en=1; //使能线电平变化,数据送入1602的8位数据口
en=0;
}
void lcd_init() //1602初始化函数
{
lcd_wcom(0x38); //8位数据,双列,5*7字形
lcd_wcom(0x0c); //开启显示屏,关光标,光标不闪烁
lcd_wcom(0x06); //显示地址递增,即写一个数据后,显示位置右移一位
lcd_wcom(0x01); //清屏
}
void main() //主函数
{
uchar n,m=0;
lcd_init(); //液晶初始化
lcd_wcom(0x80); //显示地址设为80H(即00H,)上排第一位
for(m=0;m<16;m++) //将table[]中的数据依次写入1602显示
{
lcd_wdat(table[m]);
delay(100); //延时
}
lcd_wcom(0x80+0x40); //重新设定显示地址为,即下排第1位
for(n=0;n<16;n++) //将table1[]中的数据依次写入1602显示
{
lcd_wdat(table1[n]);
delay(100); //延时
}
你好,你的程序现在是动态的,如何让它静态显示?菜鸟不懂,多谢赐教
- #include "LCD1602.h"
- #include "Delay.h"
- /*----------------------------
- //向LCD1602写入指令或数据
- //RS=0:写命令
- //RS=1:写数据
- //Content:向LCD1602写入的内容
- -----------------------------*/
- void LCD_Write(uchar RS,uchar Content)
- {
- LCD_RS=RS; //选择写命令或写数据模式
- LCD_RW=0;
- P0=Content; //将要写的数据送到数据总线上
- Delay_us(2); //稍作延时以待数据稳定
- LCD_EN=1; //使能端给一高脉冲,因为初始化函数中已经将lcden置0
- Delay_us(5);
- LCD_EN=0; //将使能端置0以完成高脉冲
- Delay_us(10); //稍作延时
- }
- /*----------------------------
- //向LCD1602写入一个字符 如LCD_ShowChar(1,0,'a');
- //x:1,第一行,2第二行
- //y:1到16
- //dat:向LCD1602写入的字符
- -----------------------------*/
- void LCD_ShowChar(uchar x,uchar y,uchar dat)
- {
- uchar Adr; //LCD地址变量
-
- switch(x)
- {
- case 1:Adr=0x80+y;break; //显示屏第一行
- case 2:Adr=0x80+0x40+y;break; //显示屏第二行
- default:break;
- }
- LCD_Write(0,Adr);
- LCD_Write(1,dat);
- }
- /*----------------------------
- //向LCD1602写入字符串
- //x:1,第一行,2第二行
- //y:1到16
- *dat:指向字符串的首地址
- -----------------------------*/
- void LCD_ShowStr(uchar x,uchar y,uchar *dat)
- {
- uchar i=0;
- uchar pdat; //指针地址变量
-
- pdat= *dat; //把数组首地址付给指针变量
- while(pdat!='\0') //等待读完数组
- {
- LCD_ShowChar(x,y+i,pdat);
- pdat=*(++dat); //指针加一后把地址赋给dat
- i++;
- }
- }
- /*----------------------------
- //显示1个数字
- //x,y :起点坐标
- //num:数值(0~99)
- -----------------------------*/
- void LCD_ShowNum(uchar x,uchar y,uchar num)
- {
- if(num<100)
- {
- LCD_ShowChar(x,y+0,num/10+'0');
- LCD_ShowChar(x,y+1,num%10+'0');
- }
- }
- /*----------------------------
- //初始化LCD1602
- -----------------------------*/
- void LCD_Init()
- {
- LCD_RS=0;
- LCD_RW=0;
- LCD_EN=0;
- LCD_Write(0,0x38); //设置16*2显示,5*7点阵,八位数据接口//看资料
- LCD_Write(0,0x0c); //设置开显示,不显示光标
- LCD_Write(0,0x06); //写一个字符后地址指针加1
- LCD_Write(0,0x01); //显示清0,数据指针清0
- Delay(5); //延时5ms,使之更稳定
- }
你的程序!~!
你的程序!
延迟delay(100)去掉,然后试一下
做的不错,支持了
呵呵大家一起学习学习
第4脚:RS为寄存器选择,高电平时选择数据寄存器、低电平时选择指令寄存器。 第5脚:RW为读写信号线,高电平时进行读操作,低电平时进行写操作。当RS和RW共同为低电平时可以写入指令或者显示地址,当RS为低电平RW为高电平时可以读忙信号,当RS为高电平RW为低电平时可以写入数据。 第6脚:E端
那要第一行显示当前温度,第二行显示转速,都显示当前数值,该怎么写?
小编我来教你:
#include<reg52.h>
#define uchar unsigned char
#define uint unsigned int
sbit rs=P3^5;
sbit lcden=P3^4;
sbit dula=P2^6;
sbit wela=P2^7;
uchar table1[]="I Love You ";
uchar table2[]="14dianxinguan";
void delay(uint x)
{
uint a,b;
for(a=x;a>0;a--)
for(b=10;b>0;b--);
}
void delay1(uint x)
{
uint a,b;
for(a=x;a>0;a--)
for(b=100;b>0;b--);
}
void write_com(uchar com)
{
P0=com;
rs=0;
lcden=0;
delay(10);
lcden=1;
delay(10);
lcden=0;
}
void write_date(uchar date)
{
P0=date;
rs=1;
lcden=0;
delay(10);
lcden=1;
delay(10);
lcden=0;
}
void init()
{
dula=0;
wela=0;
write_com(0x38); //显示模式设置:16×2显示,5×7点阵,8位数据接口
delay(20);
write_com(0x0f); //显示模式设置
delay(20);
write_com(0x01); //清屏幕指令,将以前的显示内容清除
delay(20);
}
void main()
{
uchar a;
init();
write_com(0x80);
delay(20);
for(a=0;a<13;a++)
{
write_date(table1[a]);
delay(20);
}
write_com(0xc0);
delay(50);
for(a=0;a<13;a++)
{
write_date(table2[a]);
delay(40);
}
while(1);
}
再附上一张图,证据确凿
RS RW,E LCD一共就这三个使能端 你多出来的是接哪的
加图中 方框图里面的 三行代码可实现 最终保持静态!
你好,我在编译这个代码的时候出现lunprintable character 0xA0 skipped 的错误请问一下应该怎么改?
不用改,直接砸电脑
效果不错 试过了
作为检测LCD的程序使用还是挺好的
非常详细,谢谢帮忙的朋友。