浦江一水
发表于 2024-4-5 10:44:19
Tuier 发表于 2024-4-5 08:10
请问楼主,你的单片机电源VCC是3.3V还是5V?W25Q64供电是3.3V还是5V?如果是5V,那W25Q64的端口能承受吗? ...
首先感谢楼上坛友的浏览和回复.
我在做这个实验时, 比较简单粗暴,就用一根USB线5V给实验板供电调试. W25Q64器件供电应该是3.3V的.
平日里一直是在STM32系列电路板中使用W25Qxx芯片的, 印象中感觉W25Qxx容量大接口简单,比较皮实耐用.没有仔细计算就直接拿过来用了, 使用至今,没发现什么问题. 在我另外一个帖子里,实验改造屠龙刀(2022-6-22版)添加了一片W25Q32,也是直接上去用的,也没问题.
根据STC资料介绍, STC单片机本身是宽电压的,适应性很强, 如果单片机是5V供电, 那么在连接3.3V电压器件时, 端口可串330电阻, 安全一些. (可重温一下STC手册介绍.)
另外, 我的体会是:
单片机编程读写W25Q64时, 将端口设置为最基本的准双向口即可(不要考虑用推挽输出大电流来置1电平), 内部无需启用强上拉电阻, 当单片机端输出1电平时, 实际上W25Q64端口是靠外部上拉10K电阻上拉来置1的, 所以没有大电流输入.
刚才实测了一下本贴的实验板, USB线给实验板供电的5V, 实际到达单片机VCC端的电压是4.5V--4.7V左右(可能是存在线压降).W25Q64的理论供电是2.7--3.6V. 虽然器件会有些余量, 但是如果搞产品量产, 是存在风险的.实际研发产品时, 通常用AS1117把5V降为3.3V, 给W25Q64供电, 并且在与5V单片机端口连接时, 时钟端和数据端, 串接330欧姆电阻, 安全可靠一些.
还有就是如果容量要求不大, 外接存储器时, 可考虑用24系列的, IIC接口, 电压1.7--5.5V, 简单.
仅供参考.
楼上坛友专门用3.3V为W25Q64供电, 应该说考虑的是很周到的. 然而还是烧了,很遗憾...很抱歉...你的回复提醒和鞭策了我,学习实验写体会应该更加认真细致一些.
嵌入式之路
发表于 2024-4-5 11:22:06
刷新率高吗?
嵌入式之路
发表于 2024-4-5 11:22:06
刷新率高吗?
浦江一水
发表于 2024-4-5 12:25:36
嵌入式之路 发表于 2024-4-5 11:22
刷新率高吗?
楼上坛友指的是彩色屏幕刷新显示的效率吧?
应该说是一般般,刷新率是可以接受的. 这个要实事求是,不能太夸张, 与常用的STM32F407(主频168M)再加用并行接口来驱动彩色屏, 自然是不能同日而语的. 对于51单片机(主频35M或45M), 能做到这样效果,应该说已经是不错了. 毕竟单色与彩色在数据传输这方面量也是不同的.
另外, 楼上坛友应该是行家, 会看门道了, 刷新率还要看不同的场合的, 单纯显示一幅小图或许效率高些.
再看看4楼的视频, 下拉菜单时的当前菜单项移动时的效果. 既要恢复前一项的底色和文字色, 又要在新的一项中新画底色和文字色, 就容易暴露刷新变化痕迹了. 再仔细点可能还会发现, 为了实现带圆角的矩形底色框, 算法上是又要增加一些控制语句的, 这也会降低一些显示效率.
日后有空余时间,可能会改编一下, 用硬件SPI模式驱动再实验一下, 理论上是会提高一些刷新效率, 但是期望值是不能太高的.
谢谢你的浏览和回复.
Tuier
发表于 2024-4-5 17:29:12
浦江一水 发表于 2024-4-5 10:44
首先感谢楼上坛友的浏览和回复.
我在做这个实验时, 比较简单粗暴,就用一根USB线5V给实验板供电调试. W25Q ...
谢谢你的详细回复{:4_196:},也向你学习了一些相关知识{:4_250:}
嵌入式之路
发表于 2024-4-5 23:03:00
浦江一水 发表于 2024-4-5 12:25
楼上坛友指的是彩色屏幕刷新显示的效率吧?
应该说是一般般,刷新率是可以接受的. 这个要实事求是,不能太夸 ...
感谢你多方面解释的回复,看你的很流畅感觉很不错。 我也有块屏幕改天也自己试试
durongze
发表于 2024-5-5 02:11:19
你兑换了多少啊,竟然用盒子装?
浦江一水
发表于 2024-5-5 08:19:37
durongze 发表于 2024-5-5 02:11
你兑换了多少啊,竟然用盒子装?
兑换的就是五片DIP28的STC8H8K64U芯片, 就是用盒子装的,很精美。
照片中,另外那两片DIP40PIN是另外买的,我将它们放在了一起。
cadplus
发表于 2024-5-7 09:14:40
浦江一水 发表于 2024-3-27 17:54
这个话题展开讨论可能需要比较大的篇幅。若有坛友感兴趣的话,我有时间会再作专题介绍。
现在简单谈谈我的 ...
大佬好,上次刚刚请教过128*64单色屏的驱动,这次又要求助了{:4_196:}
因为128*64显示的内容太少不够用,又入手一块128*160的彩屏,看着和你的一样,竖屏,只是没有按键。
没有学过编程,只是工作需要AUTOCAD,就自学了一点AUTOCAD LISP语言,无事学一点单片机当爱好,只接触过STC一家的几种,很多概念都没有琢磨透。以下问题请教:
1,商家给的C51例子摸索着移植到STG32,勉强能分开输入汉字和英文字符,没办法做到混合输入,比如“X坐标:”,只能笨办法先写“X :”,再写“坐标“。关键应该是字符指针*STR和字符STR关系没有理解,转换不了。
2,商家给的例子,通过#define USE_LANDSCAPE 横竖屏切换,实际不起作用,想横屏比较符合使用。有没有代码可参考参考
3,能不能帮忙写一个上位机下载文本的PC机专用软件?应答式的,单片机发送请求字符”XX",PC端发送文本.txt的第一行,单片机接收完再请求再发送第二行,逐行发每行字符100字以内。网上很多COM口工具功能强大却不适用,这个要求我知道过分了{:4_167:}
浦江一水
发表于 2024-5-7 21:14:20
cadplus 发表于 2024-5-7 09:14
大佬好,上次刚刚请教过128*64单色屏的驱动,这次又要求助了
因为128*64显示的内容太少不够用,又入手一 ...
楼上坛友提了三个问题.
1,关于中西文混合输入(显示);
2,关于LCD显示屏的横竖屏切换;
3,关于PC机向单片机发送文本文件专用软件.
试试逐一回答... 水平有限, 仅供参考的...
1, 关于中西文混合输入(显示);
从字面看, "混合输入", 使我想起了我曾经做过的单片机实际产品项目, 仅用六个键实现了"中西文全拼联想输入法". 难道需要介绍中西文输入法吗?
但是从问题的举例来看, 好像是在说, 在屏幕显示时, 中西文是分开显示的, 要想做到一次性显示.这就是关于"中西文混合显示"的话题了. 应该是这个意思吧?
这又使我回忆起十七年之前, 我曾经撰写投稿在2006年第11期《无线电》月刊杂志上刊出的《一种直观简单的单片机中西文混合显示方法》一文,
多年来我一直沿用着这种自己编写的方法来处理单片机显示中西文的.
其特点是, 简单, 直观, 源程序可读性强.
这在当年, 或许算是一种创新了, 但现在看来, 当然是很幼稚的. 让人见笑了...
本论坛中的多位高手的例程中, 方法稍有不同, 但是都已体现中西文混合显示的技巧了...
其实思路原理并不复杂:
首先是建立西文ASCII字符点阵模库,和中文点阵模小字库(或者全字库, 本贴例程就是用全字库,字库是放在外部存储器中的).
其次就是处理要显示的字符串了, 在C语言中, 就是利用字符串和字节数组是相通的特点来处理,
比如举例显示16点阵的字符串"X坐标:",
这"X坐标:" 就是字符串, 如果变量名是Str,那么这变量名为Str的字符串长度是6字节 (一个西文字符占一字节, 一个汉字占两字节).
因为:
'X' 的ASCII码 0x58
"坐"的机内码 0xD7 和 0xF8
"标"的机内码 0xB1 和 0xFA
':'的ASCII码0x3A
所以, 其实就是数组Str[]的各字节是:
Str = 0x58; //'X'的ASCII码
Str = 0xD7; //"坐"字机内码的高位字节
Str = 0xF8; //"坐"字机内码的低位字节
Str = 0xB1; //"标"字机内码的高位字节
Str = 0xFA; //"标"字机内码的低位字节
Str = 0x3A; // ':'的ASCII码
Str = 0; //C语言中字符串的结束标志...
需要显示时, 走一个循环,下标0..5,依次读取各字节
凡是遇到ASCII码小于0x7F的, 都是西文字符, 大于0xA0 (十进制为160)的汉字机内码了(GB2312编码),
如果是西文字符, 每次取一字节, 指针加一, 计算其点阵模库的偏移位置, 用显示西文的方法, 取模显示之, 一个字符点阵模16字节;
如果是中文字的, 每次取两字节, 指针加二, 将机内码转换乘区位码,计算其点阵模偏移位置, 用显示中文的方法,取模显示之, 一个汉字点阵模32字节;
假如显示函数原型为:
/*=========================================================================
** 在彩色LCD液晶显示屏显示16点阵中西文混合字符串函数(小字库字模取自ROM)
** 参数: X列Y行坐标, * str串指针, Fcolor字前景色,Bcolor字背景色,约定:背景色号80为透明
==========================================================================*/
void H16(unsigned short X,unsigned short Y, char *str,unsigned char Fcolor,unsigned char Bcolor);
源程序写法就很简单直观了:
比如在左上角显示"X坐标:",黑底白字.
那么, 程序就这样写:
H16(0,0,"X坐标:",15,0); //15白色 0 黑色 (沿用DOS年代, 中文UCDOS的定义)
一看就懂.
具体实例, 本人在"新手学用STC32G12K128, 实践与思考(都是干货,盖楼砖瓦,实用基础)" 一贴中相关彩色显示屏的例程中,
其实已经给出, 欢迎下载研究和指正, 或改编成为自己的东西.
https://www.stcaimcu.com/forum.php?mod=viewthread&tid=4800&extra=&page=3