FPGA nios软核编写液晶屏LCD12864驱动程序源码以及注意事项,本人亲自踩坑,重要!!!
LCD12864引脚如下:
FPGA开发板得提供,3.3v电压,5v电压,普通io都是3.3v电压
DB:数据脚,得用双向io,因为程序里面需要读取液晶的应答(普通io3.3v可以)
E:?输出引脚即可,普通io3.3v可以
RW:?输出引脚即可,普通io3.3v可以
RS:?输出引脚即可,普通io3.3v可以
PSB:串行还是并行,接+5v为并行,0v为串行,这个不能悬空,而且一定要接+5v(接3.3v行不行,没有测试,不敢乱说)
V0:这个是控制屏幕显示对比度的,接5v为最高对比度,0v为最低对比度,但是这样根本看不出来屏幕有显示,很坑,还以为是驱动程序没写对,所以最好直接接+5v,先保证屏幕一些正常,把程序调试正确,最后再来调一下对比度即可,即调这个引脚的电压值。其实这个引脚悬空也行,因为lcd12864背后自带了一个电位器,可以调,拧紧的方向为增强对比度,而且很灵敏,调一点点即可,对比度高,屏幕明显看起来有紫红色,对比度太低甚至不显示的程度,屏幕看起来是淡蓝色
VCC:+5v,记住:不能接3.3v,只能5v(这个问题坑了我一天时间,我以为跟数据脚用一样的3.3v就可以,其实不行)
GND:0V但是我发现接不接好像都可以,挺奇怪的,但是最好接上吧
BLA:背光板的正极,+5v,3.3v都可以,只是亮度不同,不影响时序以及应答,不接也行,就没有背光了而已
BLK:背光板负极,0v
?
首先保证以上引脚电压都接正确,否则程序正确了也没有显示,而且不会应答,程序陷入死循环!!!比如,我就是把vcc接了+3.3v,被这个问题整整搞了大半天,心累!!!手头也没有万用表,示波器等高端设备,自己也只有通过一根线连接这个引脚和一个led来测试哪个引脚电平的高低,一点点尝试,怀疑每一个地方,第二天中午12.30,失败了156次后,正准备放弃的时候,稀里糊涂的换了一下VCC引脚为5V,结果程序竟然跑起来了,显示也正确了,你知道我当时有多开心吗,比中了一个亿还开心,真想告诉全世界!!!那种无数次失败后成功的喜悦,真的是太好了!所以这里想告诉大家,失败是成功之母,经历了无数次失败后,你已经积累了大量的知识,阅历和运气,只要你肯坚持下去,你一定会成功的!
?
下面是我的FPGA?nios?驱动12864的程序:(我为什么不上传呢,因为这样你下载可能就需要积分或者啥的,雅思托福的区别我感觉不方便,既然大家都是追求技术,我也能体会大家现在的心情,我写这个的目的也不是为了赚积分,或者图什么利益,我就是想记录下自己踩过的坑,分享给大家,希望大家少走弯路。所以我直接写在博客里面,这样你可以直接复制)
注:这个是LCD12864的驱动程序,至于为什么偶尔出现1602的字样,英文美文是因为这个驱动程序我是从LCD1602驱动程序移植过来的,因为这两个屏幕的驱动程序很相似,甚至不用改一行程序也能显示少数的字符,所以大家知道这么回事就行
LCD12864.h
LCD12864.c
从上面的代码我们可以看出,因为FPGA?nios我用的是100MHZ主频,速度太快(实际上一点也不快,我测试过了,一条a++自加指令都要差不多30个时钟周期,即整个nios只相当于3MHZ主频左右的单片机,算非常慢的cpu了),我们需要在指令之间插入延时1us比较好,才能匹配液晶屏需要的时序,这里我用的是自己写的延时函数,当然你也可以用库函数,ussleep(int?us);我自己写的delay延时函数如下:
最后在主函数里面这样调用,lcd12864液晶屏幕即可显示:
经过测试,整个程序完全o98k,放心用吧!!!运行效果如下:

FPGA nios软核编写液晶屏LCD12864驱动程序源码以及注意事项,本人亲自踩坑,重要!!!的更多相关文章
- 关于Quartus构建nios软核以及eclipse建立c语言工程以及成功下载到FPGA芯片过程遇到的各种问题以及解决方法详解
这不是一篇构建nios的教程,而是遇到的各种问题以及解决方法.至于构建教程,网上一大把,我推荐正点原子的FPGA教程,比较新,比较详细,通俗易懂!!! 这里以一个点亮LED灯的Nios软核为例,很明显 ...
- FPGA的软核与硬核
硬核 zynq和pynq系列的fpga都是双ARM/Cortex-A9构成,这里的ARM处理器为硬核,Cortex-A9部分为FPGA部分.即整体分为两部分:PS/PL.PS部分为A9处理器部分,PL ...
- [转] - 使用Qt作窗口截屏(含源码)
截屏(screenshot),就是将屏幕上的东西拷贝下来存成图片文件.介绍的好像有点多余:(,那我们就直接切入正题. QPixmap提供了两个函数grabWidget和grabWindow可以将屏幕上 ...
- 36.QT-解决无边框界面拖动卡屏问题(附带源码)
1.简介 看到很多才学QT的人都会问为啥无边框拖动为啥会花屏? 那是因为你每次拖动的过程中都一直在调用move()函数让QT重新绘制界面,如果资源过大,就会导致当前图形还未绘制完,便又重新改变坐标了, ...
- 仿iphone动态萤火虫锁屏应用安卓源码
该源码是仿iphone动态萤火虫锁屏应用源码,源码SkyLock,这也是最近弄了一款锁屏,苦于市场百般阻拦与锁屏应用数量实在太多,于是将它拿出来开源:废话不多说,希望大家能够希望,更多说明请看下面的吧 ...
- leaflet-webpack 入门开发系列三地图分屏对比(附源码下载)
前言 leaflet-webpack 入门开发系列环境知识点了解: node 安装包下载webpack 打包管理工具需要依赖 node 环境,所以 node 安装包必须安装,上面链接是官网下载地址 w ...
- 硬核干货:4W字从源码上分析JUC线程池ThreadPoolExecutor的实现原理
前提 很早之前就打算看一次JUC线程池ThreadPoolExecutor的源码实现,由于近段时间比较忙,一直没有时间整理出源码分析的文章.之前在分析扩展线程池实现可回调的Future时候曾经提到并发 ...
- android后台截屏实现(1)--源码编译
前段时间接到任务要实现后台截图并上传的功能,在网上查了好久,发现遇到这类问题的人还不少.经过一番对比后发现还是修改并编译源码中的screencap类然后通过JNI来调用这种方法比较可靠,而其他的在ja ...
- 硬核剖析Java锁底层AQS源码,深入理解底层架构设计
我们常见的并发锁ReentrantLock.CountDownLatch.Semaphore.CyclicBarrier都是基于AQS实现的,所以说不懂AQS实现原理的,就不能说了解Java锁. 上篇 ...
随机推荐
- Linux 查看内存命令
Linux 查看内存命令 top命令, Linux的top命令提供Linux资源使用情况的实时更新信息.不仅可以查看Linux内存,也可以查看CPU以及各个进程之间的对资源的占用情况.使用方式如下: ...
- Flask 之db 配置坑
文件 .flaskenv中 DATABASE_URI = 'mysql://username:password@server/db' flask db init 报错 ImportError: No ...
- jsp-->js-->jsp之间的关系
jsp和js通过form.submit();发送request请求createdIdSave.jsp 在CreatedIdSave.jsp中进行BL的增删改查操作,在jsp中将值保存到页面的scrip ...
- VUE 之_this.da 和 this
作者:张艳涛 日期:2020-07-29 this用在第一层,如果在JS第3二层,要用 _this importfxx(obj) { let _this = this; let inputDOM = ...
- Spring in Action学习笔记(2)
Spring基础 AOP 面向切面编程 通知.连接点.切点.切面 Spring提供 4 种类型的AOP支持: 基于代理的经典SpringAOP:使用ProxyFactoryBean. 纯POJO切面: ...
- vue中this.$router.push()路由传值和获取的两种常见方法
1.路由传值 this.$router.push() (1) 路由跳转使用router.push()方法,这个方法会向history栈添加一个新纪录,所以,当用户点击浏览器后退按钮时,会回到之前的 ...
- anyRTC视频连麦demo上线啦!
音频连麦demo一经问世就得到开发者的一致好评,有很多开发者咨询视频连麦的demo该怎么去实现,本着让"视频交付更简单"的理念,我们推出了视频连麦demo! 音视频技术不仅局限用于 ...
- OpenGL学习笔记(三)着色器
目录 Shader是什么 GLSL 数据类型 输入与输出 顶点着色器向片段着色器发送数据 Uniform 制作三色渐变三角形 对着色器程序进行封装 参考资料:OpenGL中文翻译 Shader是什么 ...
- C++ //继承同名静态成员处理方式
1 //继承同名静态成员处理方式 2 #include <iostream> 3 #include <string> 4 using namespace std; 5 6 cl ...
- 实现 pow 函数
1 ////实现pow函数 2 3 #include <stdio.h> 4 #include <stdlib.h> 5 double power(double,int) ; ...