键盘录入数据的转换与显示程序课程设计报告

合集下载

键盘录入数据的转换与显示程序设计说明书

键盘录入数据的转换与显示程序设计说明书
INPUT2DB 0DH,0AH,'PLEASE IUPUT THE SECOND NUMBER FROM -9999 TO 9999!$';输入第二个数,在-9999 至 +9999范围
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、经过程序设计和调试,加深对字符串程序设计的认识,。

键盘录入数据的转换与显示程序课程设计报告

键盘录入数据的转换与显示程序课程设计报告
2.做成一个子程序,供其它程序调用。
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课程设计键盘输入显示

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显示屏上切换字符显示的大小。

微机原理实验六从键盘输入数据并显示

微机原理实验六从键盘输入数据并显示

实验六从键盘输入数据并显示1要求:编写程序,将键盘接收到的四位十六进制数转换为等值的二进制数,并显示在屏幕上。

若输入的不是0—F间的数字,则显示出错信息,并要求重新输入。

2目的:掌握接收键盘数据的方法,并了解将键盘数据显示时须转换为ASCII码的原理。

实验程序CRLF MACROMOV AH,02HMOV DL,0DHINT 21HMOV AH,02HMOV DL,0AHINT 21HENDMDATA SEGMENTMARK DB?MESS DB'please input the number(H),press inter,ture into number(B).press space end.',0DH,0AH,'$'ERROR DB 0DH,0AH, 'input error',0DH,0AH,'$'DATA ENDSSTACK SEGMENTSTA DW32 DUP(?)TOP DW?STACK ENDSCODE SEGMENTASSUME CS:CODE,DS:DATA,ES:DATA,SS:STACKSTART: MOV AX,DATAMOV DS,AXMOV ES,AXMOV SP,TOPHEAD: CRLFMOV MARK,0MOV AH,09HLEA DX,MESSINT 21H ;显示提示输入的信息CALL GETNUM ;接收键入数值送DXCMP MARK,01HJE HEADMOV CX,0010H ;16位MOV BX,DXTTT: ROL BX,1 ;循环左移1位MOV DL,BLAND DL,01H ;屏蔽掉高7位ADD DL,30HMOV AH,02HINT 21H ;显示二进制位对应的ASCII字符LOOP TTTJMP HEADFINI: MOV AX,4C00HINT 21H ;返回DOSGETNUM PROC NEAR ;子程序,接收键入数值送DX PUSH CXXOR DX,DXGGG: MOV AH,01HINT 21HCMP AL,0DH ;输入为回车,则进行转换JE PPPCMP AL,20H ;输入为空格,则退回DOSJE FINICMP AL,30HJB KKKSUB AL,30HCMP AL,0AHJB GETSCMP AL,11HJB KKKSUB AL,07HCMP AL,0FHJBE GETSCMP AL,2AHJB KKKCMP AL,2FHJA KKKSUB AL,20HGETS: MOV CL,04SHL DX,CLXOR AH,AHADD DX,AXJMP GGGKKK: MOV AH,09HMOV DX,OFFSET ERRORINT 21HMOV MARK,01HPPP: PUSH DXCRLFPOP DXPOP CXRETGETNUM ENDPCODE ENDSEND START。

单片机课程设计模拟键盘输入及显示系统设计

单片机课程设计模拟键盘输入及显示系统设计

课程设计说明课程名称:单片机应用基础设计题目:模拟键盘输入及显示系统设计专业:机械设计制造及其自动化指导教师:设计者:第一章课程设计的目的和要求1.1 课程设计的目的和要求1.2 课程设计预备知识1.3课题设计的任务............................................................第二章总体设计介绍对系统设计的总体认识及解决方案,并对采取的方案进行论证第三章硬件设计介绍本系统所选用的各种芯片的功能、引脚、相应的命令控制字格式等,画出系统工作原理图及实现方法第四章软件设计介绍本系统的主要功能模块程序的框图,以及总体程序框图和设计思路第五章系统调试介绍系统调试过程以及出现的问题、解决方法第六章结束语简述课程设计的收获、体会以及对本教学环节的意见和建议参考文献+1第一章、课程设计目的和要求 1.1课程设计目的和要求《单片机应用基础》课程设计是学好本门课程的又一重要实践性教学环节, 目的就是配合本课程的教学和平时实验,以达到巩固消化课程的内容,进一步加强综合应用能力及单片机应用系统开发和设计能力的训练,启发创新思维,使之具有独立单片机产品和科研的基本技能,是以培养学生综合运用所学知识的过程, 是知识转化为能力和能力转化为 工程素质的重要阶段。

1.2课程设计预备知识总的来说,设计者要具备Mcs-51单片机的有关硬件及软件知识,汇编语言编程或者语言编程的有关知识,1\0接口的有关知识,WAVE6000集成调试软件的应用,能利用PROTEUS 软件绘制系统工作原理,一定的设计经验等等。

本次设计所要掌握的一些基本知识如下:(1)键盘工作原理键盘是由若干按键组成的开关矩阵,是嵌入式控制系统的一种输入部件。

键盘分两种: —种是独立式按键, 另一种是矩阵式按键。

如图所示。

独立式按键用的比较少,可以直接与 单片机的P1 口某一位进行连接,通过判断这一位的状态知道是否有键输入。

实验三 从键盘输入数据并显示

实验三 从键盘输入数据并显示

实验2 从键盘输入数据并显示编写程序,将键盘接收到的4位16进制数转换为等值的二进制数,再显示在荧光屏上。

分析:整个程序分为3个部分:键盘输入、转换、显示,可以分别用子程序来完成。

1. 输入。

输入可以利用字符串输入。

这时需要在主程序中先开辟一段输入缓冲区。

先复习一下字符串输入的知识。

字符串输入 ( 0AH 功能 )入口参数 DS : DX = 缓冲区的首地址( DS :DX ) = 限制最多输入的字符数功能号 AH = 0AH类型号 21H出口参数 ( DS : DX+1 ) = 实际键入的字符(不含回车符) 从( DS : DX+2 )开始顺序存放键入的字符串,回车符0DH为串尾最后一字符。

实现功能等待从键盘输入字符串,并存入设定的缓冲区内,同时回显字符串,光标随着移动,回车符使光标回到行首。

注意事项:应按要求先定义缓冲区,再调用。

数据缓冲区的设置如下:data SEGMENT ;定义缓冲区stri DB ‘PLEASE INPUT’ ,0AH,0DH, ’$’ ;输入提示max DB 4 ;定义限制最多输入个数lenth DB ? ;用于存放实际输入个数stri DB 5 DUP(?) ;用于存放输入的字符串data ENDS从键盘输入‘ABCD’, 回车,内存的存放结果:子程序如下:INPUT PROCLEA DX, striMOV AH, 09H ;调显示功能INT 21HLEA DX , maxMOV AH , 0AHINT 21H; 调0A输入功能RETINPUT ENDP2. 转换。

由于在缓冲区中存放的是输入字符的ASCII码,比如1→31H,A→41H ,a→61H,所以首先需要将它们转换成对应的数字的大小。

如1→0000,0001B,A和a→1010。

如何转换?数字和字母的ASCII码是一个有序序列数字0~9 : 30H ~ 39H大写字母A~Z : 41H ~ 5AH小写字母a~z : 61H ~ 7AH对于每个字符,先减去30H,数字0~9就转换完了;如果判断是否大于09H,是则减去07H,大写字母A~F转换完毕,如果是小写字母a~f,还要减去20H。

单片机课程设计-模拟键盘输入及显示系统设计

单片机课程设计-模拟键盘输入及显示系统设计

单片机课程设计-模拟键盘输入及显示系统设计课程设计说明书课程名称:单片机应用基础设计题目:模拟键盘输入及显示系统设计专业:机械设计制造及其自动化指导教师:设计者:学号:目录第一章课程设计的目的和要求…………………………………………… (1)1.1课程设计的目的和要求 (1)1.2课程设计预备知识 (1)1.3课题设计的任务 (2)第二章总体设计介绍对系统设计的总体认识及解决方案,并对采取的方案进行论证第三章硬件设计介绍本系统所选用的各种芯片的功能、引脚、相应的命令控制字格式等,画出系统工作原理图及实现方法第四章软件设计介绍本系统的主要功能模块程序的框图,以及总体程序框图和设计思路第五章系统调试介绍系统调试过程以及出现的问题、解决方法第六章结束语思维,使之具有独立单片机产品和科研的基本技能,是以培养学生综合运用所学知识的过程,是知识转化为能力和能力转化为工程素质的重要阶段。

1.2课程设计预备知识总的来说,设计者要具备Mcs-51单片机的有关硬件及软件知识,汇编语言编程或者C语言编程的有关知识,I\O接口的有关知识,WAVE6000集成调试软件的应用,能利用PROTEUS软件绘制系统工作原理,一定的设计经验等等。

本次设计所要掌握的一些基本知识如下:(1)键盘工作原理键盘是由若干按键组成的开关矩阵,是嵌入式控制系统的一种输入部件。

键盘分两种:一种是独立式按键,另一种是矩阵式按键。

如图所示。

独立式按键用的比较少,可以直接与单片机的P1口某一位进行连接,通过判断这一位的状态知道是否有键输入。

在应用中通常需要数量较多的按键,为了减少I/O口的占用,通常将按键排列成矩阵形式,如图所示。

在矩阵式键盘中,每条水平线和垂直线在交叉处不直接连通,而是通过一个按键加以连接。

这样,一个端口(如P1口)就可以构成4*4=16个按键,比之直接将端口线用于键盘多出了一倍,而且线数越多,区别越明显,比如再多加一条线就可以构成20键的键盘,而直接用端口线则只能多出一键(9键)。

计算机应用课程设计报告-8279键盘显示接口电路设计及程序设计

计算机应用课程设计报告-8279键盘显示接口电路设计及程序设计

计算机应用课程设计报告“计算机应用课程设计”任务书课题名:8279键盘显示接口电路设计及程序设计第一部分硬件部分一.1)8279键盘显示接口电路要求:1)掌握8279键盘显示接口电路的扩展方法2)熟悉8279的工作原理和编程方法3)编制8279动态显示和键盘扫描程序4)熟悉8086CPU与PC机的连接和应用5)键入数据同时在PC机和显示模块上显示6)画出硬件结构原理图7)操作系统DOS6.228) 调试程序9) VB6.0 版软件2)设计题目、要求硬件条件:计算机、AEDK8688ET实验装置一套。

其主要目的在于培养学生的可视化语言的实际应用能力,掌握面向对象,基于Windows98的32位环境基本可视化编程方法,尤其是运用可视化编程语言对输入/输出端口的输入/输出的操作,为面向输入/输出控制的集成监控软件的设计打下基础。

内容:1.实时监倥系统的设计:(VB、VC、Delphi任选)1.VB、VC或Delphi环境下对输入/输出的操作实践2.通过A/D器件实验数据的采集、校核、滤波。

3.实时数据刷新,曲线描绘及趋势显示。

2.串行通讯系统的设计:(VB、VC、Delphi任选)实现计算机硬件接口之间的串行通讯。

要求:1.学习并初步掌握可视化编程语言VB、VC、Delphi的编程方法;2.并开发一个具有可视化界面,具备外设端口输入/输出功能的程序;3.课程设计完成后,每人必须提交磁盘文件和一份设计说明书。

3)指导老师:黄运生、李志民4 )考核及成绩评定:由全体指导老师及研究生师兄于最后一次上机(2005年1月15日)对每位同学的设计结果逐个观看演示、考核、并将相关文件及源文件一并交于指定文件夹。

汇编语言是一种运行速度最快,能使用所有机器特殊硬件功能的语言。

对速度要求很高的程序,如实时响应处理,图形图象处理等都离不开汇编语言。

目前在计算机系统中,无论是操作系统、编译系统、图形处理系统及大量应用系统中都还不能完全离开汇编语言编制的程序模块。

单片机原理及接口技术结课报告——键盘输入及显示

单片机原理及接口技术结课报告——键盘输入及显示

单片机原理及接口技术结课报告——键盘输入及显示小组成员:第一章总体设计原理本设计是一个实现加、减、乘、除的计算器,它的硬件主要由四部分组成,一个AT89C51单片机芯片,一个八位共阳极的数码管,一个4*4的键盘,一个排阻(10K)做P0口的上拉电阻,它可以实现结果低于65535的加、减、乘、除运算。

——P2.7相连,P2口作为数码管的位控制端。

——P1.3管脚相连,程序运行时依次扫描各行,查询是否有键按下,如果有则进入键盘识别处理程序,实现相应的运算,然后通过数码管输出结果,如果没有按键就调用显示程序显示一个0,等待按键按下,在进入按键扫描程序。

执行过程:开机即显示0,等待键入数值,当键入数字,将通过数码管显示出来,在键入+、-、*、/运算符,计算器在内部执行数值转换和存储,并等待再次键入数值,当在键入数值后将显示键入的数值,按等号就会在数码管上输出运算结果。

注:结果不能超出65535。

按键控制显示电路系统的总体原理框图为:第二章硬件设计2.1 系统所选芯片介绍AT89C51芯片是一种带有4K字节闪存的低电压、高性能CMOS 8位微处理器,俗称单片机。

单片机的可擦除只读存储器可以反复擦除1000次。

AT89C51单片机模块是整个电路的核心,时钟信号与复位信号的产生以及程序的处理等任务都是由单片机来完成的。

时钟信号用来提供单片机片内各种微操作的时间基准,复位信后用来初始化单片机内部的某些特殊功能寄存器,使CPU及系统各部件处于确定的初始状态,并从初始状态开始正常工作。

图1 AT89C51单片机2.2显示器介绍LED(Light Emiting Diode)是发光二极管的缩写。

通常所说的LED显示器由7个发光二极管组成,因此也称为七段LED显示器,其排列形状如下图所示。

显示器还有一个圆点型发光二极管(图中dp),用于显示小数点。

通过其个发光二极管亮暗的不同组合,就可以显示多种数字、字母以及其他符号。

数字显示与键盘输入设计课程设计

数字显示与键盘输入设计课程设计

学号:0121010340704课程设计题目数字显示与键盘输入例程设计学院计算机科学与技术学院专业计算机科学与技术班级姓名指导教师2013 年7 月 1 日目录课程设计说明书 (2)数字显示与键盘输入设计 (3)1.系统描述: (3)1.1实验目的 (3)1.2实验设备: (3)1.3设计要求: (3)2.设计过程: (3)32.2操作命令: (5)2.3操作过程: (8)2.3.1硬件连接: (8)2.3.2软件设计: (9)2.3.3设计成功标志:.................................................................................102.4程序设计:..............................................................................................102.5程序代码 ................................................................................................103.调试过程 .........................................................................................................153.1程序编译调试........................................................................................153.2在线编程写入程序................................................................................16164.课程设计总结:...............................................................................................17本科生课程设计成绩评定表 (18)课程设计任务书学生姓名:杨星专业班级:计算机1007班指导教师:唐祖锴工作单位:计算机科学与技术学院题目: 数字显示与键盘输入设计初始条件:1.课程设计使用ZG211硬件综合实验平台(8051单片机),配有课程设计接口芯片和辅助芯片以及器件;2.ZG211有程序设计集成开发环境,程序设计语言为C语言;3.ZG211硬件综合实验平台使用说明书;要求完成的主要任务:(包括课程设计工作量及其技术要求,撰写说明书具体要求)1.学习使用ZG211硬件综合实验平台,程序设计集成开发环境;2.根据课程设计题目,进行需求分析,搞清楚课程设计需要设计需求和需要解决的设计内容。

实验5键盘输入与数码管显示实验

实验5键盘输入与数码管显示实验

班级学号姓名实验组别实验日期室温报告日期成绩报告内容:(目的和要求、原理、步骤、数据、计算、小结等)实验名称:实验5键盘输入与数码管显示实验一、实验目的学习键盘工作原理,掌握数据输入输出的方法。

二、实验内容及原理矩阵键盘扫描原理:由处理器通过行线给某一行按键送入低电平信号,按键在未使用的情况下列线上拉高电平信号,处理器对行线输出相连的I/O口进行扫描,当扫描到低电平信号时证明对应的键被按下。

本实验中采用的是2*8键盘,为了减少对处理器芯片I/O接口的直接引用,实验中使用了一片74HC595(U6)用来实验数据串并转换。

三、实验原理图四、实验步骤1. 实验连线74HC595(U6)时钟控制端接LPC2103总线接口模块的P0.19,数据输入端接总线接口模块的P0.20,选通端接总线接口模块的P0.21。

数据输出端接按键行扫描输入端。

按键8根行线接74HC595的数据输出端,2根列线分别接LPC2103总线接口模块的P0.17,P0.18.同时在列线上接入+3.3V 电源和上拉电阻以确保在没有信号输入的情况下列线给处理器送入的是高电平信号。

2.仿真器的设置:一般选用JTAG 调试,若使用RelInFlash 生成目标时,编译连接生成的目标代码会将芯片加密。

此时调试无法继续,须将硬件调成ISP 模式进行全片擦除。

3. 运行程序:keytest.hex4. 接通电源,按下按键并观察实验板上数码管的变化。

五、流程图主程序显示子程序键盘扫描六、实验程序#include "config.h" #include "Num show.h" #include "key.h"/**************************************************************************** * 名称:main()* 功能:数据送入数码管显示****************************************************************************/ int main(void){uint8 key_val=0,dis;uint8 str[8]={0xc0,0x00,0x00,0x00,0x00,0x00,0x00,0x00};PINSEL0=0x00000000;//设置所有引脚连接GPIOPINSEL1=0x00000000;IODIR=SPI_IOCON; //设置LED为输出其他为输入//Num_show(str);while(1){key_val=get_key(); //取键值if(key_val<16){dis = key_val;if(dis<10){str[7]=dis;str[6]=0;}else{str[6]=1;str[7]=dis%10;}//for(m=0;m<10;m++) //延时显示键值}Num_show(str);//显示改变后的数值}return (0);}#include "config.h"#define SPI_CS 0x00000100//P0.8#define SPI_CS1 1<<11//P0.11#define SPI_DATA 0x00000040//P0.6#define SPI_DATA1 0x00000080//P0.7/**************************************************************************** * 名称:DelayNS()* 功能:长软件延时* 入口参数:dly参数越大延时越久* 出口参数:无****************************************************************************/ void DelayNS(uint32 dly){uint32 i;for(;dly>0;dly--)for(i=0;i<5000;i++);}/**************************************************************************** * 名称:HC595_SendDat()* 功能:向74HC595发送一个字节的数据* 入口参数:data要发送的数据* 出口参数:无* 说明:高位数据先发送****************************************************************************/ void HC595_SendDat(uint8 dat){uint8 i;IOCLR = SPI_CS; //SPI_CS=0for(i=0;i<8;i++) //发送8位数据{IOCLR = SPI_CLK; //SPI_CLK=0if((dat&0x80)!=0) IOSET = SPI_DA TA;else IOCLR = SPI_DA TA;dat<<=1;IOSET = SPI_CLK; //SPI_CLK=1}IOSET = SPI_CS; //SPI_CS=1,输出显示数据}void HC595_SendDat1(uint8 dat){uint8 i;IOCLR = SPI_CS1; //SPI_CS=0for(i=0;i<8;i++) //发送8位数据{IOCLR = SPI_CLK; //SPI_CLK=0if((dat&0x80)!=0) IOSET = SPI_DA TA1;dat<<=1;IOSET = SPI_CLK; //SPI_CLK=1}IOSET = SPI_CS1; //SPI_CS=1,输出显示数据}/***************************************************************************** 名称:Num_show()* 功能:显示收到的数据* 入口参数:str[],要显示的数据****************************************************************************/ int Num_show(uint8 str[]){const uint8 DISP_TAB1[8] = {0x00,0x00,0x00,0x00,0x00,0x00,0x40,0x80};const uint8 DISP_TAB[] = {0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e};//0--f 暗亮G P U r -uint8 i;// while(1){for(i=0;i<8;i++){HC595_SendDat(DISP_TAB[str[i]]);HC595_SendDat1(DISP_TAB1[i]);DelayNS(1);HC595_SendDat(0xff);HC595_SendDat1(DISP_TAB1[i]);}}return(0);}#include "config.h"#include "Num show.h"#define SPI_CS2 1<<21//P0.21#define SPI_DATA2 1<<20//P0.20#define SPI_CLK2 1<<19//P0.19#define KEY1 1<<17// P0.17#define KEY2 1<<18// P0.18/***************************************************************************** 名称:HC595_SendDat2()* 功能:向74HC595发送一个字节的数据* 入口参数:data要发送的数据* 说明:高位数据先发送****************************************************************************/ void HC595_SendDat2(uint8 dat){uint8 i;IOCLR = SPI_CS2; //SPI_CS2=0for(i=0;i<8;i++) //发送8位数据{IOCLR = SPI_CLK2; //SPI_CLK2=0if((dat&0x80)!=0) IOSET = SPI_DA TA2;else IOCLR = SPI_DA TA2;dat<<=1;IOSET = SPI_CLK2; //SPI_CLK2=1}IOSET = SPI_CS2; //SPI_CS2=1,输出显示数据}/**************************************************************************** * 名称:get_key()* 功能:按下按键取数值* 入口参数:无* 出口参数:键值* 说明:高位数据先发送****************************************************************************/uint8 get_key(void){uint8 key_value=16,i,j;uint8 k1[8]={0,1,2,3,4,5,6,7};uint8 k2[8]={8,9,10,11,12,13,14,15};const uint8 DISP_TAB2[8] = {0xFE,0xFD,0xFB,0xF7,0xEF,0xDF,0xBF,0x7F};for(i=0;i<8;i++){HC595_SendDat2(DISP_TAB2[i]); //扫描if((IOPIN&KEY1)==0){ DelayNS(10);if((IOPIN&KEY1)==0){ while((IOPIN&KEY1)==0);key_value=k1[i];break;}}}{for(j=0;j<8;j++){HC595_SendDat2(DISP_TAB2[j]); //扫描if((IOPIN&KEY2)==0){ DelayNS(10);if((IOPIN&KEY2)==0){while((IOPIN&KEY2)==0);key_value=k2[j];break;}}}}return key_value;}。

键盘录入数据的转换与显示

键盘录入数据的转换与显示

目录键盘录入数据的转换与显示 01设计任务及要求分析 01.1设计任务 01.2要求分析 02方案比较及认证说明 (1)3系统原理阐述 (2)3.1系统设计的软硬件环境 (2)3.2系统设计中用到的DOS调用 (2)4软件设计说明 (5)4.1 ASCII码转换成二进制算法实现 (5)4.2二进制转换成ASCII码算法实现 (5)4.3主程序结构分析 (5)4.4子程序结构分析 (7)4.5中断程序的结构分析 (8)5调试记录及结果分析 (9)5.1调试记录 (9)5.2调试结果分析 (9)总结和心得体会 (10)参考文献 (11)附录一源程序和程序注释 (12)附录二程序运行结果截图 (15)附录三本科生课程设计成绩评定表 (15)键盘录入数据的转换与显示1设计任务及要求分析1.1设计任务从键盘读入二个五位十进制数(1位符号位+4位数值位),并将这二个十进制数,分别转换为二进制数,然后求其和,再将和以十进制形式进行显示。

按Q退出程序。

1.2要求分析通过对课程设计任务书的要求进行分析可知,首先要求从键盘读入二个五位十进制数(1位符号位(+-)+4位数值位),此时,向计算机中输入的数是其实是ASCII2码,而不是真正的二进制数,应该先将这两个分别输入的数在计算机中将其转化为计算机所能识别的机器语言即二进制,然后,通过相应的指令使这两转化过的二进制数相加,当然这个时候,并不能直接输出,因为此时的数是二进制数,不是ASCII2码,只有先转化成ASCII2码之后才能把这两个数之和以其对应的字符的形式输出到屏幕上。

以上就是本次课设的要求所对应的具体含义。

2方案比较及认证说明输入输出方式的比较。

方案一:BIOS功能调用方式输入输出数据。

此方案使用相对复杂一些,而其我们对BIOS 功能调用不是很熟悉。

方案二:MSDOS功能调用的方式输入输出数据。

此方案相对方案一较为简单实用,但是由于我们平时接触较少所以也不太熟悉。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

课程设计报告书
课程名称微机原理及应用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。

相关文档
最新文档