找回密码
 立即注册
楼主: 浦江***

新手学用STC8H8K64U驱动128*160彩色显示屏,实验体会...

[复制链接]
  • TA的每日心情
    开心
    6 小时前
  • 签到天数: 186 天

    [LV.7]常住居民III

    11

    主题

    124

    回帖

    908

    积分

    高级会员

    积分
    908
     楼主| 发表于 2024-5-7 21:16:33 | 显示全部楼层
    本帖最后由 浦江一水 于 2024-5-7 22:26 编辑


    2,关于LCD显示屏的横竖屏切换;   


    显示屏横竖屏切换. 主要看初始化的代码了...
    大凡显示屏的初始化代码, 一般都由厂家提供, 如果厂家不提供, 任何人, 再聪明, 两辈子也猜不出来的.

    要根据资料说明,研究清楚初始化中的代码: 对相关寄存器, 写入不同的数据, 就可以了实现切换了.
    比如这款显示屏, 无论带不带键盘, 屏都是ST7735驱动, 因此驱动初始化是一样的.


    我自己整理了一下是这样的:
    //========================================================
    //  ST7735 显示屏初始化
    //========================================================
    void  LCD_Init(void)
    {
        P1M0 = 0x80; P1M1 = 0x00;
        CS=0;  //片选中
        BL=0;  //背光灭
        //--ST7735R Reset Sequence--  复位
        RES =0; delay(120);  //Delay 120ms

        RES =1; delay(100);  //Delay 100ms
        //--End ST7735S Reset Sequence--
        LCD_WR_CMD(0x11);  //Sleep out
        delay(120);                //Delay 120ms
        //--ST7735S Frame Rate--
        LCD_WR_CMD(0xB1); LCD_WR_DAT(0x01); LCD_WR_DAT(0x2C); LCD_WR_DAT(0x2D);
        LCD_WR_CMD(0xB2); LCD_WR_DAT(0x01); LCD_WR_DAT(0x2C); LCD_WR_DAT(0x2D);
        LCD_WR_CMD(0xB3); LCD_WR_DAT(0x01); LCD_WR_DAT(0x2C); LCD_WR_DAT(0x2D);
                                        LCD_WR_DAT(0x01); LCD_WR_DAT(0x2C); LCD_WR_DAT(0x2D);
        //--End ST7735S Frame Rate--
        LCD_WR_CMD(0xB4); LCD_WR_DAT(0x07); //Dot inversion
        //--ST7735S Power Sequence--
        LCD_WR_CMD(0xC0); LCD_WR_DAT(0xA2); LCD_WR_DAT(0x02); LCD_WR_DAT(0x84);
        LCD_WR_CMD(0xC1); LCD_WR_DAT(0xC5);
        LCD_WR_CMD(0xC2); LCD_WR_DAT(0x0A); LCD_WR_DAT(0x00);
        LCD_WR_CMD(0xC3); LCD_WR_DAT(0x8A); LCD_WR_DAT(0x2A);
        LCD_WR_CMD(0xC4); LCD_WR_DAT(0x8A); LCD_WR_DAT(0xEE);
        //--End ST7735S Power Sequence--
        LCD_WR_CMD(0xC5); LCD_WR_DAT(0x0E); //VCOM //1a
        LCD_WR_CMD(0x36); LCD_WR_DAT(0xC0); //LCD_WR_DAT(0xC0);竖屏 // LCD_WR_DAT(0xA8); 横屏  //MX, MY, RGB mode
        //--ST7735S Gamma Sequence--
        LCD_WR_CMD(0xE0); LCD_WR_DAT(0x0F); LCD_WR_DAT(0x1A); LCD_WR_DAT(0x0F); LCD_WR_DAT(0x18);
                                        LCD_WR_DAT(0x2F); LCD_WR_DAT(0x28); LCD_WR_DAT(0x20); LCD_WR_DAT(0x22);
                                        LCD_WR_DAT(0x1F); LCD_WR_DAT(0x1B); LCD_WR_DAT(0x23); LCD_WR_DAT(0x37);
                                        LCD_WR_DAT(0x00); LCD_WR_DAT(0x07); LCD_WR_DAT(0x02); LCD_WR_DAT(0x10);
        LCD_WR_CMD(0xE1); LCD_WR_DAT(0x0F); LCD_WR_DAT(0x1B); LCD_WR_DAT(0x0F); LCD_WR_DAT(0x17);
                                        LCD_WR_DAT(0x33); LCD_WR_DAT(0x2C); LCD_WR_DAT(0x29); LCD_WR_DAT(0x2E);
                                        LCD_WR_DAT(0x30); LCD_WR_DAT(0x30); LCD_WR_DAT(0x39); LCD_WR_DAT(0x3F);
                                        LCD_WR_DAT(0x00); LCD_WR_DAT(0x07); LCD_WR_DAT(0x03); LCD_WR_DAT(0x10);
        LCD_WR_CMD(0x2A); LCD_WR_DAT(0x00); LCD_WR_DAT(0x00); LCD_WR_DAT(0x00); LCD_WR_DAT(0x80);  //宽度128
        LCD_WR_CMD(0x2B); LCD_WR_DAT(0x00); LCD_WR_DAT(0x00); LCD_WR_DAT(0x00); LCD_WR_DAT(0xA0);  //高度160
        LCD_WR_CMD(0xF0); LCD_WR_DAT(0x01);  //Enable test command  
        LCD_WR_CMD(0xF6); LCD_WR_DAT(0x00);  //Disable ram power save mode
        //LCD_WR_CMD(0x2C);
        //--End ST7735S Gamma Sequence--
        LCD_WR_CMD(0x3A); LCD_WR_DAT(0x05); //65k mode
        LCD_WR_CMD(0x29); //Display on
        BL=1;  //背光亮
    }

    简单说明一下:

    上述函数中,
    LCD_WR_CMD() 是写命令函数,
    LCD_WR_DAT() 是写数据函数,

    有关屏方向的, 绿色字体是目前竖屏模式, 如果要切换成横屏, 用后面的蓝色字语句替代绿色字即可;  红色字体是保存备忘的.
    另外注意, 红色字体宽度高度那两行, 如果切换成横屏; 那么终点数据要作相应修改. 最后的数据 宽度0xA0, 高度0x80.
    各函数的X,Y坐标的范围, 相应调整即可, 其它都不需要改动的.

    另外, 你说 " #define USE_LANDSCAPE 横竖屏切换,实际不起作用,..."

    这是条件编译, 有正确的配套一般也应该是可以的, 并不是简单一句话就行的.
    要先定义.... 再根据不同的定义, 在上述的几个地方加相应变化语句, 最后实现改变定义一个值, 就方便切换了... 原理是一样的....

    回复 支持 反对 送花

    使用道具 举报

  • TA的每日心情
    开心
    6 小时前
  • 签到天数: 186 天

    [LV.7]常住居民III

    11

    主题

    124

    回帖

    908

    积分

    高级会员

    积分
    908
     楼主| 发表于 2024-5-7 21:18:36 | 显示全部楼层
    本帖最后由 浦江一水 于 2024-5-8 15:40 编辑
    cadplus 发表于 2024-5-7 09:14
    能不能帮忙写一个上位机下载文本的PC机专用软件?应答式的........
    3,关于写一个PC机向单片机发送文本文件专用软件.
    可以的....  抽空编写一个.... 将放在这里....  
    根据所提的要求:"写一个上位机下载文本的PC机专用软件?应答式的,单片机发送请求字符”XX",PC端发送文本.txt的第一行,单片机接收完再请求再发送第二行,逐行发每行字符100字以内。"
    虽然猜不出下载文本到单片机里去的目的和用途, 但是对应的要求还是照做了.

    匆编写了一个, 来了......
    ISP-TXT.bmp
    一般而言, 下载HEX格式(本质上也是纯文本文件)到单片机里去的可能性要较大些, 所以软件在打开文件时可选类型拓展了HEX格式.
    另外也扩充了一些功能, 比如"手动发送一行"和"连续发送"等, 这样使用起来可能比较更灵活一些。


    软件比较简单,也许不太适应各人的操作习惯。望海涵,将就着使用吧。
    纯绿色软件,单一EXE可执行文件,解压即可使用。鼠标指针悬停到每个图标上,都有信息提示。
    ISPTXT.rar (207.17 KB, 下载次数: 8)

    回复 支持 反对 送花

    使用道具 举报

  • TA的每日心情
    开心
    1 小时前
  • 签到天数: 28 天

    [LV.4]偶尔看看III

    0

    主题

    22

    回帖

    240

    积分

    中级会员

    积分
    240
    发表于 2024-5-8 09:41:57 | 显示全部楼层
    浦江一水 发表于 2024-5-7 21:14
    楼上坛友提了三个问题.
    1,关于中西文混合输入(显示);


    看到《无线电》不由想起当年的《电子报》啊,岁月不饶人,90年代没有网络论坛,知识就靠报刊杂志传递了,当年痴迷音响电路。
    扯远了回归正传,非常感谢大佬详细的解答,让人豁然开朗,原来*STR传递至子函数的内容不是字符串本身,而是一串16进制数字,

    难怪我将显示英文字符子函数(蓝色部分)插进去不行,昨晚将整个子函数代码放进去才解决问题。将显示汉字字符和显示英文字符
    合并成一个子函数。
    捕获.JPG


    回复 支持 反对 送花

    使用道具 举报

  • TA的每日心情
    开心
    1 小时前
  • 签到天数: 28 天

    [LV.4]偶尔看看III

    0

    主题

    22

    回帖

    240

    积分

    中级会员

    积分
    240
    发表于 2024-5-8 10:07:29 | 显示全部楼层
    浦江一水 发表于 2024-5-7 21:16
    2,关于LCD显示屏的横竖屏切换;   

    对比了商家的代码,难怪不起作用,原来根本没有定义到点子上,我只是一时应用能用就行,没有详细研究那个PDF说明资料,那个非专业看得头疼
    谢谢您的指点
    晚上我去试一试

    捕获.JPG

    回复 支持 反对 送花

    使用道具 举报

  • TA的每日心情
    开心
    1 小时前
  • 签到天数: 28 天

    [LV.4]偶尔看看III

    0

    主题

    22

    回帖

    240

    积分

    中级会员

    积分
    240
    发表于 2024-5-8 10:24:05 | 显示全部楼层
    浦江一水 发表于 2024-5-7 21:18
    3,关于写一个PC机向单片机发送文本文件专用软件.

    可以的....  抽空编写一个.... 将放在这里....  

    先谢为敬
    回复 支持 反对 送花

    使用道具 举报

  • TA的每日心情
    开心
    6 小时前
  • 签到天数: 186 天

    [LV.7]常住居民III

    11

    主题

    124

    回帖

    908

    积分

    高级会员

    积分
    908
     楼主| 发表于 2024-5-8 15:57:30 | 显示全部楼层

    楼上Cadplus坛友,客气了。

    看到《无线电》不由想起当年的《电子报》啊,岁月不饶人,90年代没有网络论坛,知识就靠报刊杂志传递了,当年痴迷音响电路。
    这段话非常感同身受, 估计年代、经历、兴趣爱好等已相差不远的了。
    本人“浦江一水”,意即黄浦江里的一滴水,渺小且“水”,知识浅薄,STC单片机的新人新手,切莫以“大佬”相称。大家都在“国芯论坛”学习、收益、交流,就是同学和坛友了。



    回复 支持 反对 送花

    使用道具 举报

  • TA的每日心情
    开心
    1 小时前
  • 签到天数: 28 天

    [LV.4]偶尔看看III

    0

    主题

    22

    回帖

    240

    积分

    中级会员

    积分
    240
    发表于 2024-5-10 11:25:27 | 显示全部楼层
    浦江一水 发表于 2024-5-7 21:18
    3,关于写一个PC机向单片机发送文本文件专用软件.
    可以的....  抽空编写一个.... 将放在这里....  
    根据所提 ...

    非常感谢坛友,这么快就编好了,软件做得很好,绿色方便实用。
    正在业余时间做一个小铣床,三轴单片机数控,之所以不用成品控制板Mach3之类,因为这种工业用的控制卡应用复杂,
    而且要连电脑不能脱机,自己做就简单多了,有了你这个软件,可以将复杂的运算交给AUTOCAD去做,
    生成G代码或者自定的文本代码发送单片机执行,简单加工的直接脱机完成。
    单片机完全新手,按这构思够好长时间去消化了
    回复 支持 反对 送花

    使用道具 举报

  • TA的每日心情
    开心
    6 小时前
  • 签到天数: 186 天

    [LV.7]常住居民III

    11

    主题

    124

    回帖

    908

    积分

    高级会员

    积分
    908
     楼主| 发表于 2024-5-11 09:43:31 | 显示全部楼层
    明白了下载文本(控制脚本)的意图, "小铣床,三轴单片机数控", 极有意思的制作项目, 很受启迪...
    祝楼上坛友顺利愉快...
    回复 支持 反对 送花

    使用道具 举报

  • TA的每日心情
    开心
    6 小时前
  • 签到天数: 116 天

    [LV.6]常住居民II

    2

    主题

    276

    回帖

    572

    积分

    高级会员

    积分
    572
    发表于 2024-5-31 10:01:39 | 显示全部楼层
    浦江一水 发表于 2024-5-11 09:43
    明白了下载文本(控制脚本)的意图, "小铣床,三轴单片机数控", 极有意思的制作项目, 很受启迪...
    祝楼上坛友 ...

    默然,认识一群有知识和理想的人,快乐啊
    回复 支持 反对 送花

    使用道具 举报

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

    本版积分规则

    QQ|手机版|深圳国芯人工智能有限公司 ( 粤ICP备2022108929号-2 )

    GMT+8, 2024-6-14 14:30 , Processed in 0.069702 second(s), 61 queries .

    Powered by Discuz! X3.5

    © 2001-2024 Discuz! Team.

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