- 1、本文档共20页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
利用按键开关控制液晶显示器进行十六进制数字显示的说明 书
中北大学
课 程 设 计 说 明 书
?
?
?
学生姓名: 张又木 学 号: ?0906044112 学 院: ?电子与计算机科学技术学院 专 业: 电子科学与技术? 题 目: 利用按键开关控制液晶显示器进行十六进制数字显示 ? ?
?
指导教师: 焦新泉 职称: 讲师
?
?
?
?
2012 年 6 月 20 日
目 录
1、、设计内容要求 2.1、2.2、、?设计方案、设计思路2、工作原理及图3.3、4、、、
5、参考文献
1、、设计内容要求
VHDL编程语言,编写按键开关控制模块的控制逻辑;
3. 仿真所编写的程序,模拟验证所编写的模块功能;
4. 下载程序到芯片中,硬件验证所设置的功能,能够实现十六进制数字的显示;
5. 整理设计内容,编写设计说明书。?
2.2、设计要求
1.本课程设计说明书。
2.VHDL源程序及内部原理图。
3.该设计可以在实验箱上正常工作并演示。
3、设计
3.1、设计思路、
图1 系统总体原理图
液晶显示器工作原理: OCMJ中文模块系列液晶显示器内含 GB 2312 16*16点阵国标一级简体汉字和 ASCII8*8(半高)及8*16(全高)点阵英文字库,用户输入区位码或 ASCII 码即可实现文本显示。OCMJ中文模块系列液晶显示器可以实现汉字、ASCII 码、点阵图形和变化曲线的同屏显示,并可通过字节点阵图形方式造字。
由于显示的是十六进制数字,故只须掌握接口协议和其中一条用户命令。接口协议为请求/应答(REQ/BUSY)握手方式。应答BUSY 高电平(BUSY =1) 表示 OCMJ 忙于内部处理,不能接收用户命令;BUSY 低电平(BUSY =0)表示 OCMJ 空闲,等待接收用户命令。发送命令到 OCMJ可在BUSY =0 后的任意时刻开始,先把用户命令的当前字节放到数据线上,接着发高电平REQ 信号(REQ =1)通知OCMJ请求处理当前数据线上的命令或数据。OCMJ模块在收到外部的REQ高电平信号后立即读取数据线上的命令或数据,同时将应答线BUSY变为高电平,表明模块已收到数据并正在忙于对此数据的内部处理,此时,用户对模块的写操作已经完成,用户可以撤消数据线上的信号并可作模块显示以外的其他工作,也可不断地查询应答线BUSY是否为低(BUSY =0?),如果BUSY =0,表明模块对用户的写操作已经执行完毕。可以再送下一个数据。
液晶显示器显示8X8ASCII字符命令:
格式:F1 XX YY AS
该命令为4字节命令(最大执行时间为0.8毫秒,Ts2=0.8mS),其中
XX:为以ASCII码 为单位的屏幕行坐标值,取值范围00到0F、04到13、00到13;
YY:为以ASCII码为单 位的屏幕列坐标值,取值范围00到1F、00到3F、00到4F;
AS:坐标位置上要显示的ASCII 字符码。
OCMJ液晶控制时序图如图2所示:
3.3、、
图3 总原理图
模块一:分频模块
图4 分频模块符号
利用VHDL语言生成的分频符号如图4所示,clk和rst分别是输入的时钟信号引脚和复位引脚,clkout是分频后的时钟输出引脚。本模块使用13位计数常量分频,可以将试验箱上1.25MHZ的时钟频率降到150HZ左右,这足以驱动液晶工作。代码如下:
library ieee;
use ieee.std_logic_1164.all;
use ieee.std_logic_unsigned.all;
use ieee.std_logic_arith.all;
entity fenpin is
port( clk,rst:in std_logic;
clkout:out std_logic
);
end fenpin;
architecture fenpin_behave of fenpin is
signal inclk : std_logic_vector(12 downto 0);
signal inner : std_logic;
begin
process(clk,rst)
begin
if rst = 0 then
inclk = 0000000000000;
inner = 0;
elsif clkevent and clk = 1 then --每来一个上升沿,inclk加一
if inclk = 1111111111111 then
inner = not inner; --当inclk加满的时候,inner取反
inclk = inclk + 1;
else
inclk = inc
文档评论(0)