找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1301|回复: 7
收起左侧

LCD1602烧录单片机程序显示黑色方格,不显示内容,请大佬帮忙

[复制链接]
ID:199475 发表于 2024-2-15 15:09 | 显示全部楼层 |阅读模式

stc8h8k64u     代码是论坛上的,只显示方格,不显示内容,背光调节了也没有,请大佬看看是什么原因

#include<STC8h.h>
#include <stdio.h>

#define uchar unsigned char
#define uint unsigned int
        sbit RS=P0^5;
sbit  E=P0^6;
sbit  RW=P0^7;
sbit   DB=P2;

void delay(uint del)   //延时1ms
      {
         uint i,j;
         for(i=0;i<del;i++)
            for(j=0;j<=168;j++);
      }
                       
void writecmd(uchar com)  
       {
         E=0;       //为什么要写这一条呢,看看时序图就清楚了
         RS=0;
         RW=0;
         P2 = com;   
         delay(2);  //延时一下会稳定很多,后面一条也是一样的
         E=1;  
         delay(2);
         E=0;
       }
                         
                         
        void writedata(uchar dat)  
       {
         E=0;       //为什么要写这一条呢,看看时序图就清楚了
         RS=1;
         RW=0;
         P0 = dat;   
         delay(2);  //延时一下会稳定很多,后面一条也是一样的
         E=1;  
         delay(2);
         E=0;
       }                 
                         
                void init(void)              
    {
       delay(15);
       writecmd(0x38);
       delay(5);
       writecmd(0x38);
       delay(5);
       writecmd(0x38);
       writecmd(0x38);
       writecmd(0x08);
       writecmd(0x01);
       writecmd(0x06);
       writecmd(0x0c);
     }         
                       
                       
                       
                       
                       
                uchar tab1[]=" www.51hei.com  ";  //要显示什么就在这儿改       
uchar  a[]="0123456";
uchar table2[]="sun";
uchar  week[][3] = {"MON","TUE","WED","THU","FRI","SAT","SUN"};

void main()
{
       
        uchar j;
         P_SW2 |= 0x80;  //扩展寄存器XFR访问使能

    P0M1 = 0x00;   P0M0 = 0x00;   //设置为准双向口
    P1M1 = 0x00;   P1M0 = 0x00;   //设置为准双向口
    P2M1 = 0x00;   P2M0 = 0x00;   //设置为准双向口
    P3M1 = 0x00;   P3M0 = 0x00;   //设置为准双向口
    P4M1 = 0x00;   P4M0 = 0x00;   //设置为准双向口
    P5M1 = 0x00;   P5M0 = 0x00;   //设置为准双向口
    P6M1 = 0x00;   P6M0 = 0x00;   //设置为准双向口
    P7M1 = 0x00;   P7M0 = 0x00;   //设置为准双向口
          
       
   init();
       
       writecmd(0x80);    //告诉液晶在哪个地方显示 (设置地址指针)//80H+00

       for(j=0;j<16;j++)  //有16个字符,要循环16次
           {
            writedata(tab1[j]);
                 delay(2);
           }

                                         
                                         
                       
                                         
        while(1);
}


IMG_20240215_150108.jpg
回复

使用道具 举报

ID:213173 发表于 2024-2-15 22:03 | 显示全部楼层
你说代码是论坛上的,难道照抄都不会?可见粗心至极! 无标题.jpg
  1. #include <STC8h.h>
  2. #include <stdio.h>

  3. #define uchar unsigned char
  4. #define uint unsigned int
  5. sbit  RS=P2^5;
  6. sbit  E= P2^6;
  7. sbit  RW=P2^7;
  8. //sbit  DB=P2;

  9. void delay(uint del)   //延时1ms
  10. {
  11.         uint i,j;
  12.         for(i=0;i<del;i++)
  13.                 for(j=0;j<=168;j++);
  14. }
  15.                        
  16. void writecmd(uchar com)  
  17. {
  18.         E=0;       //为什么要写这一条呢,看看时序图就清楚了
  19.         RS=0;
  20.         RW=0;
  21.         P0 = com;   
  22.         delay(2);  //延时一下会稳定很多,后面一条也是一样的
  23.         E=1;  
  24.         delay(2);
  25.         E=0;
  26. }


  27. void writedata(uchar dat)  
  28. {
  29.         E=0;       //为什么要写这一条呢,看看时序图就清楚了
  30.         RS=1;
  31.         RW=0;
  32.         P0 = dat;   
  33.         delay(2);  //延时一下会稳定很多,后面一条也是一样的
  34.         E=1;  
  35.         delay(2);
  36.         E=0;
  37. }                 

  38. void init(void)              
  39. {
  40.         delay(15);
  41.         writecmd(0x38);
  42.         delay(5);
  43.         writecmd(0x38);
  44.         delay(5);
  45.         writecmd(0x38);
  46.         writecmd(0x38);
  47.         writecmd(0x08);
  48.         writecmd(0x01);
  49.         writecmd(0x06);
  50.         writecmd(0x0c);
  51. }         
  52. uchar tab1[]=" www.51hei.com  ";  //要显示什么就在这儿改      
  53. uchar a[]="0123456";
  54. uchar table2[]="sun";
  55. uchar week[][3] = {"MON","TUE","WED","THU","FRI","SAT","SUN"};

  56. void main()
  57. {      
  58.         uchar j;
  59.         P_SW2 |= 0x80;  //扩展寄存器XFR访问使能
  60.         P0M1 = 0x00;   P0M0 = 0x00;   //设置为准双向口
  61.         P1M1 = 0x00;   P1M0 = 0x00;   //设置为准双向口
  62.         P2M1 = 0x00;   P2M0 = 0x00;   //设置为准双向口
  63.         P3M1 = 0x00;   P3M0 = 0x00;   //设置为准双向口
  64.         P4M1 = 0x00;   P4M0 = 0x00;   //设置为准双向口
  65.         P5M1 = 0x00;   P5M0 = 0x00;   //设置为准双向口
  66.         P6M1 = 0x00;   P6M0 = 0x00;   //设置为准双向口
  67.         P7M1 = 0x00;   P7M0 = 0x00;   //设置为准双向口
  68.   
  69.         init();
  70.         writecmd(0x80);    //告诉液晶在哪个地方显示 (设置地址指针)//80H+00
  71.         for(j=0;j<16;j++)  //有16个字符,要循环16次
  72.         {
  73.                 writedata(tab1[j]);
  74.                 delay(2);
  75.         }       
  76.         while(1);
  77. }
复制代码




回复

使用道具 举报

ID:161164 发表于 2024-2-15 22:47 | 显示全部楼层
调一下V0接的电位器
回复

使用道具 举报

ID:584814 发表于 2024-2-17 20:14 | 显示全部楼层
对比度调整不当或接线错(包括代码的线序、延时等错)
回复

使用道具 举报

ID:517951 发表于 2024-2-19 07:41 | 显示全部楼层
先调下第三脚V0的电压, 量下是多少, 调小,很可能就有惊喜: 字出来了. 如果没有惊喜, 要就要再调下初始化代码, 数据线连接是否正确,无虚焊.
回复

使用道具 举报

ID:47541 发表于 2024-2-19 15:41 | 显示全部楼层
对比度调整不当
回复

使用道具 举报

ID:199475 发表于 2024-2-21 18:54 | 显示全部楼层
wulin 发表于 2024-2-15 22:03
你说代码是论坛上的,难道照抄都不会?可见粗心至极!

修改了延时,可以了,谢谢

#include<STC8h.h>
#include <stdio.h>
#include "intrins.h"
#define uchar unsigned char
#define uint unsigned int
        sbit E=P2^5;                //1602使能引脚
sbit RW=P2^6;                //1602读写引脚        
sbit RS=P2^7;


void Delay5ms()                //@11.0592MHz
{
        uchar data i, j;

        _nop_();
        _nop_();
        i = 72;
        j = 205;
        do
        {
                while (--j);
        } while (--i);
}
void Delay2ms()                //@11.0592MHz
{
        unsigned char data i, j;

        i = 29;
        j = 183;
        do
        {
                while (--j);
        } while (--i);
}
void Delay15ms()                //@11.0592MHz
{
        unsigned char data i, j;

        _nop_();
        _nop_();
        i = 216;
        j = 109;
        do
        {
                while (--j);
        } while (--i);
}

                       
void writecmd(uchar com)  
       {
         E=0;       //为什么要写这一条呢,看看时序图就清楚了
         RS=0;
         RW=0;
         P0 = com;   
         Delay2ms();  //延时一下会稳定很多,后面一条也是一样的
         E=1;  
         Delay2ms();
         E=0;
       }
                         
                         
        void writedata(uchar dat)  
       {
         E=0;       //为什么要写这一条呢,看看时序图就清楚了
         RS=1;
         RW=0;
         P0 = dat;   
         Delay2ms();  //延时一下会稳定很多,后面一条也是一样的
         E=1;  
         Delay2ms();
         E=0;
       }                 
                         
                void init(void)              
    {
      Delay15ms();
       writecmd(0x38);
       Delay5ms();
       writecmd(0x38);
       Delay5ms();
       writecmd(0x38);
       writecmd(0x38);
       writecmd(0x08);
       writecmd(0x01);
       writecmd(0x06);
       writecmd(0x0c);
     }         
                       
                       
                       
                       
                       
                uchar tab1[]=" www.51hei.com  ";  //要显示什么就在这儿改       


void main()
{
       
             uchar j;
             P_SW2 |= 0x80;  //扩展寄存器XFR访问使能

    P0M1 = 0x00;   P0M0 = 0x00;   //设置为准双向口
    P1M1 = 0x00;   P1M0 = 0x00;   //设置为准双向口
    P2M1 = 0x00;   P2M0 = 0x00;   //设置为准双向口
    P3M1 = 0x00;   P3M0 = 0x00;   //设置为准双向口
    P4M1 = 0x00;   P4M0 = 0x00;   //设置为准双向口
    P5M1 = 0x00;   P5M0 = 0x00;   //设置为准双向口
    P6M1 = 0x00;   P6M0 = 0x00;   //设置为准双向口
    P7M1 = 0x00;   P7M0 = 0x00;   //设置为准双向口
          
       
         init();
             
       writecmd(0x80);    //告诉液晶在哪个地方显示 (设置地址指针)//80H+00
         
       for(j=0;j<16;j++)  //有16个字符,要循环16次
           {
            writedata(tab1[j]);
                                                 Delay5ms();
                 
           }
         
                                         
                                         
                       
                                         
        while(1);
}
回复

使用道具 举报

ID:199475 发表于 2024-2-21 18:55 | 显示全部楼层
修改了延时,已经可以了
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表