查看: 326|回复: 2

希望老师开发ST75256库

[复制链接]

2

主题

6

帖子

42

积分

注册会员

Rank: 2

积分
42
发表于 2025-10-14 16:23:11 | 显示全部楼层 |阅读模式
希望尽快开发用于STC8平台的 ST75256 LCD 驱动库,谢谢各位专家!
回复

使用道具 举报

1

主题

7

帖子

87

积分

注册会员

Rank: 2

积分
87
发表于 2025-10-18 19:54:42 | 显示全部楼层
#include <reg52.h>   // 包含C51单片机头文件,具体型号需调整

// 假设硬件连接定义(需根据实际电路修改)
sbit LCD_RS = P1^0;  // 数据/命令选择端 (0:命令, 1:数据)
sbit LCD_RW = P1^1;  // 读写选择端
sbit LCD_EN = P1^2;  // 使能信号
sbit LCD_RST = P1^3; // 复位信号
#define LCD_DATA P2  // 8位数据总线连接至P2口

// 函数声明
void delay_ms(unsigned int ms);
void write_com(unsigned char cmd);
void write_data(unsigned char dat);

/********** 液晶屏初始化程序 **********/
void Lcd_Init(void)
{
    #if I80==1  // 若使用Intel 8080并行接口
        CONTROL1_OUTPUT_MODE(); //控制口1为输出
        CONTROL2_OUTPUT_MODE(); //控制口2为输出
        CONTROL3_OUTPUT_MODE(); //控制口3为输出
        CONTROL4_OUTPUT_MODE(); //控制口4为输出
    #endif

    // 初始化引脚
    IF2_L; IF1_H; IF0_H; // 设置接口模式 (根据具体接线调整)
    delay_ms(20);

    // 硬件复位序列
    LCD_RST = 0;
    delay_ms(20);
    LCD_RST = 1;
    delay_ms(50);

    /****************************** 进入扩展指令集2 ******************************/
    write_com(0x31);    // 选择扩展指令集2
    write_com(0xd7);    // 禁用自动读取
    write_data(0x9f);
    write_com(0xe0);    // 使能OTP读取
    write_data(0x00);
    delay_ms(10);
    write_com(0xe3);    // OTP上传
    delay_ms(20);
    write_com(0xe1);    // OTP控制输出

    /****************************** 进入扩展指令集1 ******************************/
    write_com(0x30);    // 选择扩展指令集1
    write_com(0x94);    // 睡眠模式退出
    write_com(0xae);    // 先关闭显示
    delay_ms(50);
    write_com(0x20);    // 电源控制设置
    write_data(0x0b);   // 开启内部电压转换器 (VB, VR, VF)
    write_com(0x81);    // 设置电子音量(对比度)
    write_data(0x2d);   // Vop值,影响对比度,可根据实际效果调整
    write_data(0x04);

    /****************************** 再次进入扩展指令集2进行模拟电路设置 ******************************/
    write_com(0x31);    // 扩展指令集2
    write_com(0x32);    // 模拟电路设置
    write_data(0x00);   // 振荡器频率调整
    write_data(0x00);   // 升压器效率频率设置 (例如6kHz)
    write_data(0x01);   // 偏置比设置 (例如1/12)

    write_com(0x31);
    write_com(0x49);    // 设置HPM(高性能模式)
    write_com(0x51);    // 设置升压级别 (例如x8倍升压)
    write_data(0xfa);

    /****************************** 返回扩展指令集1进行显示设置 ******************************/
    write_com(0x30);    // 扩展指令集1
    write_com(0xf0);    // 设置显示模式
    write_data(0x10);   // 0x10:单色模式, 0x11:4级灰度模式
    write_com(0xca);    // 显示控制
    write_data(0x00);   // 时钟分频比
    write_data(159);    // 设置Duty(扫描行数),对应屏幕高度-1 (例如160行屏设为159)
    write_data(0x0C);   // 设置帧反转和N-line反转
    write_com(0xbc);    // 设置数据扫描方向
    write_data(0x00);   // 定义SEG和COM的扫描顺序 (0x00:正常方向)
    write_com(0xa6);    // 设置显示极性 (0xa6:正常, 0xa7:反色)

    // 设置数据格式,影响显存数据位的LSB位置
    write_com(0x0c);    // 0x0C:LSB(DB0)在顶,0x08:LSB(DB0)在底 [1,2](@ref)

    /****************************** 最终设置并开启显示 ******************************/
    write_com(0x30);
    // 内部电源供应开启
    write_com(0x40);    // 内部电源供应开启 [1](@ref) (此命令在部分初始化序列中位于此位置)
    delay_ms(100);
    write_com(0xaf);    // 开启显示

    // 初始化完成后可进行清屏等操作
}

// 基础函数实现(需根据单片机速度和时序要求调整延时)
void delay_ms(unsigned int ms) {
    unsigned int i, j;
    for(i=0; i<ms; i++)
        for(j=0; j<123; j++); // 此数值基于大约12MHz晶振粗略计算,需校准
}

void write_com(unsigned char cmd) {
    LCD_RS = 0; // 写命令模式
    LCD_RW = 0;
    LCD_DATA = cmd;
    LCD_EN = 1;
    delay_ms(1);  // 使能脉冲宽度
    LCD_EN = 0;
    delay_ms(1);
}

void write_data(unsigned char dat) {
    LCD_RS = 1; // 写数据模式
    LCD_RW = 0;
    LCD_DATA = dat;
    LCD_EN = 1;
    delay_ms(1);
    LCD_EN = 0;
    delay_ms(1);
}
回复

使用道具 举报

2

主题

6

帖子

42

积分

注册会员

Rank: 2

积分
42
 楼主| 发表于 2025-11-9 16:34:36 | 显示全部楼层
谢谢大侠的回帖!你介绍的的是并口LCD相关程序,我用的是串口LCD ,只有 RES , A0,SCL , SDA 颗线。不过对我也是有帮助的,我再对照器件手册看看怎么修改吧。
回复

使用道具 举报

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

本版积分规则

QQ|Archiver|手机版|小黑屋|好好搭搭在线 ( © 好好搭搭在线 浙ICP备19030393号 )

GMT+8, 2025-12-14 19:07 , Processed in 0.162188 second(s), 23 queries .

Powered by Discuz!

© 2001-2025 Comsenz Inc.

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