LCD课程设计---128X64液晶显示程序设计
LCD12864液晶显示系统的设计

(按课程设计周计算)
第一周设计任务:(1):明确课题对程序功能及硬件条件;
(2):把复杂问题分解为若干模块,确定各模块处理方法,画出流程图。
(3):存储器资源分配
第二周设计任务:(4):编制程序,根据流程图精心选择合适的指令和寻址方式来编制源程序
(5):对程序进行汇编,调试和修改,直到程序运行结果正确为止。
具有的设计条件
1.PC机一台,教学实验箱一台及编程环境;
计划学生数及任务
3人
(1):明确课题对程序功能及硬件条件;
(2):把复杂问题分解为若干模块,确定各模块处理方法,画出流程图。
(3):存储器资源分配
(4):编制程序,根据流程图精心选择合适的指令和寻址方式来编制源程序
(5):对程序进行汇编,调试和修改,直到程序运行结果正确为止。
自动化专业微机原理课程设计任务书
论文
题目
LCD12864液晶显示系统的设计
设计Байду номын сангаас型
导师姓名
主要内容及目标
要求:①使用12864J液晶显示器,分辩率为128*64,可以显示8*4个(16*16点阵)汉字。
②采用8位数据总线并行输入输出和4条控制线。
③在12864J液晶上显示一段文字,包括:“合肥学院”、“电子系”、“欢迎你”,三行字。
参考文献
《微型计算机原理及接口技术》中国科技大学出版社2009.9周荷琴编著
《16-32位微型计算机技术及应用》清华大学出版社戴梅萼史嘉权编著
<<汇编语言程序设计》南京大学出版社姚君遗编著
《汇编语言程序设计教程》清华大学出版社杨记文编著
《微型计算机原理及接口技术》实验指导书
LCD12864报告

引言单片机即微型计算机。
是集成CPU,RAM,ROM,定时器,计数器和多种接口于一体的微控制器,它体积小,成本低,功能强大,广泛应用于智能产品和工业自动化上,而51单片即是各单片机中最为典型的一种。
本次课程设计就是通过对他的学习应用,从而达到学习,设计,开发软、硬件的能力。
LCD液晶显示系统就是基于单片机的最小系统下所构建的一个功能系统,通过软、硬件的结合,实现LCD12864模块对数字,汉字,英文及图片的显示,来实现数据的输出显示和人及对话等高级功能。
1液晶显示系统简介1.1 主要功能本次课程设计能实现的功能如下:1.本电路为液晶显示系统。
2.通过电位器可对液晶的背光进行明暗调节。
3.可以实现对数字,汉字,英文以及图片的显示。
1.2 主要器件及介绍1.2.1主控模块STC89C52是INTEL公司MCS-51系列单片机中基本的产品,它采用INTEL公司可靠的CHMOS工艺技术制造的高性能8位单片机,属于标准的MCS-51的HCMOS产品。
它结合了HMOS的高速和高密度技术及CHMOS的低功耗特征,它基于标准的MCS-51单片机体系结构和指令系统,属于89C51增强型单片机版本,集成了时钟输出和向上或向下计数器等更多的功能,适合于类似马达控制等应用场合。
89C52内置8位中央处理单元、256字节内部数据存储器RAM、8k片内程序存储器(ROM)32个双向输入/输出(I/O)口、3个16位定时/计数器和5个两级中断结构,一个全双工串行通信口,片内时钟振荡电路。
此外,80C52还可工作于低功耗模式,可通过两种软件选择空闲和掉电模式。
在空闲模据,时钟振荡停止,同时停止芯片内其它功能。
如下图所示STC89C52RC实物图(图1-1)和引脚图(图1-2)编辑本段主要功能特性:·标准MCS-51内核和指令系统·片内8kROM(可扩充64kB外部存储器)· 32个双向I/O口· 256x8bit内部RAM(可扩充64kB外部存储器)· 3个16位可编程定时/计数器·时钟频率3.5-12/24/33MHz·向上或向下定时计数器·改进型快速编程脉冲算法· 6个中断源· 5.0V工作电压·全双工串行通信口·布尔处理器—帧错误侦测· 4层优先级中断结构—自动地址识别·兼容TTL和CMOS逻辑电平·空闲和掉电节省模式图1-1 STC89C52RC实物图图1-2 STC89C52RC引脚图1.2.2 LCD12864液晶模块带中文字库的TS128X64(图1-3)是一种具有4位/8位并行、2线或3线串行多种接口方式,引脚功能见图表1-4,内部含有国标一级、二级简体中文字库的点阵图形液晶显示模块;其显示分辨率为128×64, 内置8192个16*16点汉字,和128个16*8点ASCII字符集.利用该模块灵活的接口方式和简单、方便的操作指令,可构成全中文人机交互图形界面。
单片机控制LCD液晶显示器(含程序)

液晶显示器一.实验目的:1.了解全点阵图形LCD的结构和原理掌握在MSP430上如何使用外设。
2.了解LCD显示器的工作原理、种类(笔段型、点阵字符型、点阵图形)及主要性能指标。
3.掌握图形点阵LCD的编程使用方法;理解LCD显示模块命令的种类、功能及使用方法。
4.了解LCD字符生成软件的使用方法(见附录)。
二.实验内容:1.在LCD上显示Hello和中文字“南京工业大学”。
2.通过键盘控制Hello或者中文字符在LCD上左右、上下移动。
3.学会使用字符生成软件来实现任意字符代码的生成和显示。
4.其他另外可以实现的目标:使字符在按键没有松动的情况下连续移动;实现字符的循环移动,即当字符串移动到边界时仍可以移动,显示不完的部分从另一边显示出来。
三.实验原理:1.图形点阵式液晶原理液晶是一种具有规则性分子排列的有机化合物,它既不是液体也不是固体,而是介于固态和液态之间的物质。
液晶具有电光效应和偏光特性,这是它能用于显示的主要原因。
常用的液晶显示器可分成3类,分别是扭曲向列型(Twisted Nematic)、超扭曲向列型(Super TN)和彩色薄膜型。
字符点阵式属于扭曲向列型LCD。
典型的字符点阵式液晶显示器是由控制器、驱动器、字符发生器ROM、字符发生器RAM和液晶屏组成,字符由5*7 点阵或5*10点阵组成。
一般结果如图一所示:图一 128x64 点阵图形液晶模块方框示意图此次实验所用的LCD型号是RT12864CT。
12864是一种图形点阵液晶显示器,它主要由行驱动器/列驱动器及128*64全点阵液晶显示器组成。
可完成图形显示,也可以显示8*4个(16*16)汉字。
管脚号管脚名称LEVER 管脚功能描述1 VSS 0 电源地2 VDD +5.0V 电源电压3 V0 - 液晶显示器驱动电压4 D/I(RS) H/L D/I=“H”,表示DB7∽DB0为显示数据D/I=“L”,表示DB7∽DB0为显示指令数据5 R/W H/L R/W=“H”,E=“H”数据被读到DB7∽DB0R/W=“L”,E=“H→L”数据被写到IR或DR6 E H/ R/W=“L”,E信号下降沿锁存DB7∽DB0R/W=“H”,E=“H”DDRAM数据读DB7∽DB07 DB0 H/L 数据线8 DB1 H/L 数据线9 DB2 H/L 数据线10 DB3 H/L 数据线11 DB4 H/L 数据线12 DB5 H/L 数据线13 DB6 H/L 数据线14 DB7 H/L 数据线15 CS1 H/L H:选择芯片(右半屏)信号16 CS2 H/L H:选择芯片(左半屏)信号17 RET H/L 复位信号,低电平复位18 VOUT -10V LCD驱动负电压19 LED+ - LED背光板电源20 LED- - LED背光板电源表1:12864LCD的引脚说明128x64 点阵图形液晶模块的内部结构可分为三个部分:LCD 控制器,LCD 驱动器,LCD 显示装置。
128×64LCD液晶显示设计报告

电子信息学院实验报告书课程名:"微机原理与接口技术"题目: 128×64LCD液晶显示设计实验类别【综合】班级:学号:姓名:一.概述21.1设计背景21.2课程设计的目的和意义 (2)1.3课程设计的容 (2)二.课程设计的步骤与方法 (3)2.1系统硬件设计32.11控制模块32.12 显示模块32.13电源模块52.2系统软件设计62.21系统流程图62.22系统时序图72.3系统调试7三.设计结论7四.收获与体会7参考文献:8附录一:程序清单8附录二:实验仪器16一.概述1.1设计背景液晶作为一种显示器件,以其特有的优势正广泛应用于仪器、仪表、电子设备等低功耗产品中。
以往的测控仪器的显示局部大都采用LED式液晶显示屏进展参数设定和结果显示,其显示信息量少、形式单一、人机交互性差、操作人员要求较高。
而液晶显示器(LCD)具有功耗低、体积小、质量轻、超薄和可编程驱动等其他显示方式无法比较的优点,不仅可以显示数字、字符,还可以显示各种图形、曲线、及汉字,并且可实现屏幕上下左右滚动、动画、闪烁、文本特征显示等功能;人机界面更加友好,使用操作也更加灵活、方便,使其日益成为智能仪器仪表和测试设备的首选显示器件。
1.2课程设计的目的和意义〔1〕了解点阵式液晶显示器工作原理和显示方法。
〔2〕掌握8088微机系统与液晶显示器之间接口设计与编程。
1.3课程设计的容利用取模软件建立标准字库,编制程序,在液晶显示器上显示汉字。
二.课程设计的步骤与方法采用已有的DJ-598K三合一单片机微机试验仪作为设计平台来构建系统,以减少设计工作量。
2.1系统硬件设计2.11控制模块硬件构造应结合软件方案一并考虑,做到软件、硬件功能相匹配。
在DJ-598K三合一单片机微机试验仪上,硬件设计参考方案如下:2.12 显示模块图2.12显示模块的原理图LCM12864ZK中文图形液晶显示模块的液晶屏幕为128×64 ,可显示四行,每行显示8 个汉字。
(完整word版)lcd12864 课程设计

LCD 128641.总体设计思路SMG12864一般用于显示汉字,字符,分辨率不高的bmp图像,可用来显示传感器采集到信息,是单片机和人交换信息的窗口,2.方案设计8051Lcd12864单片机3.硬件设计单片机控制12864的管脚来显示想要的字符和图像,P0用来发送必要的指令和数据,P2口协助P1口给12864写数据,1. 指令寄存器(IR)IR 是用于寄存指令码,与数据寄存器数据相对应。
当D/I=0 时,在E 信号下降沿的作用下,指令码写入IR。
2.数据寄存器(DR)DR 是用于寄存数据的,与指令寄存器寄存指令相对应。
当D/I=1 时,在下降沿作用下,图形显示数据写入DR,或在E 信号高电平作用下由DR 读到DB7∽DB0数据总线。
DR 和DDRAM 之间的数据传输是模块内部自动执行的。
3.忙标志:BFBF 标志提供内部工作情况。
BF=1 表示模块在内部操作,此时模块不接受外部指令和数据。
BF=0 时,模块为准备状态,随时可接受外部指令和数据。
利用STATUS READ 指令,可以将BF 读到DB7 总线,从检验模块之工作状态。
4.显示控制触发器DFF此触发器是用于模块屏幕显示开和关的控制。
DFF=1 为开显示(DISPLAY OFF),DDRAM 的内容就显示在屏幕上,DFF=0 为关显示(DISPLAY OFF)。
DDF 的状态是指令DISPLAY ON/OFF 和RST 信号控制的。
5.XY 地址计数器XY 地址计数器是一个9 位计数器。
高3 位是X 地址计数器,低6 位为Y 地址计数器,XY 地址计数器实际上是作为DDRAM 的地址指针,X 地址计数器为DDRAM的页指针,Y 地址计数器为DDRAM 的Y 地址指针。
X 地址计数器是没有记数功能的,只能用指令设置。
Y 地址计数器具有循环记数功能,各显示数据写入后,Y 地址自动加1,Y 地址指针从0 到63。
6.显示数据RAM(DDRAM)DDRAM 是存储图形显示数据的。
LCD12864液晶驱动编程指南

二、显示图片
显示图片和显示汉字的原理是一样的, 只不过是大小的问题! 现在我们就以一张 128*64 分辨率的图片进行取模。 取模图片:
现在我们主要看一下显isplay_BMP(uchar a[][64])//显示图形的左边部分 { uchar i,j; for(j=0;j<8;j++) { SelectScreen(1); Set_page(j); Set_column(0); for(i=0;i<64;i++) //显示左屏 { write_LCD_data(a[2*j][i]);//每隔一行取一次数组中的数据 } SelectScreen(2); Set_page(j); Set_column(0); for(i=0;i<64;i++) //显示右屏 { write_LCD_data(a[2*j+1][i]);//每隔一行取一次数组中的数据 } } } 取出图片的数据是二维数组形式!注意,液晶是先显示左半屏,再显示右半屏, 但 是取数组中的元素是逐个往下取出的, 所以是对于一个半屏而言, 每隔一行取数组中的元素, 而隔去的那一行是另一个半屏要取的数据!这一点一定要注意。 还有一点要补充的就是,这个取模软件只能识别 BMP 和 ICO 格式的单色图片,如果我 们选择的图片不是 128*64 大小的话, 可以通过软件将其改成 128*64 大小的, 如果我们直接 用软件取模的话,显示的会是乱码,解决办法是我们可以通过 windows 自带的画图工具, 什么也不做修改,将大小设置好的图片另存为 BMP 单色文件就行了,然后再用取模软件取 模就 OK 了,=^_^ = !算了,给大家截个图
LCD_databusrite_LCD_command(column);//列位置 } void SetOnOff(uchar onoff) //显示开关 函数:0x3E 是关显示,0x3F 是开显示 { onoff=0x3e|onoff; //0011 111x,onoff 只能为 0 或者 1 write_LCD_command(onoff); } void SelectScreen(uchar screen) //选屏 { switch(screen) { case 0: CS1=0;CS2=0;break; //全屏 case 1: CS1=0;CS2=1;break;//左半屏 case 2: CS1=1;CS2=0;break;//右半屏 default:break; } } void ClearScreen(uchar screen) { uchar i,j; SelectScreen(screen); for(i=0;i<8;i++)//控制页数 0-7,共 8 页 { Set_page(i); Set_column(0); for(j=0;j<64;j++) //控制列数 0-63,共 64 列 { write_LCD_data(0x00); //写入 0,地址指针自加 1 } } } void InitLCD() { Read_busy(); SelectScreen(0); SetOnOff(0); //关显示 SelectScreen(0); SetOnOff(1); //开显示 SelectScreen(0); //LCD 的初始化 } void main() { InitLCD(); ClearScreen(0); Set_line(0); Display(1,0,2*16,huan);//欢 Display(1,0,3*16,ying);//迎 Display(2,0,0*16,fang);//访 Display(2,0,1*16,wen);//问 Display(1,2,0*16,da);//大 Display(1,2,1*16,hai);//海 Display(1,2,2*16,xiang);//橡 Display(1,2,3*16,shu);//树 Display(2,2,0*16,bai);//百 Display(2,2,1*16,du);//度 Display(2,2,2*16,kong);//空 Display(2,2,3*16,jian);//间 While(1); } //初始化 //清屏 //显示开始行 } //清屏 据输出 { write_LCD_data(p[i+16]); //汉字的下半部分 上半部分 } Set_page(page+1); //写下半页 Set_column(column); for(i=0;i<16;i++) //控制列 //控制 16 列的数 } void Display(uchar ss,uchar page,uchar column,uchar *p) { uchar i; SelectScreen(ss); Set_page(page); for(i=0;i<16;i++) 的数据输出 { write_LCD_data(p[i]); //汉字的 //写上半页 //控制 16 列 Set_column(column); //控制列 //显示汉字 ClearScreen(0);//清屏 Set_line(0); //开始行:0
课程设计12864LCD液晶显示课程设计

12864LCD液晶显示课程设计摘要:本次课程设计应用的液晶显示屏。
⑴掌握单片机与液晶显示器之间接口设计与编程。
⑵利用点阵式液晶显示器显示汉字或图形。
编制程序,建立图像代码,在液晶显示器上显示文字与图形。
简介:概述:128X64LCD液晶显示屏是一种带中文字库,具有4位/8位并行、2线或3线串行多种接口方式,内部含有国标一级、二级简体中文字库的点阵图形液晶显示模块;其显示分辨率为128×64, 内置8192个16*16点汉字,和128个16*8点ASCII字符集.利用该模块灵活的接口方式和简单、方便的操作指令,可构成全中文人机交互图形界面。
可以显示8×4行16×16点阵的汉字. 也可完成图形显示.低电压低功耗是其又一显著特点。
由该模块构成的液晶显示方案与同类型的图形点阵液晶显示模块相比,不论硬件电路结构或显示程序都要简洁得多,且该模块的价格也略低于相同点阵的图形液晶模块。
基本特性:(1)、低电源电压(VDD:+3.0--+5.5V)(2)、显示分辨率:128×64点(3)、内置汉字字库,提供8192个16×16点阵汉字(简繁体可选) (4)、内置 128个16×8点阵字符(5)、2MHZ时钟频率(6)、显示方式:STN、半透、正显(7)、驱动方式:1/32DUTY,1/5BIAS (8)、视角方向:6点(9)、背光方式:侧部高亮白色LED,功耗仅为普通LED的1/5—1/10 (10)、通讯方式:串行、并口可选(11)、内置DC-DC转换电路,无需外加负压(12)、无需片选信号,简化软件设计(13)、工作温度: 0℃ - +55℃ ,存储温度: -20℃ - +60℃模块接口说明:*注释1:如在实际应用中仅使用串口通讯模式,可将PSB接固定低电平,也可以将模块上的J8和“GND”用焊锡短接。
*注释2:模块内部接有上电复位电路,因此在不需要经常复位的场合可将该端悬空。
LCD12864多级菜单课程设计

LCD12864多级菜单课程设计一、课程目标知识目标:1. 理解LCD12864液晶显示屏的基本工作原理和接口技术。
2. 掌握多级菜单的设计方法,包括菜单结构、界面布局及跳转逻辑。
3. 学会编写程序代码实现LCD12864多级菜单的显示与操作。
技能目标:1. 能够运用所学知识设计出结构清晰、界面友好的多级菜单界面。
2. 熟练使用相关编程语言和开发工具,完成程序编写和调试。
3. 培养学生的动手操作能力和团队协作能力,提高问题解决能力。
情感态度价值观目标:1. 培养学生对电子技术和编程的兴趣,激发学习热情。
2. 培养学生严谨、细心的学习态度,养成良好的编程习惯。
3. 增强学生的创新意识,鼓励学生敢于尝试、勇于实践。
分析课程性质、学生特点和教学要求,本课程目标旨在帮助学生在掌握LCD12864多级菜单设计的基础上,提高实际操作能力,培养学生的创新思维和团队协作精神。
通过本课程的学习,使学生能够在实际项目中运用所学知识,为我国电子信息产业的发展做出贡献。
同时,注重培养学生的情感态度价值观,使学生在学习过程中形成积极向上的人生态度。
二、教学内容1. LCD12864液晶显示屏原理介绍:包括显示原理、接口技术、指令集等基本知识。
- 教材章节:第三章第二节- 内容列举:LCD12864工作原理、接口类型、指令功能。
2. 多级菜单设计方法:- 教材章节:第五章- 内容列举:菜单结构设计、界面布局、跳转逻辑、操作流程。
3. 编程实现LCD12864多级菜单:- 教材章节:第六章- 内容列举:编程环境搭建、代码编写、程序调试、功能实现。
4. 实例分析与操作:- 教材章节:第七章- 内容列举:典型多级菜单实例、操作方法、优化技巧。
5. 动手实践与团队协作:- 教材章节:第八章- 内容列举:实践任务分配、协作流程、成果展示。
根据课程目标,教学内容分为五个部分,确保学生系统掌握LCD12864多级菜单设计的相关知识。
教学大纲明确指出各部分内容的安排和进度,以及教材对应的章节和具体内容。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
《CPLD/FPGA 》课程设计报告题目:128X64液晶显示程序设计院(系):信息科学与工程学院专业班级:通信1001班学生姓名:学号:同组学生:指导教师:20 13 年 10 月 14 日至20 13 年 10 月 25 日128X64液晶显示程序设计课程设计任务书一、设计(调查报告/论文)题目128X64液晶显示程序设计二、设计(调查报告/论文)主要内容下述设计内容需由学生个人独立完成:1.设计EP1C6Q240C8控制128X64液晶屏显示电路原理图;2.分析128X64液晶工作原理;3.能按要求进行元器件的焊接;4. 能正确处理安装与调试过程中所遇到的问题;三、原始资料1. 通信与电子系统实验指导书;2. 128X64液晶显示电路制作套件。
四、要求的设计(调查/论文)成果1.元件布局美观,硬件焊接可靠,无虚焊,短路;2. 能在液晶屏上正确显示相关文字信息;3.结合实际编出具有特色功能程序,程序结构合理,语言简洁,格式规范,注释详细;4. 按要求完成课程设计报告,格式符合学校规范标准,字数不少于2000字。
五、进程安排第 1 天理论讲解,材料发放,学生进行元器件清理并检测;第 2天安装焊接,电路调试,硬件故障排查;第 3 天,软件编程调试;第4-5 天调测,验收,评分。
六、主要参考资料[1] 陈曦.通信与电子系统实验指导书,武汉:华中科技大学武昌分校.[2] 谭会生.EDA技术及应用,西安:西安电子科技大学出版社,2010.[3] 潘松,黄继业.EDA技术与VHDL,北京:清华大学出版社,2009.指导教师(签名):20 年月日目录摘要 (3)1.课程设计的目的 (4)2.课程设计题目和要求 (4)3.课程设计报告内容 (4)3.1课程设计原理 (4)3.2课程设计相关图 (5)3.3课程设计程序 (6)3.4课程设计的结果 (14)3.5课程设计的波形仿真 (15)4.课程设计所遇到的问题及解决方案 (15)5.课程设计总结 (17)摘要在硬件电子电路设计领域中,电子设计自动化(EDA)工具已成为主要的设计手段,而VHDL语言是EDA的关键技术之一,它采用自顶向下的设计方法,即从系统总体出发,自上至下地将设计任务分为不同的功能模块,最后将各功能模块连接形成顶层模块,完成系统硬件的整体设计。
本课设主要是基于FPGA的128X64的液晶显示控制器。
控制部分采用VHDL语言编写,主体程序采用状态机作为主要控制方式。
关键字:VHDL,状态机,128641 课程设计的目的通过对液晶屏的安装调试,需学习掌握:(1)液晶屏显示文字的整体设计流程。
(2)Quartus2软件的调试方法及相关工具的使用。
(3)液晶屏LCD12864的使用方法。
(4)各种常见元器件的选择及使用。
2 课程设计题目描述和要求题目描述:频率计的设计制作要求:用VHDL编程控制LCD12864显示的频率计。
(1)用LCD12864显示“频率及姓名”等内容。
(2)显示过程:实验板通电开机后,下载运行之后,LCD显示器显示“频率及姓名”,本组成员等内容。
(3)熟悉单片机系统的工作原理及调测方法。
软硬件安装调测完成后根据系统的工作原理、过程、测试数据及遇到的问题与处理情况、体会等完成课设报告。
3 课程设计报告内容3.1 课程设计原理该设计分为三个模块:信号源模块,频率计模块,显示模块。
通过软件程序下载运行在LCD上显示频率等信息。
采用一个标准的基准时钟,在单位时间如(1s)里对被测信号的脉冲数进行计数,即为信号的频率。
由于闸门起始和结束时刻对于信号来说是随机的,将会有一个脉冲周期的量化误差。
进一步分析测量准确度:设待测信号脉冲周期为TX,频率为FX,当测量时间为T=1s时,测量精度为&=TX/T =1/FX..由此可知直接测频法的测量准确度与信号的频率有关:当代侧信号频率较高时,测量准确度也较高。
反之测量准确度较低。
因此直接测频法适合频率较高的信号,不能满足在整个测量频段内的测量进度保持不变的要求。
若要得到整个频段内较高的精确度,应该考虑等精度测量等其他方法。
最后将测得的频率送到显示部分显示。
3.2课设相关图(1)顶层原理图(2)频率计原理图(3)引脚匹配(4)硬件电路3.3课程设计程序1.信号源模块(信号源是为了产生1HZ的门控信号和待测的定频信号,而对输入系统时钟clk(50MHZ)进行分频的模块):LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY CNT ISPORT(CLK :IN STD_LOGIC;FREQ1 :OUT STD_LOGIC;FREQ488 :OUT STD_LOGIC;FREQ1953 :OUT STD_LOGIC;FREQ7812 :OUT STD_LOGIC;FREQ31250:OUT STD_LOGIC;FREQ125K :OUT STD_LOGIC;FREQ500K :OUT STD_LOGIC);END CNT;ARCHITECTURE BEHV OF CNT ISSIGNAL TEMP: STD_LOGIC_VECTOR(19 DOWNTO 0);BEGINPROCESS(CLK)BEGINIF CLK'EVENT AND CLK='1' THENIF TEMP="11110100001000111111" THENTEMP<="00000000000000000000";ELSETEMP<=TEMP+1;END IF;END IF;END PROCESS;FREQ1<=TEMP(19);FREQ488<=TEMP(10);FREQ1953<=TEMP(8);FREQ7812<=TEMP(6);FREQ31250<=TEMP(4);FREQ125K<=TEMP(2);FREQ500K<=TEMP(0);END BEHV;2.FREQ模块:是通过元件例化将各个功能模块组合在一起的。
LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY FREQ ISPORT(CLK: IN STD_LOGIC;FSIN:IN STD_LOGIC;DOUT:OUT STD_LOGIC_VECTOR(31 DOWNTO 0));END FREQ;ARCHITECTURE BEHV OF FREQ ISCOMPONENT TESTCTLPORT(CLK: IN STD_LOGIC;TSTEN: OUT STD_LOGIC;CLR_CNT:OUT STD_LOGIC;LOAD: OUT STD_LOGIC);END COMPONENT;COMPONENT CNT10PORT(CLK: IN STD_LOGIC;CLR: IN STD_LOGIC;ENA: IN STD_LOGIC;CQ: OUT STD_LOGIC_VECTOR(3 DOWNTO 0);CARRY_OUT:OUT STD_LOGIC);END COMPONENT;COMPONENT REG32BPORT(LOAD: IN STD_LOGIC;DIN: IN STD_LOGIC_VECTOR(31 DOWNTO 0);DOUT: OUT STD_LOGIC_VECTOR(31 DOWNTO 0));END COMPONENT;SIGNAL LOAD1,TSTEN1,CLR_CNT1:STD_LOGIC;SIGNAL DTO1:STD_LOGIC_VECTOR(31 DOWNTO 0);SIGNAL CARRY_OUT1:STD_LOGIC_VECTOR(6 DOWNTO 0);BEGINU1: TESTCTL PORT MAP(CLK=>CLK,TSTEN=>TSTEN1,CLR_CNT=>CLR_CNT1,LOAD=>LOAD1);U2: REG32B PORT MAP(LOAD=>LOAD1,DIN=>DTO1,DOUT=>DOUT);U3: CNT10 PORT MAP(CLK=>FSIN,CLR=>CLR_CNT1,ENA=>TSTEN1,CQ=>DTO1(3 DOWNTO 0),CARRY_OUT=>CARRY_OUT1(0));U4: CNT10 PORT MAP(CLK=>CARRY_OUT1(0),CLR=>CLR_CNT1,ENA=>TSTEN1,CQ=>DTO1(7 DOWNTO 4),CARRY_OUT=>CARRY_OUT1(1));U5: CNT10 PORT MAP(CLK=>CARRY_OUT1(1),CLR=>CLR_CNT1,ENA=>TSTEN1,CQ=>DTO1(11 DOWNTO 8),CARRY_OUT=>CARRY_OUT1(2));U6: CNT10 PORT MAP(CLK=>CARRY_OUT1(2),CLR=>CLR_CNT1,ENA=>TSTEN1,CQ=>DTO1(15 DOWNTO 12),CARRY_OUT=>CARRY_OUT1(3));U7: CNT10 PORT MAP(CLK=>CARRY_OUT1(3),CLR=>CLR_CNT1,ENA=>TSTEN1,CQ=>DTO1(19 DOWNTO 16),CARRY_OUT=>CARRY_OUT1(4));U8: CNT10 PORT MAP(CLK=>CARRY_OUT1(4),CLR=>CLR_CNT1,ENA=>TSTEN1,CQ=>DTO1(23 DOWNTO 20),CARRY_OUT=>CARRY_OUT1(5));U9: CNT10 PORT MAP(CLK=>CARRY_OUT1(5),CLR=>CLR_CNT1,ENA=>TSTEN1,CQ=>DTO1(27 DOWNTO 24),CARRY_OUT=>CARRY_OUT1(6));U10: CNT10 PORT MAP(CLK=>CARRY_OUT1(6),CLR=>CLR_CNT1,ENA=>TSTEN1,CQ=>DTO1(31 DOWNTO 28));END BEHV;3.分频模块(50MHZ经过50分频得到1MHZ)library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity pin1mhz isport(clkin : in std_logic;clkout : out std_logic);end pin1mhz;architecture a of pin1mhz isbeginprocess(clkin)variable cnttemp: integer range 0 to 49;beginif clkin='1' and clkin'event thenif cnttemp=49 then cnttemp:=0;elseif cnttemp<25 then clkout<='1';else clkout<='0';end if;cnttemp:=cnttemp+1;end if;end if;end process;end architecture a;4.显示模块(由状态机来完成液晶屏的时序)library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;use IEEE.STD_LOGIC_ARITH.ALL;entity clock_lcd_disp isgeneric(divide_to_100k:integer:=500);port(clk:in std_logic;DATAIN:in std_logic_vector(31 downto 0);rw,rs,e,lcd_rst:out std_logic;lcd_data:out std_logic_vector(7 downto 0));end clock_lcd_disp;architecture tcl of clock_lcd_disp issignal clk_100k:std_logic;signal clkout:std_logic;signal temp:std_logic_vector(7 downto 0);type state is(s0,s1,s2,s3,s4,s5,s6,s7,s8,s9,s10,s11,s12);signal current_s:state;type data_buffer is array(0 to 15)ofstd_logic_vector(7 downto 0);type data_buffer1 is array(0 to 7)ofstd_logic_vector(7 downto 0);signal time:std_logic_vector(23 downto 0);signal disp_time:data_buffer1:=(x"31",x"32",x"3a",x"33",x"34",x"3a",x"35",x"36");constant data_buf0:data_buffer:=(x"c6",x"b5",x"c2",x"ca", --频率x"20",x"20",x"20",x"20", --空格x"20",x"20",x"20",x"20",x"20",x"20",x"20",x"20");constant data_buf1:data_buffer:=(x"20",x"20",x"20",x"20", --x"20",x"20",x"20",x"20",x"20",x"20",x"20",x"20",x"20",x"20",x"20",x"20");constant data_buf2:data_buffer:=(x"c7",x"d8",x"c5",x"e5", --秦佩x"a1",x"aa",x"a1",x"aa", -- ——x"d1",x"d4",x"c5",x"f4", --訚鹏x"20",x"20",x"20",x"20");begin--U1:divclk1 port map(clk,clk_100k);process(clk)variable cnt:integer range 0 to divide_to_100k;beginif(clk'event and clk='1')then cnt:=cnt+1;if(cnt=divide_to_100k)then cnt:=0;end if;if(cnt<divide_to_100k/2) then clk_100k<='0';else clk_100k<='1';end if;end if;end process;disp_time(7)<=DATAIN(3 downto 0)+x"30";disp_time(6)<=DATAIN(7 downto 4)+x"30";disp_time(5)<=DATAIN(11 downto 8)+x"30";disp_time(4)<=DATAIN(15 downto 12)+x"30";disp_time(3)<=DATAIN(19 downto 16)+x"30";disp_time(2)<=DATAIN(23 downto 20)+x"30";disp_time(1)<=DATAIN(27 downto 24)+x"30";disp_time(0)<=DATAIN(31 downto 28)+x"30";read_time:process(time)beginend process;process(clk_100k)variable cnt1:integer range 0 to 10000;variable cnt_1:integer range 0 to 1000;variable code_cnt:integer range 0 to 13;variable data_cnt:integer range 0 to 480;beginif(clk_100k'event and clk_100k='1')thencase current_s iswhen s0=>rw<='1';rs<='1';e<='1';cnt1:=cnt1+1;if cnt1<500 then lcd_rst<='0';elsif cnt1<1000 then lcd_rst<='1';elsif cnt1=1000 thenlcd_rst<='1';cnt1:=0;current_s<=s1;end if;when s1=>cnt_1:=cnt_1+1;if cnt_1<1*3 thene<='1';rs<='0';rw<='0';elsif cnt_1<2*3 thenlcd_data<=x"0c";elsif cnt_1<10*3 then e<='0';elsif cnt_1=10*3 thencnt_1:=0;current_s<=s2;end if;when s2=>cnt_1:=cnt_1+1;if cnt_1<1*3 thene<='1';rs<='0';rw<='0';elsif cnt_1<2*3 thenlcd_data<=x"90";elsif cnt_1<10*3 then e<='0';elsif cnt_1=10*3 thencnt_1:=0;current_s<=s3;end if;when s3=>if cnt_1<1*3 thene<='1';rs<='1';rw<='0';elsif cnt_1<2*3 thenlcd_data<=data_buf1(data_cnt);elsif cnt_1=2*3 thendata_cnt:=data_cnt+1;elsif cnt_1<100 then e<='0';end if;cnt_1:=cnt_1+1;if cnt_1=100 then cnt_1:=0;if data_cnt=16 then current_s<=s4;data_cnt:=0;end if;end if;when s4=>cnt_1:=cnt_1+1;if cnt_1<1*3 thene<='1';rs<='0';rw<='0';elsif cnt_1<2*3 thenlcd_data<=x"88";elsif cnt_1<10*3 then e<='0';elsif cnt_1=10*3 thencnt_1:=0;current_s<=s5;end if;when s5=>if cnt_1<1*3 thene<='1';rs<='1';rw<='0';elsif cnt_1<2*3 thenlcd_data<=data_buf2(data_cnt);elsif cnt_1=2*3 thendata_cnt:=data_cnt+1;elsif cnt_1<100 then e<='0';end if;cnt_1:=cnt_1+1;if cnt_1=100 then cnt_1:=0;if data_cnt=16 then current_s<=s6;data_cnt:=0;end if;end if;when s6=>cnt_1:=cnt_1+1;if cnt_1<1*3 thene<='1';rs<='0';rw<='0';elsif cnt_1<2*3 thenlcd_data<=x"80";elsif cnt_1<10*3 then e<='0';elsif cnt_1=10*3 thencnt_1:=0;current_s<=s7;end if;when s7=>if cnt_1<1*3 thene<='1';rs<='1';rw<='0';elsif cnt_1<2*3 thenlcd_data<=data_buf0(data_cnt);elsif cnt_1=2*3 thendata_cnt:=data_cnt+1;elsif cnt_1<100 then e<='0';end if;cnt_1:=cnt_1+1;if cnt_1=100 then cnt_1:=0;if data_cnt=16 then current_s<=s8;data_cnt:=0;end if;end if;--动态显示when s8=>cnt_1:=cnt_1+1;if cnt_1<1*3 thene<='1';rs<='0';rw<='0';elsif cnt_1<5*3 thenlcd_data<=x"90";elsif cnt_1<20*3 then e<='0';elsif cnt_1=20*3 thencnt_1:=0;current_s<=s9;end if;when s9=>if cnt_1<1*3 thene<='1';rs<='1';rw<='0';elsif cnt_1<2*3 thenlcd_data<=disp_time(data_cnt);elsif cnt_1=2*3 thendata_cnt:=data_cnt+1;elsif cnt_1<100 then e<='0';end if;cnt_1:=cnt_1+1;if cnt_1=100 then cnt_1:=0;if data_cnt=8 then current_s<=s8;data_cnt:=0;end if;end if;when others=>current_s<=s0;end case;end if;end process;end tcl;3.4课程设计结果3.5课程设计的波形仿真上图中可以很明显的看到显示模块程序的S1这个状态,根据程序来观察时序图,发现时序与程序一致,并且满足液晶屏要显示文字的条件。