数码之家

 找回密码
 立即注册
搜索
查看: 1420|回复: 21

[综合] 如何判断这款串口屏是否正常?

[复制链接]
发表于 2023-3-8 10:17:31 | 显示全部楼层 |阅读模式
本帖最后由 lmn2005 于 2023-3-8 17:22 编辑

手头有几个15脚串口屏


据商家说,驱动芯片是st7565,于是参考两位大佬的贴子:
https://www.mydigit.cn/thread-189766-1-1.html
https://www.mydigit.cn/thread-271780-1-1.html
修改了其中的引脚定义,但结果不尽人意,均无法进行驱动,调整对比度也一样无效果。
请问高手:这款显示屏能否通过简单的方式进行判断?例如通电不驱动能显示淡淡的黑底吗?
还有,发送什么命令,显示屏能回应,就像IIC的应答一样?
谢谢!


本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x

打赏

参与人数 1家元 +10 收起 理由
nokia5320 + 10

查看全部打赏

 楼主| 发表于 2023-3-12 16:46:06 | 显示全部楼层
商家提供的引脚资料是
1至6---NC
7---GND
8---CS
9---RST
10---A0
11---SCL
12---SDA
13---VCC
14---GND
15---NC
请玩过同款屏的朋友说一说,这引脚功能是否有误?

回复 支持 1 反对 0

使用道具 举报

 楼主| 发表于 2023-3-13 13:45:10 | 显示全部楼层
触景情伤 发表于 2023-3-13 11:22
15是脚对地电容…其他的都对了…

谢谢!有空加个电容试试。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-3-13 13:55:09 | 显示全部楼层
触景情伤 发表于 2023-3-13 13:46
其实不加电容也行…电压是3.3v哈…

电压采用3.3V的,就是驱动不了呀。现在还找不到原因。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-3-13 14:28:24 | 显示全部楼层
本帖最后由 lmn2005 于 2023-3-13 14:30 编辑
触景情伤 发表于 2023-3-13 14:10
你用啥片子驱动的?我试过51和stm8都没有问题

51的,芯片为STC8H8K64U
程序包:https://wwar.lanzout.com/ixUft0pz3bza

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-3-13 14:32:23 | 显示全部楼层
程序是参考本坛中的大佬的,他们通过验证的,我只改了延时函数和引脚定义。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-3-13 17:43:35 | 显示全部楼层
触景情伤 发表于 2023-3-13 14:29
换c51试试…时序不对也点不亮的

/*********************************
函数名称:Lcd_Init
功能:Lcd初始化
输入:无
输出:无
备注:
*********************************/
void Lcd_init()
{
  SDA = 0;
  cs = 0;
  rst = 0; // 硬复位
  delayms(15);
  rst = 1;

  Lcd_write_cmd(0xE2); // 软复位
  Lcd_write_cmd(0xA2); // 1/9 bias                不懂这个
  Lcd_write_cmd(0xA0); // 垂直镜像关,0xa0关 0xa1开
  Lcd_write_cmd(0xc8); // 水平镜像关,0xc8关 0x19开
  Lcd_write_cmd(0xAe); // 关全部显示,0xa4关,0xa5开
  Lcd_write_cmd(0xA6); // 关反显,0xa6关,0xa7开
     //Lcd_write_cmd(0x24);//v0电阻设4        升压关
  Lcd_write_cmd(0x81);
  Lcd_write_cmd(0x0f); // v0输出设          对比度
  Lcd_write_cmd(0xF8);
  Lcd_write_cmd(0x00); // 升压比设2x-                 不懂这个
     //Lcd_write_cmd(0x2C);//电源控制设4
     //delayms(22);
     //Lcd_write_cmd(0x2E);//电源控制设6
     //delayms(22);
  Lcd_write_cmd(0x2f); // 电源控制设8
  delayms(8);
  Lcd_write_cmd(0x40); // 显存起始设0
  Lcd_write_cmd(0xAF); // 开显示,0xae关,0xaf开
  Lcd_cls();           // 清屏
  //Lcd_set_pos(0, 0);   // 坐标归位
  delayms(22);
}
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-3-14 10:51:53 | 显示全部楼层
xixia001 发表于 2023-3-13 18:29
Lcd_write_cmd(0x0f); // v0输出设          对比度
感觉对比度低了,调大点试试

0xff也没有作用,请问最高对比度可以是多少?
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-3-14 19:58:15 | 显示全部楼层
都试了,还是不行,估计是屏本身的问题,有时间再换其他的屏试试。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-3-15 08:32:57 | 显示全部楼层
sailor0908 发表于 2023-3-14 21:57
我记得st7565是SPI总线的,用iic的程序肯定不行。

没错的,用的SPI总线的:

ST7565.h:

/*
模块名称:ST7565驱动(头文件)
作者:LiZi
制作时间:2017.2.18
*/
#ifndef _ST7565_H
#define _ST7565_H

#include <reg52.h>

extern void delayms(unsigned int ms);
void Lcd_write_byte(unsigned char Byte);
void Lcd_write_cmd(unsigned char cmd);
void Lcd_write_dat(unsigned char dat);
void Lcd_set_pos(unsigned char x,y);
void Lcd_cls();
void Lcd_init();
void Lcd_point(unsigned char x,y);
void Lcd_line(unsigned char x1,y1,x2,y2);
void Lcd_pic(unsigned char x0,y0,x1,y1,unsigned char *pic);
void Lcd_P8x16char(unsigned char x,y,char_,bit b);
void Lcd_P8x16Str(unsigned char x,y,unsigned char *ch,bit b);
void Lcd_P16x16Ch(unsigned char x, y, N);

#endif



ST7565.c

/*
模块名称:ST7565驱动
作者:LiZi
制作时间:2017.2.18
*/
#include "ST7565.h"
#include "zm.h"
#include <reg52.h>
#include <intrins.h>

sbit cs = P1 ^ 3;//8
sbit rst = P1 ^ 7;//9
sbit A0 = P1 ^ 6;//10
sbit SCL = P1 ^ 5;//11
sbit SDA = P1 ^ 4;//12

/*********************************
函数名称:Lcd_write_byte
功能:Lcd写一个字节
输入:写入内容
输出:无
备注:
*********************************/
void delay_IIC()
{
        //unsigned char i = 0;
        //for (i = 0; i < 2; i++)
        _nop_();_nop_();       
}       

void Lcd_write_byte(unsigned char Byte)
{
  unsigned char i = 0;
  for (i = 0; i < 8; i++)
  {
    SCL = 0;
        delay_IIC();
    if (Byte & 0x80)
      SDA = 1;
    else
      SDA = 0;
        delay_IIC();
    Byte <<= 1;
    SCL = 1;
        delay_IIC();
  }
}

/*********************************
函数名称:Lcd_write_cmd
功能:Lcd写指令
输入:写入指令
输出:无
备注:
*********************************/
void Lcd_write_cmd(unsigned char cmd)
{
  A0 = 0;//delay_IIC();
  Lcd_write_byte(cmd);
}

/*********************************
函数名称:Lcd_write_dat
功能:Lcd写数据
输入:写入数据
输出:无
备注:
*********************************/
void Lcd_write_dat(unsigned char dat)
{
  A0 = 1;//delay_IIC();
  Lcd_write_byte(dat);
}

/*********************************
函数名称:Lcd_set_pos
功能:Lcd设置坐标
输入:x坐标,y坐标
输出:无
备注:
*********************************/
void Lcd_set_pos(unsigned char x, y)
{
  Lcd_write_cmd(0xb0 + y);                 // 页地址
  Lcd_write_cmd(((x & 0xf0) >> 4) | 0x10); // 低地址
  Lcd_write_cmd((x & 0x0f) | 0x00);        // 高地址
}

/*********************************
函数名称:Lcd_cls
功能:Lcd清屏
输入:无
输出:无
备注:
*********************************/
void Lcd_cls()
{
  unsigned char y, x;
  for (y = 0; y < 8; y++)
  {
    Lcd_write_cmd(0xb0 + y); // 页地址
    Lcd_write_cmd(0x00);     // 低地址
    Lcd_write_cmd(0x10);     // 高地址
    for (x = 0; x < 128; x++)
      Lcd_write_dat(0x00);
  }
}
/*********************************
函数名称:Lcd_Init
功能:Lcd初始化
输入:无
输出:无
备注:
*********************************/
void Lcd_init()
{
    //SCL =1;
    //SDA = 0;                                   //
    cs =0;
    rst = 0;                                 //硬复位
    delayms(10);
        rst = 1;                                        //复位结束
        delayms(10);       
       
        Lcd_write_cmd(0xe2); //软件复位
    delayms(200);
    Lcd_write_cmd(0x2f); //内部电源控制模式:VC,VR,VF=111
     delayms(100);
   //Lcd_write_cmd(0x24); //对比度粗调                0x20-0x27  数值越大,对比越强
    Lcd_write_cmd(0x81); //对比度细调指令,下一行输入对比度值0-3f
   Lcd_write_cmd(0x3f); //修改这个值可以改变对比度      
   Lcd_write_cmd(0xa2); //设置偏压0xa2:LCD BIAS=1/9;0xa3:LCD BIAS=1/7
      
   Lcd_write_cmd(0xa0); //列扫描方向:从左到右,ADC=0(SEG1->SEG132)
   Lcd_write_cmd(0xc8); //页扫描方向:从上到下,SHL=1(COM64->COM1)
   

  Lcd_write_cmd(0x40); //起始行
  Lcd_write_cmd(0xe0); //写入数据时列地址自动加1,读时不变
   Lcd_write_cmd(0xaf); //开显示
       
/*       
  SDA = 0;
  cs = 0;
  rst = 0; // 硬复位
  delayms(15);
  rst = 1;
       

  Lcd_write_cmd(0xE2); // 软复位
  Lcd_write_cmd(0xA2); // 1/9 bias                不懂这个
  Lcd_write_cmd(0xA0); // 垂直镜像关,0xa0关 0xa1开
  Lcd_write_cmd(0xc8); // 水平镜像关,0xc8关 0x19开
  Lcd_write_cmd(0xAe); // 关全部显示,0xa4关,0xa5开
  Lcd_write_cmd(0xA6); // 关反显,0xa6关,0xa7开
     //Lcd_write_cmd(0x24);//v0电阻设4        升压关
  Lcd_write_cmd(0x81);
  Lcd_write_cmd(0x0f); // v0输出设          对比度
  Lcd_write_cmd(0xF8);
  Lcd_write_cmd(0x00); // 升压比设2x-                 不懂这个
     //Lcd_write_cmd(0x2C);//电源控制设4
     //delayms(22);
     //Lcd_write_cmd(0x2E);//电源控制设6
     //delayms(22);
  Lcd_write_cmd(0x2f); // 电源控制设8
  delayms(8);
  Lcd_write_cmd(0x40); // 显存起始设0
  Lcd_write_cmd(0xAF); // 开显示,0xae关,0xaf开
  */
  Lcd_cls();           // 清屏
  //Lcd_set_pos(0, 0);   // 坐标归位
  delayms(22);
}

/*********************************
函数名称:Lcd_point
功能:Lcd画点
输入:x坐标,y坐标
输出:无
备注:x<=128,y<=64
*********************************/
void Lcd_point(unsigned char x, y)
{
  unsigned char y1;
  y1 = y >> 3;
  Lcd_set_pos(x, y1);
  y &= 0x07;
  Lcd_write_dat(1 << y);
  if (y > 0)
    Lcd_write_dat(3 << (y - 1));
  else
  {
    Lcd_write_dat(1 << y);
    if (y1 > 0)
    {
      Lcd_set_pos(x, y1 - 1);
      Lcd_write_dat(0x80);
    }
  }
}


回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-3-25 11:51:27 | 显示全部楼层
本帖最后由 lmn2005 于 2023-3-25 11:57 编辑


千思万想都想不到,用STC8H8K64U官方开发板不能驱动,而用自制的STC12C5A60S2实验板却能驱动。
回顾用STC8H8K64U开发板时,有多次确认接入的引脚,还用逻辑分析仪分析各引脚的电平变化情况,没有发现什么问题,而今天用STC12C5A60S2却一次点亮,真的没有想到。

最后得感谢数码之家,感谢予以回复的坛友,谢谢你们!

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复 支持 反对

使用道具 举报

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

本版积分规则

APP|手机版|小黑屋|关于我们|联系我们|法律条款|技术知识分享平台

闽公网安备35020502000485号

闽ICP备2021002735号-2

GMT+8, 2025-5-25 19:41 , Processed in 0.265201 second(s), 13 queries , Redis On.

Powered by Discuz!

© 2006-2025 MyDigit.Net

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