关键词不能为空

当前您在: 主页 > 高中公式大全 >

扫墓利用键盘控制液晶显示器.

作者:高考题库网
来源:https://www.bjmy2z.cn/gaokao
2020-12-29 05:49
tags:显示器抖动

老鹰乐队主唱-国内生产总值平减指数

2020年12月29日发(作者:简文会)

中北大学
课 程 设 计 说 明 书



学生姓名:
学 院:
专 业:
题 目:





毛雪娇
学 号:


电子与计算机科学技术学院
微电子学
利用键盘控制液晶显示器
进行汉字显示

指导教师:
王红亮 职称: 讲师






2010 年 6 月 25 日



目 录

1. 课程设计目的……………………………………………………………………2
2. 课程设计内容和要求……………………………………………………………2
2.1、设计内容………………………………………………………………………2
2.2、设计要求………………………………………………………………………2
3、设计方案及实现情况……………………………………………………………2
3.1、设计思路………………………………………………………………………2
3.2、工作原理及框图………………………………………………………………3
3.3、各模块功能描述………………………………………………………………6
3.4、仿真结果………………………………………………………………………14
3.5、实验箱验证情况………………………………………………………………14
4、课程设计总结……………………………………………………………………15
5、参考文献…………………………………………………………………………16











- 1 -




1、课程设计目的
(1)学习操作数字电路设计实验开发系统,掌握液晶显示器的工作原理及应用。
(2)掌握组合逻辑电路、时序逻辑电路的设计方法。
(3)学习掌握可编程器件设计的全过程。
2、课程设计内容和要求
2.1、设计内容

利用VHDL语言进行编程,使键盘控制液晶显示器进行汉字的显示。

2.2、设计要求

1.学习掌握键盘控制模块、液晶显示模块的工作原理及应用;
2. 熟练掌握VHDL编程语言,编写键盘控制模块的控制逻辑;
3. 仿真所编写的程序,模拟验证所编写的模块功能;
4. 下载程序到芯片中,硬件验证所设置的功能,能够实现汉字显示;
5. 整理设计内容,编写设计说明书。

3、 设计方案及实现情况
3.1、设计思路

利用process进程语句进行不同功能的实现,主要有分频,消抖,键盘扫描,键盘译码 ,
数据存储模块,控制液晶显示器,主要是键盘模块和液晶模块,键盘主要是扫描信号,当其
扫 描到一个信号时,向液晶显示器发出一个该信号对应的地址信号,液晶显示器接收到该地
址信号后,输出 相应的数据,该数据为用户要其显示的汉字的区位码。当按键分别为“1”、
“2”、“3”、“4”、 “5”、“6”时,液晶显示器显示的汉字分别为“中”、“北”、“大”、“学”、
“春”、“天”。

- 2 -

3.2、工作原理及框图
1.矩阵式键盘
矩阵式键盘又叫行列式键盘,是用IO口线组成的行、列矩阵结构,在每根行线与列线
的交叉处,二线不直接相通而是通过一个按键跨接接通。采用这种矩阵结构只需M根行输出
线和N根列 输入线,就可连接M×N个按键。通过键盘扫描程序的行输出与列输入就可确认按
键的状态,再通过键盘 处理程序便可识别键值。
键盘扫描电路,
键盘扫描电路是用来提供键盘扫描信号的 电路,扫描信号的变化顺序依次为
000-001-010-011-100-101-110-111 ……依次的周而复始,扫描时依次分别扫描八列按键,当
扫描信号周而复始,扫描时依次分别扫描八列按 键,当扫描信号依次为000时,扫描0这一
列按键……每扫描一列按键,就检查一次是否有按键按下, 如果这排有按键按下,就马上停
止扫描,立即进行按键编码动作,如果没有就继续扫描下一列。

图1 键盘电路原理图




- 3 -



图2 按键位置与数码关系


2.液晶显示器
接口协议为请求应答(REQBUSY) 握手方式。应答BUSY 高电平(BUSY =1) 表示 OCMJ
忙于内部处理,不能接收用户命令;BUSY 低电平(BUSY =0)表示 OCMJ 空闲,等待接收用
户命令。发送命令到 OCMJ可在BUSY =0 后的任意时刻开始,先把用户命令的当前字节放到
数据线上,接着发高电平REQ 信号(REQ =1 )通知OCMJ请求处理当前数据线上的命令或数
据。OCMJ模块在收到外部的REQ高电平信号后立 即读取数据线上的命令或数据,同时将应答
线BUSY变为高电平,表明模块已收到数据并正在忙于对此 数据的内部处理,此时,用户对模
块的写操作已经完成,用户可以撤消数据线上的信号并可作模块显示以 外的其他工作,也可
不断地查询应答线BUSY是否为低(BUSY =0?),如果BUSY =0,表明模块对用户的写操作已
经执行完毕。可以再送下一个数据。

- 4 -









图3 模块写汉字时序图
3.按键的抖动问题:
由于机械触点的弹性振动,按键 在按下时不会马上稳定地接通而在弹起时也不能一下子
完全的断开,因而在按键闭合和断开的瞬间均会出 现一连串的抖动,这称为按键的抖动干扰,
其产生的波形如图2所示,当按键按下时会产生前沿抖动,当 按键弹起时会产生后沿抖动。
这是所有机械触点式按键在状态输出是的共性问题,抖动的时间长短取决于 按键的机械特性
与操作状态,一般为10ms-100ms,此为键盘处理设计时要考虑的一个重要参数 。
键按下键释放
前沿抖动
闭合稳定
后沿抖动
释放稳定

图 6-2

按键的抖动干扰
4按键抖动干扰产生的波形

键盘抖动干扰的消除:
按键的抖动会造成按一次键产生的开关状态被可编程逻辑器件误读几次 。为了使可编程
逻辑器件能正确地读取按键状态,必须在按键闭合或断开时,消除产生的前沿或后沿抖动 ,

- 5 -
去抖动的方法有硬件方法和软件方法两种。
本次课程设计 采用了软件方法:软件方法是指编制一段时间大于100ms的延时程序,在
第一次检测到有键按下时, 执行这段延时子程序使键的前沿抖动消失后再检测该键状态,如
果该键仍保持闭合状态电平,则确认为该 键已稳定按下,否则无键按下,从而消除了抖动的
影响。同理,在检测到按键释放后,也同样要延迟一段 时间,以消除后沿抖动,然后转入对
该按键的处理。


3.3、各模块功能描述

LIBRARY ieee;
USE _logic_;
USE _logic_;
USE _logic_;

ENTITY hanzi is
PORT(clr,clk,BUSY: IN std_logic; --清零信号,时钟0信号,应答信号
REQ : OUT std_logic; --请求信号
sel : OUT STD_LOGIC_VECTOR (2 downto 0) --扫描信号
key : IN STD_LOGIC_VECTOR (3 downto 0) --键盘输入
dout: out std_logic_vector(7 downto 0) --数据输出
);
END hanzi;

ARCHITECTURE doit OF hanzi IS
signal counter :std_logic_vector(7 downto 0); --计数信号,用来确定REQ
signal addrbegin :std_logic_vector(7 downto 0); --存储器首地址
signal addr1: std_logic_vector(7 downto 0); --变地址
signal addr: std_logic_vector(7 DOWNTO 0); --数据地址
signal DAT : std_logic_vector(7 downto 0); --输入到lcd的数据

- 6 -
signal counter1 : std_logic_vector(1 downto 0); --分频计数
signal counte : std_logic_vector(2 downto 0); --键盘扫描辅助信号
signal counter2 : std_logic_vector(4 downto 0); --弹跳消除计数
signal dcc : std_logic_vector(6 downto 0); --键盘行、列扫描信号结合后的信号
signal clk1,test,koff: std_logic; --时钟1信号,测试信号,按键消抖信

signal DCC1:STD_LOGIC_VECTOR (3 DOWNTO 0);
BEGIN
test<=key(3) and key(2) and key(1) and key(0);

P0: process(clr,clk)
begin
if(clr='0') then
counter1<=
elsif(clk'event and clk='1') then
counter1<=counter1+1;
end if;
end process P0;

clk1<='0' when counter1<=
'1';
--P0为分频模块。

P1: process(clr,clk1,test)
begin
if(clr='0') then
counte<=
elsif(clk1'event and clk1='1') then
if(test='0') or (koff='0') then
counte<=counte;

- 7 -
--按的哪个键
--键盘部分
--检测有无按键按下



else
counte<=counte+1;
end if;
end if;
end process P1;

sel<=counte;
dcc<=counte & key;
--P1为键盘扫描模块。

P2: process(clk,test)
begin
if(clk'event and clk='0') then
if(dcc=
dcc1<=
elsif(dcc=
dcc1<=
elsif(dcc=
dcc1<=
elsif(dcc=
dcc1<=
elsif(dcc=
dcc1<=
elsif(dcc=
dcc1<=
elsif(dcc=
dcc1<=
elsif(dcc=
dcc1<=
elsif(dcc=


- 8 -

dcc1<=
elsif(dcc=
dcc1<=
elsif(dcc=
dcc1<=
elsif(dcc=
dcc1<=
elsif(dcc=
dcc1<=
elsif(dcc=
dcc1<=
elsif(dcc=
dcc1<=
elsif(dcc=
dcc1<=
elsif(test='0') then
dcc1<=
end if;
end if;
end process P2;
--P2为键盘译码。

P3: process(test,clk,clr)
begin
if(clr='0') then
counter2<=
koff<='1';
elsif(clk'event and clk='1') then
if(test='0') then
counter2<=


- 9 -

koff<='0';
elsif(counter2<
counter2<=counter2+1;
elsif(counter2=
koff<='1';
end if;
end if;
end process P3;
-- P3为消抖模块

p4:process(dcc1)
begin
case dcc1 is
when
when
when
when
when
when

when others => null;
end case;
end process p4;
--P4为将按键与存储器的首地址相对应

P5: process(clr,busy)
begin
if(clr='0') then
addr<=
elsif(busy'event and busy='0') then

- 10 -
addr<=addrbegin+addr1;
end if;
end process P5;
--P5为在busy允许条件下将首地址与变地址相加构成数据地址

P6: process(clr,busy)
begin
if(clr='0') then
addr1<=
elsif(busy'event and busy='1') then
if(addr1=
addr1<=
else
addr1<=addr1+1;
end if;
end if;
end process P6;
--P6为变地址的自加。

P7: process(busy, clk)
begin
if(busy='1') then
counter<=
elsif(clk'event and clk='1') then
counter<=counter+1;
end if;
end process P7;
--P7为分频。

dout<=DAT;

- 11 -
REQ<='1' when counter>= else --计4个数后,REQ才为1,否则为0
'0';


P8:PROCESS(addr)
BEGIN
CASE addr IS
WHEN
WHEN
WHEN
WHEN
WHEN
WHEN

WHEN
WHEN
WHEN
WHEN
WHEN

WHEN
WHEN
WHEN
WHEN
WHEN

WHEN
WHEN
WHEN
WHEN

- 12 -
--清屏
--F0,表示要向lcd中写入汉字
--横坐标
--纵坐标
--写入的内容





WHEN

WHEN
WHEN
WHEN
WHEN
WHEN

WHEN
WHEN
WHEN
WHEN
WHEN

WHEN OTHERS => DAT<=
END CASE;
END PROCESS P8;
--P8为在LCD中写入汉字

END doit;


图5 模块接口图




- 13 -

3.4、仿真结果

图6 仿真结果图
此仿真图形为“中”字的仿真时序图。

3.5、实验箱验证情况
按照程序中管脚的分配,连接好电路,然后进行程序下载和验证。下面是验证结果的图
片。


- 14 -
图7 整体连线图



图8 实验结果

4、课程设计总结
通过这次的 课程设计,我对可编程逻辑器件的应用有了更加深刻的理解,它让我认识到
模块化设计思想的重要性,对 于一个具有一定功能的系统来说,一般都有几个实现不同功能
的模块。在设计这样的系统时,应该首先把 系统按照功能分为几个相对独立的模块。各个模
块用来完成特定的功能。模块化的设计思想不仅可以使设 计思路更加明晰,同时还可以提高

- 15 -
程序的可移植性。对于程序的后续调试工作也会带来很大的方便。
所以在最初拿到任务书时 ,我首先思考的就是如何把系统按照功能分为几个相对独立的
模块,然后再在各个模块中完成各自的功能 ,我先去查阅了有关本设计中所涉及的液晶屏的
相关资料,熟悉它的工作时序,指令操作等等,接着开始 各个模块的编写,尤其是液晶显示
器控制模块,因为液晶显示器要正常工作是需要满足一定时序要求的。 对于时序的控制采用
状态机是一个很好的选择。利用状态机控制各个状态之间的切换,使时序的要求通过 状态变
换得到了很好的控制。可以使程序在状态机的运作下按照状态有序的执行。而且在选择模块
数据输出以后增加了数据锁存模块,这样可以保持数据稳定,达到液晶显示器的时序要求。
在编写程 序的过程中也出现过很多错误,但是在不断的改错过程中,自己对VHDL语言的语法
结构有了深刻的理 解,对编译过程中常见的错误也有了全面的认识,对MAX+plus II开发仿
真软件能过熟练地运 用。总之,通过这次课程设计,我意识到在学好理论知识的同时也应该
注重实践能力的培养,真正地做到 学以致用,才能更好地理解所学的知识。
5、主要参考文献
1).任勇峰,庄新敏.VHDL与硬件实现速成. 北京:国防工业出版社,2005
2). 周润景,图雅,张丽敏.基于QuartusII的FPGACPLD数字系统设计实例. 北京:电子
工业出版社,2007
3).求是科技.CPLDFPGA应用开发技术与工程实践. 北京:人民邮电出版社,2005
4).罗苑棠.CPLDFPGA常用模块与综合系统设计实例精讲. 北京:电子工业出版社,2007
5).侯伯亨,顾新.VHDL硬件描述语言与数字逻辑电路设计.西安:西安电子科技大学出版
社,2006







- 16 -

甜甜蜜蜜-大不列颠国


abc输入法-志不同不相为谋


倒桩-流星的双子


店名设计-人造风景


tda2030a-stfu


认购新股-征求党内外群众意见


电压互感器原理-车辆保险费


材料为王-语笑嫣然



本文更新与2020-12-29 05:49,由作者提供,不代表本网站立场,转载请注明出处:https://www.bjmy2z.cn/gaokao/490905.html

利用键盘控制液晶显示器.的相关文章

  • 爱心与尊严的高中作文题库

    1.关于爱心和尊严的作文八百字 我们不必怀疑富翁的捐助,毕竟普施爱心,善莫大焉,它是一 种美;我们也不必指责苛求受捐者的冷漠的拒绝,因为人总是有尊 严的,这也是一种美。

    小学作文
  • 爱心与尊严高中作文题库

    1.关于爱心和尊严的作文八百字 我们不必怀疑富翁的捐助,毕竟普施爱心,善莫大焉,它是一 种美;我们也不必指责苛求受捐者的冷漠的拒绝,因为人总是有尊 严的,这也是一种美。

    小学作文
  • 爱心与尊重的作文题库

    1.作文关爱与尊重议论文 如果说没有爱就没有教育的话,那么离开了尊重同样也谈不上教育。 因为每一位孩子都渴望得到他人的尊重,尤其是教师的尊重。可是在现实生活中,不时会有

    小学作文
  • 爱心责任100字作文题库

    1.有关爱心,坚持,责任的作文题库各三个 一则150字左右 (要事例) “胜不骄,败不馁”这句话我常听外婆说起。 这句名言的意思是说胜利了抄不骄傲,失败了不气馁。我真正体会到它

    小学作文
  • 爱心责任心的作文题库

    1.有关爱心,坚持,责任的作文题库各三个 一则150字左右 (要事例) “胜不骄,败不馁”这句话我常听外婆说起。 这句名言的意思是说胜利了抄不骄傲,失败了不气馁。我真正体会到它

    小学作文
  • 爱心责任作文题库

    1.有关爱心,坚持,责任的作文题库各三个 一则150字左右 (要事例) “胜不骄,败不馁”这句话我常听外婆说起。 这句名言的意思是说胜利了抄不骄傲,失败了不气馁。我真正体会到它

    小学作文