浦江一水 发表于 2024-5-7 21:16:33

本帖最后由 浦江一水 于 2024-5-7 22:26 编辑



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


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

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


我自己整理了一下是这样的:
//========================================================
//ST7735 显示屏初始化
//========================================================
voidLCD_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 横竖屏切换,实际不起作用,..."

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

浦江一水 发表于 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字以内。"
虽然猜不出下载文本到单片机里去的目的和用途, 但是对应的要求还是照做了.

匆匆编写了一个, 来了......

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


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


cadplus 发表于 2024-5-8 09:41:57

浦江一水 发表于 2024-5-7 21:14
楼上坛友提了三个问题.
1,关于中西文混合输入(显示);




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

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



cadplus 发表于 2024-5-8 10:07:29

浦江一水 发表于 2024-5-7 21:16
2,关于LCD显示屏的横竖屏切换;   




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



cadplus 发表于 2024-5-8 10:24:05

浦江一水 发表于 2024-5-7 21:18
3,关于写一个PC机向单片机发送文本文件专用软件.

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


先谢为敬{:4_196:}

浦江一水 发表于 2024-5-8 15:57:30

本帖最后由 浦江一水 于 2024-9-7 20:19 编辑

cadplus 发表于 2024-5-8 10:24
先谢为敬
楼上Cadplus坛友,客气了。

“看到《无线电》不由想起当年的《电子报》啊,岁月不饶人,90年代没有网络论坛,知识就靠报刊杂志传递了,当年痴迷音响电路。”
这段话非常感同身受, 估计年代、经历、兴趣爱好等已相差不远的了。




cadplus 发表于 2024-5-10 11:25:27

浦江一水 发表于 2024-5-7 21:18
3,关于写一个PC机向单片机发送文本文件专用软件.
可以的....抽空编写一个.... 将放在这里....
根据所提 ...

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

浦江一水 发表于 2024-5-11 09:43:31

明白了下载文本(控制脚本)的意图, "小铣床,三轴单片机数控", 极有意思的制作项目, 很受启迪...
祝楼上坛友顺利愉快...

科学妞妞 发表于 2024-5-31 10:01:39

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

默然,认识一群有知识和理想的人,快乐啊

yyy5102 发表于 2024-9-26 12:36:47

cadplus 发表于 2024-5-10 11:25
非常感谢坛友,这么快就编好了,软件做得很好,绿色方便实用。
正在业余时间做一个小铣床,三轴单片机数 ...

用单片机代替MACH3,做成功了吗,做好了跟你学习一下{:smile:}
我有个台钻,想脱离电脑控制,用单片机操作
电脑开机关机太慢了。动作单一,我感觉用单片机完全可以操作
联系邮箱497400050@qq.com
页: 1 2 3 [4]
查看完整版本: 新手学用STC8H8K64U驱动128*160彩色显示屏,实验体会...