fpga驱动oled iic显示代码_毕业设计基于STM32手势控制显示系统的设计

关注、星标公众号,解锁更多精彩内容!

4e3feb8dba51b108ca14e1b743d7e008.png

文章字数:7678 字

预计阅读:20 分钟

内容来源:网络 & BabyCoder

编辑整理:BabyCoder

一、前言

  大学四年真是快呀,不知不觉就毕业一年了!回头看看走过的路,总要留下一点痕迹才是,这里就对我的毕业设计进行一个总结,也算给以后的自己记录,留下一点东西。也给有兴趣的各位一个参考的实例。

二、项目背景及资源分享

  在网上有看到一个视频,参考网址:https://tv.sohu.com/v/dXMvNjMyNzQwNDAvMjkzNTEyMDguc2h0bWw=.html

  感觉这个操作很清奇,让人耳目一新,就想着用这个来做毕设,当然也少不了我导师给我的建议和帮助,十分感谢。

  ESP8266 当做 Arduino 烧录程序:http://m.elecfans.com/article/584883.html

  使用 ESP8266 获取天气的链接失效了,不过下边会讲一点。

  这个视频的实现效果,很流畅, 很棒,但是我模仿做出来的还没达到这种程度,优化不够。然后就是换了一些新的传感器,换了一些显示方式等。本文中的部分内容是直接从毕业论文中复制过来的。有不足之处还请多多指教!谢谢!

  相关资源的百度云链接如下,主要包括程序,用到的一些数据手册等等。

  链接:https://pan.baidu.com/s/11Vo0-9oMFYzqaxTQ4s09Iw

  提取码:xjen

三、项目简介

1、项目名称

  基于 STM32 手势控制显示系统的设计;

2、系统框架

  本系统以 STM32 为核心处理器,主要负责实现

  • 点阵显示屏的刷新功能

  • 芯片自带的 RTC 时钟功能

  • 温度的计算与显示功能

  • 红外光电开关的检测功能

  • 与 ESP8266 物联网 WiFi 模组串口通信功能

  • 与 STC8 下位机的串口通信功能等

  以 STC8 单片机作为从机系统,主要负责

  • 与手势识别模块的串口通信功能

  • OLED 显示功能

  • 与主机 STM32 之间的串口通信功能等

3、功能简介

  确保整个系统接线无误后,上电,然后需要手动遮挡红外光电开关超过 3 秒,实现系统开机.

  接着进入开机动画,会有一个加载界面,显示一条横线从上往下扫屏,然后切换到主界面的显示。

  主界面可以显示内容有时间、日期、温度、天气,整个过程都是用手势来控制的。

  用手势遮挡光电开关超过 2 秒,系统进入设置状态,在这里可以设置时间、日期等。

  具体操作可以通过手势左滑右滑切换要设置的某一位,上滑下滑调整数字大小,然后手势下压(向前靠近传感器)来保存设置并退出。

4、控制核心

  • STM32 控制器:STM32F103ZET6

  • STC8 控制器:STC8A8K64S4A12

5、最小系统

  STM32 我直接使用的 EU 的最小系统板,用起来一般,我有同学自己画的控制板,可以尝试自己画一块;

  STC8 使用朋友画的最小系统的控制板。

6、外围模块

  • 闲鱼买的一个 32 * 80 的双色点阵显示屏;

  • ESP8266 WIFI 模块(CP2102 NodeMCU 开发板);

  • PAJ7620 手势识别传感器;

  • 0.96 寸 OLED 显示屏;

  • 光感式传感器(光电开关),有的也叫红外开关;

四、相关设计原理及框图

1、系统设计的原理

  该系统主要是以 STM32 为核心处理器展开,集成了一个点阵屏显示系统、一个下位机手势检测系统、一个 ESP8266 物联网模块、一个温度传感器等。

  整个系统集手势识别,红外检测,物联网,串口通信,IIC 通信,SPI 通信等先进技术于一体。

  用作下位机的 STC-8 单片机用来实时检测不同手势,同时用 OLED 显示当前识别值,然后通过串口通信反馈给 STM32 主控芯片。

  当主控芯片收到下位机的信息后,根据返回的不同手势识别码,进行相应的设置/操作,以此来实现滚屏,调整时间等功能。

  时钟利用 STM32 内置的 RTC 时钟来完成。外加有温度传感器 DS18B20 ,可以用来实时获取当前周围环境的温度大小。

  当地天气状况则由 ESP8266 模块,通过公用的心知天气 API 来联网获取,并在模块内部对获取到的信息进行 JSON 解析,再将我们需要的信息用串口发送给主控板。

  主控板在收到对应的信息后,进行简单处理即可显示在点阵屏上。

2、手势识别原理

  PAJ7620 是一款先进的光学数组式传感器,芯片内置有光源以及环境光抑制滤波器集成的 LED 。传感器镜头和手势感测器集成在一个较小的立方体模组内,能够在黑暗或低光环境下工作。PAJ7620 内部自带 LED 驱动器,传感器感应阵列、目标信息提取阵列和手势识别阵列等。

  PAJ7620 在工作时通过内部 LED 驱动器,驱动红外 LED 向外发射红外线信号,当传感器阵列在有效的距离中探测到物体时,目标信息提取阵列会对探测目标进行特征原始数据获取,获取的数据会存在寄存器中,同时手势识别阵列会对原始数据进行识别信息处理,最后将处理得到的手势结果存到寄存器中,用户可使用 IIC 接口对原始数据和手势识别的结果进行读取。

3、系统设计框图

9bc5a11067e7fb5ba48a8d8ed4e88943.png
整体系统设计框图

4、硬件部分系统框图

31b4792b2d780ee7e1bfc8040da2c2f3.png
系统硬件部分框图

5、软件部分设计思路

eee7983d39c16ff5fcb780940b8814cb.png
系统软件部分框图

五、硬件系统设计

1、32 * 80 点阵显示屏

1.1、模块作用

  主要用做信息显示装置,模块内部已经集成了 74HC595 锁存器、74HC138 译码器等芯片,因此主控板在控制点阵的时候相对比较容易,相关底层驱动程序的编写也比较容易。

1.2、实现功能

  实现了单色显示时间、日期、星期、温度、天气等信息,并可随控制进行开机动画,时间日期的更改等操作。

1.3、内部电路

  整个大的点阵都是用小的 8 * 8 点阵拼装而成,因此这里只用一块小点阵来简要描述内部原理图,具体内部电路如下图所示:

e49fd20f7d87e692d68b64578db055c8.png
点阵最小单元内部电路

2、RTC时钟

2.1、简介

  STM32 内置的 RTC 时钟就是一个独立的定时器,它有一组连续计数的计数器,可以产生定时器中断,通过相关程序配置,可以间接实现时钟日历的功能。

  通过修改定时器内部计数器的初值可以来设置当前时间日期。

  RTC 时钟模块可以使用备用电源供电,也就是说在系统关机或休眠时,RTC时钟不会受到影响,会在备份区域一直计数,并且可以在系统复位或者唤醒后,实时返回当前时间日期值。

  但是在系统复位后,内部会自动禁止访问 RTC 以及备份区域,防止用户误操作。因此在设置的时候,需要先取消备份区域的写保护。

2.2、模块作用及实现功能

  模块作用:利用芯片内部的 RTC 时钟,结合外围电路,用来获取当前时间、日期等信息,用 RTC 中断返回给主控后,经过处理,得到正确的时间日期。

  实现功能:实现了时间、日期、星期等信息的获取。

3、DS18B20 温度传感器

3.1、简介

  DS18B20 温度传感器是 “一线总线” 接口的温度传感器。该温度传感器与传统的热敏电阻等测温元件相比优势在于:新型、体积尺寸小、适用电压宽、与微处理器接口简单等方面。综合成本,性能等原因考虑,选用此芯片。

  DS18B20 温度传感器一个很重要特点就是一线总线通信方式,通俗来讲就是单总线结构,该结构使用简洁,组网方便。测量温度范围比较大,在 -55 ~ +125 摄氏度,测量精度为 ±0.5 摄氏度。使用过程中数据以单总线方式传输,抗干扰能力强。

  该温度传感器可以直接读出被测温度,可以通过简单的程序控制实现 9 ~ 12 位的数字值读数方式。工作电压为 3 ~ 5.5 伏特内,拥有多种封装,可以使系统的设计更加灵活、方便。在使用时,设定的分辨率及报警温度等信息会存储在 EEPROM 中,在掉电后仍然可以保存。

3.2、模块作用及实现功能

  该模块的作用是帮助我们实时获取当前周围环境的温度值。而后通过单总线的方式将温度数据返回给主控板,经过处理之后,温度值即可正常显示在点阵屏上。

  主要实现功能为:对周围环境温度的读取,内部的处理,数据的存储,以及数据的传输等功能。

4、ESP8266 物联网 WiFi 模组

4.1、简介

  物联网模块主要采用乐鑫开发的 ESP8266 芯片,以及安信可利用此芯片搭建的低功耗串口 - WiFi 模组,方便用户进行二次开发,模块内部接入云端服务,可以实现物联网的相关控制。

  模块内部集成了 32 位超低功耗 MCU ,可使用 16 位精简模式指令集,模块主频可以支持 80MHz 和 160MHz ,可以支持实时操作系统,硬件上还集成有板载天线等。还支持标准的网络接口协议。可以自定义联网功能,也可单独使用。

4.2、模块作用及实现功能

  ESP8266 模组主要用来定时向心知天气公用 API 发送指令,来获取本地天气状况,把得到的数据在内部进行 JSON 解析后,将有用的信息通过串口发送给主控板。

  总体上来讲实现了系统联网的功能,并且可以从互联网实时获取天气状况。

5、STC8 从机系统的设计

5.1、简介

  STC8A8K64S4A12 是 STC 公司推出的最新型单片机,不需要外部晶振和外部复位电路,拥有超高速的 8051 内核( 1T ),比传统 8051 单片机速度约快 12 倍以上,指令代码等完全兼容传统 8051 内核。拥有多达 20 个中断源以及 4 级中断优先级等。

2ac137d1a327a29dd823f39a25358a10.png
单片机引脚定义

5.2、模块作用及实现功能

  用此单片机作为下位机,只用来实现与 PAJ7620 手势识别芯片的 IIC 通信以及控制 OLED 显示两个功能。整个从机系统的软件设计流程如下:

  1. 与手势识别模块通过 IIC 进行通信,用来实时获取当前手势类型值,并存储起来备用。

  2. 将获取到的手势类型值显示在 OLED 上,作为与实际显示结果的对比。

  3. 在显示到 OLED 的同时,通过串口将手势类型值发送给主控,便于主控板对下位机信息的获取。

  4. 主程序中一直在检测手势类型值,检测到就用串口主动上报给上位机。

6、PAJ7620 手势识别模块

6.1、简介

  手势识别模块采用了 “原相科技” 的 PAJ7620 芯片, PAJ7620 是其推出的一款先进的光学数组式传感器,芯片内置光源以及环境光抑制滤波器集成的 LED ,模块所用传感器镜头及手势感测器全部集成在一个很小的立方体模组内,并且还能够在黑暗或低光环境下工作。芯片内部提供接近检测功能,可以用于感测物体接近或离开。此外,PAJ7620 还具有以下特点:

  1. 采用安全可靠的 IIC 接口,支持高达 400KHz 的通信速率。

  2. 芯片内置 9 个手势类型(上,下,左,右,前,后,顺时针转动,逆时针转动,挥动),支持输出中断。

  3. 传感器支持接近检测功能,同时支持检测物体体积的大小和环境亮度。

  4. 芯片具有较低的功耗。

  5. 抗灯光干扰。

6.2、模块作用及实现功能

  主要用来实现手势类型的检测,以及内部数据的处理与保存。在得到处理结果的时候,将获取到的手势类型值通过 IIC 返回给单片机。

  工作流程如下图:

93b8085f58de81b4209c52b6ef14a9ec.png
工作流程图

7、各个模块与控制器接口定义

  • STM32 与点阵接口
07d910478796c7523b158057c6a0401b.png
d0ce514bdb7d4099dd7300c5cff09371.png
  • 温度传感器,光电开关,LED 灯,KEY 按键接口
1e2a98191299fb436786fa9475853fa1.png
  • 手势识别模块数值,方向,符号等
88665b8c281b823a483f2a944428f854.png
  • 定时器中断,RTC 中断接口
f12f32c4c54195dadf86dd2850357a57.png
  • 与下位机和 ESP8266 通讯串口
5e36e525f5d604f6d32b8f9962f43afc.png
  • 用到的手势方向接口,光电开关不同颜色的线对应的接口
54fb20d593b740ae4561c1a90ebe73ba.png
  • 时钟晶振对应接口
404e8455582425a7bd95e619b50a3676.png
  • STC8 单片机与手势识别模块 IIC 通讯接口,点阵显示屏双色显示模式切换
8dc73aedeee8670aa573191b880448d7.png
  • STC8 单片机 IIC 接口
417c178d13d7a51347a5a4f9ce32fcfa.png

8、系统硬件设计小结

8.1、硬件部分设计的优点

  1. 主控芯片功能强大,成本低,操作简单,使用方便,代码编写容易;

  2. 显示屏价格实惠,抗干扰能力强,使用便捷;

  3. 硬件模块化程度相对较高,焊接印刷工艺良好,性能稳定;

  4. 布线相对简单,不易造成干扰。

8.2、硬件部分设计的缺点

  1. 成本相对较高,多使用了一个 STC8 单片机作为下位机;

  2. 产品外部包装不是很好,全部裸露;

  3. 显示颜色单调,亮度体验感觉不太好;

  4. 接口太多,布线不够整洁,容易连线错误;

8.3、硬件部分设计的改进及建议

  在硬件设计的时候,要综合全局来考虑,简单步骤如下:

  • 首先是对模块,芯片的选型,要考虑到性能需要满足我们的设计要求,以及成本在可承受范围内。

  • 接着在设计电路的时候要注意布线规则,在不影响性能的情况下芯片排列要尽可能的美观,便于后期焊接。

  • 在系统各模块进行连接的时候,要充分考虑到模块位置,接线方式,以及这样排列放置的优缺点,抗干扰性能等。

  • 在焊接跳线时,要镀锡,避免导线断路,否则出问题很难排查,在可能造成短路的地方,一定要提前做好预防,避免器件的烧毁。针对功率大的器件,还需要考虑散热等问题。

六、软件程序设计

  程序部分不会一一讲解,可以直接去看代码,下边着重讲一下 ESP8266 部分代码。

1、物联网模组 ESP8266

  本系统使用了基于 ESP8266 的 NODMCU 开发板,可以直接用 Arduino IDE 对其进行编程。

  • 在程序中需要包含 ESP8266 模组 WIFI 以及 ArduinoJson 的头文件;

  • 定义需要连接到的 WIFI 名称,密码等信息;

  • 设置需要连接的心知天气的 API 接口网址,以及 API KEY 等;

  • 设置我们需要获取天气状况的地点,我在这里默认设置了郑州为获取天气的地点;

  • 还有要解析的语言类型,最后对串口的波特率,获取天气的时间间隔,获取内容的大小做了一些定义;

  具体程序代码如下图:

87c1ca10b72431449fee59c4744226d5.png

  定义了一个结构体,用来存储我们需要从网页中提取数据的类型,主要信息有城市名称,天气,温度,更新时间等,如下图:

41b5f15c1599bff8abcf0de4b4550123.png

2、屏幕滚动功能实现

  屏幕滚动功能的实现主要是通过改变缓冲数组中的值来实现的,目前只实现了最简单的整屏向左向右移动,以向左滚动为例,代码如下:

af0ed9c224eaefd89f6916189d4fe02c.png

3、时间日期设置

  时间日期的设置使用了一个红外光电传感器,当传感器被遮挡超过 2s 时,进入设置模式,从时间的最右边,也就是秒的个位开始,然后检测手势识别模块的返回值,向上加 1 ,向下为减 1 ,向左为切换到秒的个位,向右为日期年份的千位,以此类推。

  在设置完成后,手势识别模块返回向前或向后,即为保存。用两种类型都作为保存功能,是因为手在向前运动,离开的时候极大可能会造成误检测,因此将远离动作也用作保存功能。

  整个设置都结束并且也保存完成之后,再次遮挡红外光电传感器,超过 2s 即视为退出设置,恢复到正常显示界面。红外光电传感器初始化程序如下图:

88861d0fe9f9ff053f8aea6cb85666cb.png

4、开机动画功能实现

  在整个系统上电后,需要遮挡红外光电传感器 3s 以上,系统才能 “开机” ,伴随着开机动画的出现,最后定格在时间日期的显示上。

  实现过程简单的来说就是先逐一点亮每一列,实现进度条的加载,而后再逐行点亮,即可实现向下的滚动效果,然后在显示过后的数组后边填充上开机动画结束后要显示的欢迎界面,即可实现想要的效果。

  具体实现代码如下:

2544d53efe6af989c857dfbb40d6ec46.png

  用 while 循环在一行当中逐列点亮 LED ,实现进度条加载功能,具体如下:

96f97486bc3852a074c9ecd0f6a97348.png

  用 while 循环来逐行点亮屏幕,直到最后一行,然后跳出 while 循环,如下图:

135914aed34702dc7b74a67c3a77d0dc.png
7c7dce81151f7c90d88e68c8a1ebf958.png

5、主函数

  主函数内部程序主要是一些功能模块的初始化,以及一些函数的调用,分步介绍如下:

aa626474f71fa39ed7c8331c93933aad.png
9496fde94a04b36a70b4b2b7e6627739.png

  概括来说主函数依次执行功能模块的初始化函数,如果系统第一次上电的话,则还需要设置初始时间。

  接着就执行开机动画函数,全部都执行完毕后,主函数进入死循环,如果不遮挡红外光电传感器,则默认显示在时间日期界面。

  此时可以使用手势控制屏幕滚动,实现左右切换,如果遮挡红外光电传感器超过 2 秒以上,则会进入到设置界面,同样的在设置完成退出后,程序又继续回到更新后的时间日期的滚动显示界面。

6、软件设计小结

  整个手势控制显示系统的程序编写,基本按照从部分到整体的结构来设计,针对不同的模块,基本都可以用不同的 C 文件来编写,方便后续的修改与维护。在编写过程中,有良好的代码注释风格,良好的函数以及变量命名规则,通俗易懂。

  还需继续改进的地方:

  • 主程序文件内容太多,没有做到很好的拆分,阅读较困难;

  • 代码不够精简,优化程度不高;

  • 整个程序在设计的时候,条理分支不是很清楚,思路不够清晰;

  • 整个系统设计之初的功能需求没有全部实现;

  • 实际用户体验不是太好,还需要继续优化。

七、综合测试问题记录

1、点阵显示屏刷新部分测试

  在程序编写初期,点阵显示屏刷新总是出现乱码,后来经过排查之后发现点阵显示屏与主控板的接线不是很好,中间有的可能出现了接触不良,断路的情况,导致屏幕出现乱码。

  在进一步测试时发现左右滚屏出现前一屏的内容还在的问题,后经过排查发现是在向左或者向右滚屏之后没有及时把上一屏的内容清空,也就是没有把数组内的数值清零,这样会导致如果前一屏显示的内容比后一屏显示的内容长的话,在滚动到后一屏显示时,前一屏的数据还停留在屏幕上。后来在程序中进行了数组清空操作。

  在加入手势识别模块后,主控板与点阵显示屏的通信特别容易受到干扰,主要表现为出现屏幕抖动,闪屏等问题,在经过几天的调试之后还是没有解决问题,最后采取了用一块单片机作为下位机来保持与手势识别模块的通信。至此,点阵显示屏恢复正常。

  最后经过多次调优测试稳定后,点阵显示屏基本保持正常,并在这里把程序备份。

2、下位机 STC-8 与手势识别模块测试

  在程序编写初期,发现单片机不管怎样都无法收到返回值,后经检验,是单片机的 IIC 接口接线错误,导致无法与模块进行通信。

  接着在编写 OLED 显示时,出现初始 UI 界面有显示,但是手势类型信息没有显示,后经排查发现是忘了更新缓存到 OLED 导致的。

  最后在串口发送时,由于初始化设置错误,导致单片机不能成功发送数据给主控,后经排查,修改了对应参数设置后,整个模块使用正常。

3、温度传感器测试

  该部分程序在编写初期,采用的是普通模式来读取温度值,在调试的时候发现温度值固定显示在85.5摄氏度,经过程序多处修改测试,包括更换温度传感器 DS18B20 芯片,问题依然没有解决。

  后来采用定时器中断方式来定时读取温度值,在代码移植过程中,出现变量名输入错误,单总线接口以及方向使用错误,又导致温度不能正常显示,后来经过对问题部分的修改调试,温度值可以正常显示。

  在随后的测试中发现温度值变化不是很灵敏,这个问题在后来的优化中没有进一步明显的实际效果,暂时搁置。

4、物联网模组测试

  刚开始在给 ESP8266 模组烧录固件的时候,多次出现错误,后经过与同学的沟通讨论,采取用官方软件烧录固件的方式,最终固件烧写成功。

  在调试程序过程中,刚开始由于 API 密匙填写错误,导致无法获取数据。后来经过排查,解决问题。

  在处理接收到的返回信息时,发现很多无用的数据,影响串口传输,也不利于数据处理,解决办法是在程序中把不需要的信息删除掉(精简协议数据),不让通过串口发送,便于主控板接收处理数据。

5、系统联合测试

  从最初的部分到最后所有模块都基本可以实现功能时,开始系统的整体调试,在整体调试过程中有一个最大的问题是无论我怎么修改定时器中断优先级,实际结果均无太大改变,在一次一次的尝试之后,发现定时器中断分组设置在中断初始化之后,我把定时器中断分组的配置修改到定时器中断初始化函数之前,问题终于解决,这个问题使我印象非常深刻,以后一定会谨记。

  最后系统整体测试基本没出现太大的问题,主要是对一些功能的完善、代码的优化以及效率的提升。最终整体效果比较稳定。

八、总结

  1. 记得当时应该是做了快两个月,然后算是对自己学习的综合能力做了一次检验,继续努力。

  2. 当时答辩的时候,ESP8266 联网模块出现了一点问题,没能成功演示,真是掉链子,说明做的东西还是不够稳定。

--- END ---

免责声明:本文部分素材来源网络,版权归原作者所有。如涉及作品版权问题,请与我联系删除。

关注微信公众号『 BabyCoder 』,解锁更多精彩内容!也可以通过后台添加我的个人微信,陪您共同进步eb5d9667cc49643057d5a86e72b1ad8e.pngeb5d9667cc49643057d5a86e72b1ad8e.pngeb5d9667cc49643057d5a86e72b1ad8e.png

b7749daecb6d50d9cfa88de9c8d13d07.png

求分享、求赞、求在看,谢谢您的鼓励!

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下是一个简单FPGA驱动OLED IIC显示代码示例: ```verilog module oled_iic_driver( input clk, //时钟信号 input reset, //复位信号 output reg [7:0] data_out, //输出数据信号 output reg sda, //IIC SDA信号 output reg scl //IIC SCL信号 ); //定义IIC传输状态 parameter IDLE = 2'b00; //空闲状态 parameter START = 2'b01; //起始状态 parameter WRITE = 2'b10; //写状态 parameter READ = 2'b11; //读状态 //定义OLED地址 parameter OLED_ADDR = 8'h78; //定义IIC传输计数器 reg [3:0] cnt; //定义IIC传输状态寄存器 reg [1:0] state; //定义写入数据缓冲区 reg [7:0] data_in; //初始化 initial begin cnt = 4'b0000; state = IDLE; data_in = 8'b00000000; end //状态机 always @(posedge clk) begin if(reset) begin cnt <= 4'b0000; state <= IDLE; data_in <= 8'b00000000; sda <= 1'b1; scl <= 1'b1; end else begin case(state) IDLE: begin sda <= 1'b1; scl <= 1'b1; if(cnt == 4'b0000) begin state <= START; cnt <= 4'b0001; end end START: begin sda <= 1'b0; if(cnt == 4'b0001) begin scl <= 1'b0; cnt <= 4'b0010; end else begin cnt <= cnt + 1; end end WRITE: begin sda <= data_out[cnt]; if(cnt == 4'b1000) begin scl <= 1'b0; cnt <= 4'b0001; end else begin cnt <= cnt + 1; end end READ: begin sda <= 1'b1; if(cnt == 4'b1000) begin scl <= 1'b0; cnt <= 4'b0001; end else begin cnt <= cnt + 1; end end default: begin sda <= 1'b1; scl <= 1'b1; end endcase end end //数据输入 always @(posedge clk) begin if(reset) begin data_in <= 8'b00000000; end else begin case(state) IDLE: begin data_in <= 8'b00000000; end START: begin data_in <= OLED_ADDR; end WRITE: begin data_in <= data_in << 1; data_in[0] <= data_out[cnt]; end READ: begin data_in <= data_in << 1; end default: begin data_in <= 8'b00000000; end endcase end end endmodule ``` 请注意,这只是一个示例代码,你需要根据你的OLED显示器和FPGA开发进行相应的修改。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值