标题: 这个LCD1602的显示程序不对吗? [打印本页]

作者: QQQQ987    时间: 2022-8-29 23:47
标题: 这个LCD1602的显示程序不对吗?
#include<reg52.h>
#define uint unsigned int
#define uchar unsigned char
        sbit rs=P3^5;  //1602的数据,指令选择线
  sbit rw=P3^6;  //1602的读写控制线
  sbit en=P3^7; //1602的使能控制线
uchar code table[]="LCD1602 check ok";
uchar code table1[]="study up";
void delay(uint n)  
{
        uint x,y;
        for(x=n;x>0;x--)
        for(y=110;y>0;y--);
}
void lcd_wcom(uchar com)  //1602的写命令涵数
{
        rs=0;  //选择指令寄存器
        rw=0;  //选择写
        P2=com;  //把命令送入P2
        delay(5);
        en=1;  //使能线电平变化,命令写入1602的8位数据口
        en=0;
}
void lcd_wdat(uchar dat)
{
        rs=1;
        rw=0;
        P2=dat;
        en=1;
        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(0x08);
        for(m=0;m<16;m++)  //将tabe[]中的数据依次写入1602中
        {
                lcd_wdat(table[m]);
                delay(20);
        }
        lcd_wcom(0x80+0x44); //重新设定显示地址为0xc4,下排第5位
        for(n=0;n<8;n++)   //将tabe1[]中的数据依次写入1602中
        {
                lcd_wdat(table1[n]);
                delay(20);
        }
        while(1);
}                        
怎 屏幕显示不出来呢?大家帮看下——


作者: wulin    时间: 2022-8-30 06:04
主要错误:lcd_wcom(0x08);正确: lcd_wcom(0x80);





  1. #include<reg52.h>
  2. #define uint unsigned int
  3. #define uchar unsigned char
  4. sbit rs=P3^5;  //1602的数据,指令选择线
  5. sbit rw=P3^6;  //1602的读写控制线
  6. sbit en=P3^7; //1602的使能控制线
  7. uchar code table[]="LCD1602 check ok";
  8. uchar code table1[]="study up";
  9. void delay(uint n)  
  10. {
  11.         uint x,y;
  12.         for(x=n;x>0;x--)
  13.                 for(y=110;y>0;y--);
  14. }
  15. void lcd_wcom(uchar com)  //1602的写命令涵数
  16. {
  17.         rs=0;  //选择指令寄存器
  18.         rw=0;  //选择写
  19.         en=1;
  20.         P2=com;  //把命令送入P2
  21.         delay(1);
  22.         en=0;  //使能线 电平下降沿,命令写入1602的8位数据口
  23. }
  24. void lcd_wdat(uchar dat)
  25. {
  26.         rs=1;
  27.         rw=0;
  28.         en=1;
  29.         P2=dat;
  30.         delay(1);
  31.         en=0;
  32. }
  33. void lcd_init()  //1602初始化涵数
  34. {
  35.         lcd_wcom(0x38);  //8位数据,双列,5*7字形
  36.         lcd_wcom(0x0c);  //开启显示屏,关光标
  37.         lcd_wcom(0x06);  //显示地址递,写一数据后,显示位置后移一位
  38.         lcd_wcom(0x01);  //清屏
  39. }
  40. void main()  //主涵数
  41. {
  42.         uchar n,m=0;
  43.         lcd_init();  //液晶初始化
  44.         lcd_wcom(0x08);
  45.         lcd_wcom(0x80);
  46.         for(m=0;m<16;m++)  //将tabe[]中的数据依次写入1602中
  47.         {
  48.                 lcd_wdat(table[m]);
  49.                 delay(20);
  50.         }
  51.         lcd_wcom(0x80+0x44); //重新设定显示地址为0xc4,下排第5位
  52.         for(n=0;n<8;n++)   //将tabe1[]中的数据依次写入1602中
  53.         {
  54.                 lcd_wdat(table1[n]);
  55.                 delay(20);
  56.         }
  57.         while(1);
  58. }
复制代码




作者: QQQQ987    时间: 2022-9-7 02:11
wulin 发表于 2022-8-30 06:04
主要错误:lcd_wcom(0x08);正确: lcd_wcom(0x80);

多谢你的审查。




欢迎光临 (http://www.51hei.com/bbs/) Powered by Discuz! X3.1