数码之家

 找回密码
 立即注册

QQ登录

只需一步,快速开始

微信登录

微信扫一扫,快速登录

搜索
查看: 5602|回复: 83

[C51] 2线驱动LCD12864液晶屏

[复制链接]
发表于 2023-6-26 21:51:33 | 显示全部楼层 |阅读模式
架不住廉价的诱惑,买了些1元的LCD12864。
有大佬分享了2线SPI驱动方法,写了个代码验证下,确实可行。
这是原分享图片的截图


CS直接接地,RST接VCC,悬空也行

网上找的驱动改改,成功了

主要就是在写入数据前,多写一个DC位。
代码里有用拼音命名的函数名或者变量名,请见谅。
图像数据在TuXiang_128_64.h文件里,没有上传
/*****************
驱动芯片:UC1601 还是UC1609?
引脚定义 1:CS  2:RST  3:DC    4:RW    5:SCK/D0    6:D1    7:D2    8:SDA/D3    9-12:D4-D7   
            13:VCC    14:GND    15:LED+(原)    16:LED-(原)
焊盘  4:PM1 1:PM0 3:VCC    2:GND
    PM1PM0=00:SPI(S8), 启用DC脚,H为数据,L为指令
    PM1PM0=01:SPI(S9),关闭DC脚,9位传输,第9位为数据指令识别位,1数据,0指令
9位传输时,RST直接接高电平,
*******************************/                    
#include "STC8H.h"       //8H1K08@12MHz
#include "intrins.h"
#include "TuXiang_128_64.h"

typedef unsigned char uchar;
typedef unsigned int uint;
typedef unsigned long    ulong;

sbit IO_CLK = P3^4;
sbit IO_SDA = P3^3;
uchar code *p;
//=====================================
/***********--1mS@STC8H-20MHz---***************/
void delay(uint n)
{
    uchar i,j;
    while(n--)
    {
        i = 26;
        j = 246;
        do
        {
            while (--j);
        }
        while (--i);
    }
}

/* rs=0写入控制指令,rs=1写入显示数据,9位传输方式,第9位为数据指令识别位 */
void xieru_shuju_zhiling(bit rs,uchar dat )
{
    uchar i;                           
   
    IO_CLK = 0;
    IO_SDA = rs;     //9位传输方式,第9位为数据指令识别位
    _nop_();               
    IO_CLK = 1;        
    for (i=0;i<8;i++)
    {
        IO_CLK = 0;
        IO_SDA = dat & 0x80;     //从高位开始输出
        _nop_();               
        IO_CLK = 1;                       
        dat = dat<<1;                    
    }
   
}
/***************清屏    *********************/
void lcdclear(void)
{
    uchar i,j;
    for(i = 0;i<8;i++)   
    {
        xieru_shuju_zhiling(0,0xb0+i);             //0x0b:写页地址命令,i为页地址,
        xieru_shuju_zhiling(0,0x10);         //写初始列地址高4位,10中的1表示是高4位
        xieru_shuju_zhiling(0,0x04);        //写初始列地址低4位
        for(j = 0;j<128;j++)                        
        {
            xieru_shuju_zhiling(1,0);     //写显示数据,列地址自动加1
        }
    }
}            

void initlcm(void)                    //LCD初始化
{   
    IO_CLK =1;                    
    xieru_shuju_zhiling(0,0xe2); //软件复位
    delay(10);
    xieru_shuju_zhiling(0,0xa2); //0xa2:LCD BIAS=1/9;0xa1:LCD BIAS=1/7
    delay(1);
    xieru_shuju_zhiling(0,0x2f);
    delay(1);
    xieru_shuju_zhiling(0,0x23); /* 0x20-0x27为V5电压内部电阻调整设置,R2,R1,R0=111,对比度粗调,数值越大,对比越强 */
    delay(1);
    xieru_shuju_zhiling(0,0x81); //对比度细调指令,下一行输入对比度值
    xieru_shuju_zhiling(0,0x64); //修改这个值可以改变对比度
    delay(1);
    xieru_shuju_zhiling(0,0xa0); //列扫描方向:0xa0:从左到右,ADC=0(SEG1->SEG132),0xa1相反
    xieru_shuju_zhiling(0,0xc4); //页扫描方向:0xc4:从上到下,SHL=1(COM64->COM1),0xc0相反
   

    xieru_shuju_zhiling(0,0x40); //起始行,7567为:0x40,7565 0x60
    xieru_shuju_zhiling(0,0xe0); //写入数据时列地址自动加1,读时不变
    xieru_shuju_zhiling(0,0xaf); //开显示
}
/*显示一个汉字或者一幅图像,*/
/*  dizhi_ye页地址,dizhi_lie列地址,fudu_ye显示部分所占页数,fudu_lie显示部分所占列数,*p字模数据地址            */
/*  12864从上到下共8页,地址为0-7,每页有128列,传送数据时列地址自动加1,但页地址不会 */
void LCD_xianshi(uchar dizhi_ye,uchar dizhi_lie,
        uchar fudu_ye,uchar fudu_lie,uchar code *p)
{
    uchar i,j;
        for(j=0;j<fudu_ye;j++)                //一个16*16的汉字占2页
        {
                xieru_shuju_zhiling(0,0xb0+dizhi_ye+j);            //传送页地址
                xieru_shuju_zhiling(0,0x10+(dizhi_lie>>4));    //列地址先传高4位
                xieru_shuju_zhiling(0,dizhi_lie&0x0f);            //再传低4位
               
                for (i=0;i<fudu_lie;i++)                    //写一列   
                {                  
                        xieru_shuju_zhiling(1,*p++);    //*p++=*(P++);
                }                    
        }
        
}
//-------------------------------------
void DuanKou_ChuShiHua(void)
{
        P1M0 = 0x00;        P1M1 = 0x00;
        P3M0 = 0x00;        P3M1 = 0x00;
        P5M0 = 0x00;        P5M1 = 0x00;
}
//========================================
void main()
{
    delay(100);
   
    DuanKou_ChuShiHua();
    initlcm();
        
    while(1)
    {
        lcdclear();
        p = TuXiang_12864_1;
        LCD_xianshi(0,0,8,128, p);
        delay(1000);
    }
   

}


本帖子中包含更多资源

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

x

打赏

参与人数 3家元 +239 收起 理由
springvirus + 30 以資鼓勵
亚历山大 + 9
家睦 + 200

查看全部打赏

发表于 2023-6-26 22:41:56 | 显示全部楼层
游客请登录后查看回复内容
回复 支持 反对

使用道具 举报

发表于 2023-6-26 22:57:23 | 显示全部楼层
游客请登录后查看回复内容
回复 支持 反对

使用道具 举报

发表于 2023-6-27 01:47:13 | 显示全部楼层
游客请登录后查看回复内容
回复 支持 反对

使用道具 举报

发表于 2023-6-27 06:41:28 | 显示全部楼层
游客请登录后查看回复内容
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-6-27 06:41:56 | 显示全部楼层
游客请登录后查看回复内容
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-6-27 06:48:58 | 显示全部楼层
游客请登录后查看回复内容
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-6-27 07:07:55 | 显示全部楼层
游客请登录后查看回复内容
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-6-27 09:01:31 | 显示全部楼层
游客请登录后查看回复内容
回复 支持 反对

使用道具 举报

发表于 2023-6-27 09:44:42 | 显示全部楼层
游客请登录后查看回复内容
回复 支持 反对

使用道具 举报

发表于 2023-6-27 10:11:22 | 显示全部楼层
游客请登录后查看回复内容
回复 支持 反对

使用道具 举报

发表于 2023-6-27 10:38:28 | 显示全部楼层
游客请登录后查看回复内容
回复 支持 反对

使用道具 举报

发表于 2023-6-27 10:54:40 | 显示全部楼层
游客请登录后查看回复内容
回复 支持 反对

使用道具 举报

发表于 2023-6-27 14:51:17 | 显示全部楼层
游客请登录后查看回复内容
回复 支持 反对

使用道具 举报

发表于 2023-6-27 17:02:57 | 显示全部楼层
游客请登录后查看回复内容
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-6-27 21:00:50 | 显示全部楼层
游客请登录后查看回复内容
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-6-27 21:03:26 | 显示全部楼层
游客请登录后查看回复内容

打赏

参与人数 1家元 +30 收起 理由
springvirus + 30 加油!!!

查看全部打赏

回复 支持 反对

使用道具 举报

发表于 2023-6-27 21:57:39 来自手机浏览器 | 显示全部楼层
游客请登录后查看回复内容
回复 支持 反对

使用道具 举报

发表于 2023-6-28 09:38:25 | 显示全部楼层
游客请登录后查看回复内容
回复 支持 反对

使用道具 举报

发表于 2023-6-28 17:59:43 来自手机浏览器 | 显示全部楼层
游客请登录后查看回复内容
回复 支持 反对

使用道具 举报

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

本版积分规则

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

闽公网安备35020502000485号

闽ICP备2021002735号-2

GMT+8, 2025-12-3 02:57 , Processed in 0.156000 second(s), 11 queries , Gzip On, Redis On.

Powered by Discuz!

© 2006-2025 MyDigit.Net

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