微机原理实验报告(数码显示)
- 格式:doc
- 大小:432.50 KB
- 文档页数:9
广东工业大学实验报告信息工程学院通信工程专业班成绩评定_______ 学号姓名(合作者_ _号____) 教师签名实验3题目显示程序设计实验第9 周星期二第5-8节显示程序实验设计1一.实验目的1,学习显示器I/O程序设计方法;2,了解系统功能中断的设计方法;3,了解键盘光标键是如何公职;二.实验内容和要求1,用键盘上的上下左右键控制光标的移动.2,按行号*列号的形式给方块字符(ACS2码为0BDH)在屏幕上定位,按上下左右光标键使光标在屏幕上移动,光标的移动由方块字符组成的图形而在屏幕上保留下轨迹.三.实验主要仪器设备和材料计算机四.实验方法,步骤及结构测试1,源程序如下:TITLE DRA W---Program to draw on screen withread_c equ 0key_rom equ 16hup equ 48hdown equ 50hright equ 4dhlift equ 4bhblock equ 0dbhesc1 equ 1bhvideo segment at 0b800h ;define extra segwd_buff label wordv_buff db 25*80*2 dup(?)video endspro_nam segment ;define code segmentMain proc farAssume cs:pro_nam,es:videoStart:push ds ;set up stack for returnsub ax,axpush axmov ax,videomov es,axmov cx,80*25 ;clear screen by writing zeros to it mov bx,0Clear:mov es:[wd_buff+bx],0700hinc bxinc bxLoop clearmov ch,12d ;set screen pointer to center of screenmov cl,40dGet_char:mov ah,read_cint key_romcmp al,esc1jz exitmov al,ahcmp al,upjnz not_updec chNot_up:cmp al,downjnz not_downinc chNot_down:cmp al,rightjnz not_rightinc clNot_right:cmp al,liftjnz lite_itdec clLite_it:mov al,160dmul chmov bl,clrol bl,1mov bh,0add bx,axmov al,blockmov es:[v_buff+bx],aljmp get_charExit:retMain endpPro_nam endsEnd start五,实验报告要求1,显示器是如何定义窗口的大小的?显示器根据数据显示的单元数,v_buff d b 25*80*2 dup(?)定义窗口大小的.2,在文本方式下,什么是属性值?block equ 0dbh是定义的属性值,v_buff+bx+1,是放每个单元(一共25*80个)属性值的地方,即每个单元的高字节。
微机原理与接口技术实验报告实验名称:数码管显示数字的原理姓名:学号:专业班级:指导老师:实验日期:2012年11月一:实验目的掌握数码管显示数字的原理二:实验内容动态显示:按图23连接好电路,七段数码管段码连接不变,位码驱动输入端S1,S0接8255 C 口的PC1,PC0。
编程在两个数码管上显示“56”三:硬件电路四:源程序ioport equ 0d400h-0280h io8255a equ ioport+28ah io8255b equ ioport+28bh io8255c equ ioport+288h led db 3fh,06h,5bh,4fh,66h,6dh,7dh,07h,7fh,6f h ;段码buffer1 db 5,6 ;存放要显示的个位和十位bz dw ? ;位码data endscode segmentassume cs:code,ds:data start: mov ax,data mov ds,ax movdx,io8255b ;将8255设为A 口输出mov al,80hout dx,almov di,offset buffer1 ;设di 为显示缓冲区loop2: mov bh,02lll: mov byte ptr bz,bh push di dec di add di, bz movbl,[di] ;bl 为要显示的数pop dimov al,0mov dx,io8255a out dx,al mov bh,0mov si,offset led ;置led 数码表偏移地址为SIaddsi,bx ;求出对应的led数码mov al,byte ptr [si]movdx,io8255c ;自8255A 的口输出out dx,almov al,byte ptr bz ;使相应的数码管亮mov dx,io8255aout dx,almov cx,3000delay: loopdelay ;延时mov bh,byte ptr bzshr bh,1jnz lllmov dx,0ffhmov ah,06int 21hjeloop2 ;有键按下则退出mov dx,io8255amoval,0 ;关掉数码管显示out dx,almovah,4ch ;返回int 21hcode endsend start五:实验难点与重点实验台上的七段数码管为共阴型,段码采用同相驱动,输入端加高电平,选中的数码管亮,位码加反相驱动器,位码输入端高电平选中。
微机原理与接口技术实验报告实验题目:动态数码显示设计指导老师:朱铭琳班级:计算机科学与技术系1201班姓名:王丹(2012100141)2014年 12月3日实验十三动态数码显示设计一、实验目的1.掌握动态数码显示技术的设计方法。
2.掌握扫描在程序设计中的应用。
二、设计原理如图13.1所示,在单片机的P1端口接动态数码管的字形码笔段,在单片机的P2端口接动态数码管的数位选择端。
在单片机P3.0管脚处接一个开关,当开关连接高电平时,态数码管上显示“12345”字样;当开关连接低电平时,态数码管上显示“HELLO”字样。
三、参考电路图13.1 动态数码显示电路原理图四、电路硬件说明(1)在“单片机系统”区域中,把单片机的P1.0-P1.7端口连接到“动态数码显示”区域中的a-h端口上。
(2)在“单片机系统”区域中,把单片机的P2.0-P2.7端口通过8联拨动拨码开关JP1连接到“动态数码显示”区域中的S1-S8端口上。
(3)在“单片机系统”区域中,把单片机的P3.0端口通过8联拨动拨码开关JP2连接到拨动开关区域中的SW1端口上。
五、程序设计内容(1)动态扫描方法:动态接口采用各数码管循环轮流显示的方法,当循环显示频率较高时,利用人眼的暂留特性,看不出显示的闪烁现象,这种显示需要一个接口完成字形码的输出(字形选择),另一接口完成各数码管的轮流点亮(数位选择)。
(2)在进行数码显示的时候,要对显示单元开辟8个显示缓冲区,在每个显示缓冲区装有显示的不同数据即可。
(3)对于显示不同字形码的数据采用查表方法来完成。
六、程序流程图 (如图13.2所示)图13.2 动态数码显示程序流程图七、汇编源程序;;;;;;;;;;入口地址;;;;;;;;;;ORG 0000HLJMP STARTORG 0003HRETIORG 000BHRETIORG 0013HRETIORG 001BHRETIORG 0023HRETIORG 002BHRETI;;;;;;;;;;主程序入口;;;;;;;;;;ORG 0100H START: LCALL PANDUANLCALL XIANSHILJMP START;;;;;;;;;;判断开关的状态;;;;;;;;;;PANDUAN: JB P3.0,SWLCALL DELAY10MSJB P3.0,SWMOV DPTR,#TABLE2SJMP Q1SW: JNB P3.0,PANDUANMOV DPTR,#TABLE1 Q1: RET;;;;;;;;;;显示程序;;;;;;;;;;XIANSHI: MOV R0,#00HMOV R1,#7FH NEXT: MOV A,R0MOVC A,@A+DPTRMOV P0,AMOV A,R1MOV P2,ALCALL DELAYINC R0RR AMOV R1,ACJNE R1,#0FBH,NEXTRET;;;;;;;;;;10ms延时程序;;;;;;;;;;DELAY10MS: MOV R6,#20D1: MOV R7,#248DJNZ R7,$DJNZ R6,D1RET;;;;;;;;;;200ms延时程序;;;;;;;;;;DELAY: MOV R5,#20LOOP: LCALL DELAY10MSDJNZ R5,LOOPRET;;;;;;;;;;共阴字母码表;;;;;;;;;;TABLE1: DB 76H,79H,38H,38H,3FH;;;;;;;;;;共阴数码表;;;;;;;;;;;TABLE2: DB 06H,5BH,4FH,66H,6DH;;;;;;;;;;结束标志;;;;;;;;;;;;;END八、C语言源程序#include<AT89X51.H>unsigned char code table1[]={0x06,0x5b,0x4f,0x66,0x6d};unsigned char code table2[]={0x76,0x79,0x38,0x38,0x3f};void main(void){ unsigned char i,j,k,m;while(1){ j=0x7f;for(i=0;i<5;i++) //运行5次取出表中的5个数//{ if(P3_0==0) //如果开关为0,则显示12345// { P0=table1[i]; } //送P1口显示//else //如果开关为1,显示HELLO//{ P0=table2[i]; } //送P1口显示//P2=j; //显示码送入P2口//j=0x7f; //重赋初值//k=j>>(i+1); //右移i+1位//m=j<<(7-i); //左移7-i位//j=k|m;for(k=4;k>0;k--) //每隔一段时间显示一次//for(m=248;m>0;m--);}}}九、注意事项(1)程序中要注意共阴极数码管显示和共阳极数码管显示的区别,本程序在共阴极数码管显示时,要把单排针接插件J4中的跳线帽加到OE和VCC上。
微机原理课程设计必做题目设计报告题目数码管显示数码符号学院专业电气工程及其自动化成员杜丽佳指导教师摘要根据题目要求,利用8253、8255等硬件和8086 CPU总线接口,以汇编语言为载体,完成利用中断的数据控制输出的设计,实现将以开关的状态表示的二进制数作为输入,经过数据处理后,最终通过数码管加以显示的功能。
本报告主要完成以下工作:1)简要介绍本设计的前言和要求;2)详细介绍本设计的硬件组成3)详细介绍汇编程序的运行流程;4)介绍步骤和现象。
关键词:数据控制输出数码管显示中断第一章绪论1.1 前言微型计算机原理及接口技术是普通高等教育重要的专业课,是电气类专业的平台课程,具有很强的实践性。
在微机实践的过程中开展必做题,使同学们巩固课本上学到的知识,掌握硬件电路走线的基本方法和规范,软件设计的基本方法和规范,提升同学们的团队精神和动手能力,为把学生培养成为卓越工程师打下良好基础。
《数码管显示数码符号》即为此次微机实践必做题,借助微型计算机实验开发板,通过汇编语言完成用数码管显示通过8255芯片输入的数据的功能。
1.2 题目要求图1 微机系统接口电路七段码显示器采用8255A作为接口,8255A的A端口接八个开关,8255A 的B端口控制数码显示器的阳极(七段码显示器为共阴极接法),利用74LS138作为地址译码器,利用8253定时中断控制。
微机系统接口电路如图1所示。
8253的CNT0和CNT1用来产生方波信号,OUT1连接到8259A中断控制器的IRO2端,通过8259A向CPU请求中断,每一秒中断一次。
在中断服务程序中从A端口输入数据到AL中,如果AL的内容是0EH或0FH,则在数码管上显示“H”(七段码76H),否则将AL的内容加2后输出到数码管上。
(已知8259A中断屏蔽寄存器地址为21H,共阴极显示器的0`F的七段码分别为3FH、06H、5BH、4FH、66H、6DH、7DH、07H、7FH、67H、77H、7CH、39H、2EH、79H、71H、73H。
目录1.实验题目、目的、要求及内容 (2)2.设计过程 (3)2-1. A/D采集电压模块 (3)2-2.数码管显示电压模块 (4)2-3.D/A转换与电机控制模块 (8)3.附录 (9)3-1.系统硬件 (9)3-2.系统软件 (10)4.实习心得 (14)5.参考资料 (15)实验题目:数字电压表实验目的:通过本次实习,能够掌握各个芯片与8086的接口方法及工作原理,了解ADC0809转换器的性能、编程及8086采集数据的过程,了解数码管动态显示的原理,学会D/A转换的基本原理和D/A 转换芯片的性能和编程方法,学习各芯片在硬件电路中的连接,实现模数转换、数模转换、数码管显示等过程并最终完成整个数字电压表系统。
在实验中要熟悉对一般模拟、数字电路的实际设计过程,充分掌握对小型系统的设计能技巧,同时巩固以往的学习内容,达到灵活运用的能力。
实验要求:完成对系统硬件的设计,分析出各个芯片的地址及功能,并进行编程调试使硬件与软件相结合。
实验内容:(1)利用A/D转换器检测模拟电压(2)利用8255将检测的电压在数码管上显示(3)利用D/A转换器将电压输出,控制直流电动机的运行设计过程:1) A/D 采集电压模块硬件部分:CSEG SEGMENTASSUME CS:CSEGSTART:DO:MOV DX,9000H ;选择地址为9000H 的通道OUT DX,AL ;将AL 的内容在该通道中输出MOV CX,200 ;设置循环次数DELAY:DEC CXJNE DELAY ;延时IN AL,DX ;读入转换结果JMP DO ;无条件转向DO ,实现对电压值不断测量和转换 JMP $CSEG ENDSEND START2)数码管显示电压模块七段数码管的字型代码表如下表:位选通信号(0x002H)段码输出 (0x004H) 数据总线软件部分:①将A/D转换的数据按位分配DSGE SEGMENTWAN DB 0THA DB 0HUN DB 0TEN DB 0ONE DB 0DSGE ENDSCSEG SEGMENTASSUME CS:CSEG,DS:DSEGSTART:MOV AX,DSEGMOV DS,AXMOV BL,196MUL BLMOV DX,0MOV CX,10000DIV CXMOV WAN,AL ;取出万位数赋给WANMOV AX,DXMOV DX,0MOV CX,1000DIV CXMOV THA,AL ;取出千位数赋给THAMOV AX,DXMOV CL,100DIV CLMOV HUN,AL ;取出百位数赋给HUNMOV AL,AHMOV AH,0MOV CL,10DIV CLMOV TEN,AL;取出十位数赋给TENMOV ONE,AH ;取出个位数赋给ONE CSEG ENDSEND START②在数码管上显示数字DSEG SEGMENTDUAN DB 3FH,06H,5BH,4FH,66H,6DH ;设置段选WEI DB 20H,10H,08H,04H,02H,01H ;设置位选DSEG ENDSCSEG SEGMENTASSUME CS:CSEG,DS:DSEGSTART:MOV AX,DSEGMOV DS,AXDO:CALL XS ;调用子程序XSJMP DOXS PROCLEA SI,WEI ;将数据段WEI的首地址赋给SIMOV DX,8002H ; 将8002H赋给DXMOV AL,[SI] ;将地址SI里的内容赋给ALOUT DX,AL ; 第一个数的位选LEA DI,DUAN ;将数据段DUAN的首地址赋给DI MOV DX,8004H ;将8004H赋给DXMOV AX,[DI] ;将地址DI里的内容赋给AXOUT DX,AX ; 显示第一个数CALL DELAY ;调用延时子程序DELAYLEA SI,WEIMOV DX,8002HMOV AL,[SI+1]OUT DX,AL ;第二个数的位选LEA DI,DUANMOV DX,8004HMOV AL,[DI+1]OUT DX,AL ;显示第二个数CALL DELAYLEA SI,WEIMOV DX,8002HMOV AL,[SI+2]OUT DX,AL ;第三个数的位选LEA DI,DUANMOV DX,8004HMOV AL,[DI+2]OUT DX,AL ;显示第三个数CALL DELAYLEA SI,WEIMOV DX,8002HMOV AL,[SI+3]OUT DX,AL ;第四个数的位选LEA DI,DUANMOV DX,8004HMOV AL,[DI+3]OUT DX,AL ;显示第四个数CALL DELAYLEA SI,WEIMOV DX,8002HMOV AL,[SI+4]OUT DX,AL ;第五个数的位选LEA DI,DUANMOV DX,8004HMOV AX,[DI+4]OUT DX,AL ;显示第五个数CALL DELAYLEA SI,WEIMOV DX,8002HMOV AL,[SI+5]OUT DX,AL ;第六个数的位选LEA DI,DUANMOV DX,8004HMOV AL,[DI+5]OUT DX,AL ;显示第六个数CALL DELAYRETXS ENDPDELAY PROC ;延时子程序MOV BL,25NEXT1: MOV CX,10W10MS1:LOOP W10MS1DEC BLJNZ NEXT1RETDELAY ENDPCSEG ENDSEND START ;程序结束3)D/A转换与电机控制模块CS0软件部分:CSEG SEGMENTASSUME CS:CSEGSTART:MOV DX,0A000H ;选择通道口CALL DELAYOUT DX,AL ;在该通道输出模拟量DELAY PROC ;延时子程序MOV BL,25NEXT1: MOV CX,20W10MS1:LOOP W10MS1DEC BLJNZ NEXT1RETDELAY ENDPCSEG ENDSEND START;程序结束附录:1)系统硬件:2)系统软件:DSEG SEGMENTDUAN DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH,80H WEI DB 20H,10H,08H,04H,02H,01HWAN DB 0THA DB 0HUN DB 0TEN DB 0ONE DB 0 ;设置不同位DSEG ENDSSSEG SEGMENTZZ DB 10 DUP(0) ;设置堆栈保护段SSEG ENDSCSEG SEGMENTASSUME CS:CSEG,DS:DSEG,SS:SSEGSTART:MOV AX,DSEGMOV DS,AXDO:CALL AD ;调用子程序ADPUSH AX ;入栈保护CALL DA ;调用子程序DAPOP AX ;AX出栈CALL NUMBER ;调用子程序NUMBERCALL XS ;调用子程序XSJMP DOAD PROC ;A /D转换子程序MOV DX,9000HOUT DX,ALCALL DELAY1IN AL,DXRETAD ENDPDA PROC ; D/A转换子程序MOV DX,0A000HCALL DELAYOUT DX,ALRETDA ENDPNUMBER PROC ; 取出不同位的数值MOV BL,196MUL BLMOV DX,0MOV CX,10000DIV CXMOV WAN,ALMOV AX,DXMOV DX,0MOV CX,1000DIV CXMOV THA,ALMOV AX,DXMOV CL,100DIV CLMOV HUN,ALMOV AL,AHMOV AH,0MOV CL,10DIV CLMOV TEN,ALMOV ONE,AHRETNUMBER ENDPXS PROC ; 数码管显示子程序LEA SI,WEI ; 取位选偏移首地址给SIMOV DX,8002H ; 数码管位地址8002HMOV AL,[SI]OUT DX,AL ; 输出AL数据LEA DI,DUAN ; 取段选偏移首地址给DIMOV DX,8004H ; 数码管段地址8004HMOV BL,WANMOV BH,0 ; 将BX寄存器高位置零,低位取万位数据MOV AX,[DI+BX]OR AL,80H ; 将DI+BX地址所对应数据给AX,并与80H相或显示小数点OUT DX,AL ; 输出AL数据CALL DELAY ; 调用延时函数LEA SI,WEIMOV DX,8002HMOV AL,[SI+1]OUT DX,AL ;选取通道输出万位数的位选LEA DI,DUANMOV DX,8004HMOV AL,[DI+10]OUT DX,AL ;输出万位的数值CALL DELAYLEA SI,WEIMOV DX,8002HMOV AL,[SI+2]OUT DX,AL ;选取通道输出千位数的位选LEA DI,DUANMOV DX,8004HMOV BL,THAMOV BH,0MOV AL,[DI+BX]OUT DX,AL ;输出千位的数值CALL DELAYLEA SI,WEIMOV DX,8002HMOV AL,[SI+3]OUT DX,AL ;选取通道输出百位数的位选LEA DI,DUANMOV DX,8004HMOV BL,HUNMOV BH,0MOV AL,[DI+BX]OUT DX,AL ;输出百位的数值CALL DELAYLEA SI,WEIMOV DX,8002HMOV AL,[SI+4]OUT DX,AL ;选取通道输出十位数的位选LEA DI,DUANMOV DX,8004HMOV BL,TENMOV BH,0MOV AX,[DI+BX]OUT DX,AL ;输出十位的数值CALL DELAYLEA SI,WEIMOV DX,8002HMOV AL,[SI+5]OUT DX,AL ;选取通道输出个位数的位选LEA DI,DUANMOV DX,8004HMOV BL,ONEMOV BH,0MOV AL,[DI+BX]OUT DX,AL ;输出个位的数值CALL DELAYRETXS ENDPDELAY PROC ;延时子程序DELAYMOV BL,25NEXT1: MOV CX,20W10MS1:LOOP W10MS1DEC BLJNZ NEXT1RETDELAY ENDPDELAY1 PROC ;延时子程序DELAY1MOV BL,2NEXT2: MOV CX,5W10MS2:LOOP W10MS2DEC BLJNZ NEXT2RETDELAY1 ENDPCSEG ENDSEND START ;程序结束实习心得:在为期一周的实习过程中,我学到了许多书本上学不到的知识,本以为十分枯燥的设计过程却让我得到了很多乐趣,同时也让我懂得了团队合作的力量,为今后的进一步学习奠定了基础。
微机原理与接口技术实验报告实验三实验名称:数码管显示实验实验代码:代码一:数码管动态显示0-9;Io-8.asm;数码管显示示例程序1;动态显示0-9IOY0 EQU 3000H ;片选IOY0对应的端口始地址DA TA1 SEGMENT;定义数码管显示0-9的值NUM DB 0FCH,60H,0DAH,0F2H,66H,0B6H,0BEH,0E0H,0FEH,0F6H DA TA1 ENDSSTACK1 SEGMENT STACKDW 256 DUP(?)STACK1 ENDSCODE SEGMENTASSUME CS:CODE,DS:DATA1START:;载入数据段MOV AX,DATA1MOV DS,AXMOV DX,IOY0LEA SI,NUMMOV CX,10XOR AX,AXNEXT:MOV AL,[SI] ;低八位确定要显示的数值MOV AH,1FH ;高八位确定选择的数码管OUT DX,AX ;将值输出到外设CALL DALL YINC SI ;显示下一数值LOOP NEXTJMP STARTDALL Y PROC NEAR ;软件延时子程序PUSH CXPUSH AXMOV CX,0FFFHD1: MOV AX,0FFFFHD2: DEC AXJNZ D2LOOP D1POP AXPOP CXRETDALL Y ENDPCODE ENDSEND START运行结果:六位数码管动态显示0-9代码二:数码管动态显示0-99;数码管动态显示0-99IOY0 EQU 3000H ;片选IOY0对应的端口始地址DA TA1 SEGMENT;定义数码管显示0-9的值NUM DB 0FCH,60H,0DAH,0F2H,66H,0B6H,0BEH,0E0H,0FEH,0F6H DA TA1 ENDSSTACK1 SEGMENT STACKDW 256 DUP(?)STACK1 ENDSCODE SEGMENTASSUME CS:CODE,DS:DATA1START:;载入数据段MOV AX,DATA1MOV DX,IOY0LEA SI,NUMLEA DI,NUMMOV CX,10XOR AX,AXMOV CX,100MOV BX,0ADD DI,BXNEXT1:;---------SW----;MOV CX,10;----------GW-------;NEXT:PUSH CXMOV CX ,0FFHNEXT3:MOV AL,[SI] ;低八位确定要显示的数值MOV AH,2FH ;高八位确定选择的数码管OUT DX,AXCALL DALL YMOV AL,[DI]MOV AH,1FHOUT DX,AXCALL DALL YLOOP NEXT3INC SIPOP CX;JMP MYLOOP ;显示下一数值LOOP NEXTINC DILEA SI,NUMJMP NEXT1DALL Y PROC NEAR ;软件延时子程序PUSH CXMOV CX,0FFHD1: MOV AX,0FFFHD2: DEC AXJNZ D2LOOP D1POP AXPOP CXRETDALL Y ENDPCODE ENDSEND START运行结果:数码管后两位动态显示0-99。
微机原理实验报告一、实验目的本实验旨在通过实际操控和操作微型计算机,深入了解微机系统的组成和工作原理,加深对计算机硬件结构以及基本操作的理解,培养实际动手能力。
二、实验内容1.熟悉微机系统组成部分:主机、显示器、键盘等。
2.掌握微机系统的基本操作:开机、关机、复位、重启等。
3.了解微机系统的工作原理:运行机制、输入输出等。
4.实践运用微机系统进行一些简单的应用操作。
三、实验步骤1.开机操作:按下主机电源按钮,等待主机启动。
2.系统自检:主机启动后会进行自检操作,检查硬件是否正常。
如果发现问题,主机会发出蜂鸣声。
3.输入输出设备准备:连接好显示器和键盘,并检查是否正常连接。
4.系统登录:按照屏幕上的提示,输入用户名和密码进行系统登录。
5.系统操作:根据实验要求,进行相应的系统操作。
6.关机操作:在操作完成后,选择关机选项进行关机。
四、实验结果与分析通过本次实验,我掌握了微机系统的基本操作,并对其工作原理有了更深入的了解。
通过实际操作,我可以熟练地开机、关机、复位等操作,并可以进行一些简单的应用操作。
同时,我也了解到了微机系统由主机、显示器、键盘等多个组成部分组成,不同组成部分的协作工作实现了系统的正常运行。
五、实验心得通过本次实验,我对微机系统的组成和工作原理有了更深入的了解。
这对我后续学习计算机原理和操作系统提供了基础。
在实验过程中,我也发现了一些问题,比如操作系统选择界面的选择问题,我没有选择正确的操作系统,导致后续实验操作遇到一些困难。
这些问题提醒我在实际操作中需要格外注意,仔细阅读提示并选择正确的操作选项。
总结来说,本次实验对我深入理解微机系统的组成和工作原理提供了良好的机会。
通过实际操控和操作微型计算机,我对计算机硬件结构以及基本操作有了更直观的认识,掌握了一些基本操作技能。
在未来的学习和应用中,我将更加注重细节,提高自己的操作技能,并不断深入学习和了解更多关于微机系统的知识。
实验9键盘扫描及显示实验
实验时间2019年12月18日
实验类型■验证性□设计性□综合性
1.实验目的
了解键盘扫描及数码显示的基本原理,熟悉8255的编程。
2.实验内容及过程(主要内容、操作步骤)
将8255单元与键盘及数码管显示单元连接,编写实验程序,扫描键盘输入,并将扫描结果送数码管显示。
键盘采用4X4键盘,每个数码管显示值可为0~F 共16个数。
实验具体内容如下:将键盘进行编号,记作0~F,当按下其中-一个按键时,将该按键对应的编号在一个数码管上显示出来,当再按下一个按键时,便将这个按键的编号在下一个数码管上显示出来,数码管上可以显示最近4次按下的按键编号。
3.测试数据及实验结果
4.实验分析及总结(主要考察内容)
通过本次实验,我理解了键盘扫描及数码显示的基本原理,通过理解分析程序,自己对程序进行了一些总结和修改,并进行了验证,进一步掌握了微机接口的学习方法。
教师评阅
评价指标:实验目的、操作步骤、设计、算法、程序结构、实验结果、实验分析、实验总结
1/ 1。
数码显示电路实验报告实验名称:数码显示电路实验目的:学习和掌握数码显示电路的基本原理和实现方法。
实验原理:数码显示电路是将数字信号转换为数字显示的电路。
主要组成部分包括数码管、编码器、驱动电路等。
数码管是一种数字显示器件,可以将数字信号转换为数字显示。
常用的数码管有共阳数码管和共阴数码管两种。
共阳数码管是在阳极加电的情况下,通过在不同的阴极上加电,实现所需数字的显示;共阴数码管则是在阴极加电的情况下,通过在不同的阳极上加电,实现数字的显示。
编码器用来将数字信号转换为数码管所需的控制信号。
常用的编码器有BCD编码器和二进制编码器。
BCD编码器将数字信号转换为BCD码,即4位二进制码,以控制数码管的阴阳极的开关;二进制编码器则是将数字信号转换为二进制码,以控制数码管不同的选通。
驱动电路用来提供数码管所需的电流,以实现数字的显示。
常用的驱动电路有共阴极驱动和共阳极驱动两种。
共阴极驱动是将阴极接地,通过在不同的阳极上加电,实现数字的显示;共阳极驱动则是将阳极接地,通过在不同的阴极上加电,实现数字的显示。
实验器材:数字万用表、信号发生器、BCD编码器、共阳数码管/共阴数码管、电阻、电容、运放等。
实验步骤:1. 根据实验所需,选择合适的数码管、编码器和驱动电路,组成数码显示电路。
2. 连接电路,接通电源。
3. 发送数字信号,观察数码管的显示效果。
4. 尝试不同的数字信号,观察数码管的不同显示效果。
实验结果:通过实验,我们成功搭建了数码显示电路,并实现了数字信号的数字显示。
总结与分析:数码显示电路是数字电路中的基础电路之一,也是实际工程中常用的电路之一。
通过本次实验,我们深入了解了数码显示电路的基本原理和实现方法,并成功实现数字信号的数字显示。
在实际工程中,数码显示电路经常用来显示各种测量值、计数值等,具有广泛的应用前景。
实验三七段数码管一、实验目的:进一步熟悉8255,掌握数码管显示数字的原理二、实验原理:1、实验台上的七段数码管为共阴型,段码采用同相驱动,输入端加高电平,选中的数码管亮,位码加反相驱动器,位码输入端高电平选中。
2、七段数码管的字形码:3、在实验2中加入键盘是否有输入判断,如有则去读取键盘输入数据,并加入提示信息,比如“输入十位数”,“输入个位数”,从键盘读入的数据放入十位和个位数据定义区,取代要显示的数据。
4、只需要添加两位变量作为缓存,一个记录键盘输入的值,一个记录循环减1的结果,将其通过数码管显示出来,减至0时重载键盘输入的值。
三、实验步骤:静态显示:将8255的A口PA0~PA6分别与气短数码管的段码驱动输入端A~G相连,位码驱动输入端S1接+5V(选中),S0、DP接地(关闭)。
动态显示:七段数码管段码不变,位码驱动输入端S1,S0接8255 C口的PC1,PC0。
8253的接法参考第二次实验的接法,CLK0接入1MHz,CLK1接8255的PC7。
1、在两个数码管上显示两位数字,要求延时应用8253硬件延时2、可以改变数码管显示数字,从键盘读入两位数字,并在数码管显示出来。
3、对输入数据进行倒计时计数,时间显示在数码管上,计到0重新开始。
五、实验结果:实验结果如预期一致,可以键盘输入倒计时的值,时间显示在数码管上,计数到0重新计数。
六、程序代码:;******************************************;* 数码管显示对键盘输入数据进行倒计时计数 *;******************************************data segmentio8255a equ 288hio8255c equ 28ahio8255_mode equ 28bhio8253a equ 280hio8253b equ 281hio8253c equ 282hmesg1 db 0dh,0ah,'Input a num (00--99) for high position,other key is exit:',0dh,0ah,'$'mesg2 db 0dh,0ah,'Input a num (00--99) for low position,other key is exit:',0dh,0ah,'$'led db 3fh,06h,5bh,4fh,66h,6dh,7dh,07h,7fh,6fh; 段码buffer db ?,?; 存放要显示的个位和十位buffer1 db ?,?; 存放临时的个位和十位用于减一bz dw ? ; 位码data endscode segmentassume cs:code,ds:datastart:mov ax,datamov ds,axmov dx,io8255_mode ;将8255的A口为输出mov ax,88hout dx,almov dx,offset mesg1 ;显示提示信息mov ah,09hint 21hmov ah,01 ;从键盘接收十位字符int 21hcmp al,'0' ;是否小于0jl exit ;若是则退出cmp al,'9' ;是否大于9jg exit ;若是则退出sub al,30hmov buffer,al ;将输入的十位数存入指定地址mov dx,offset mesg2 ;显示提示信息mov ah,09hint 21hmov ah,01hint 21hcmp al,'0' ;判断方法同十位jl exitcmp al,'9'jg exitsub al,30hmov buffer+1,al ;将输入的个位数存入指定地址jmp resetexit:mov ah,4ch ;返回int 21hreset:mov al,buffermov buffer1,almov al,buffer+1mov buffer1+1,almov di,offset buffer1 ;取得显示缓冲区的地址loop1:call timeloop2:mov bh,02h ;数码管循环显示部分lll:mov byte ptr bz,bhpush didec diadd di, bzmov bl,[di] ;bl为要显示的数pop dimov al,0mov dx,io8255cout dx,almov bh,0mov si,offset led ;置led数码表偏移地址为SI add si,bx ;求出对应的led数码mov al,byte ptr [si]mov dx,io8255a ;自8255A的口输出out dx,almov al,byte ptr bz ;使相应的数码管亮mov dx,io8255cout dx,almov cx,3000delay:loop delay ;延时mov bh,byte ptr bzshr bh,1jnz lllmov dx,io8255cin al,dxtest al,80hjnz setjmp loop2set:test buffer1+1,0fhjz set1dec buffer1+1jmp loop1set1:test buffer1,0fhjz resetdec buffer1mov buffer1+1,09hjmp loop1time proc near ;定时一秒的子程序mov dx,io8253c ;向8253写控制字mov al,37h ;使0通道为工作方式3 out dx,almov ax,1000h ;循环计数初值1000mov dx,io8253aout dx,al ;先写低字节mov al,ahout dx,al ;后写高字节mov dx,io8253cmov al,71h ;设8253通道1工作方式0 out dx,almov ax,1000h ;循环计数初值1000mov dx,io8253bout dx,al ;先写低字节mov al,ahout dx,al ;后写高字节rettime endpcode endsend start七、实验总结:本次实验需要结合上次实验的知识,应用8253硬件延时,因此增加了些许难度,代码的修改也不少。
广东海洋大学寸金学院学生实验报告书实验名称数码显示课程名称微机原理与接口技术系机电工程系专业机械设计制造及其自动化班级14机械2班学生姓名陈瑞玲学号20141032102 实验地点实验楼103 实验日期一、实验目的:了解LED数码管动态显示的工作原理及编程方法。
二、实验内容:编制程序,使数码管显示“GOOD88”字样。
三、实验结果:实验程序框图实验步骤联机模式:(1)在PC机和实验系统联机状态下,运行该实验程序,可用鼠标左键单击菜单栏“文件”或工具栏“打开图标”,弹出“打开文件”的对话框,然后打开598K8ASM文件夹,点击S6.ASM文件,单击“确定”即可装入源文件,再单击工具栏中编译装载,即可完成源文件自动编译、装载目标代码功能,再单击“调试”中“连续运行”或工具图标运行,即开始运行程序。
(2)数码管显示“GOOD88”字样。
脱机模式:1、在P.态下,按SCAL键,输入2DF0,按EXEC键。
2、数码管显示“GOOD88”字样。
实验程序清单CODE SEGMENT ;S6.ASM display "GOOD88"ASSUME CS:CODEORG 2DF0HSTART: JMP START0PA EQU 0FF20H ;字位口PB EQU 0FF21H ;字形口PC EQU 0FF22H ;键入口BUF DB ?,?,?,?,?,?data1:db0c0h,0f9h,0a4h,0b0h,99h,92h,82h,0f8h,80h,90h,88h,83h,0c6h,0a1hdb 86h,8eh,0ffh,0ch,89h,0deh,0c7h,8ch,0f3h,0bfh,8FH,0F0HSTART0: CALL BUF1 ;缓冲区写初值CON1: CALL DISP ;调显示子程序JMP CON1 ;循环DISP: MOV AL,0FFH ; 位码MOV DX,PA ;数码管字位口OUT DX,AL ;关位码MOV CL,0DFH ; 最高位位码;显示子程序 ,5msMOV BX,OFFSET BUF ;取缓冲区首址DIS1: MOV AL,[BX] ;取缓冲区数字MOV AH,00H ;清零PUSH BX ;压栈MOV BX,OFFSET DATA1 ;字表首址ADD BX,AX ;加偏移量MOV AL,[BX] ;取字形代码POP BX ;出栈MOV DX,PB ;字形口OUT DX,AL ;送字形码MOV AL,CL ;取位码MOV DX,PA ;位口OUT DX,AL ;送位口PUSH CX ;压栈DIS2: MOV CX,00A0H ;点亮延时LOOP $POP CX ;出栈成绩指导教师日期第页,共页。
2017级《微机原理与接口技术》实验报告学院信息学院专业班级2017级自动化姓名学号指导教师2019年4月实验4 数码管显示一、实验目的1、掌握数码管显示技术。
2、学会使用keil集成调试软件编写程序,掌握实验的步骤并能得到正确的实验结果。
二、实验内容1、基本部分(1)采用静态显示的方法在一位数码管上显示“0”;(2)采用静态显示的方法在一位数码管上循环显示“0123456789”,变换间隔为1秒;(3)采用动态显示的方法在八位数码管上显示“01234567”2、提高部分编程序用LED数码管实现00-59简易秒表。
三、实验步骤1、采用静态显示的方法在一位数码管上显示“0”;(1)硬件连接:用一根8P的数据线将单片机的P0/P1/P3(学号后两位除3的余数)和开发板右上角的JP3连接;2、采用静态显示的方法在一位数码管上循环显示“0123456789”,变换间隔为2S;硬件连接:用一根8P的数据线将单片机的P0/P1/P3(学号后两位除3的余数)和开发板右上角的JP3连接。
3、采用动态显示的方法在八位数码管上显示“01234567”(1)硬件连接:用一根8P的数据线将单片机的P0和开发板点阵右面的J12连接;P2.2接J6的A,P2.3接J6的B,P2.4接J6的C4、提高部分编程序用LED数码管实现00-59简易秒表。
四、实验结果——源代码内容1:#include<reg51.h>void main(){P0=0xc0;while(1);}内容2:#include <reg51.h>unsigned char led[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90}; void delay(){ unsigned int i;for(i=0;i<20;i++){ TL1=0xb0;TH1=0x3c;while(!TF1);TF1=0;}}void main(){unsigned char i;TMOD=0x10;TL1=0xb0;TH1=0x3c;TR1=1;while(1)for(i=0;i<10;i++){P3=led[i];delay();}}内容3:#include<reg52.h>#define uint unsigned int#define uchar unsigned charsbit LSA=P2^2;sbit LSB=P2^3;sbit LSC=P2^4;uchar code led[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07};void delay(uint i){while(i--);}void DigDisplay(){uchar i;for(i=0;i<8;i++){switch(i){case(0):LSA=0;LSB=0;LSC=0; break;case(1):LSA=1;LSB=0;LSC=0; break;case(2):LSA=0;LSB=1;LSC=0; break;case(3):LSA=1;LSB=1;LSC=0; break;case(4):LSA=0;LSB=0;LSC=1; break;case(5):LSA=1;LSB=0;LSC=1; break;case(6):LSA=0;LSB=1;LSC=1; break;case(7):LSA=1;LSB=1;LSC=1; break;}P1=led[i];delay(100);P1=0x00;}}void main(){while(1){DigDisplay();}}内容4:#include <reg51.h> unsigned char msec=0,sec=0; void delay(unsigned char i) { unsigned char j,k;for(k=0;k<i;k++)for(j=0;j<255;j++); }void T0_INT(void) interrupt 1 { TH0=0x3c;TL0=0xb0;msec++;if(msec==20){ msec=0;sec++;if(sec==60)sec=0;}}void main(){unsigned char led[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};TMOD=0x01;TH0=0x3c;TL0=0xb0;EA=1;ET0=1;TR0=1;while(1){ P2=0x01;P1=led[sec%10];delay(10);P2=0x02;P1=led[sec/10];delay(10);}}五、实验体会——结果分析本次实验需要使用数码管,软件编写时还需要使用到中断与定时,每一次实验的内容都要求用到前几节课学到的知识,这样会帮助我巩固学习到的内容。
微机原理实验四LED数码管显示实验LED数码管显示实验是微机原理中的一项重要实验,通过该实验可以学习到数码管的工作原理以及如何通过控制数字信号来实现数字的显示。
本文将详细介绍实验所需材料和步骤,并解析实验原理。
一、实验材料1.STM32F407开发板2.数码管模块3.面包板4.连接线5.杜邦线二、实验原理数码管是一种能够显示数字的装置,它由七个发光二极管组成,分别代表数字0-9、通过控制这七个发光二极管的亮灭,可以显示出不同的数字。
在实验中,我们使用STM32F407开发板来控制数码管。
数码管模块通过引脚与STM32F407开发板进行连接,其中共阴数码管的引脚与开发板的GPIO引脚相连,通过控制GPIO引脚的高低电平来控制数码管的亮灭。
三、实验步骤1.在面包板上连接数码管模块。
将数码管模块的引脚与STM32F407开发板的相应引脚通过杜邦线连接。
具体连接方式可以参考数码管模块和开发板的引脚定义。
2. 打开STM32CubeMX软件,创建一个新工程。
选择适合的开发板型号,并进行引脚配置。
将引脚配置为通用输出模式,并将相应的引脚定义为控制数码管的引脚。
3. 在生成的代码中找到main.c文件,在其中添加控制数码管的代码。
首先需要引入相应的头文件,并定义控制数码管的引脚宏定义。
4. 在main函数中,初始化控制数码管的引脚为输出模式。
然后通过控制引脚的高低电平来实现数码管的亮灭。
四、实验结果与分析经过以上步骤,我们成功控制了数码管的显示。
数码管显示的数字由控制引脚的高低电平确定,通过改变控制引脚的电平可以实现不同的数字显示。
值得注意的是,数码管的亮灭是通过切换引脚的电平来实现的,当引脚为高电平时,数码管熄灭;反之,当引脚为低电平时,数码管亮起。
在实际应用中,可以通过编写代码来改变控制引脚的电平,从而实现字母、字符、动画等更加复杂的显示效果。
五、实验总结本次实验通过控制STM32F407开发板的GPIO引脚,成功实现了LED数码管的显示。
微机原理键盘控制与显⽰实验报告专业:电⽓⼯程及其⾃动化姓名: _________实验报告学号: _______⽇期: ___ _____地点: ____ ________课程名称: ________微机原理(实验)___________指导⽼师: ____徐习东 _______成绩:__________________实验名称: ______ 键盘控制与显⽰_______实验类型: _____软件实验 ______同组学⽣姓名:__________⼀、实验⽬的和要求(必填)⼆、实验内容和原理(必填)三、主要仪器设备(必填)四、操作⽅法和实验步骤五、实验数据记录和处理六、实验结果与分析(必填)七、讨论、⼼得【实验⽬的】1.通过实验掌握 TMS320F2812 通⽤输⼊ / 输出管脚直接控制外围设备的⽅法2.了解发光⼆极管的控制编程⽅法。
3.了解 SPI 的使⽤。
4.了解如何使⽤ GpioA ⼝进⾏数据的锁存5.通过实验掌握 TMS320F2812 的扩展端⼝接收外围设备信息的⽅法6.了解键盘的使⽤原理及编程⽅法【实验内容】1.按键显⽰程序,对按键记录次数,以⼆进制显⽰在16 个 LED 上。
2.定时器编程,并⽤按键控制各位时分秒,使其能完成加减操作【实验仪器】TMS320F2812数字信号处理器与学⽣⽤集成板。
【实验步骤】1.撰写代码2.调试代码3.实现功能【实验代码】⼀、定时器①宏定义和全局变量定义然后同时定义了全局变量,包括时、分、分析:这段代码是初始宏定义,⽤于定义按键对应的编码与地址,秒,按键编码, LED 编码和控制位。
②共阳字形码分析:由于这次实验要⽤到数码管,所以我们要定义⼀个数码管共阳端字形码,使每⼀个代码对应⼀种显③SPI 初始化⼦程序分析:这⼀段是本次实验的重点,就是SPI 初始化。
1 )SPICCR :⽤于控制SPI 的状态,上下降沿发送,还有⼏位的数据。
其中第7 位,即 SPICCR.6 是控制SPI 在上下沿发送, 1 代表下降沿,2 代表上升沿;第8 位,即 SPICCR.7 是控制复位的,0 代表为复位状态;低 4 位控制数据长度,长度等于n+1 。
微机原理实验报告引言微机原理实验是计算机科学与技术专业的一个重要实验环节,通过实践操作,学生们可以深入理解计算机硬件的基本结构和工作原理。
本篇实验报告将从实验目的、实验装置、实验步骤、实验结果以及实验心得等几个方面进行论述。
一、实验目的本次实验的主要目的是通过搭建微机系统的硬件结构,深入理解计算机的各个部件之间的连接和协作关系。
具体包括以下几个方面的内容:1. 了解微机系统的基本构成和原理。
2. 熟悉微机系统的硬件调试和工作方式。
3. 掌握基本的计算机组成与结构知识。
二、实验装置本次实验所用的装置主要包括以下硬件设备:1. 主板:包括主处理器和内存等一系列组件。
2. 显示器:用于显示计算机的输出结果。
3. 键盘和鼠标:用户与计算机进行交互的输入设备。
三、实验步骤1. 将主板与电源连接,确保供电正常。
2. 将显示器连接至主板的显卡接口,确保显示器正常亮起。
3. 将键盘和鼠标分别插入主板的相应接口,以实现输入功能。
4. 按下电源键启动计算机,观察主板灯光是否亮起,表示主板运行正常。
5. 在显示器上观察到系统自检信息,并等待操作系统加载完成。
6. 通过鼠标点击或键盘输入进行一系列操作,例如打开软件、编辑文档等。
7. 在完成操作后,正常关闭计算机,断开与主板的连接。
四、实验结果通过以上实验步骤,我们成功搭建了一个微机系统,并成功运行了操作系统。
在实验过程中,主板灯光亮起,显示器正常工作,并且可以通过键盘和鼠标进行各类操作。
我们能够在显示器上看到系统自检的信息,并且顺利加载了操作系统。
通过鼠标和键盘,我们还成功打开了一些应用程序进行操作。
实验结果令人满意。
五、实验心得通过本次实验,我们进一步深化了对微机原理的理解。
通过亲自搭建微机系统,我们更加直观地感受到了计算机硬件的工作原理和各个部件之间的联系。
实验过程中也让我们意识到了计算机的脆弱性和重要性,需要我们在使用时进行细心操作并及时维护。
通过这次实验,我们不仅增加了实践经验,还加深了对计算机原理的理论理解。
微机原理实验报告一、设计任务:以微机原理所学的8086微处理器为核心,利用Proteus仿真软件,设计一个关于计算器的仿真电路并编写汇编代码。
根据8086的结构和其寻址方式、输入输出、I/O口读写等技术,使用汇编语言的基本语法、伪指令,结合Proteus软件SAMPLES中8086 Demo Board示例的理解分析,自行设计。
二、需求分析:(1)用8086作为核心处理器;(2)用8255芯片连接主机与外设;(3)用74273锁存器对数据进行锁存;(4)用数码管显示器来显示输入的数字以及输出的结果;(5)由于需要输入数字及运算符所以要用到键盘;(6)用蜂鸣器在按下按键的同时发出声响;(7)连接整个电路要用到导线以及总线将相应的引脚相连接。
三、总体方案(选择与论证)1.方案的选择:基于技术成熟的Proteus软件,以Proteus软件SAMPLES中8086 Demo Board示例为蓝本并充分分析理解,在此基础上提出自己的设计方案。
将例子中电路结构优化精简,舍弃不必要的芯片,并用汇编来实现全部功能。
即计算器能够进行4位数的加、减、乘、除运算。
在此基础上,为使设计的计算器更具有实用性,我们通过循环调用的方式加入了对幂运算的功能。
与此同时,为优化人机界面,使计算器更为美观和实用,我们加入软件自带的封装好的矩阵键盘和蜂鸣器。
这就使得整个设计更加紧凑。
蜂鸣器实现了每按下一次按键就发出一次声响的功能以使按键检测更加直观,实际的计算器无差别。
此计算器拥有计数的功能,分自动计数和手动计数两种。
自动计数即为一个简单的计时器,用户可按需要定时,当到预定时间时,计算器会发声音提示用户。
手动计数有加1和减1两种,当用户需要计数等场合中尤为适用。
2.方案的论证:8086通过74273锁存器与8255A相连,使8086能够读外部数据和给外部芯片写数据。
8255A的A口设置为输出,B口和C口设置为输入,将8255A分别和4*5矩阵、数码管、蜂鸣器相连接。
微机原理实验报告(3)一、实验名称七段数码显示二、实验目的掌握接口芯片的编址方法,掌握8255的初始化设置,及数码管显示原理,掌握段控及位控的概念。
三、实验内容连接地址译码器与8255的连线及8255与数码管的连线;在数据段中存放0到9的字型码;从微机键盘键入2个数字的ASCII码,在输入过程中检查如非数字则重新输入;然后将输入的ASCII码变成相应的数字,再利用换码指令XLAT查表得到相应的字型码;将字型码送到8255输出口所接的数码管上显示。
四、程序流程图:(见末页)五、实验结论:符合预期,输入2个数字,七段数码管显示这两个数字。
六、实验心得七段数码显示作为第一次硬件实验,虽然程序不难,但是在实验过程中还是遇到了不少这样或者那样的问题。
主要问题还是集中在硬件方面。
程序方面,上机之前我已经完成了程序的编写,在实验室用了大概20分钟进行了调试,消除了7个编程中的错误。
但是进行编译运行后,数码管始终无法显示正确的数字。
在确定程序无误后,我只能逐一排查运行失败的原因。
我首先检查了硬件连线,并且将优盘从主机上拔下,将影响因素尽量消除,但是仍然无法得到正确的结果。
接着我换来了已经完成实验的同学的实验箱,重新编译运行,数码管依旧无法正确显示。
最后不得已,我又换了一台电脑,编译运行同样的程序用同一个实验箱,终于获得了正确的结果。
实验后我思考了一下问什么会出现这种问题,我觉得可能是用于计算机与实验箱相连的扁平接线有问题才导致数码管始终无法正常工作。
这次实验过后,对于微机原理知识来说我并没有太多的收获,毕竟做到第三次实验,编写程序和软件的应用都已经轻车熟路了。
但是通过遇到上述的这个问题,我在分析问题、解决问题方面的能力有所提高。
这就是我这次最大的收获。
七、实验程序:INPORTA EQU 0EF00H-280H+288HINPORTB EQU 0EF00H-280H+289HINPORTC EQU 0EF00H-280H+28AHINPORTCRL EQU 0EF00H-280H+28BHSTACK SEGMENT STACKDW 100 DUP(?)STACK ENDSDATA SEGMENTFIGURE DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH X DB 2 DUP(?)STRING DB 'PLEASE ENTER TWO NUMBERS:' , 0DH, 0AH, '$' DATA ENDSCODE SEGMENTASSUME CS:CODE, SS:STACK, DS:DATAMAIN PROCMOV AX,DATAMOV DS,AXMOV SI, OFFSET XMOV DX, OFFSET STRINGMOV AH, 9INT 21HCALL KEYINAND DL, 0FHMOV [SI], DLINC SICALL KEYINAND DL, 0FHMOV [SI], DLMOV DX, INPORTCRLMOV AL, 10000010BOUT DX, ALMOV BX, OFFSET FIGURENEXT1: MOV DX, INPORTAMOV SI, OFFSET XMOV AL, [SI+1]XLATOUT DX, ALMOV DX, INPORTCMOV AL, 01B; PC1=0,PC0=1OUT DX, ALCALL DELAYMOV DX, INPORTAMOV SI, OFFSET XMOV AL, [SI]XLATOUT DX, ALMOV DX, INPORTCMOV AL, 10B; PC1=1,PC0=0OUT DX, ALCALL DELAYMOV DL,0FFHMOV AH,6INT 21HJZ NEXT1MOV AH,4CHINT 21HMAIN ENDPKEYIN PROCAGAIN: MOV AH, 8INT 21HCMP AL, 30HJB AGAINCMP AL, 39HJA AGAINMOV DL, ALMOV AH, 2INT 21HRETKEYIN ENDPDELAY PROCPUSH BXPUSH CXMOV BX,100MOV CX,0NEXT2:LOOP NEXT2DEC BXJNZ NEXT2POP CXPOP BXRETDELAY ENDPCODE ENDSEND MAIN流程图:开始将数码管的字型码存入数据段从键盘输入2个数字输入数字存入数据段N设置8255控制字Y取数据段取个位数字偏移地址送入AL 寄存器设置8255A 口工作方式:将字型码输出至A 口利用XLAT 指令查得该数字所对应的字型码判断输入是否为2个数字Y初始化设置8255C 口工作方式:使PC1置0,PC0置1调用延时子程序取数据段取十位数字偏移地址送入AL 寄存器设置8255A 口工作方式:将字型码输出至A 口设置8255C 口工作方式:使PC1置1,PC0置0 检查是否有键按下调用延时子程序返回DOSNY。
北京邮电大学微机原理硬件实验报告实验1:熟悉实验环境及IO的使用实验2:8255A并行接口应用实验3:8253计数器/定时器的应用目录实验一熟悉实验环境及IO的使用 (2)一、实验目的 (2)二、实验内容及要求 (2)三、实验结果 (2)1、程序说明 (2)2、流程图 (4)3、源代码 (6)四、实验总结 (9)实验二8255A并行接口应用 (9)一、实验目的 (9)二、实验任务及内容 (9)1、6 位数码管静态显示 (10)2、6 位数码管动态显示 (10)3、扩展部分 (10)三、实验结果1(6位数码管静态显示) (10)1、程序说明 (10)2、流程图 (11)3、源代码 (11)四、实验结果2(6位数码管动态显示) (13)1、程序说明 (13)2、流程图 (14)3、源代码 (15)五、实验结果(扩展部分) (17)1、程序说明 (17)2、流程图 (18)3、源代码 (18)六、实验总结 (22)实验三8253计数器/定时器的应用 (22)一、实验目的 (22)二、实验任务及内容 (22)1.音乐发生器 (22)2.扩展部分 (23)三、实验结果1(音乐发生器) (23)1、程序说明 (23)2、流程图 (23)3、源代码 (24)四、实验结果2(扩展部分) (29)1、程序说明 (29)2、流程图 (29)3、源代码 (30)五、实验总结 (34)实验一熟悉实验环境及IO的使用一、实验目的1 .通过实验了解和熟悉实验台的结构,功能及使用方法。
2 .通过实验掌握直接使用Debug 的I、O 命令来读写IO端口。
3 .学会Debug 的使用及编写汇编程序二、实验内容及要求1 .学习使用Debug 命令,并用I、O 命令直接对端口进行读写操作,2 .用汇编语言编写跑马灯程序。
(使用EDIT编辑工具)实现功能A.通过读入端口状态(ON为低电平),选择工作模式(灯的闪烁方式、速度等)。
B.通过输出端口控制灯的工作状态(低电平灯亮三、实验结果1、程序说明跑马灯程序共实现:16种灯型、4种速度、暂停、退出等功能。
实验一显示程序实验一、实验目的1. 掌握在PC机上以十六进制形式显示数据的方法;2. 掌握部分DOS功能调用使用方法;3. 熟悉Tddebug调试环境和Turbo Debugger的使用。
二、实验所用设备1. PC微机一台。
三、实验内容一般来说,程序需要显示输出提示运行的状况和结果,有的还需要将数据区中的内容显示在屏幕上。
本实验要求将指定数据区的数据以十六进制数形式显示在屏幕上,并通过DOS功能调用完成一些提示信息的显示。
实验中可使用DOS功能调用(INT21H)。
(1) 显示单个字符输出入口:AH=02H调用参数:DL=输出字符(2) 显示字符串入口:AH=09H调用参数:DS:DX=串地址,’$’为结束字符(3) 键盘输入并回显入口:AH=01H返回参数:AL=输出字符(4) 返回DOS系统入口:AH=4CH调用参数:AL=返回码四、实验步骤1.运行Tddebug软件,选择Edit菜单,根据实验内容的描述编写实验程序,本实验显示部分参考实验流程如图1-1示;2.使用Compile菜单中的Compile和Link对实验程序进行汇编、连接;3.使用Rmrun菜单中的Run,运行程序,观察运行结果;4.使用Rmrun菜单中的Debug,调试程序,观察调试过程中,数据传输指令执行后,各寄存器及数据区的内容;5.更改数据区中的数据,考察程序的正确性。
图1-1 显示程序实验流程图五、参考程序清单六、实验报告内容及要求写出程序调试过程及运行情况。
1.将参考程序写入轻松汇编编辑框。
2.点击保存,然后编译,结果框显示编译成功。
3.点击生成,显示链接成功。
4.点击运行,显示如图:实验二数据传送实验一、实验目的1. 熟悉Tddebug调试环境和Turbo Debugger的使用;2. 掌握与数据有关的不同寻址方式。
二、实验所用设备1. PC微机一台。
三、实验内容将数据段中的一个字符串传送到附加段中,并输出附加段中的目标字符串到屏幕上。
软件实验三实验内容从键盘键入字母数字串,统计各类字符个数并以十进制形式在显示器上显示出来。
显示格式要求1、在显示器上显示提示信息:Pleace input any digital and letter string2、在显示器上显示The string you inputed is:XXXXXXXXXX3、在显示器上分行显示十进制统计结果The Nembers of Digital is:XXThe Nembers of Capital Letters is:XXThe Nembers of Small Letters is:XX4、在显示器上显示提示信息Are you continue?(Y/N)按Y继续1~3的统计显示过程,按N或其它字符均退出统计返回DOS。
这里建议:不区分输入Y或N的大小写,均为有效。
程序要求:1、提示字符串的显示功能用宏指令INOUT实现2、回车换行用CRLF宏指令实现3、单个字符输入用INPUT宏指令实现4、分类统计功能由子程序TONGJI实现5、二进制转十进制并显示功能由子程序BTOD 实现CRLF MACROMOV DL,0DHMOV AH,2INT 21HMOV DL,10MOV AH,2INT 21HENDMINPUT MACROMOV AH,1INT 21HENDMINOUT MACRO X ,YMOV AH,XLEA DX,YINT 21HENDMDATA SEGMENTSHUZI DB ?DAXIE DB ?XIAOXIE DB ?STRIN DB 50,51 DUP(?),'$'TISHIA DB 'Please input any digital and letter string','$' TISHIB DB 'The string you input is:','$'TISHIC DB 'Are you continue ?(Y/N)','$'TISHI1 DB 'The Number of Digital is:','$'TISHI2 DB 'The Nnmber of Capital Letters is:','$' TISHI3 DB 'The Number of Small Letters is:','$'DATA ENDSCODE SEGMENTASSUME CS:CODE,DS:DATASTART:PUSH DSMOV AX,0PUSH AXMOV AX,DATAMOV DS,AXINOUT 9,TISHIACRLFINOUT 10,STRINMOV BL,[STRIN+1]MOV BH,0ADD BX,2MOV STRIN[BX],'$'INOUT 9,TISHIBCRLFINOUT 9, STRIN+2CRLFCALL TONGJIINOUT 9,TISHI1MOV BL,SHUZICALL BTODCRLFINOUT 9,TISHI2MOV BL,DAXIECALL BTODCRLFINOUT 9,TISHI3MOV BL,XIAOXIECALL BTODCRLFK1: INOUT 9,TISHICINPUTCRLFCMP AL,'Y'JMP STARTNT1: CMP AL,'y' JNE NT2JMP STARTNT2:CMP AL,'N'JE K2CMP AL,'n'JE K2JMP K2K2: MOV AH,4CH INT 21HTONGJI PROC NEAR MOV AX, DATA MOV DS, AXXOR AX, AXMOV SHUZI, AL MOV DAXIE, AL MOV XIAOXIE, AL LEA SI, [STRIN+2] MOV CL, [STRIN+1] CLDNEXT: LODSB CMP AL, 30HJB OTHERCMP AL, 39HJA BIJIAO1INC SHUZIJMP OTHER BIJIAO1: CMP AL, 'A' JB OTHERCMP AL, 'Z'JA BIJIAO2INC DAXIEJMP OTHER BIJIAO2: CMP AL, 'a' JB OTHERCMP AL, 'z'JA OTHERINC XIAOXIE OTHER: LOOP NEXT RETTONGJI ENDP BTOD PROC NEARL0: CMP BL,0AH JAE L1JMP L2L1: SUB BL,0AH INC BHJMP L0L2:ADD BL,30H ADD BH,30H MOV DL,BH MOV AH,02H INT 21HMOV DL,BL MOV AH,02H INT 21HRETBTOD ENDP CODE ENDS END START。
实验三8255并行接口实验
一、实验目的
1、学习并掌握8255的工作方式及其应用。
2、学习在系统接口实验单元上构造实验电路。
二、实验设备
TDN86/51或TND86/88教学实验系统。
三、实验内容与实验步骤
1、基本输入输出实验。
编写程序,使8255的A口为输入,B口为输出,完成波动开
关到数据灯的数据传输。
要求只要开关拨动,数据灯的显示就发生相应改变。
实验原理:
并行接口是以数据的字节为单位与I/O设备或被控制对象之间传递信息。
8255可编程外围接口芯片是Intel公司生产的通用并行I/O接口芯片,它具有A、B、C三个并行接口,用+5V单电源供电,能在以下三种方式下工作:方式0--基本输入/输出方式、方式1--选通输入/输出方式、方式2--双向选通工作方式。
8255的内部结构及引脚如图3-1所示,8255工作方式控制字和C口按位置位/复位控制字格式如图3-2所示。
图3-1 8255的内部结构和外部引脚
(a)工作方式控制字(b)c口按位置位/复位控制字
图3-2 8255控制字格式
8255实验单元电路图如下图所示:
图3-3 8255实验单元电路图
实验步骤
1. 基本输入输出实验
本实验使8255端口A工作在方式0并作为输入口,端口B工作在方式0并作为输出口。
用一组开关信号接入端口A,端口B输出线接至一组数据灯上,然后通过对8255芯片编程来实现输入输出功能。
(1)按图连接实验线路图;
8255基本输入/输出实验接线图
SSTACK SEGMENT STACK
DW 64 DUP(?)
SSTACK ENDS
CODE SEGMENT
ASSUME CS:CODE
START: MOV AL,82H
OUT 63H, AL
A1: IN AL, 61H
OUT60H, AL
JMPA1
CODE ENDS
END START
(2)编写实验程序,经编译、连接无误后装入系统;
(3)运行程序,改变拨动开关,同时观察LED显示,验证程序功能。
(4)点机“调试”下拉菜单中的“固定程序”项,将程序固化到系统存储器中。
实验二 数制转换实验
一、实验目的
1. 掌握不同进制数及编码相互转换的程序设计方法,加深对数码转换的理解。
2. 熟悉程序调试的方法。
3. 熟悉键盘使用方法
二、实验设备
TDN86/51或TND86/88教学实验系统。
三、实验内容及步骤
计算机输入设备输入的信息一般是由ASSII 码或BCD 码表示的数据或字符,CPU 一般均用二进制数进行计算或其它信息处理,处理结果的输出又必须依照外设的要求变为ASCII 码、BCD 码或七段显示码等。
因此,在应用软件中,各类数制的转换是必不可少的。
计算机与外设间的数制转换关系如图所示。
数制转换关系
1. 将ASCII 码表示的十进制数转换为二进制数
十进制表示为:
Di 代表十进制数0,1,2, (9)
上式转换为:
由此可归纳十进制数转换为二进制数的方法:从十进制数的最高位Dn 开始作乘10加次位的操作,依次类推,则可求出二进制数的结果。
键盘 数据开关 光电机 拨码开关 主 机 CRT 显示
位显示 多段显示 打印机 ASCII 码 BCD 码 ASCII 码 BCD 码 ASCII 码 ASCII 码 二进制 二进制
参考流程:
实验程序:
PUBLIC SADD
SSTACK SEGMENT STACK
DW 64 DUP(?)
SSTACK ENDS
DATA SEGMENT
SADD DB 30H,30H,32H,35H,36H ;十进制数:00256 DATA ENDS
CODE SEGMENT
ASSUME CS:CODE, DS:DATA
START: MOV AX, DATA
MOV DS, AX
MOV AX, OFFSET SADD
MOV SI, AX
MOV BX, 000AH
MOV CX, 0004H
MOV AH, 00H
MOV AL, [SI]
SUB AL, 30H
A1: IMUL BX
MOV DX, [SI+01]
AND DX, 00FFH
ADC AX, DX
SUB AL, 30H
INC SI
LOOP A1
A2: JMP A2
CODE ENDS
END START
实验步骤:
(1)编写实验程序,经编译、链接无误后装入系统;
(2)待转换数据存放于数据段,根据自己要求输入;
(3)用D3510(回车)查看结果C;
(5)反复试几组数据,验证程序的正确性。
实验截图如下:
2.编程实现如下功能:
计算首地址为STR1的100个有符号字变量数组的平均值,并将它存在CX中。
实验程序:
data segment
str dw 1000h,2100h,3200
dw 1101h,2012h
data ends
code segment
assume cs:code,ds:data
start:mov ax,data
mov ds,ax
lea bx,str
mov cx,100
mov ax,0
mov dx,0
lp: add ax,[bx]
adc dx,0
inc bx
inc bx
loop lp
mov bx,100
idiv bx
mov cx,ax
mov ah,4ch
int 21h
code ends
end start
实验步骤:
(1)编写实验程序,经编译、链接无误后装入系统;
(2)待转换数据存放于数据段,根据自己要求输入;
(3)用D3510(回车)查看结果C;
(5)反复试几组数据,验证程序的正确性。
实验截图如下:
3、按如下要求编程
编程实现将数据段中地址的STR1开始的200个数组拷贝到STR2开始的区域中去,传递过程中需要剔除其中为0的数。
程序如下:
data segment
str1 dw 1000h,2100h,3200h
str2 dw 1101h,2012h
data ends
code segment
assume cs:code ,ds:data
start:mov ax,data
mov ds,ax
lea si, str1
lea di, str2
mov cx,200
lp:mov ax,[si]
cmp ax,0
jz next
mov [di],ax
add di,2
next:add si,2
loop lp
mov ah,4ch
int 21h
code ends
end start
实验步骤:
(1)编写实验程序,经编译、链接无误后装入系统;
(2)待转换数据存放于数据段,根据自己要求输入;
(3)用D3510(回车)查看结果C;
(5)反复试几组数据,验证程序的正确性。
实验截图如下:。