课程设计说明书基于arm的图形点阵lcd菜单设计学位论文.docx
《课程设计说明书基于arm的图形点阵lcd菜单设计学位论文.docx》由会员分享,可在线阅读,更多相关《课程设计说明书基于arm的图形点阵lcd菜单设计学位论文.docx(21页珍藏版)》请在冰豆网上搜索。
课程设计说明书基于arm的图形点阵lcd菜单设计学位论文
编号:
课程设计说明书
(信息系统综合实训课程设计)
题目:
图形点阵LCD菜单设计
院(系):
信息与通信学院
专业:
电子信息工程
学生姓名:
学号:
指导教师:
2016年1月2日
摘要
目前图形点阵液晶显示模块广泛用于各式各样的电子设备,人机界面越来越直观形象,对于大多数用户来说,显示界面的友好与否,将直接影响到其产品的使用。
人机交互界面设计的目标是实现菜单窗口界面,用户可以在菜单方式下进行人机交互。
菜单响应用户的选择,根据用户的选择运行程序,实现相应的功能。
同时友好的人机界面使得电子设备更加易于维护。
本文在新唐Cortex-M0开发板设计了一种能实现四级深度的菜单,硬件部分由Cortex-M0主控芯片、12864LCD和3*3的矩阵键盘组成,通过软件部分循环扫描按键,并统计按下的按键,根据不同的需求在LCD上显示各种图片和文字。
图片和文字通过用取模软件进行取模可以转换成在LCD上显示所要求的格式。
通过将12864LCD看成一个平面坐标的形式,可以把大小合适的图片及文字放置到液晶屏合适的位置上。
基于此,我们实现了具有菜单查找、菜单返回、屏蔽错按等基本功能的四级深度的菜单设计。
关键词:
菜单,Cortex-M0,LCD
Abstract
ThegraphicdotmatrixLCDmodulearewidelyusedinallkindsofelectronicequipment,man-machineinterfaceismoreandmoreintuitiveimage,formostusers,displayoffriendlyinterfaceornot,willdirectlyaffecttheuseofitsproducts.Thehuman-computerinteractioninterfacedesigngoalistoachievethemenuwindowinterface,userscanbehuman-computerinteractioninthemenumode.Inresponsetousermenuchoice,accordingtotheuser'schoicetoruntheprogram,realizethecorrespondingfunction.Atthesametime,friendlyman-machineinterfacemakesthedevicemoreeasytomaintain.
Inthispaper,NuvotonCortex-M0developmentboardisdesignedtoachieveadepthoffourmenu,thehardwarepartbytheCortex-M0mainchip,12864LCDand3*3matrixkeyboardcomposition,partofthecyclebythesoftwaretoscanbutton,andstatisticspressthebutton,dependingontheneedsofavarietyofimagesandtextdisplayedontheLCD.PicturesandtextcanbeconvertedintomodulodisplayedontheLCDbyperformingtherequiredformatusingmodulosoftware.Byplanecoordinates12864LCDasaform,youcanputtherightsizeofpicturesandtextisplacedtotheappropriatelocationontheLCDscreen.Basedonthis,wehaverealizedthefindmenu,themenureturns,shieldingthewrongpressandotherbasicfunctionsoffourdepthofmenudesign.
Keywords:
menu,Cortex-M0,LCD
目录
引言1
1系统硬件设计总体框图1
2各部分电路分析1
2.1液晶显示部分1
2.1.1LCD12864简介1
2.2矩阵键盘模块4
2.3NUC140控制器简介4
2.3.1ARMCortex-M0内核5
3软件设计6
3.1程序设计思路6
3.2NUC140主程序流程图7
3.3键盘扫描程序流程图7
4.总结8
谢辞10
参考文献11
附录12
引言
自20世纪80年代后期开始,随着LCD12864液晶显示屏制造技术的不断完善,在国外得到了广泛的应用。
在我国改革开放之后,特别是进入90年代国民经济的高速增长,对公众场合发布信息的需求日益强烈。
而LCD12864液晶显示屏作为信息传播的一种重要手段,已经成为城市信息现代化建设的标志,LCD12864显示屏随着社会经济的不断进步,以及LCD显示屏制造技术的完善,人们对LCD12864显示屏的认识将会越来越深入,其应用领域将会越来越广,LCD12864显示屏经多年的开发、研制、生产,其技术目前已经成熟。
现在各种广告牌不再是白底黑字了,也不再是单一的非电产品,而是用上了丰富多彩的LED电子产品,为城市的增添了一道靓丽的风景。
而且它采用低电压扫描驱动,具有耗电少、使用寿命长、成本低、发光效率高、故障少、视角大、可视距离远、可靠耐用、组态灵活、安全、响应时间短、绿色环保、控制灵活、色彩丰富以及对室内外环境适应能力强等特点。
近年来LCD12864显示屏市场得到了迅猛的发展,已经广泛应用到银行、邮电、税务、机场、车站、证券市场及其它交易市场、医院、电力、海关、体育场等需要进行多种公告、宣传的场合。
本文介绍一种在ARM嵌入式平台上实现的LCD多级菜单的方法,由于C语言的结构性和模块化,采用C语言编写的程序容易阅读和维护,还有很好的可移植性,该方法已成功应用在煤矿安全监测设备上。
因此,学习LCD12864显示屏系统原理与工程技术很有必要。
通过设计一个可显示汉字、英文、图形、动画的128*64液晶显示电路来学习和熟悉LCD的使用。
1系统硬件设计总体框图
此次的设计是基于ARMCortex-M0嵌入式平台实现的图形点阵LCD12864嵌套多级菜单的电路,采用新唐科技有限公司的Cortex-M0为主控芯片的NUC140系列开发板,显示模块采用蓝屏、带字库的12864液晶,采用键盘扫描作为输入控制,本设计框图如图1.1所示
图1.1总电路框图
2各部分电路分析
2.1液晶显示部分
2.1.1LED12864简介
带中文字库的128*64是一种具有4位/8位并行、2线或3线串行多种接口方式,内部含有国标一级、二级简体中文字库的点阵图形液晶显示模块。
其显示分辨率为128×64,内置8192个16*16点汉字和128个16*8点ASCII字符集.利用该模块灵活的接口方式和简单、方便的操作指令,可构成全中文人机交互图形界面。
可以显示8×4行16×16点阵的汉字。
也可完成图形显示。
低电压低功耗是其又一显著特点。
由该模块构成的液晶显示方案与同类型的图形点阵液晶显示模块相比,不论硬件电路结构或显示程序都要简洁得多,且该模块的价格也略低于相同点阵的图形液晶模块,电路如图2.1所示。
图2.1液晶电路
一、显示RAM
1、文本显示RAM(DDRAM)
文本显示RAM提供8个×4行的汉字空间,当写入文本显示RAM时,可以分别显示CGROM、HCGROM与CGRAM的字型;ST7920A可以显示三种字型,分别是半宽的HCGROM字型、CGRAM字型及中文CGROM字型。
三种字型的选择,由在DDRAM中写入的编码选择,各种字型详细编码如下:
显示半宽字型:
将一位字节写入DDRAM中,范围为02H-7FH的编码;
显示CGRAM字型:
将两字节编码写入DDRAM中,总共有0000H,0002H,0004H,0006H四种编码;
显示中文字形:
将两字节编码写入DDRAMK,范围为A1A0H-F7FFH(GB码)或A140H-D75FH(BIG5码)的编码。
2、绘图RAM(GDRAM)
绘图显示RAM提供64*32个位元组的记忆空间,最多可以控制256*64点的二维绘图缓冲空间,在更改绘图RAM时,先连续写入水平与垂直的坐标值,再写入两个8位元的资料到绘图RAM,而地址计数器(AC)会自动加一:
在写入绘图RAM的期间,绘图显示必须关闭,整个写入绘图RAM的步骤如下:
关闭绘图显示功能,先垂直的坐标(Y)写入绘图RAM地址,将D15-D8写入到RAM中,将D7-D0写入到RAM中。
二、指令说明
IR为指令寄存器(InstructionRegister,简称IR),负责存储MCU要写给LCD的指令码,当RS及R/W引脚信号为0且Enable引脚信号由1变为0时,D0~D7引脚上的数据便会存入到IR寄存器中。
DR为数据寄存器(DataRegister,简称DR),它们负责存储微机要写到CGRAM或DDRAM的数据,或者存储MCU要从CGRAM或DDRAM读出的数
据。
因此,可将DR视为一个数据缓冲区,当RS及R/W引脚信号为1且Enable引脚信号由1变为0时,读取数据;当RS引脚信号为1,R/W引脚信号为0且Enable引脚信号由1变为0时,存入数据。
BF为忙碌信号(BusyFlag,简称BF),当BF为1时,不接收微机送来的数据或指令;当BR为0时,接收外部数据或指令,所以,在写数据或指令到LCD之前,必须查看BF是否为0。
AC为地址计数器(AddressCounter,简称AC),负责计数写入/读出CGRAM或DDRAM的数据地址,AC依照MCU对LCD的设置值而自动修改它本身的内容。
游标或显示移位控制000001S/CR/LX设定游标的移动与显示的移位控制位;这个指令不改变DDRAM的内容,功能:
设定00001DLXREXXDL=0/1:
4/8位数据RE=1:
扩充指令操作RE=0:
基本指令操作。
三、汉字显示原理
带中文字库的12864每屏可显示4行8列共32个16×16点阵的汉字,每个显示RAM可显示1个中文字符或2个16×8点阵全高ASCII码字符,即每屏最多可实现32个中文字符或64个ASCII码字符的显示。
带中文字库的12864内部提供128×2字节的字符显示RAM缓冲区(DDRAM)。
字符显示是通过将字符显示编码写入该字符显示RAM实现的。
根据写入内容的不同,可分别在液晶屏上显示CGROM(中文字库)、HCGROM(ASCII码字库)及CGRAM(自定义字形)的内容。
三种不同字符/字型的选择编码范围为:
0000~0006H(其代码分别是0000、0002、0004、0006共4个)显示自定义字型,02H~7FH显示半宽ASCII码字符,A1A0H~F7FFH显示8192种GB2312中文字库字形。
字符显示RAM在液晶模块中的地址80H~9FH。
字符显示的RAM的地址与32个字符显示区域有着一一对应的关系,其对应关系如下表2.1所示
表2.1显示坐标
四、图形显示原理
先设垂直地址再设水平地址(连续写入两个字节的资料来完成垂直与水平的坐标地址),垂直地址范围AC5、AC4、AC3、AC2、AC1、AC0,水平地址范围AC3、AC2、AC1、AC0绘图RAM的地址计数器(AC)只会对水平地址(X轴)自动加一,当水平地址=0FH时会重新设为00H但并不会对垂直地址做进位自动加一,故当连续写入多笔资料时,程序需自行判断垂直地址是否需重新设定,GDRAM的坐标地址与资料排列顺序如图2.2所示。
图2.2显示结构
2.2矩阵键盘模块
本次设计的四级嵌套菜单应用的是新唐NUC140系列开发板上的3*3矩阵键盘模块来操作实现的,3*3矩阵键盘模块有利于对系统很好的控制,其电路图如图2.4所示。
图2.33*3矩阵键盘电路图
2.3NUC140控制器简介
一、概述
NuMicro™NUC100系列是32位的内嵌ARM®Cortex™-M0核的微控制器,适用于工业控制和需要丰富的通信接口的应用领域,Cortex™-M0是ARM最新的32位嵌入式处理器,拥有与传统8051单片机之匹敌的价格优势。
NuMicro™NUC100系列包括NUC100,NUC120,NUC130和NUC140。
NuMicro™NUC140ConnectivityLine带全速USB2.0和CAN功能,内嵌Cortex™-M0内核,最高可运行至50MHz,内建32K/64K/128K字节的Flash存储器,以及4K/8K/16K字节SRAM,4K字节用于存储ISP引导代码的ROM,和4K字节的数据Flash存储器。
另外还有丰富的外设,如定时器,看门狗定时器,RTC,PDMA,UART,SPI,I2C,I2S,PWM定时器,GPIO,LIN,CAN,PS/2,USB2.0FS设备,12位ADC,模拟比较器,低电压复位控制和欠压检测功能。
如表2.2为不同的NuMicro™NUC100系列处理器所支持的接口列表。
表2.2所支持的接口列表
二、特性
该器件的功能依赖于产品线和他们的子系统产品。
1、NuMicro™NUC140特征–ConnectivityLine
•内核
–ARM®Cortex™-M0内核最高运行50MHz
–一个24-位系统定时器
–支持低功耗睡眠模式
–单周期32位硬件乘法器
–嵌套向量中断控制器(NVIC)用于控制32个中断源,每个中断源可设置为4个优先级
–支持串行线调试(SWD)带2个观察点/4个断点
2.3.1ARMCortex-M0内核
Cortex™-M0处理器是32位可配置的多级流水线RISC处理器。
它有AMBA、AHB-Lite接口和嵌套向量中断控制器(NVIC),具有可选的硬件调试功能,可以执行Thumb指令,并与其它Cortex-M系列兼容。
支持两种模式-Thread模式与Handler模式。
异常时系统进入Handler模式。
从Handler模式返回时,执行异常返回。
复位时系统进入Thread模式。
Thread模式也可由异常返回时进入。
图2.4为处理器的功能图。
图2.4功能框图
设备提供:
1、低门数处理器特征:
1)ARMv6-MThumb®指令集;
2)Thumb-2技术;
3)ARMv6-M兼容24-bitSysTick定时器;
4)32-bit硬件乘法器;
5)系统接口支持小端(little-endian)数据访问;
6)准确而及时的中断处理能力;
7)加载、存储多个数据和多周期乘法指令可被终止然后重新开始从而实现快速中断处理;
8)C应用程序二进制接口的异常兼容模式(C-ABI)。
这个ARMv6-M的模式允许用户使用纯C函数实现中断处理;
9)使用中断唤醒(WFI)与事件唤醒(WFE)指令进入低功耗的休眠模式,或者从中断退出休眠模式。
2、NVIC特征:
1)32个外部中断,每个中断具有4级优先级;
2)专用的不可屏蔽中断(NMI);
3)同时支持电平和脉冲中断触发;
4)中断唤醒控制器(WIC),支持极低功耗休眠模式。
3、调试支持:
1)四个硬件断点
2)两个观察点;
3)用于非侵入式代码分析的程序计数采样寄存器(PCSR);
4)单步和向量捕获能力。
4、总线接口:
1)提供简单的集成到所有系统外设和存储器的单一32位AMBA-3ABH-Lite系统接口;
2)支持DAP(DebugAccessPort)的单一32位的从机端口。
3软件设计
3.1程序设计思路
本次课程设计重点在软件部分,下面简单介绍一下设计思路:
我们定义两个变量num1和num2,给它们赋初值为1,然后调用系统函数ScanKey();;统计按下的按键,如果是1,num1加1,如果是2,则num2加1。
根据num1和num2的组合显示对应的图片。
难点在如何实现返回上一级,我们是定义当按下3时,根据当前num1和num2的值调节num1与num2的大小,这样就可以和之前的根据num1和num2显示图片结合起来了。
当显示到最后一张图片时,我们重新给num1和num2赋值为1,这样就可以显示第一张图片了,也就实现了循环显示。
3.2NUC140主程序流程图
NUC140的主程序负责协调各个子程序的工作,把各部分的功能串接起来,本次设计的程序流程如图3.1所示。
图3.1程序流程图
3.3键盘扫描程序流程图
该程序的功能是扫描有无按键按下并判断出按下的按键的编号(键值)。
扫描过程分两部分进行,首先是判断有无按键按下:
将全部行线置低电平,然后检测列线的状态。
只要有一列的电平为低,则表示键盘中有键被按下,若所有列线均为高电平,则键盘中无键按下。
在确认有键按下后,即可进入确定具体闭合键的过程。
其方法是:
依次将行线置为低电平,即置某根行线为低电平时,其它线为高电平,然后逐行检测各列线的电平状态。
若某列为低,则该列线与置为低电平的行线交叉处的按键就是闭合的按键,这样就可以计算得出按键的键值了。
程序流程如图3.2所示。
图3.2键盘扫描程序流程图
4总结
通过做这次ARM嵌入式课程设计,我深深的体会到,专心投入去完成一件事情是多么让人激动不已的,当某个环节的问题被你解决后,那种成就感能带给自己更大的信心和激发你对学习的热情。
可能这是大学四年最后一个课程设计了吧,因此,我把大量的精力和激情都投入到这次设计当中。
在整个设计过程中,我解决了一些平时没有碰到的问题,这更让我对嵌入式这个行业产生强烈的兴趣,以下是我对本次课程设计的一些总结。
这次课程设计我做的是在ARM嵌入式平台上实现LCD12864多级菜单的嵌套,在开始选择这个题目时,自己并没有多少思路。
虽然有过一些相关的理论知识和实验基础,不过项目经验还是不多。
对于新唐科技有限公司的NUC140系列开发板也是从零开始学习。
NUC140开发板资料比较多,全部熟悉还是需要一部分时间的。
在熟悉完开发板的内容后,我开始查阅相关资料,网上关于基于嵌入式的多级菜单设计的内容不是很多,大多是基于单片机的菜单设计。
我参照着网上零碎的菜单设计的相关内容得出了自己的设计方案,按照自己打造的框架编写程序。
在编写完成程序后遇到了一个问题纠结了很久,就是我在Keil上运行程序的时候出现了这样一个错误:
Error:
failedtoexecute'D:
\新建文件夹\ARM\BIN\ArmCC',在查了很久后发现并没有什么错误,开发板的驱动也是正确安装的。
网上给的解释也千奇百怪,并没有解决我遇到的这个问题。
后来我发现我的Keil是以前安装好的,可能在建立连接文件是会出错,所以我将Keil卸载了然后重新安装,再安装开发板驱动,然后再运行程序,上述问题便迎刃而解了。
在这次设计过程当中,让我收获最大的是,我能在做这个东西的过程中去解决问题,而且遇到我可能是以前从没有遇到过的问题,这些问题我全部都能独立解决,感觉自己在学习电子知识方面更加有成就感了,经过自己亲自动手,去发现问题,然后解决问题,成功的那种感觉是多么有成就感的,让我更加相信,只要坚持、认真的去做每一件事情,最终的收获是无穷的。
谢辞
大学的课程设计即将结束,在这次设计的整个过程中很多同学和老师都在耐心的帮助我,衷心感谢谢跃雷老师的细心指导和同学们的热情帮助,在我的课设完成过程中,老师同学提供了许多宝贵意见,让我学到了许多知识,开阔了眼界,增强了我的动手和动脑能力。
同时,在设计本系统的时候,我也和同学们之间的相互探讨、取长补短,使我受益匪浅,在此,我对这些同学表示衷心的感谢,最后我还要感谢老师的教诲,感谢我周围的同学们对我的帮助和支持。
路漫漫其修远兮,吾将上下而求索。
我愿意在未来的学习和工作过程中,以更加丰厚的成果来答谢曾经关心、帮助和支持过我的老师们、同学们。
电子技术日新月异地飞速发展,人们总是处在不断学习,不断进步的阶段。
由于本人水平、经验有限,所以本设计难免有不足之处,希望广大老师和同学批评指正。
参考文献
[1]金钟夫等.ARM嵌入式C程序设计与实践.北京:
北京航空航天大学出版社,2008
[2]张军,宋涛.ARMC语言程序设计实例精粹.北京:
电子工业出版社,2009
[3]周兴华.ARMC语言高级程序设计.北京:
中国电力出版社,2008
[4]朱飞,杨平.ARMC语言开发入门与典型实例.北京:
人民邮电出版社,2009
[5]梁森,王侃夫,黄杭美.自动检测与转换技术(第二版)[M].北京:
机械工业出版社,2007.
[6]谢自美.电子线路设计、试验、测试(第二版)[M].武汉:
华中理工大学出版社,2000
[7]周立功.深入浅出ARM7-LPC213*/214*[J].北京航空航天大学出版社,2004
[8]黄建华,宾辰忠,欧阳宁.ARMCortex嵌入式系统开发教程.西安电子科技大学出版社,2012.12
附录
1、程序调试结果如图1所示:
图1程序调试结果
2、实现功能的程序:
#include
#include"NUC1xx.h"
#include
#include"SYS.h"
#include"LCD.h"
#include"Scankey.h"
//东北饺子
unsignedcharbmp64x64_2[512]={
0xFF,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x81,0x41,0x61,0x21,0x31,0x11,0x11,0x19,0x09,0x09,0x09,0x0D,0x0D,0x0D,0x05,0x05,0x05,0x05,0x05,0x05,0x05,0x09,0x09,0x09,0x09,0x19,0x11,0x11,0x11,0x21,0x21,0x41,0xC1,0x81,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,
0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x40,0x00,0x00,0x08,0x04,0x02,0x01,0x00,0x00,0x00,0x00,0x00,0x80,0x80,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0C,0x88,0x00,0x00,0xF0,0x80,