键盘录入数据的转换与显示程序课程设计报告
课程设计报告书
课程名称微机原理及应用B
院(系、部、中心)自动化学院
专
班
姓
学
起指止导
-i -
五.系统模块详细设计与调试: 一).模块设计 模块一•输入第一个数:
MOV AH,09H
INT 21H
通过调用DOS 系统的01H 号功能——键入字符并回车来实现,
其出口参数为键入字符的ASCII 码,存在AL 中 详细设计方案:
DB 0DH,0AH,'PLEASE IUPUT A FIRST NUMBER FROM
;输入第一个数,在-9999至 范围内
;十进制数的输入缓冲区, 共可接收6个字符
;保留,用于10号调用时 DOS 填入实际输入字符 个数 ;一个符号位,四位数字 ASCII 码,加上一
个回车 符,共计6字符
DB ?
DB 12 DUP ⑺,'$'
;将第一个数转换为二
进制后,放于此处
DB 0DH,0AH,'PLEASE IUPUT THE SECOND NUMBER FROM -9999 TO
9999!$'
;输入第二个数,在-9999
DATA INPUT1
IN_ASC_BUF
IN_ASC_BUF1
B_BUF1 DW INPUT2
SEGMENT
-9999 TO 9999!$' +9999 DB 6 DB ?
DB 6 DUP ⑺,'$'
DB 6
;将二个数的和转换为
ASCII码后,放于此
处,以供9号调用显示ENDS
MOV AX,DATA
MOV DS,AX
MOV DX,OFFSET INPUT1
LP: MOV AH,09H
INT 21H
MOV DX,OFFSET IN_ASC_BUF MOV AH,0AH
INT 21H
MOV CX,3
MOV DI,OFFSET IN_ASC_BUF+2 MOV SI,OFFSET IN_ASC_BUF1+2
MOV AX,[DI]
MOV [SI],AX
INC SI
INC SI
INC DI
INC DI
LOOP LP
模块二:输入第二个数
MOV B_BUF1,AX
MOV DX,OFFSET INPUT2
MOV AH,09H
INT 21H
MOV DX,OFFSET IN_ASC_BUF
MOV AH,0AH
INT 21H
MOV CX,3
MOV DI,OFFSET IN_ASC_BUF+2
;提示输入一个
数
;读取第一个数
;设置次数
;将第一个数的第一个字符放于目的数据区指针中
;将第二个数的第一个字符放于源数据区指针中地址内容送入AX
循环LP读取出第
一个数
;取第二个输入数
的首地址
;提示输入二个
数
;读取第二个数
;设置次数
;将第二个数的第一个字符放
于目的数据区指
针
OUT ASC SUM 至+9999范围DB 6 DUP⑺,'$'
DATA
;设置DS
;取第一个输入数的
首地址
INT 21H
模块四.十进制数转换成二进制数:
入口:十进制数的ASCII 码在IN_ASC_BUF 内 出口:转换后的二进制数在AX 内 算法:先将其转换成十进制数字,再用累加和乘10加X 的方法变成 二进制数,如将358转换为二进制数,可先将累加和赋0,再计算 (((0*10+3)*10+5)*10+8) ,结果为二进制数,再由符号位决定是否需 要求补。
ASC_TO_B PROC NEAR
MOV CL,IN_ASC_BUF+1 MOV CH,0 DEC CL
MOV BX,OFFSET IN_ASC_BUF+3
PUSH BX PUSH CX L1:
MOV AL,[BX]
AND AL,0FH MOV [BX],AL INC BX LOO L1
将所有数字字 符的高四位清 0,使之变为数
字值
ASC_TO_B ENDP
模块五.二进制数转换为十进制数:
;取字符个数 ;符号位
■.
调整BX 指向 十进制数的最 高位
POP CX POP BX MOV AX,0 MOV SI,10 L2:
MUL SI
ADD AL,[BX] ADC AH,0 INC BX LOOP L2
CMP IN_ASC_BUF+2,'+' JZ L3 NEG AX
L3: RET
;累加和赋初值
;累加乘10
;符号是正号,
转移
;符号是负号,
求补
入口:二进制数在AX 内
出口:转换后的ASCII 码在OUT_ASC_SUM 变量内
算法:AX 中的数范围在+32767到-32768之间,先检查AX 中的符号 位,以决定输出“ + ”还是“-”,若是负数,应先求补,得到原码后 即可与正数作统一处理。
转换方法为将被转换的二进制数先除以 10000,商;即为万位数,再将余数除以1000,商为千位数,以此类推, 求出百、十位数,剩下的为个位数。
最后,将各个数加上30H ,即成 为对应字符。
CWD
MOV BX,1000 DIV BX
ADD AL,30H
MOV OUT_ASC_SUM+2,AL MOV AX,DX
MOV BL,100 DIV BL
ADD AL,30H
MOV OUT_ASC_SUM+3,AL MOV AL,AH CBW MOV BL,10
B_TO_ASC PROC NEAR
MOV OUT_ASC_SUM,'+' CMP AX,0 JGE L4
NEG AX
MOV OUT_ASC_SUM,'-' L4:
CWD
MOV BX,10000 DIV BX
ADD AL,30H
;不是负数,
转 移
MOV OUT_ASC_SUM+1,AL MOV AX,DX
;将万位转换为 数字(商应在 AX
内,但因为 商不大于3,所 以有效部分在
AL 内)
保存万位数字
;将余数置入AX
内,以便当作被 除数
;保存千位数字 ;将余数置入AX
内,以便当作被 除数
;保存百位数字
-9 -
-11 -
课程设计报告书
-13 -
CBW
MOV BL,1O
DIV BL
ADD AL,30H
MOV OUT_ASC_SUM+4,AL
ADD AH,30H MOV OUT_ASC_SUM+5,AH RET ENDP ENDS
END START
B_TO_ASC
CODE。
键盘录入数据的转换与显示程序设计说明书
OUT_ASC_SUMDB 6 DUP(?),'$';将二个数的和转换为ASCII码后,放于此 处,以供9号调 用显示
DATAENDS
MOV AX,DATA
MOV DS,AX;设置DS
MOV DX,OFFSET INPUT1;取第一个输入数的首地址
MOV AH,09H
INT 21H;提示输入一个数
MOV DX,OFFSET IN_ASC_BUF
MOV AH,0AH
INT 21H;读取第一个数
MOV CX,3;设置次数
在程序得到正确的结果之前,会产生一些错误,只有经过调试阶段才能纠正程序中的错误,从而的到正确的结果。在程序编译过程中会提示语法错误,可再用编辑程序来修改源程序中的错误。当没有语法错误而得不到正确结果时,可用调试程序DEBUG来调试。它通过单步、设置断点等方式为汇编语言程序员提供了非常有效的调试手段。
LOOP LP循环LP,读取出第一个数
模块二:输入第二个数
MOV B_BUF1,AX
MOV DX,OFFSET INPUT2;取第二个输入数的首地址
MOV AH,09H
INT 21H;提示输入二个数
MOV DX,OFFSET IN_ASC_BUF
MOV AH,0AH
INT 21H;读取第二个数
MOV CX,3;设置次数
ADD AX , BIN_BUF1;计算这二个数之和
CALL BIN_TO_ASCII;将和转换为ASCII码,以供显示用
课程设计键盘输入及数据显示程序设计
课程设计键盘输入及数据显示程序设
计
中北大学
汇编语言程序设计
课程设计说明书
学生姓名:学号:
学院:信息与通信工程学院
专业:自动化
题目:键盘输入及数据显示程序设计指导教师:沈小林职称:副教授
6月24日
中北大学
汇编语言程序设计实验
课程设计任务书
11/12 年第二学期
学院:信息与通信工程学院
专业:自动化
学生姓名:学号:
课程设计题目:数据显示及键盘输入程序设计
起迄日期: 6月18 日~6月24日
课程设计地点:中北大学
指导教师:沈小林
系主任:王忠庆
下达任务书日期: 06月20日
课程设计任务书
课程设计任务书
一、设计目的
1、经过程序设计和调试,加深对字符串程序设计的认识,。
键盘录入数据的转换与显示程序课程设计报告
3.要求程序运行后显示器显示:“please input the first number from -9999 to 9999!”的提示。
4.在输入数据之后,屏幕显示输入的值。
5.接着显示器显示“please input the second number from -9999 to 9999!”的提示。
MOV SI,OFFSET IN_ASC_BUF1+2;将第二个数的第一个字符放于源
数据区指针中
LP:MOV AX,[DI]地址内容送入AX
MOV [SI],AX
INC SI
INC SI
INC DI
INC DI
LOOP LP循环LP,读取出第一个数
模块二:输入第二个数
MOV B_BUF1,AX
MOV DX,OFFSET INPUT2;取第二个输入数的首地址
IN_ASC_BUFDB 6;十进制数的输入缓冲区,共可接收6个字符
DB ?;保留,用于10号调用时DOS填入实际输入字符个数
DB 6 DUP(?),'$';一个符号位,四位数字ASCII码,加上一个回车符,共计6字符
IN_ASC_BUF1DB 6
DB ?
DB 12 DUP(?),'$'
B_BUF1 DW ?;将第一个数转换为二进制后,放于此处
MOV AX,DATA
MOV DS,AX;设置DS
MOV DX,OFFSET INPUT1;取第一个输入数的首地址
MOV AH,09H
INT 21H;提示输入一个数
MOV DX,OFFSET IN_ASC_BUF
MOV AH,0AH
INT 21H;读取第一个数
实验十七 键盘输入及显示的电路设计
一、键盘工作原理说明
1、键盘是4行Y[3:0]×3列X[2:0]的矩阵式规格的键盘 、键盘是4 Y[3:0]× X[2:0]的矩阵式规格的键盘 2、由行线和列线上的电平信号来检知哪个键被按下 3、行扫描循环输出0001,0010,0100,1000 (DE1、 、行扫描循环输出0001,0010,0100, DE1、 DE2、DE3通过74138实现) DE2、DE3通过74138实现) 4、键盘的列线和高电平Vcc连在一起,一旦没有键被按下时 、键盘的列线和高电平Vcc连在一起,一旦没有键被按下时 列线全部为高电平(X0X1X2=“111”)。当对应的列中有 列线全部为高电平(X0X1X2=“111”)。当对应的列中有 键盘按下则列为低电平。 5、键盘解码电路:根据输入的行信号和列信号就可确定所 按的是哪一个键。根据事先设定的解码方案,解码电路可 以把行码和列码译成键码输出,同时使能信号端输出一个 正脉冲。这个脉冲的作用是通知下一个模块(在七段显示 电路中的移位锁存器)把输出的有效键码锁存起来。
二、设计功能要求
1、根据按键显示对应的数字 2、采用移位显示。最新的数字从右边进入,而最左的一个数 字当有新数字输入时,将消失。
三、键盘工作原理图
四、设计方框图
五、实验硬件验证
宗体仿真通过后,根据实际需要在演示板上进行部分联线, 将程序通过数据电缆由电脑下载到芯片,在演示板上进行 设计功能硬件验证。
六Hale Waihona Puke 实验报告要求1、键盘设计功能和工作原理说明。 2、画出设计框图和原理图。 3、画出设计输入(原理图、VHDL、状态图)。 、画出设计输入(原理图、VHDL、状态图)。 4、记录仿真波形图 。
从键盘输入数据并显示实验报告
从键盘输入数据并显示实验报告一、实验目的与内容1、实验目的掌握接收键盘数据的方法,并了解将键盘数据显示时须转换为ASCII码的原理,并在程序中设置错误出口。
2、实验内容编写程序,将键盘接收到的四位十六进制数按“Enter”回车键转化为二进制数,再显示在屏幕上, 按“空格键”结束!。
若输入的不是0-F间的数字,则显示出错信息,并要求重新输入。
二、实验设备(环境)1、实验设备(含芯片名称、功能简介)微型计算机一台2、实验环境TPC-ZK-II集成环境3、使用语言汇编语言三、实验原理(实验所用到的知识点及相关内容)1.在TPC-ZK-II集成环境下输入汇编程序,编译、连接,生成.exe文件。
2.按提示输入数据,在屏幕显示的运行结果中查看结果是否正确。
3.输入不同的数据,可得到不同的结果。
4、参考流程图四、实验步骤(包括步骤、代码、实验截图及其必要说明)编写程序,将键盘接收到的 4 位 16 进制数转换为等值的二进制数,再显示在荧光屏上。
分析:整个程序分为 3 个部分:键盘输入、转换、显示,可以分别用子程序来完成。
1. 输入。
输入可以利用字符串输入。
这时需要在主程序中先开辟一段输入缓冲区。
字符串输入 ( 0AH 功能 ),入口参数 DS : DX = 缓冲区的首地址,( DS :DX ) = 限制最多输入的字符数,功能号 AH = 0AH,类型号 21H。
出口参数 ( DS : DX+1 ) =实际键入的字符 ( 不含回车符 ),从( DS : DX+2 ) 开始顺序存放键入的字符串,回车符 0DH为串尾最后一字符。
实现功能:等待从键盘输入字符串,并存入设定的缓冲区内,同时回显字符串,光标随着移动,回车符使光标回到行首。
注意事项:应按要求先定义缓冲区,再调用。
数据缓冲区的设置如下:DATA SEGMENT ; 定义缓冲区MARK DB ?MESS DB 'input:$' ;输入字符串提示ERROR DB 0DH,0AH,'input error!',0DH,0AH,'$' ;输入错误提示DATA ENDS从键盘输入‘ ABCD ’, 回车,内存的存放结果 :子程序如下:INPUT PROCLEA DX, striMOV AH, 09H ; 调显示功能INT 21HLEA DX , maxMOV AH , 0AHINT 21H ; 调 0A输入功能RETINPUT ENDP2. 转换。
实验报告 实验六 从键盘输入数据并显示
实验报告实验六从键盘输入数据并显示
实验目的:
1.掌握接收键盘数据以及输入数据转换为ASCII码显示输出的基本方法。
2.熟悉COM文件的编写。
3.进一步熟悉子程序的应用。
实验内容:
编写COM文件格式程序,完成如下功能:
1.从键盘接收4位十六进制数据
2.将接收的数据转换为二进制形式,在屏幕上显示输出
实验步骤和要求:
1.分析问题,画出算法框图。
写实验预习报告。
2.编写COM格式汇编语言程序。
3.在DOS下编辑、汇编、连接程序。
4.用Debug调试程序。
5.在DOS下运行并分析结果。
6.填写实验报告。
算法框图
B_TO_A子程序
汇编源程序:
DOS下运行并分析结果
在DOS下编辑、汇编、连接程序
输入: AF57
结果是:1010 1111 0101 0111正确执行
总结。
课程设计——键盘输入及数据显示程序设计
示程序设计中北大学汇编语言程序设计课程设计说明书学生姓名:学号:学院:信息与通信工程学院专业:自动化题目:键盘输入及数据显示程序设计指导教师:沈小林职称:副教授2012年6月24日中北大学汇编语言程序设计实验课程设计任务书11/12 学年第二学期学院:信息与通信工程学院专业:自动化学生姓名:学号:课程设计题目:数据显示及键盘输入程序设计起迄日期:6月18 日~6月24日课程设计地点:中北大学指导教师:沈小林系主任:王忠庆下达任务书日期: 2011年06月20日课程设计任务书课程设计任务书一、设计目的1、通过程序设计和调试,加深对字符串程序设计的认识,掌握其调试方法;2、通过键盘及显示程序设计掌握汇编语言程序在键盘输入及文本显示方面的编程过程;3、学会DOS中关于显示功能调用的用法;4、领会修改显存方法显示字符。
二、程序设计要求(1)能识别数字键、字母键(能区分大小写);(2)一次最多字符(含数字)输入不超过80个;(3)依次显示键盘输入的所有可显示字符。
三、编程思路串(String)即数据串,是指存放在连续内存中的一组数据,通常表现为字节(或字)数组,串操作指令具有以下共性。
1)源串:地址由DS:SL表示。
2)目的串:地址由ES:DI表示。
3)自动修改地址:每次数据操作后,SI和DI自动递增或递减,取决于操作的数据类型(字节、字或双字)以及DF的值。
若DF=0,则SI和DI自动增加1、2或4;否则减1、2或4。
可以使用CLD或STD指令设置DF。
4)计数器:使用重复前缀时,用CX显示数据个数,每重复一次操作,CX 减1。
从键盘输入一串字符串,通过指令STRING DB 80 DUP(?)来设置一次最多字符(含数字)输入不超过80个,能识别数字键、字母键。
要使程序能够识别字母键的大小写,必须通过ASCII码来寻址识别。
依次显示键盘输入的所有可显示字符,当用户按回车键时,输入结束。
然后通过显示器显示输入的字符。
CPLD课程设计键盘输入显示
1.所做设计题目2.实现方案3.程序4.硬件调试结果5.总结(包括设计中所用到的知识点。
遇到的问题及解决方法。
建议或意见等)在为期一周的CPLD课程设计中,从选课题查资料,到学软件做仿真,再到检测与调试,我都收获了很多。
不光理论知识得到了强化,实践动手能力也被大大增强了,此外我对课程设计的流程也更熟稔了。
在知识方面,我不仅回顾了这个学期所学的CPLD技术基础理论知识,也回顾了过去所学的模数电相关的知识;不仅加深了对CPLD 理论的理解,在与之相关的学科方面也得到了拓展与深化。
此次课程设计,让我对模数电与CPLD等科目有了更深入细致的了解。
同时我也深深发觉到,仅懂得理论、纸上谈兵是远远不够的,我们还需要进行更多的实物制作,或是软件仿真,因为当理论运用到实际中时,往往会出现很多的问题与偏差。
所以这次的实践训练是非常合时并且有意义的,它使我懂得了只有不断实践才能真正掌握知识。
最后感谢指导教师的细心教导,谢谢介于实验箱键盘输入模块为4行5列输入,而其内部电路为3行8列电路,所以采用行扫描的方法来进行扫描。
借助时钟clk0及变量kk来控制led灯变亮的顺序process(clk0)variable kk:std_logic;beginif(clk0'event and clk0='1')thenkk := not kk;end if;if kk = '0' thensel <= "000";y <= HighLed;elsesel <= "001";y <= LowLed;end if;end process;定义信号q来控制行线x的扫描process(clk,q)beginif rising_edge(clk) thenif q=2 thenq<=0;elseq<=q+1;end if;case q iswhen 0=>x<="110";when 1=>x<="101";when 2=>x<="011";end case;扫描行信号q所在的各列是否有按键,以下为第一行case q iswhen 0 =>if (h="11111110") thenHighLed <= "11111100"; --00LowLed <= "11111100";elsif (h="11111101") thenHighLed <= "11111100"; --01LowLed <= "01100000";elsif (h="11111011")thenHighLed <= "11111100"; --02elsif (h="11110111")thenHighLed <= "11111100"; --03LowLed <= "11110010";elsif (h="11101111")thenHighLed <= "11111100"; --04LowLed <= "01100110";elsif (h="11011111")thenHighLed <= "11111100"; --05LowLed <= "10110110";elsif (h="10111111")thenHighLed <= "11111100"; --06LowLed <= "10111110";elsif (h="01111111")thenHighLed <= "11111100"; --07LowLed <= "11100000";end if;在原先判断列是否有按键的语句中加入一个if语句来改变进制when 1 =>if (h="11111110") thenif (n='1')thenHighLed <= "01100000"; --16elsif(n='0')thenHighLed <= "01100000"; --10 LowLed <= "11111100";end if;elsif (h="11111101")thenif (n='1')thenHighLed <= "01100000"; --17 LowLed <= "11100000";elsif(n='0')thenHighLed <= "01100000"; --11 LowLed <= "01100000";end if;elsif (h="11111011")thenif (n='1')thenHighLed <= "01100000"; --18 LowLed <= "11111110";elsif(n='0')thenHighLed <= "01100000"; --12 LowLed <= "11011010";end if;elsif (h="11110111")thenif (n='1')thenHighLed <= "01100000"; --19LowLed <= "11110110";elsif(n='0')thenHighLed <= "01100000"; --13LowLed <= "11110010";end if;程序:library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity jianpan isport( clk0, clk :in std_logic;n :in bit;h :in std_logic_vector(7 downto 0);x :out std_logic_vector(2 downto 0); y :out std_logic_vector(7 downto 0);sel :out std_logic_vector(2 downto 0)); end;architecture erban of jianpan issignal q:integer range 0 to 2;signal w:integer range 0 to 3;signal HighLed,LowLed:std_logic_vector(7 downto 0); beginprocess(clk0)variable kk:std_logic;beginif(clk0'event and clk0='1')thenkk := not kk;end if;if kk = '0' thensel <= "000";y <= HighLed;elsesel <= "001";y <= LowLed;end if;end process;process(clk,q)beginif rising_edge(clk) thenif q=2 thenq<=0;elseq<=q+1;end if;case q iswhen 0=>x<="110";when 1=>x<="101";when 2=>x<="011";end case;case q iswhen 0 =>if (h="11111110") thenHighLed <= "11111100"; --00LowLed <= "11111100";elsif (h="11111101") thenHighLed <= "11111100"; --01LowLed <= "01100000";elsif (h="11111011")thenHighLed <= "11111100"; --02LowLed <= "11011010";elsif (h="11110111")thenHighLed <= "11111100"; --03LowLed <= "11110010";elsif (h="11101111")thenHighLed <= "11111100"; --04LowLed <= "01100110";elsif (h="11011111")thenHighLed <= "11111100"; --05 LowLed <= "10110110";elsif (h="10111111")thenHighLed <= "11111100"; --06LowLed <= "10111110";elsif (h="01111111")thenHighLed <= "11111100"; --07LowLed <= "11100000";end if;when 2 =>if (h="11111110") thenHighLed <= "11111100"; --08 LowLed <= "11111110";elsif (h="11111101") thenHighLed <= "11111100"; --09 LowLed <= "11110110";elsif (h="11111011")thenif (n='1')thenHighLed <= "01100000"; --10LowLed <= "11111100";elsif(n='0')thenHighLed <= "00000000"; --ALowLed <= "11101110";end if;elsif (h="11110111")thenif (n='1')thenHighLed <= "01100000"; --11 LowLed <= "01100000";elsif(n='0')thenHighLed <= "00000000"; --bLowLed <= "00111110";end if;elsif (h="11101111")thenif (n='1')thenHighLed <= "01100000"; --12 LowLed <= "11011010";elsif(n='0')thenHighLed <= "00000000"; --CLowLed <= "10011100";end if;elsif (h="11011111")thenif (n='1')thenHighLed <= "01100000"; --13 LowLed <= "11110010";elsif(n='0')thenHighLed <= "00000000"; --d LowLed <= "01111010";end if;elsif (h="10111111")thenif (n='1')thenHighLed <= "01100000"; --14 LowLed <= "01100110";elsif(n='0')thenHighLed <= "00000000"; --E LowLed <= "10011110";end if;elsif (h="01111111")thenif (n='1')thenHighLed <= "01100000"; --15 LowLed <= "10110110";elsif(n='0')thenHighLed <= "00000000"; --F LowLed <= "10001110";end if;end if;when 1 =>if (h="11111110") thenif (n='1')thenHighLed <= "01100000"; --16LowLed <= "10111110";elsif(n='0')thenHighLed <= "01100000"; --10 LowLed <= "11111100";end if;elsif (h="11111101")thenif (n='1')thenHighLed <= "01100000"; --17 LowLed <= "11100000";elsif(n='0')thenHighLed <= "01100000"; --11 LowLed <= "01100000";end if;elsif (h="11111011")thenif (n='1')thenHighLed <= "01100000"; --18LowLed <= "11111110";elsif(n='0')thenHighLed <= "01100000"; --12 LowLed <= "11011010";end if;elsif (h="11110111")thenif (n='1')thenHighLed <= "01100000"; --19 LowLed <= "11110110";elsif(n='0')thenHighLed <= "01100000"; --13 LowLed <= "11110010";end if;end if;end case;end if;end process;end;0 1 2 3 F1 4 5 6 7 F28 9 A B F3C D E F F4。
键盘录入转换程序设计
键盘录入转换程序设计2010-01-20 15:551、通过键盘连续录入可显示多个字符,遇“.”时终止2、字符串以空格和“.”分隔,输入完成后,空格前的字符串以正向在屏幕上显示,“.”前的字符串以反向在屏幕上显示程序如下data segmentstr db 'please input the string :',10,13,'$'str1 db 'the result is:',10,13,'$'string db 200 dup (?)data endsstack segmentdb 200 dup (?)stack endscode segmentassume cs:code,ds:data,ss:stackstart:mov ax, datamov ds, axmov ax,stackmov ss, axmov si,0mov ah,9lea dx,strint 21hxor dh,dhtop:mov ah,1int 21hcall judgejc downinc sijmp topdown:cmp dh,1je nexdec dinex:mov [string+si+1],'$'call changemov ah,2mov dl,13int 21hmov dl,10int 21hmov ah,9lea dx,str1int 21hmov ah,9lea dx,stringint 21hmov ah,1int 21hmov ah,4chint 21h;=================================== judge proccmp al,20hjnz next1mov di,simov dh,1next1:cmp al,2ehjnz next2stcjmp next3next2:clcnext3:mov [string+si],alretjudge endp;===================================== change procpush axpush bxpush cxpush sipush dimov ax,sisub ax,didec axmov bl,2div blmov cl,alxor ch,chsub si,cxadd di,cxag: mov al,[string+si]xchg [string+di],almov [string+si],aldec diinc siloop agpop dipop sipop cxpop bxpop axretchange endp;================================ code endsend start。
键盘输入显示数电课程实验报告
键盘输入显示数电课程实验报告西北工业大学课程设计报告题目键盘输入显示学院班级学生(学号)学生(学号)学生(学号)日期2013年1月11日摘要:键盘是最常用人机接口设备之一,在嵌入式系统中有着相当广泛的应用。
一般自行设计的简易矩阵键盘仅仅是按行、列排列起来的矩阵开关。
当需要较多的按键时,则会占用较多的I/O 端口,在软件上则要进行上电复位按键扫描及通信处理,而且还要加上按键的去抖动处理,增大了软硬件开销。
而PS/2 键盘,内嵌自动去除按键抖动设计,自动地识别键的按下与释放,软硬件开发简便,价格便宜,稳定可靠,将PS/2 键盘作为嵌入式系统的输入设备已经成为可行的方案。
本设计是以现场可编程逻辑器件(FPGA)为核心的PS/2接口键盘的输入识别电路。
利用QuartusⅡ软件编写verilog HDL硬件描述语言程序以实现键盘部分简单键值的识别与输出。
本设计主要以程序为核心,硬件电路的搭建使用FPGA实验箱,将程序顶层文件里定义的输入输出端口与实验箱管脚进行相应的配置,除实验箱上的reset键以外,外设是一个与实验箱通过PS/2接口相连的键盘和VGA接口相连的显示屏。
当系统上电后,按下键盘上的按键,实验箱上的数码管可以依次显示从键盘上输入的键值,同时VGA显示屏显示键值。
关键字:Ps/2接口键盘、FPGA 、QuartusⅡ、Verilog HDL、 VGA接口目录一、课程设计目的 (4)二、设计任务与要求 (4)三、方案设计与论证 (4)四、单元电路设计与参数计算 (5)五、程序设计 (7)六、程序调试 (7)七、遇到的问题及解决方法 (8)八、结论与心得 (8)九、参考文献 (9)键盘输入显示一、课程设计目的(1)巩固和加深所学电子技术课程的基本知识,提高综合运用所学知识的能力;(2)培养学生根据课题需要选用参考书、查阅手册、图表和文献资料的能力,提高学生独立解决工程实际问题的能力.(3)通过设计方案的分析比较、设计计算、元件选绎及电路安装调试等环节.初步掌握简单实用电路的工程设计方法.(4)提高学生的动手能力.掌握常用仪器设备的正确使用方法,学会对简单实用电路的实验调试和对整机指标的测试方法,(5)了解与课题有关的电路以及元器件的工程技术规范,能按课程设计任务书的要求编写设计说明书,能正确反映设计和实验成果,能正确绘制电路固等.二、设计任务与要求1.任务:设计一个键盘输入显示控制电路2.要求和指标:(1)由键盘输入0~F,总计16个字符,由开发板上的数码管显示;(2)该字符同时能在VGA上显示输出;3. 扩展要求:(A)能在VGA显示屏上切换字符显示的大小。
