数码之家

 找回密码
 立即注册
搜索
查看: 2608|回复: 21

[Arduino] 还谈编程菜鸟与arduino-esp8266之间的那些事——LCD12864时钟【3】代码分享

[复制链接]
发表于 2022-4-20 12:56:41 | 显示全部楼层 |阅读模式
本帖最后由 慕名而来 于 2022-4-20 13:01 编辑

这是本帖的第三篇了,原本想发4贴尽可能详细的将编程思路与感兴趣的新手分享,但目前看来此贴话题无人感兴趣所以就长话短说结贴算了。
此前两篇:
还谈编程菜鸟与arduino-esp8266之间的那些事——LCD12864时钟【1】
https://www.mydigit.cn/thread-307525-1-1.html
(出处: 数码之家)

还谈编程菜鸟与arduino-esp8266之间的那些事——LCD12864时钟【2】
https://www.mydigit.cn/thread-307877-1-1.html
(出处: 数码之家)


接下来大致说下ST7565-LCD12864屏的驱动,arduino驱动ST7565屏是有现成的库的,因为我还没有弄明白很多arduino库的用法加上此屏的驱动也非常的简单就自己写了代码,其中因为做时钟、日历这些应用也就十几个汉字的显示量搞一个字模数组也很简单,于是就移植了C51的文件,代码也是很简单的,如果有用到这段代码的朋友遇到问题可以跟此贴交流,如果我看到会及时回复的,需要指出的问题是我用的这个LCD屏的显示数据地址是不连续的,整屏上下分成了两个部分详见下图:



上图中可以看出,屏幕是8点像素竖向排列,横向1列起始(不是0列起始)至128列止,竖向各页如图布局,为了方便输出显示函数的使用,程序中加入了页顺序重新排列的函数使页地址规整为0-7页的排列方式,具体详解我分享的程序。
关于wifi时间的获取利用的是下帖的中我自己的代码:


浅谈编程菜鸟***【三】ESP8266驱动DS3231网络校时代码分享
https://www.mydigit.cn/thread-272781-1-1.html
(出处: 数码之家)


有问题的可以过去看看或者跟此贴交流。
分享代码如下:



如果你有丝印为VTM8870B的LCD屏和NODEMCU模块,可以根据附件文件中的ST7565_ESP.h文件中的端口注释连接线路利用我分享的代码可以一次性完成制作,如果你的屏或你的esp8266模块和我的不一样,那么只要你的屏是SPI接口的而你的8266是ESP-12这一类型的(引出I/O引脚够多的),根据接线定义正确接线并修改相应代码也是可以实现的,此时我分享的代码仅作参考使用。作为一个喜欢玩单片机的C语言编程菜鸟,刚刚接触arduino应用很难有高质量的代码分享给大家的,只能分享一些自己的思路以及心得,但或许我的思路对于新手应用而言确实很容易实现,并且代码也是很简单的。
最后需要提醒的问题是,烧录程序时请断开8266与LCD之间的连线,否则可能会出现一些状况,代码下载完成后,如果你的esp8266在此前有过连接你的wifi的操作那么上电显示初始化时间4月15日周一 11:59;几秒后就会跳变成为当前实时时间的显示,如果长时间没有跳变显示则可以浏览你的手机的wifi热点,哪里会出现esp8266这个网络,点进去会看到如下界面:点开配置wifi配置输入你的wifi而后go就ok了


---------全贴终-------



本帖子中包含更多资源

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

x

打赏

参与人数 1家元 +20 收起 理由
jf201006 + 20 原創內容

查看全部打赏

发表于 2022-4-20 13:07:49 | 显示全部楼层
别啊。跟你学习。自己搞点智能家居之类的
回复 支持 反对

使用道具 举报

发表于 2022-4-20 13:53:00 | 显示全部楼层
收藏学习,感谢分享!
回复 支持 反对

使用道具 举报

发表于 2022-4-20 14:11:22 | 显示全部楼层
一直就想学,并且默默的在学。感谢楼主。
回复 支持 反对

使用道具 举报

发表于 2022-4-20 14:12:50 | 显示全部楼层
慢慢来,带着大家一起学习嘛
回复 支持 反对

使用道具 举报

发表于 2022-4-20 22:48:14 | 显示全部楼层
太深奥了,看不懂啊
回复 支持 反对

使用道具 举报

发表于 2022-4-21 06:40:04 | 显示全部楼层
学习学习,谢谢楼主分享
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-4-21 11:08:27 | 显示全部楼层
brianlee 发表于 2022-4-20 13:07
别啊。跟你学习。自己搞点智能家居之类的

我也只是粗浅的玩一下这个wifi模块,一切都跟着兴趣走用到那就学习到那,共同学习就好!
回复 支持 反对

使用道具 举报

发表于 2022-5-27 09:56:32 来自手机浏览器 | 显示全部楼层
一口气看完三贴,说的很详细,回家俺也做个看看。
回复 支持 反对

使用道具 举报

发表于 2022-5-27 10:32:57 | 显示全部楼层
谢谢楼主分享  自己搞点智能家居 值得参考
回复 支持 反对

使用道具 举报

发表于 2023-5-6 20:34:25 | 显示全部楼层
本来是学习ST7565-LCD12864屏的驱动,可惜自己不能下载!!!!!!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-5-7 10:41:15 | 显示全部楼层
wangl006 发表于 2023-5-6 20:34
本来是学习ST7565-LCD12864屏的驱动,可惜自己不能下载!!!!!!

本文屏的驱动代码如下:

  1. #include "ST7565_ESP.h"

  2. //====命令或数据写入函数====================
  3. void wr_lcd(unsigned char q,unsigned char date_com)
  4. {
  5.     digitalWrite(CS, LOW);  //启用从设备
  6.     if(q)
  7.     {
  8.       digitalWrite(RS,HIGH);   //发送数据
  9.     }
  10.     else
  11.     {
  12.       digitalWrite(RS,LOW);  //发送指令
  13.     }
  14.     SPI.transfer(date_com);
  15.     digitalWrite(CS, HIGH); // 发送完毕后再次禁用从设备
  16. }
  17. //====LCD初始化函数==============================================
  18. //设置为屏幕横向放置、屏幕接线连带在下侧
  19. void Initialize()
  20. {
  21.     digitalWrite(RST,LOW);
  22.     delay(5);//delayMicroseconds(20);
  23.     digitalWrite(RST, HIGH);
  24.    
  25.     wr_lcd(0,0xae);//OFF DISPLAY
  26.     wr_lcd(0,0xa0);//水平显示方向设置  正/反==0xa1/0xa0
  27.     wr_lcd(0,0xa6);//显示反白 黑字/白字=0xa6/0xa7
  28.     wr_lcd(0,0xc8);//垂直显示方向设置  正/反==0xc0/0xc8
  29.     wr_lcd(0,0x2f); //16POWER CONTROL 选择内部电源模式必选2F
  30.     wr_lcd(0,0x24);//17RESISTER RATIO 电压值.(对比度)粗调 2x(x=0-7)、5V==0x24
  31.     wr_lcd(0,0x81); //18VOLUM MODE SET 对比度细调指令,必须连续输入下面的值指令(双字节指令)
  32.     wr_lcd(0,0x15);//RESISTER RATIO 对比度细调值。必须跟随上一句指令 ,细调 0~3F  0x2a
  33.     wr_lcd(0,0xaf);//ON DISPLAY 开LCD
  34.    
  35.     delay(10);
  36. }
  37. //====页地址映射函数==============================================
  38. //页地址对应字符写入的H地址
  39. //行显示位置分页指令函数参见命令3--页地址设置(Page Address Set)
  40. //VTM88870B屏(ST7565)的行排列方式自上而下为32-->63-->0-->31
  41. //此屏以8点(8行)为一页、自上而下分为8页
  42. //对应页地址排列为4、5、6、7、0、1、2、3
  43. //为了便于8*8点阵的定位、代码中加入了行号Page重新映射的算法
  44. //行号数据最大为8所以仅处理数据的低4位即可
  45. //----------------------------------------------------------------
  46. void SetPage(unsigned char Page)
  47. {
  48.     if(Page<4)
  49.         Page+=4;    //0、1、2、3行映射到4、5、6、7页
  50.     else if(Page>3)
  51.         Page-=4;    //4、5、6、7行映射到0、1、2、3页
  52.     Page=Page & 0x0f; //去掉前4位
  53.     Page=Page | 0xB0; //将行地址与起始页(0x0b)1011XXXX组合
  54.     wr_lcd(0,Page);   //送行地址命令
  55. }
  56. //====列地址高/低四位数据拆分写入函数===================
  57. //列地址对应字符写入的Y地址
  58. //列地址为4位的数据需要分两次写入
  59. //8位列地址数据需要拆分为两个低4位有效的8位数据
  60. //高、低位数据由数据的bit4位区分、bit7-bit5无效
  61. //bit4置1代表高位数据
  62. //bit4置0代表低位数据
  63. //此屏幕列起始地址不是0而是1
  64. void SetColumn(unsigned char Column)
  65. {
  66.     unsigned char temp;
  67.     temp=Column;
  68.     temp=temp>>4;
  69.     temp=temp & 0x0f;
  70.     temp=temp | 0x10;  //高4位
  71.     wr_lcd(0,temp);

  72.     Column=Column & 0x0f;
  73.     Column=Column | 0x00;
  74.     wr_lcd(0,Column);
  75. }
  76. //====清除屏显数据函数(满屏写0)============================
  77. void Clr_Scr()
  78. {
  79.     unsigned char seg;
  80.     unsigned char page;
  81.     for(page=0xb0; page<0xb8; page++) //写页地址共 8 页 0xb0-0xb7
  82.     {
  83.         wr_lcd(0,page);//写入页地址
  84.         for(seg=1; seg<129; seg++) //写 128 列(此屏幕起始列为1)
  85.         {
  86.             SetColumn(seg);//写入列地址
  87.             wr_lcd(1,0x00);//写入0清除所有数据
  88.         }
  89.     }
  90. }
复制代码


回复 支持 反对

使用道具 举报

发表于 2023-5-7 20:54:19 | 显示全部楼层
非常感谢楼主的回复,认真学习一下!!!!!!
回复 支持 反对

使用道具 举报

发表于 2023-5-8 19:58:39 | 显示全部楼层
不是不感兴趣  现在一点办法都没有 网络太难了
回复 支持 反对

使用道具 举报

发表于 2023-5-9 17:19:30 | 显示全部楼层
谢谢分享,学习学习
回复 支持 反对

使用道具 举报

发表于 2023-6-5 23:58:56 | 显示全部楼层
arduino烧录esp8266nodemcu能出个教程吗?
尝试两次使用arduino做开发工具都阻塞在烧录失败上,只能踏上micropython的破路。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-6-6 12:32:14 | 显示全部楼层
mao_jin_dao 发表于 2023-6-5 23:58
arduino烧录esp8266nodemcu能出个教程吗?
尝试两次使用arduino做开发工具都阻塞在烧录失败上,只能踏上mic ...

软件的版本不同显示的提示等东西也不同,我只依我在用的arduino1.8.13软件大致说说烧录过程吧,如果感觉有用你就试试。
ardui环境对NODEMCU模块真的很友好,烧录也很简单,必要的操作如下:
1.根据你的NODEMCU模块上的USB-TTL芯片安装驱动,我的是CP2102,预安装了驱动后在插入模块时会自动安装设备,安装完成后会在设备管理器中找到相应的COM口,我的是COM9口。
2.软件安装后需要配置使用的开发板,如果你的软件工具栏中找不到NODEMCU相关的开发板的话则需要在软件中下载安装相关库。配置好了开发板后会在工具栏下拉菜单中看到相关的开发板信息、数据和对应的 COM口,见下图:




配置完成使用正常的软件每次打开后会在软件右下角看到相关信息如下图:




写好了代码可以编译一下:



如果编译成功会有以下提示:



编译成功后就可以上传烧录了:



烧录正常的话可以看到烧录进度,如图:



烧录成功后会有如下提示:



如果烧录失败也会有相应的提示,因为我不懂英语所以我每次都是复制提示语到百度翻译中进行翻译分析。

本帖子中包含更多资源

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

x
回复 支持 反对

使用道具 举报

发表于 2023-6-6 21:49:45 | 显示全部楼层
慕名而来 发表于 2023-6-6 12:32
软件的版本不同显示的提示等东西也不同,我只依我在用的arduino1.8.13软件大致说说烧录过程吧,如果感觉 ...

感谢指导。
再搞两块板子试下了。
回复 支持 反对

使用道具 举报

发表于 2023-6-7 22:50:51 | 显示全部楼层
好东西,已收藏了!谢谢分享!
我编译没有通过:Compilation error: call to 'HTTPClient::begin' declared with attribute error: obsolete API, use ::begin(WiFiClient, url)
回复 支持 反对

使用道具 举报

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

本版积分规则

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

闽公网安备35020502000485号

闽ICP备2021002735号-2

GMT+8, 2024-4-26 05:26 , Processed in 0.140400 second(s), 12 queries , Redis On.

Powered by Discuz!

© 2006-2023 smzj.net

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