找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1944|回复: 13
收起左侧

单片机LCD1602串口可以显示,并口试过很多次都显示不了?

  [复制链接]
ID:1094940 发表于 2023-10-2 01:01 | 显示全部楼层 |阅读模式

连接12864的杜邦线

连接12864的杜邦线

连接stc的杜邦线

连接stc的杜邦线

大佬们,看看小弟这个怎么搞呀,串口可以显示,并口试过很多次都显示不了这是我的代码:

#include <STC15F2K60S2.H>
#include "intrins.h"
#include "string.h"

#define u8 unsigned char
#define u16 unsigned int
#define LCD12864_DATA P0
sbit LCD12864_PSB = P1^3;
sbit LCD12864_RS = P1^0;
sbit LCD12864_RW = P1^1;
sbit LCD12864_EN = P1^2;
//sbit LCD12864_RST = P5^4;


void Delay1us(u16 count)     //@11.0592MHz
{
    while(count-- != 0)
    {
        _nop_();
        _nop_();
        _nop_();
    }
}

u8 lcd12864_check_busy()//检测是否空闲
{
    u8 temp;
    LCD12864_DATA = 0xff;
    LCD12864_RS = 0;//并行的指令
    LCD12864_RW = 1;//并行读写选择信号,1为读,0为写
    LCD12864_EN = 1;//使能信号,1为有效
    Delay1us(1000);
    temp = LCD12864_DATA;
    LCD12864_EN = 0;
    return temp&0x80;
}

void lcd12864_write_command(u8 cmd)//写命令
{
    while(lcd12864_check_busy());
    LCD12864_RS = 0;
    LCD12864_RW = 0;
    LCD12864_EN = 1;
    Delay1us(1000);
    LCD12864_DATA = cmd;
    LCD12864_EN = 0;
}

void lcd12864_write_data(u8 dat)//写数据
{
    while(lcd12864_check_busy());
    LCD12864_RS = 1;
    LCD12864_RW = 0;
    LCD12864_EN = 1;
    Delay1us(1000);
    LCD12864_DATA = dat;
    LCD12864_EN = 0;
}

void lcd12864_init()
{
    LCD12864_PSB = 1;
    lcd12864_write_command(0x01);//1.清屏命令
    Delay1us(1000);
    lcd12864_write_command(0x02);//2.位址归位
    Delay1us(1000);
    lcd12864_write_command(0x0C);//4.显示状态 开
    Delay1us(1000);
    lcd12864_write_command(0x80);//8.设定DDRAM位址
    Delay1us(1000);
    lcd12864_write_command(0x34);//扩充功能设定——扩充指令集动作
    Delay1us(1000);
    lcd12864_write_command(0x30);//扩充功能设定——基本指令集动作
    Delay1us(1000);
}

void lcd12864_display_pos(u8 X , u8 Y)//选择第几行Y;第几列X(则加上X)
{
    u8 addr;
    if(Y == 0)
    {
        addr = 0x80;
    }
    if(Y == 1)
    {
        addr = 0x90;
    }
    if(Y == 2)
    {
        addr = 0x88;
    }
    if(Y == 3)
    {
        addr = 0x98;
    }
    addr = addr+X;
    lcd12864_write_command(addr);
}

void lcd12864_show_char(u8 X , u8 Y , char sign)//显示一个字符
{
    lcd12864_display_pos(X,Y);
    lcd12864_write_data(sign);
}

void lcd12864_show_string(u8 X , u8 Y , char string[])//显示一个字符串
{
    lcd12864_display_pos(X,Y);
    while(*string != '\0')
    {
        lcd12864_write_data(*string++);
    }
}

void main()
{
    P1M1 = 0; P1M0 = 0;
    //P5M0 = 0;
    lcd12864_init();
    lcd12864_show_string(0,0,"某某某某大学");
    lcd12864_show_string(0,1,"地球科学学院");
    lcd12864_show_string(0,2,"21环境01班");
    lcd12864_show_char(0,3,0x02);
    lcd12864_show_string(1,3,"小明呀");
    lcd12864_show_char(7,3,0x02);
    while(1);
}

回复

使用道具 举报

ID:220661 发表于 2023-10-2 08:05 | 显示全部楼层
先查查液晶模块的对比度电位器,啥?没有电位器?
回复

使用道具 举报

ID:857072 发表于 2023-10-2 09:08 来自手机 | 显示全部楼层
人家串口可以显示跟硬件还有啥关系啊
回复

使用道具 举报

ID:1012735 发表于 2023-10-2 10:53 | 显示全部楼层
1.去掉所有CheckBusy检查,可能会死循环导致开机黑屏
2.初始化等命令错误

include.zip

3.78 KB, 下载次数: 4

参考程序

回复

使用道具 举报

ID:1094811 发表于 2023-10-2 11:08 来自手机 | 显示全部楼层
屏后面有个选择串、并的设置,看一下
回复

使用道具 举报

ID:105534 发表于 2023-10-2 11:30 | 显示全部楼层
线有没有漏接,多接的;我也有一块12864屏,按开发板的图接不行,后来按说明书重接就好了
回复

使用道具 举报

ID:1085441 发表于 2023-10-2 12:33 | 显示全部楼层
查查并口时序对不对?仔细看手册。
还有,我用的液晶有INTEL和MOTOROLA两种接口,请看看是不是接口选择不对?
回复

使用道具 举报

ID:1094940 发表于 2023-10-2 13:12 | 显示全部楼层
hy47566398 发表于 2023-10-2 10:53
1.去掉所有CheckBusy检查,可能会死循环导致开机黑屏
2.初始化等命令错误

哥,我屏蔽了,但还是没有显示。
572957ae46dd69bdee13ce87736149e.png
b528edd5aab14cf60c8686bb353aa9e.jpg
回复

使用道具 举报

ID:1094940 发表于 2023-10-2 13:13 | 显示全部楼层
Ppp0011010 发表于 2023-10-2 11:30
线有没有漏接,多接的;我也有一块12864屏,按开发板的图接不行,后来按说明书重接就好了

需要接的都接上了,但是,还是没有显示,,我的代码应该没问题吧
回复

使用道具 举报

ID:771630 发表于 2023-10-2 16:26 | 显示全部楼层
不要检测BUSY,PSB要根据手册选择相对应的电平
回复

使用道具 举报

ID:35873 发表于 2023-10-3 01:41 | 显示全部楼层
可能这个屏默认串口  并口要改动下串并选择的那个电阻  你也可以量下PSB引脚电压  如果串是低电平 那么并就要高电平  排除这个就是程序了 或许延时不对  试试
回复

使用道具 举报

ID:195496 发表于 2023-10-3 07:54 | 显示全部楼层
屏的模式要改一下才能用
回复

使用道具 举报

ID:1055614 发表于 2023-10-3 14:02 | 显示全部楼层
在选择串并口时可以通过程序选择高低电平来完成。
第一种通过PSC口高低电平来选择
第二种也可以通过液晶屏背面 PCB 上面丝印 S 短接为串口,P 点短接为并口
回复

使用道具 举报

ID:1089601 发表于 2023-10-3 18:07 | 显示全部楼层
第6脚DB0的状态是串口和并口的设置,应该检查设置一下。有的屏在电路板上有用焊锡连接的焊盘用于切换串口或并口
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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