第一篇:微机原理课程设计(电子密码锁)
一、设计目的
通过课程设计掌握控制系统设计的一般步骤,掌握系统总体控制方案的设计方法、8086微型计算机的应用方法、控制算法的设计及硬件设计方法。复习并学习用软件编程控制硬件。了解和掌握8086微机应用系统的软硬件设计过程、方法及实现,为以后设计实现8086微机应用系统打下良好的基础。
二、设计任务与要求
(1)密码锁在输入密码正确时控制电控锁开启,同时显示00字样;当输入密码错误时,发出错误警告,并显示FF字样;当3次误码输入时,产生报警;具有密码修改的功能。
(2)选用8086和适当的存储器及接口芯片完成相应的功能,用LED显示器显示电子锁的当前状态;画出详细的硬件连接图;给出程序设计思路、画出软件流程图;给出所有程序清单并加上必要注释;完成设计说明书(包括封面、目录、设计任务书、硬件设计思路、硬件原理图、软件设计思路、程序流程框图、程序清单、所用器件型号、总结体会、参考文献等)。
三、整体功能描述
本设计为多功能密码锁,使用存储器保存密码防止断电后密码丢失。工作时按下按键蜂鸣器会发出声音提示按键有效并在数码管有“--”闪烁字样,若相隔1分钟无按键按下,则清零。在输入密码正确的条件下输出开锁电平,控制电控锁开启,同时显示OPEN字样。开锁后可按下“复位/修改密码键”实现修改密码功能的转入,之后先输入密码再输入同样的密码确认才可成功修改,修改成功后蜂鸣器会发出三声,数码管“00”闪烁三次提示修改密码成功。当输入密码错误时,发出错误警告声音,同时显示CLOSE字样,当输入密码错误次数累积够3次后,蜂鸣器会产生90秒的报警声响进行报警。
四、总体设计方案
根据本次设计的设计目的及设计要求,可有下列两种方案: 4.1 方案一
在本次设计中,因为密码锁的基本功能使可以判断密码是否正确,以及完成对密码的修改,所以需要用到输入设备以及CPU的接口电路以及相关存储设备;因为有报警提示功能,所以要用到相关的输出设备以及接口电路。因为要完成逻辑运算功能,所以必须要有CPU,CPU就选用我们最常用也最熟悉的8086,考虑到8255的端口兼具输入输出功能,灵活方便,所以选用一片8255作为输入输出设备与8086间的借口;采用0到9数字按键以及相关功能选择的输入;输出设备方面,采用两位数码管实现题目的状态提示要求,用一个蜂鸣器作为相关的警报,提示的声音输出。另外,为简化编程,采用8259中断控制器来触发中断实现密码锁工作模式的转换,其中的密码输入及判断功能与密码修改功能分别用两个外部中断来触发中断服务程序来实现。本设计的密码位数为6位。4.2 方案二
第1页
用汇编语言编写程序实现应用程序的功能,从而实现简易计算器汇编程序的设计与实现。4.2.1使用设备
含有Windows汇编编译环境的MASM软件及Office 2003软件的计算机一台。4.2.2汇编程序编写
汇编程序编写,根据设计要求编写实现该功能的源程序代码。4.2.3使用方法
在masm环境下运行本程序,按提示输入正确密码,则在屏幕上显示00字样,否则显示FF字样。
五、硬件设计
本设计使用了8086、8259A、8255、8253、2764、74LS138、74LS148、地址锁存器、数码管以及74系列逻辑门、蜂鸣器、开关等芯片与元器件,实现了键盘输入、中断控制、计时、按键响应、开锁及报警等功能模块,其硬件连接框图如图1所示。
图1 硬件连接框图
5.1 键盘
本设计8255A的A口与两片级联的74LS148组合接用于输入键盘,实现对输入键号的读入。工作时,8086通过程序扫描键盘,当无键盘按下时,74LS148工作于无输入状态,GS口输出高电平,接到PA4作为识别有无按键按下信号,PA口输入为10H;当有按键输入时,74LS148输入口接到低电平,输入有效,经编码后键号转换为相应二进制编码送到PA口,成为能为CPU识别的代表键值的有效信号。读入的按键信号经8086判断后,根据不同的功能,输出不同的按键响
第2页
应,并转移到相对应的功能服务程序。
本设计总共用到11位按键,包括10位数码输入按键及一位“复位/修改密码”按键,电路设计总共可用按键有16位,供升级功能使用。键盘电路如下图2所示:
5.2 中断控制
用一片8259A芯片作为中断控制接口电路。其中IR0与IR1中断开放,单片工作于非缓冲方式,电平触发,优先级是普通全嵌套方式。可通过编程开中断,通过编程或者8253计时器关中断。电路连接如图3所示:
图2 键盘连接图
5.3 计时
采用8253计时器控制中断的关断,实现单次输入密码超时则退出输入密码中断子程序、报警器响铃时间控制等功能。电路如图3所示。
第3页
图3 中断控制器连接图
5.4 输入输出接口
输入输出接口采用可编程的8255A,8255A是Intel系列的并行接口芯片,常作为微机系统与外部设备接口。在连接电路时8255 的PC0、PC1接到数码管片选,电路连接如图3所示。同时用8255A的B口控制数码管的显示,C口片PC0、PC1选数码管,PC2用来驱动SPEAK发出报警电路如图4所示。
图4 按键响应、报警、开锁功能电路
第4页
5.5.储存器及片选电路
存储器及片选电路采用一片2764存储器和一片74LS138,连接电路如图5所示:
图5 片选及存储器电路
5.6 整机电路图:见附录一
六、软件设计
6.1 程序流程图
第5页
开始程序初始化8255.8259初始化从RAM存储器中读出密码 定义DI.SI指针开中断data2与data3数据串比较相等?N错误计数器加1开锁,并显示00扫描键盘,有修改密码键?Y定义SI,DI指针开中断,实现密码输入转存到data2有修改密码键输入?开中断,重新输入密码比较是否为首次输入密码?N转存密码到RAM 铃声确认修改密码成功扫描键盘是否有修改密码键输入Y保持开锁状态结束错误累积超过6次?YN报警响铃,输出显示FF保持关锁N结束Y
图6 程序流程图
6.2 程序清单:见附录二
七、设计总结与体会
通过本次课程设计,我对 8255,8253,8259等芯片的各引脚的功能、名称、第6页
工作方式、内部结构有了更深层次的掌握,对这三种芯片的编程从陌生转向熟练。通过这次的微机课程设计,对书本所学的知识有了进一步的巩固,并且对三种芯片各自的功能、工作方式有了明确性的区分。在设计过程中遇到问题时,遇到含糊不清或者看不懂的地方及时翻阅相关课本知识。有时看课本也没有结果时就和组员互相探讨。在设计过程中,才发现自己遗漏许多课本的相关知识,对各芯片的功能及其工作方式掌握的不够清楚。这说明在实践中才能真正的掌握从课本中所学的知识。这次的课程设计让我为一年后的毕业设计打下了基础。
八、参考资料
九、附录
附录一:电路基本连接图
第7页
附录二:程序清单
(一)DATA SEGMENT;以下代码写入RAM
第8页
CODEIN DB 6 DUP(?);输入的密码保存的地址 CODECH DB 6 DUP(?);修改后的密码的保存地址 CODEOR DB 0,0,0,0,0,0;初始密码
ORG 01000H;下面的代码写入ROM DTABLE DB 80H,02H,10H,3FH,79H,71H,60H,5BH DATA ENDS
STACKS SEGMENT STA DB 20 DUP(?)STACKS ENDS
CODE SEGMENT ASSUME CS:CODE,DS:DATA,SS:STACKS START: MOV SI,OFFSET CODEIN MOV DI,OFFSET CODEOR MOV BP,OFFSET DTABLE
MOV AL,09H;(键盘输入中断)设定密码输入的中断向量(即IR0的中断向量)MOV AH,25H INT 21H PUSH BX PUSH DS MOV DX,SEG INPUT MOV DS,DX MOV DX,OFFSET INPUT INT 21H
MOV AL,09H;(键盘输入中断)设定密码修改的中断向量(即IR1的中断向量)MOV AH,25H INT 21H PUSH BX PUSH DS MOV DX,SEG CHANGE MOV DS,DX MOV DX,OFFSET CHANGE INT 21H
MOV AL,1BH;初始化8259 OUT 10H,AL;单片工作,高电平有效 MOV AL,08H OUT 11H,AL MOV AL,03H OUT 11H,AL
第9页
MOV AL,0FCH OUT 11H,AL;开放IR0,IR1 MOV AL,20H OUT 10H,AL MOV AL,68H OUT 10H,AL
MOV AL,82H;初始化8255 A口方式0输出,B口方式0输入,C口输出 OUT 06H,AL AA: STI MOV AL,00H OUT 04H,AL;
INPUT:;CLI MOV DL,00H IN1: CMP DL,06H;JNZ IN2;
MOV CX,03FFH;R1: MOV DH,3FH MOV AL,02H OUT 00H,AL;R2: DEC DH CMP DH,00H JNZ R2 LOOP R1
JMP IN4;IN2:;MOV AL,[BP+4] OUT 04H,AL;MOV BX,0H MOV CX,03H;IN3: MOV BP,OFFSET DTABLE MOV AL,[BP] OUT 04H,AL;输出低电平使数码管熄灭 密码输入程序 判断是否连续6次输入错误密码 若不是这继续输入 使蜂鸣器长鸣报警(通过延时实现)输出高电平使蜂鸣器发声 报警完毕,跳至中断返回 输入密码 数码管显示‘--’提示输入密码 设置循环次数 数码管提示输入位数
第10页
CALL CCSCAN;调用键盘扫描程序 CMP AL,0BH;判断是否按下返回键 JZ IN4 MOV [BX+SI],AL;保存输入密码 INC BX INC BP LOOP IN3
MOV BP,OFFSET DTABLE;判断密码是否正确 CLD MOV CX,03 MOV SI,OFFSET CODEIN MOV DI,OFFSET CODEOR REPZ CMPSB;JNZ WRO;MOV AL,[BP+3] OUT 04H,AL;MOV AL,04H OUT 00H,AL;XOR DL,AL JMP IN4
WRO:;INC DL MOV AL,[BP+5];OUT 04H,AL MOV CX,03H;W1: MOV AL,02H;OUT 00H,AL
W2:;MOV BL,3FH DEC BL CMP BL,00H JNZ W2 XOR AL,AL;OUT 00H,AL
W3:;MOV BL,3FH DEC BL CMP BL,00H JNZ W3
判断密码是否正确 若错误就报警 若正确数码管就显示‘00‘且给LED高电平使其点亮 出错报警部分 数码管显示’FF‘提示错误设定蜂鸣器响的次数 使蜂鸣器发声 延时 输出低电平关蜂鸣器 延时 第11页
LOOP W1 JMP IN1;中断返回 IN4: STI IRET
CHANGE:;密码修改程序 CLI MOV DL,00H INP1: CMP DL,06H JNZ INP2 MOV CX,03FFH RR1: MOV DH,3FH MOV AL,02H OUT 00H,AL RR2: DEC DH
CMP DH,00H JNZ RR2 LOOP RR1 JMP C4 INP2: MOV AL,[BP+4] OUT 04H,AL MOV BX,0000H MOV CX,03H INP3: MOV BP,OFFSET DTABLE MOV AL,[BP] OUT 04H,AL CALL CCSCAN CMP AL,0BH JZ IN4 MOV [BX+SI],AL INC BX INC BP LOOP INP3 MOV BP,OFFSET DTABLE CLD MOV CX,03
第12页
MOV SI,OFFSET CODEIN MOV DI,OFFSET CODEOR REPZ CMPSB JNZ WRRO MOV AL,[BP+3] OUT 04H,AL XOR DL,DL JMP CHANGE WRRO: INC DL MOV AL,[BP+5] OUT 04H,AL MOV CX,03H WW1: MOV AL,02H OUT 00H,AL WW2: MOV BL,3FH DEC BL CMP BL,00H JNZ WW2 XOR AL,AL OUT 00H,AL WW3: MOV BL,3FH DEC BL CMP BL,00H JNZ WW3 LOOP WW1 JMP INP1;
CHAN:;MOV SI,OFFSET CODEIN MOV DI,OFFSET CODECH
MOV AL,[BP+6];OUT 04H,AL MOV CX,03FFH Y1: LOOP Y1
MOV BP,OFFSET DTABLE MOV BX,0H MOV CX,03H
当密码输入正确时,转入密码修改部分修改密码部分 数码管提示第一次输入 第13页
C1: MOV AL,[BP] OUT 04H,AL CALL CCSCAN CMP AL,0BH JZ C4 MOV [BX+SI],AL;存放在输入密码缓冲区 INC BX INC BP LOOP C1
MOV BP,OFFSET DTABLE MOV AL,[BP+7] OUT 04H,AL;MOV CX,03FFH Y2: LOOP Y2 MOV BP,OFFSET DTABLE MOV BX,0H MOV CX,03H C2: MOV AL,[BP] OUT 04H,AL CALL CCSCAN CMP AL,0BH JZ C4 MOV [BX+DI],AL;INC BX INC BP LOOP C2
MOV BP,OFFSET DTABLE REPZ CMPSB JNZ CHAN;MOV DI,OFFSET CODEOR MOV CX,03H CLD REP MOVSB;MOV AL,02H;OUT 00H,AL MOV CX,03FFH C3: LOOP C3 XOR AL,AL OUT 00H,AL;数码管提示第二次输入 存放在修改密码缓冲区 判断两次输入的密码是否一致若是相等那就保存密码 且蜂鸣器响一下提示修改成功中断返回
第14页
C4: STI IRET
CCSCAN PROC NEAR;键盘扫描子程序 MOV AL,00H OUT 00H,AL IN AL,02H NOT AL AND AL,0FH CMP AL,00H;JNZ K1 JMP CCSCAN K1: MOV CX,0EFFH;LOOP K1
IN AL,02H CMP AL,00H JZ CCSCAN MOV AH,60H;K2: MOV AL,AH OUT 00H,AL IN AL,02H NOT AL AND AL,0FH CMP AL,00H;JNZ K3 OR AH,01H ROR AH,1;AND AH,0FH JMP K2 K3: ADD AL,AH RET CCSCAN ENDP CODE ENDS END START
程序清单
(二)利用DOS调用显示DATA SEGMENT TABLE DB '888'
判断是否有键按下延时 扫描第一列 判断是否有键按下扫描下一列 第15页
STRING1 DB 'Please enter a passward:',0DH,0AH,'$' STRING2 DB 'Wrong!',0DH,0AH,'$' STRING3 DB 'OPEN!','$' STRING4 DB 'CLOSE!','$' BUFFER DB 40,?,40 DUP(0)TAB_LEN EQU 26 DATA ENDS;STACK SEGMENT DB 100 DUP(0)STACK ENDS;CODE SEGMENT ASSUME CS:CODE,DS:DATA,ES:DATA,SS:STACK
START:MOV AX,DATA MOV DS,AX MOV ES,AX LEA DX,STRING1 MOV AH,09H INT 21H LEA DX,BUFFER
MOV AH,0AH INT 21H MOV SI,DX INC SI MOV BL,[SI] MOV BH,0 INC SI LEA DI,TABLE MOV CX,TAB_LEN CMP CX,BX JNC GOON LEA DX,STRING2 JMP EXIT GOON: CLD MOV AL,[SI] SCAN:REPNZ SCASB JZ MATCH ERROR: LEA DX,STRING4 JMP EXIT MATCH: INC CX CMP CX,BX
第16页
JC ERROR PUSH CX PUSH SI PUSH DI MOV CX,BX DEC DI REPZ CMPSB POP DI POP SI POP CX JZ FOUND JCXZ ERROR JMP SCAN FOUND: DEC DI LEA DX,STRING3 EXIT:MOV AH,09H INT 21H MOV AH,4CH INT 21H CODE ENDS END START
第17页
第二篇:微机原理课程设计++多功能密码锁
微机原理课程设计报告
学院:
专业: 班级: 姓名:
指导老师:
设计任务:多功能密码锁
目录
一、设计目标
二、设计要求
三、整体功能描述
四、硬件设计功能模块 1.键盘 2.中断控制 3.计时 4.按键响应 5.报警 6.储存器及片选 7.整机电路
五、程序流程图
六、程序清单
七、设计总结
一、设计目标
1.密码锁在输入密码正确的条件下输出开锁电平,控制电控锁开启,同 显示O字样。
2.当输入密码错误时,发出错误警告声音,同时显示C字样。3.当六次误码输入的条件下,产生报警电平报警。
4.还可以实现对密码的修改,修改成功后,蜂鸣器发出确认音。
二、设计要求
1、选用8088和适当的存储器及接口芯片完成相应的功能。
2、用LED显示器显示电子锁的当前状态。
3、画出详细的硬件连接图。
4、给出程序设计思路、画出软件流程图。
5、给出地址分配表。
6、给出所有程序清单并加上必要注释。
7、完成设计说明书(列出参考文献,所用器件型号)。
三、整体功能描述
本设计为多功能密码锁,使用存储器保存密码防止断电后密码丢失。工作时按下按键蜂鸣器会发出声音提示按键有效并在数码管有“--”闪烁字样,若相隔1分钟无按键按下,则清零。在输入密码正确的条件下输出开锁电平,控制电控锁开启,同时显示O字样。开锁后可按下“复位/修改密码键”实现修改密码功能的转入,之后先输入密码再输入同样的密码确认才可成功修改,修改成功后蜂鸣器会发出三声,数码管“O”闪烁三次提示修改密码成功。当输入密码错误时,发出错误警告声音,同时显示FF字样,当输入密码错误次数累积够6次后,蜂鸣器会产生90秒的报警声响进行报警。
四、硬件设计功能模块
本设计使用了8088、8259A、8255、8253、A28F512、74LS138、74LS148、地址锁存器、数码管以及74系列逻辑门、蜂鸣器、开关等芯片与元器件,实现了键盘输入、中断控制、计时、按键响应、开锁及报警等功能模块。以下一一详述。
1.键盘
本设计8255A的A口与两片级联的74LS148组合接用于输入键盘,实现对输入键号的读入。工作时,8086通过程序扫描键盘,当无键盘按下时,74LS148工作于无输入状态,GS口输出高电平,接到PA4作为识别有无按键按下信号,PA口输入为10H;当有按键输入时,74LS148输入口接到低电平,输入有效,经编码后键号转换为相应二进制编码送到PA口,成为能为cpu识别的代表键值的有效信号。读入的按键信号经8086判断后,根据不同的功能,输出不同的按键响应,并转移到相对应的功能服务程序。
本设计总共用到11位按键,包括10位数码输入按键及一位“复位/修改密码”按键,电路设计总共可用按键有16位,供升级功能使用。
键盘电路如下所示:
图1 键盘连接图
2.中断控制
用一片8259芯片作为中断控制接口电路。可通过编程开中断,通过编程或者8253计时器关中断。电路连接如下:
图2 中断控制器连接图 3.计时
采用8253计时器控制中断的关断,实现单次输入密码超时则退出输入密码中断子程序、报警器响铃时间控制等功能。电路如图2所示。
4.按键响应
8255PC0、PC1接到数码管片选、PC2接到蜂鸣器、PC3接到电子锁。电路连接如图3所示:
图3 按键响应、报警、开锁功能电路 5.报警功能
同时用8255A的B口控制数码管的显示,C口片PC0、PC1选数码管,PC2用来驱动SPEAK发出报警。电路如图3所示。
6.储存器及片选电路:
图4 片选及存储器电路
7.整机电路图:
五、软件流程图:
六、程序清单:
各芯片地址:8259 30H
8255 60H
8253 20H
存储器
2000H
DATAS SEGMENT
;程序初始化
DATA1 DB '0','0','0','0','0','0'
DATA2 DB 6 DUP(?)
DATA3 DB 6 DUP(?)
DATA4 DB 6 DUP(?)DATAS ENDS
STACKS SEGMENT PARA STACK'STACK' STA DB 100 DUP(?)TOP EQU LENGTH STA STACKS ENDS
CODES SEGMENT
ASSUME CS:CODES,DS:DATAS,SS:STACKS,ES:DATAS START:
MOV AX,DATAS
MOV DS,AX
MOV AX,STACKS
MOV SS,AX
MOV SP,TOP
MOV AX,0
;初始化中断向量表
MOV ES,AX
MOV BX,84H
;IR1中断类型码21h*4=84h
MOV AX,OFFSET INPUT
MOV ES:[BX],AX
MOV AX,SEG INPUT
;段地址
MOV ES:[BX+2],AX
MOV AL,90H
;8255初始化,A口方式0,输入;B、c口方式0,输出
OUT 63H,AL MOV AL,36H
;8253初始化,方式0 OUT 23H,AL
MOV AL,13H
;8259A初始化,ICW1
OUT 30H,AL
MOV AL,20H
;ICW2
OUT 31H,AL
MOV AL,01
;ICW4
OUT 31H,AL
MOV AL,00
;OCW1
OUT 31H
MOV CX,06H
;从RAM里读出密码到DATA2,密码为6位
MOV SI,2000H
MOV DI,OFFSET DATA2 LP1:MOV AL,[SI]
MOV [DI],AL
INC SI
INC DI
LOOP LP1
;读入密码结束
MOV BX,00
;输入密码次数计数器初始值 RE: MOV AL,03H
OUT 62H,AL
MOV AL,71H
;未开锁,B口输出显示FF
OUT 61H,AL
MOV CX,06H
MOV SI,OFFSET DATA2
;定义SI、DI
MOV DI,OFFSET DATA3
HLT
STI
;停机,开中断,等待密码输入
CLD
INC BX
;输入密码次数加1
REPE CMPSB
;将输入六位数码与密码比较
CMP CX,00
JE OPEN
;相等则转到开锁
CMP BX,06H
;输入错误且累积未够6次,重新输入
JNE RE
MOV AL,07H
;若错误次数累积够6次,触发蜂鸣器报警
OUT 62H,AL
MOV AL,71H
;B口输出FF
OUT 61H,AL MOV AL,2048H
;报警铃响计时,90秒后关断蜂鸣器,保持显示FF
OUT 20H,AL MOV AL,03H OUT 62H,AL
JMP DOON
;跳到结束
OPEN:MOV AL,0BH
;开锁,并显示00
OUT 62,AL
MOV AL,3FH
OUT 61H C1: IN AL,60H
CALL D20MS
;去抖动
CMP AL,00H
JE C1
CMP AL,0AH
;扫描键盘,是否有修改密码建(10)输入
JNE DOON
;没有则结束
C0: MOV SI,OFFSET DATA2
;重新定义SI、DI
MOV DI,OFFSET DATA3
MOV CX,06H
HLT
STI
;开中断,输入修改程序 C2: MOV AL,[DI]
MOV [SI],AL
INC SI
INC DI
LOOP C2
;输入密码转移到data2
IN AL,60H
;扫描键盘,若有修改密码键输入则重新修改
CALL D20MS
CMP AL,0AH
JE C0 C3: MOV SI,OFFSET DATA2;再次输入密码确认
MOV DI,OFFSET DATA3
MOV CX,06H
HLT
STI
REPE CMPSB
CMP CX,00
;若data2与data3不相等则从新输入
JNE C3
MOV CX,06H
;若相等,则从DATA2写密码到RAM
MOV SI,2000H
MOV DI,OFFSET DATA2 C4: MOV AL,[DI]
MOV [SI],AL
INC SI
INC DI
LOOP C4
;转存密码结束
CALL RING2
;蜂鸣三次,表示修改好了
IN AL,60H
;扫描键盘,若有修改密码键输入则重新修改
CALL D20MS
CMP AL,0AH
JE C0
JMP DOON
;修改完毕,转到结束
;中断子程序
INPUT: PUSH AX
;保护现场
PUSH DS
PUSH BX
PUSH CX
PUSH DI
PUSH SI
MOV AL,1020H
;8253开始一分钟输入限制计时
OUT 20H,AL IN1:
IN AL,60H
;读A口
CALL D20MS
;去抖动
CMP AL,10H
JE IN1
;若无按键按下,则重新扫描
CMP AL,0AH
;若有按键按下,比较是否为复位键
JNE IN3
CALL RING1
;为复位键则输出按键有效提示音并重新输入
MOV CX,06H
MOV DI,OFFSET DATA3
JMP IN1 IN3:
CALL RING1
;若不是复位键,则把键值送到data3
MOV [DI],AL
INC DI
LOOP IN1
;循环,扫描下一次按键,直到输入够6位密码
MOV AL,01
OUT 30,AL
POP SI
;中断结束恢复现场
POP DI
POP CX
POP BX
POP DS
POP AX
CLI
;关中断
IRET
;中断返回
DOON: MOV AH,4CH
INT 21H
;20ms延时子程序
D20MS PROC NEAR
PUSH CX
MOV CX,0080H D1: DEC CX
LOOP D1
;循环
POP CX
RET
;返回 D20MS ENDP
;输入按键响应子程序
RING1 PROC NEAR
PUSH AX
;保护AXCX
PUSH CX
MOV CX,05H
;设置提示音为0.1秒
MOV AL,07H
;输出显示“--”字样
OUT 62H,AL
MOV AL,40H
OUT 61H,AL R1: CALL D20MS
LOOP R1
MOV AL,00H
OUT 62H,AL
POP CX
POP AX
RET
RING1 ENDP
;修改确认铃声子程序
RING2 PROC NEAR
PUSH AX
PUSH CX
MOV CX,03H
R2: MOV AL,0FH
OUT 62H,AL
MOV AL,40H
OUT 61H,AL
CALL D20MS
CALL D20MS
CALL D20MS
CALL D20MS
CALL D20MS
MOV AL,00H
OUT 62H,AL
CALL D20MS
CALL D20MS
CALL D20MS
CALL D20MS
CALL D20MS
LOOP R2
MOV AL,0BH
OUT 62H,AL
;数码管灭
;三次0.1秒的提示声
;开铃声
;延时0.1秒
;关铃声
;延时0.1秒
;循环
;恢复开锁状态
;返回
MOV AL,3FH
OUT 61H,AL
POP CX
POP AX
RET RING1 ENDP
;返回 CODES ENDS END START
;结束
七、设计总结
1、遇到的问题及解决方法
首先遇到的问题是键盘的设计,刚开始想用8279,但是对8279不够熟悉,研究了一下就放弃了,再而想到用8255的A、B口组合64位矩阵键盘或者用C口低4位与高4位组合的16位键盘,但最后还是使用了开关与编码器组合的形式组成16位键盘,简单明了,但是还没有解决双键同时按下的问题。
再而由于学8259的时候不够认真,所以开始写8259初始化的时候也显的力不从心,最终参考了书本和其他资料,还是写了出来。
设计中接触到的另一个问题是密码的储存的问题,刚开始没有想到cpu关机后密码消失的问题,后来加了一篇存储器实现了密码的保存。
遇到的其他问题都跟同学们讨论而得到了一定的解决。
2、课程设计总结
通过本次课程设计,我进一步了解 8255,8253,8259等芯片的内部结构,熟悉各种基本工作模式和编程方法;
加深了对 8086中断系统工作过程的了解;
学会综合应用多种微机接口与单元电路,构成满足要求的小型微机应用系统; 学会了CPU与存储器的连接方法,扩展存储空间的方法。
3、参考资料
《微型计算机原理及应用》 吴荣光 吕钧星 编著,华南理工大学出版社 《微型计算机原理与汇编语言程序设计》 赵国相等编著,科学出版社 《精通Protel DXP 2004电路设计》张睿 赵艳华 刘志刚 编著,电子工业出版社
第三篇:微机原理课程设计电子闹钟
电子钟设计
1任务要求
1.1显示位置:屏幕中央.1.2日期显示格式“时:分:秒.1.312/24时制可调.1.4在显示屏上显示提示语“CURRENT TIME IS:”和当前时间.2工作原理
1时钟起始时间的设置
先调用DOS操作系统模块9,在显示屏上显示提示语“TIME SYSTEM IS:”,输入时制12或24后,显示“CURRENT TIME IS:”,再调用DOS操作系统模块10,提示要输入时钟的起始时间,输入时间的格式是“时:分:秒”。输入的时间以字符串形式存放在已定义的存储器缓存区内,继而调用TRAN1转换子程序和MUL10乘10子程序,将存放在存储器缓存区内的ASCII字符转换为压缩BCD码,并将时、分、秒的值放在寄存器CH、DH、DL中。
2延时程序
调用延时TIME延时中断服务程序,累加到存放秒值的寄存器DL中,并进行十进制调整。在累加的过程中,不断地对时、分、秒值进行比较,秒不能等于60,分不能等于60,时不能等于24。秒等于限制值时,则使秒值为0分值加1;分等于限制值时,则使分值为0时值加1;时等于限制值时,则使时值为0;时、分、秒值都不超过限制值时,就转显示屏输出。
3时间显示
调用DOS操作系统模块9,可用来显示存储器内字符串。由于显示的字符必须为ASCII码,因为要调用TRAN2转换子程序将寄存器CH、DH、DL内压缩BCD码字符串转换成ASCII字符串,字符串最后以字符“$”结束,并按时、分、秒的顺序送存储器缓冲区内。调用DOS操作系统模块9,(DS:DX)应指向字符串首址。程序一旦进入运行,就将不间断地在显示屏显示时间,要想程序停止运行,可同时在键盘按下CTRL和BREAK二键。
4程序堆图 5程序清单
DATA SEGMENT BUFFER DB 10;设置输入字符串用缓冲区 DB ? DB 10 DUP(?)TS DB 'TIME SYSTEM IS:$' CT DB 'CURRENT TIME IS:$' PM DB 'PM $' AM DB 'AM $' KEEPIP DW 0 KEEPCS DW 0 SR DB ? HOUR DB ? DAT ENDS STA SEGMENT PARA STACK 'STACK' STAPN DB 100 DUP(?)TOP EQU LENGTH STAPN STA ENDS COD SEGMENT START PROC FAR ASSUME CS:COD,DS:DAT,SS:STA MOV AX,DATA MOV DS,AX MOV AX,STA MOV SS,AX MOV AX,TOP MOV SP,AX MOV AH,35H;设置1CH中断
MOV AL,1CH
INT 21H
;段地址放入ES,偏移地址放入BX
MOV KEEPIP,BX
;保偏移地址存
MOV KEEPCS,ES
;保存段地址
PUSH DS
MOV DX,OFFSET TIME
MOV AX,SEG TIME
MOV DS,AX
MOV AL,1CH
MOV AH,25H
;设置中断功能调用
INT 21H
POP DS
MOV DX,OFFSET TS
;DOS功能模块,显示字符串
MOV AH,9
INT 21H
MOV AH,1
;DOS功能模块,从键盘输入字符
INT 21H
MOV AH,1
INT 21H
MOV SR,AL
MOV DL,0AH
;”换行“
MOV AH,2
INT 21H
MOV DL,0DH
;”回车“
MOV AH,2
INT 21H
MOV DX,OFFSET CT
;DOS功能模块,显示字符串,提示从键盘输入
MOV AH,9
INT 21H
MOV DX,OFFSET BUFFER
MOV AH,10
;DOS功能模块,从键盘输入字符串到缓冲区
INT 21H
MOV BX,OFFSET BUFFER+2
CALL TRAN1
;将输入的ASCII码转换为BCD码
INC BX
INC BX
CALL TRAN1
INC BX
INC BX
CALL TRAN1
MOV BX,OFFSET BUFFER+2
MOV AL,[BX]
CALL MUL10
;将BCD码转换为压缩的BCD码
MOV CH,AL
INC BX
INC BX
MOV AL,[BX]
CALL MUL10
MOV DH,AL
INC BX
INC BX
MOV AL,[BX]
CALL MUL10
MOV DL,AL AGAIN: PUSH CX
MOV CX,18
STI
;开中断 W:
CMP CX,0
JNE W
CLI
POP CX
MOV AL,DL
ADD AL,1
;”秒“加1
DAA
MOV DL,AL
CMP AL,60H
;”秒“与60比较
JNE DISPY
;小于60S,转显示程序
MOV DL,0
;等于60S, ”秒“值为0,”分“+1
MOV AL,DH
ADD AL,1
DAA
MOV DH,AL
CMP AL,60H
;”分“于60比较
JNE DISPY
MOV DH,0
MOV AL,CH
ADD AL,1
DAA
MOV CH,AL
MOV AL, SR
CMP AL,32H
JNE NEXT
JMP DISPY NEXT: MOV AL,CH
MOV HOUR,CH
CMP AL,24H
JNE DISPY
MOV CH,0
DISPY: CALL IOCLR
CALL IOSET1
CALL STAR
CALL IOSET2
CALL STAR
CALL IOSET
MOV BX,OFFSET BUFFER
MOV AL,SR
CMP AL,32H
JNE NEXT2
CALL AD12
MOV AL,HOUR
JMP NEXT1 NEXT2: MOV AL,CH
;”时“值转换成ASCII码
NEXT1: CALL TRAN2
;将压缩BCD码转换成ASCII码
INC BX
MOV AL,':'
MOV [BX],AL
INC BX
MOV AL,DH
;”分“值转换成ASCII码
CALL TRAN2
INC BX
MOV AL,':'
MOV [BX],AL
INC BX
MOV AL,DL
;”秒“值转换成ASCII码
CALL TRAN2
INC BX
MOV AL,'$'
;显示字符串结束码
MOV [BX],AL
PUSH BX
PUSH CX
PUSH DX
MOV DX,OFFSET BUFFER
MOV AH,9
;DOS功能模块,显示字符串
INT 21H
POP DX
POP CX
POP BX
JMP AGAIN
CLI
PUSH DS
MOV DX,KEEPIP
MOV AX,KEEPCS
MOV DS,AX
MOV AH,25H
MOV AL,1CH
INT 21H
POP DS
STI
RET START ENDP MUL10 PROC
;将BCD码转换为压缩的BCD码
ADD AL,AL
DAA
MOV CL,AL
ADD AL,AL
DAA
ADD AL,AL
DAA
ADD AL,CL
DAA
MOV CL,AL
INC BX
MOV AL,[BX]
ADD AL,CL
RET MUL10 ENDP TRAN1 PROC
MOV AL,[BX]
AND AL,0FH
MOV [BX],AL
INC BX
MOV AL,[BX]
AND AL,0FH
MOV [BX],AL
RET TRAN1 ENDP TRAN2 PROC
MOV CL,AL
SHR AL,1
SHR AL,1
SHR AL,1
SHR AL,1
OR AL,30H
MOV [BX],AL
INC BX
MOV AL,CL
AND AL,0FH
OR AL,30H
MOV [BX],AL
RET TRAN2 ENDP IOCLR PROC
PUSH CX
PUSH DX
PUSH BX
PUSH AX
MOV AX,0600H
MOV BH,02
SUB CX,CX
MOV DX,184FH
INT 10H
;ASCII码转换成BCD码
;将压缩BCD码转换成ASCII码;调用BIOS,清除全屏幕
POP AX
POP BX
POP DX
POP CX
RET IOCLR ENDP TIME
PROC
DEC CX
IRET TIME
ENDP
PUSH DX PUSH BX PUSH AX MOV AH,02 SUB BH,BH MOV DX, 0C23H INT 10H POP AX POP BX POP DX RET IOSET ENDP IOSET1 PROC PUSH AX PUSH BX PUSH DX MOV DX,0A1AH MOV BH,00 MOV AH,02 INT 10H POP DX POP BX POP AX RET IOSET1 ENDP IOSET2 PROC PUSH AX PUSH BX PUSH DX MOV DX,0E1AH MOV BH,00 MOV AH,02 INT 10H
调用BIOS,设置屏幕光标在中央
;POP DX POP BX POP AX RET IOSET2 ENDP STAR PROC PUSH AX PUSH BX PUSH CX PUSH DX MOV AL,3DH MOV BH,0 MOV BL,0CH CMP HOUR,24H JNZ X MOV HOUR,0H X: MOV CX,WORD PTR HOUR INT 10H POP DX POP CX POP BX POP AX RET STAR ENDP AD12 PROC PUSH DX MOV HOUR,CH MOV AL,SR CMP AL,32H JNE ZH MOV AL,HOUR CMP AL,24H JNE NEXT3 MOV CH,0 MOV HOUR,CH JMP S12 NEXT3: CMP AL,12H JBE S12 MOV DX,OFFSET PM MOV AH,9 INT 21H MOV AL,HOUR MOV DH,12H SUB AL,DH DAS MOV HOUR,AL JMP ZH S12: CMP AL,12H JNE Z MOV DX,OFFSET PM MOV AH,9 INT 21H JMP ZH Z: MOV DX,OFFSET AM MOV AH,9 INT 21H ZH: POP DX RET AD12 ENDP COD ENDS END STAR
6设计时遇到的问题及解决方法
在课程设计中遇到的最大的困难是如何利用软、硬件配合的方式产生中断,对中断向量表的装载还比较模糊,对中断的初始化、具体设置、中断返回还不是很清楚,程序设计一度陷入停滞状态,不知如何是好.于是我又重新翻阅了我们的学习课本,也就是电子工业出版社的《微机原理与接口技术(基于16位机)》,重点研究了第9章《中断》,通过对这一章的学习,我终于对中断有了详细的认识,在设计程序时也容易了很多。
设中断服务程序入口地址为TIME,则相应的程序如下:
„„
KEEPIP DW 0
;设置内存缓冲区,用于暂存 KEEPCS DW 0
;DOS的中断矢量
„„
;在主程序的初始化部分,先取出DOS的中断矢量并加以保存,然后装入需要的中断矢量
MOV AH,35H
;取出DOS的中断矢量,并送ES:BX
MOV AL,1CH
INT 21H
MOV KEEPIP,BX
;保存DOS的中断矢量
MOV KEEPCS,ES
PUSH DS;保护DS
MOV DX,OFFSET TIME
;将中断矢量取代
MOV AX,SEG TIME
;DOS的中断矢量
MOV DS,AX
MOV AL,1CH
MOV AH,25H
;设置中断功能调用
INT 21H
POP DS
;恢复DS „„
AGAIN: PUSH CX
MOV CX,18
STI
;开中断 W:
CMP CX,0
JNE W
CLI „„
TIME
PROC
DEC CX
IRET TIME
ENDP „„
;在程序结尾处,用以下程序恢复DOS的中断矢量 CLI
PUSH DS
MOV DX,KEEPIP
MOV AX,KEEPCS
MOV DS,AX
MOV AH,25H
MOV AL,1CH
INT 21H
POP DS
STI 7新增功能及实现方法
7.112时制时显示AM或PM
„„
AD12 PROC PUSH DX MOV HOUR,CH MOV AL,SR CMP AL,32H JNE ZH MOV AL,HOUR CMP AL,24H JNE NEXT3 MOV CH,0 MOV HOUR,CH JMP S12 NEXT3: CMP AL,12H JBE S12 MOV DX,OFFSET PM MOV AH,9 INT 21H MOV AL,HOUR MOV DH,12H SUB AL,DH DAS MOV HOUR,AL JMP ZH S12: CMP AL,12H JNE Z MOV DX,OFFSET PM MOV AH,9 INT 21H JMP ZH Z: MOV DX,OFFSET AM MOV AH,9 INT 21H ZH: POP DX RET AD12 ENDP „„
7.2绿色显示时间
„„
IOSET PROC PUSH DX PUSH BX PUSH AX MOV AH,02 SUB BH,BH MOV DX,0C23H INT 10H POP AX POP BX POP DX RET IOSET ENDP „„
7.3在数字上下方各显示一行个数同小时数的”=“ „„
IOSET1 PROC PUSH AX PUSH BX PUSH DX MOV DX,0A1AH MOV BH,00 MOV AH,02 INT 10H POP DX POP BX POP AX RET IOSET1 ENDP IOSET2 PROC PUSH AX PUSH BX PUSH DX MOV DX,0E1AH MOV BH,00 MOV AH,02 INT 10H POP DX POP BX POP AX RET IOSET2 ENDP STAR PROC PUSH AX PUSH BX PUSH CX PUSH DX MOV AL,3DH MOV BH,0 MOV BL,0CH CMP HOUR,24H JNZ X MOV HOUR,0H X: MOV CX,WORD PTR HOUR INT 10H POP DX POP CX POP BX POP AX RET STAR ENDP „„ 8心得体会
这是我第一次用汇编语言来设计一个小程序,历时一周终于完成,其间有不少感触。首先就是借鉴.鲁迅先生曾说过要”拿来“,对,在这次课程设计中,就要”拿来"不少子程序,比如将ASCII码转换成BCD码,将BCD码转换成压缩BCD码,将压缩BCD码转换成ASCII码等,这些子程序的设计是固定的,因此可以直接从指导资料中调用,至于设置光标的子程序,只需要修改几个参数就可以,这大大方便了我的设计,为我节省了很多的时间。还有就是指导老师提供的资料很重要.这次课程设计的大部分程序,都可以在李老师提供的资料中找到,这对我的程序设计很有帮助,从这些资料中,我可以看出这个时钟程序的基本流程,修改一些程序就可以实现这个时钟的基本功能,添加一些程序就可以实现这个时钟的附加功能,可以说,如果没有李老师提供的源程序,我将面临很大的困难。文章引用自:
第四篇:微机原理课程设计(电子时钟)
电子时钟课程设计
一:设计背景
电子数字钟的应用十分广泛,通过计时精度很高的石英晶振(也可采用卫星传递的时钟标准信号),采用相应进制的计数器,转化为二进制数,经过译码和显示电路准确地将时间“时”“分”“秒”用数字的方式显示出来。与传统的机械钟相比,它具有走时准确,显示直观,无机械传动,无需人的经常调整等优点。它广泛用于电子表、车站、码头、广场等公共场所的大型远距离时间显示电子钟。
二:数字钟电路设计思路
1.选用8253计数器2进行1s的定时,其输出OUT1与8259的IRQ0相连,当定时到1s时产生一个中断服务程序进行时、分、秒的计数,并送入相应的存储单元;8255的A口接七段数码管的位选信号,B口接数码管的段选信号。时、分、秒的数值通过对8255的编程可送到七段数码管上显示。2.此程序主要由四部分组成:
第一部分为最主要的部分定义显示界面;
第二部分为利用延时程序,并将调用的二进制表示的时间数转换成ASCII码,并将时间数存入内存区;
第三部分将存在系统内存区的时间数用七段数码管显示出来; 第四部分利用循环程序分别对秒个位、秒十位、分个位、分十位与相应的规定值进行比较,结合延时程序来实现电子钟数字的跳变,从而形成走时准确的电子钟。
该程序实现了准确显示秒和分,读数准确,走时精准。此电子钟能准确的从0时0分0秒走时到23时59分59秒,然后能自动回复到0时0分0秒循环走时。
3.基本工作原理:系统设计的电子时钟主要由显示模块、时钟控制模块和时钟运算模块三大部分组成。以8086微处理器作CPU,用8253做定时器产生时钟频率提供一个频率为10kHz的时钟信号,要求每隔10ms完成一次扫描键盘的工作。在写入控制字与计数初值后,每到10ms定时器就启动工作,即当计数器减到1时,输出端OUT0输出一个CLK周期的低电平,向CPU申请中断,当达到100次时,则输出端OUT1输出1s,向CPU申请中断,由8255控制一个数码管显示,当计数到60s时,则输出端OUT2向CPU申请中断,由另一数码管显示1min,同理由数码管显示1h.CPU处理,使数码管的显示发生变化。
电子时钟的显示格式HH:MM:SS由左到右分别为时、分、秒,并依次对秒、分、小时寄存器的内容加一,六个数码管动态显示时、分、秒的当前值。最大记时23:59:59超过这个时间时分秒位都清零从00:00:00重新开始。8253芯片介绍
8253是NMOS工艺制成的可编程计数器/定时器,有几种芯片型号,外形引脚及功能都是兼容的,只是工作的最高计数速率有所差异,例如8253(2.6MHz),8253-5(5MHz)8253内部有三个计数器,分别成为计数器0、计数器1和计数器2,他们的机构完全相同。每个计数器的输入和输出都决定于设置在控制寄存器中的控制 字,互相之间工作完全独立。每个计数器通过三个引脚和外部联系,一个为时钟输入端CLK,一个为门控信号输入端GATE,另一个为输出端OUT。每个计数 器内部有一个8位的控制寄存器,还有一个16位的计数初值寄存器CR、一个计数执行部件CE和一个输出锁存器OL。
8255芯片介绍 8255特性:
①一个并行输入/输出的LSI芯片,多功能的I/O器件,可作为CPU总线与外围的接口.②具有24个可编程设置的I/O口,即使3组8位的I/O口为PA口,PB口和PC口.它们又可分为两组12位的I/O口,A组包括A口及C口(高4位,PC4~PC7),B组包括B口及C口(低4位,PC0~PC3).A组可设置为基本的I/O口,闪控(STROBE)的I/O闪控式,双向I /O3种模式;B组只能设置为基本I/O或闪控式I/O两种模
8255芯片
8253芯片
式,而这些操作模式完全由控制寄存器的控制字决定.8255引脚功能:
RESET:复位输入线 , CS:芯片选择信号线 , RD:读信号线 , WR:写入信号 , D0~D7:三态双向数据总线 ,PA0~PA7:端口A输入输出线 ,PB0~PB7:端口B输入输出线, PC0~PC7:端口C输入输出线, A0,A1:地址选择线 三:程序流程图
三、电
子
表
原
理
图
:
四:程序代码
D8279 equ 200H C8279 equ 202H C8253 equ 20bH D82530 equ 208H D82531 equ 209H C82590 equ 210H
C82591 equ 211H data segment HOUR
db 00 MINUTE
db 00 SECOND
db 008 STAT
db 00 LED
db 31H,06H,5bH,4fH,66H,6dH,7dH,27H,7fH,6fH,00H,00H DISBUF db 8 dup(0)data ends stack segment stack
dw 100 dup(?)stack ends code segment
assume cs:code,ds:data START:
MOV AX,DATA
MOV DS,AX
CLI
MOV AL,13H
MOV DX,C82590
OUT DX,AL
MOV AL,8
MOV DX,C82591
OUT DX,AL
MOV AL,1
OUT DX,AL
MOV AX,0
MOV ES,AX
LEA AX,INT0
MOV AX,CS
MOV ES:[4*8+2],AX
MOV DX,C8253
MOV AL,36H
OUT DX,AL
MOV DX,D82530
MOV AX,10000
OUT DX,AL
MOV AL,AH
OUT DX,AL
MOV DX,C8253
MOV AL,36H
OUT DX,AL
MOV DX,D82531
MOV AX,100
OUT DX,AL
MOV AL,AH
OUT DX,AL
MOV DX,C8279
MOV AL,00H
OUT DX,AL
MOV AL,34H
OUT DX,AL
MOV AL,0D2H
OUT DX,AL
MOV STAT,0
MOV DX,C82591
MOV AL,0FEH
OUT DX,AL
WAIT1:
MOV DX,C8279
IN AL,DX
MOV AH,AL
AND AL,80H
JNE WAIT1
MOV AL,AH
AND AL,0FH
CMP AL,00H
JE WAIT1
MOV AL,40H
OUT DX,AL CHK: MOV DX,D8279
IN AL,DX
CMP AL,33H
JNE BBB
MOV DX,C82591
MOV AL,0FFH
OUT DX,AL
MOV AL,STAT
INC AL
MOV STAT,AL
CMP AL,1
JNZ AA1
MOV SI,OFFSET DISPBUF
MOV CX,4
MOV AL,00 BB0: MOV [SI],AL
INC SI
LOOP BB0
CALL DISP
JMP CHK AA1: CMP AL,2
JNZ AA2
MOV SI,OFFSET DISPBUF
MOV AL,00
MOV [SI],AL
INC SI
MOV [SI],AL
ADD SI,2
MOV [SI],AL
INC SI
MOV [SI],AL
CALL DISP
JMP CHK AA2: CMP AL,3
JNZ AA3
MOV SI,OFFSET DISPBUF+2
MOV CX,4
MOV AL,00 BB1: MOV [SI],AL
INC SI
LOOP BB1
CALL DISP
JMP CHK AA3: MOV STAT,00
MOV AL,0FEH
MOV DX,C82591
OUT DX,AL
CALL FULLSFM
CALL DISP
JMP CHK BBB: CMP AL,3BH
JE BBB0
JMP CCC BB0: MOV AL,STAT
CMP AL,1
JNZ BBB1
MOV AL,HOUR
ADD AL,1
DAA
MOV HOUR,AL
CALL FULLSH1
CALL DISP
JMP BBB BBB1: MOV AL,STAT
CMP AL,2
JNZ BBB3
MOV AL,MINUTE
ADD AL,1
DAA
MOV MINUTE,AL
CALL FULLFEN
CALL DISP
JMP BBB BBB3:
MOV AL,STAT
CMP AL,3
JZ
BBB4
JMP
DDD BBB4:
MOV AL,SECOND
ADD AL,1
DAA
MOV SECOND,AL
CALL FULLMIAO
CALL DISP
JMP BBB
CCC:
CMP AL,3AH
JE CC0
JMP DDD CC0:
MOV AL,STAT
CMP AL,1
JNZ CCC1
MOV AL,HOUR
SUB AL,1
DAS
MOV AL,HOUR
SUB AL,1
ADD AL,1
DAA
MOV SECOND,AL
CMP AL,60H
JNZ FANHUI
MOV SECOND,0
MOV AL,MINUTE
ADD AL,1
DAA
MOV MINUTE,AL
CMP AL,60H
JNZ FANHUI
MOV MINUTE,0
MOV AL,HOUR
ADD AL,1
DAA
MOV HOUR,AL
CMP AL,24H
JNZ FANHUI
MOV HOUR,0
CALL FULLSFM
CALL DISP
POP SI
POP DI
POP BX
POP AX
IRET FULL
SFM PROC NEAR
LEA DI,DISBUF
LEA BX,LED
LEA SI,SECOND
MOV CX,3 AA4:
MOV AL,[SI]
AND AL,0FH
XLAT
MOV [DI],AL
INC DI
MOV AL,[SI]
PUSH CX
MOV CL,4
SHR AL,CL
AND AL,0FH
XLAT
MOV [DI],AL
INC DI
POP CX
INC SI
LOOP AA4
RET FULL
SFM ENDP FULL
SHI PROC NEAR
LEA SI,DISBUF
MOV AL,0
MOV CX,4 CCC0:
MOV [SI],AL
INC SI
LOOP CCC0
LEA BX,LED
MOV AL,HOUR
AND AL,0FH
XLAT
MOV [SI],AL
XLAT
MOV [SI],AL
MOV AL,HOUR
MOV CL,4
SHR
AL,CL
AND AL,0FH
XLAT
INC
SI
MOV
[SI],AL
RET FULL
SHI ENDP FULL
FEN PROC NEAR
LEA SI,DISBUF
MOV AL,0
MOV [SI],AL
INC SI
MOV [SI],AL
INC SI
LEA BX,LED
MOV
AL,MINUTE
AND AL,0FH
XLAT
MOV
[SI],AL
MOV AL,MINUTE
MOV
CL,4
SHR AL,CL
AND AL,0FH
XLAT
INC SI
MOV
[SI],AL
RET FULL
FEN ENDP FULL
MIAO PROC NEAR
LEA SI,DISBUF
LEA BX,LED
MOV AL,SECOND
AND AL,0FH
XLAT
MOV [SI],AL
MOV AL,SECOND
MOV CL,4
SHR AL,CL
AND AL,0FH
XLAT
INC SI
MOV [SI],AL
MOV AL,0
INC SI
MOV [SI],AL
INC SI
MOV [SI],AL
INC SI
MOV [SI],AL
INC SI
MOV [SI],AL
RET FULL MIAO ENDP DISP
PROC NEAR
MOV CX,8
MOV DX,D8279
LEA SI,DISBUF DISI
MOV AL,[SI]
OUT DX,AL
INC SI
LOOP DISI
RET CODE ENDS
END START
第五篇:微机原理课程设计
电子信息科学与技术《微机原理》课程设计
一、本次课程设计的目的和意义
学习和掌握计算机中常用接口电路的应用和设计技术,充分认识理论知识对应用技术的指导性作用,进一步加强理论知识与应用相结合的实践和锻炼。通过这次设计实践能够进一步加深对专业知识和理论知识学习的认识和理解,使自己的设计水平和对所学的知识的应用能力以及分析问题解决问题的能力得到全面提高。
二、设计时间、基本要求
(一)、设计时间:二周(二)、基本要求:
a.每题2人;b.设计出完整的接口电路;c.编写出全部程序;d.在实验系统上调试通过。
三、设计选题与要求
选题一:多路模拟数据采集系统设计
要求:设计一个2路以上的模拟数据采集系统。
1、用按键选择那一路;
2、用LED显示转换结果(十进制数);
3、将每一路采集的100个数据存放到各自的存储区中。
选题二:温度测控系统的设计
要求:利用ADC0809设计一个温度测控系统,在LED数码显示器上显示温度值,并对温度进行测试和控制,当检测温度到达温度上限60℃时开风扇(即开启电动机,或以一个灯的亮灭表示),低于下限30℃时关闭风扇,LED上的显示内容为:XX ℃(采用十进制显示)。
选题三:函数发生器的设计(一)要求:利用DAC0832设计一个函数发生器,并利用按键选择输出波形,能分别产生三角波、阶梯波(每阶梯1V)、正向锯齿波、负向锯齿波和方波。并利用按键(自行定义)进行输出波形选择,同时将当前输出波形代号显示在LED上(左边位):0为方波、1为正向锯齿波、2为负向锯齿波、3 为三角波、4为阶梯波。
选题四:函数发生器的设计(二)要求:设计一个三角波发生器,可利用键盘改变其输出波形的幅值。例如,可利用1-5这5个数字键改变其输出波形的幅值,当按下1-5数字键时使D/A输出幅值从1V增加到5V。
选题五:电子音乐播放器
要求:设计要求:利用8253作为音阶频率发生器,应先对“2008年奥运会主题歌”进行编码后存入音符表,并建立好音阶表(只建立一个8度即可),音符长度不能少于60个,连续播放3遍后停止。
选题六:键盘电子乐器
要求:利用并行接口8155作为键盘接口,设计一个具有2个八度音阶的键盘乐器,音阶键不少于16个,采用扫描方式管理键盘,音域范围自行定义。
选题七:电子时钟设计
要求:利用8253定时器设计一个具有时、分、秒显示的电子时钟,并定义一个启动键,当按下该
键时时钟从当前设定值(可在显示缓冲区中予置)开始走时。
选题八:压力测控系统的设计(一)要求:对压力传感器的信号进行检测并在LED数码显示器上显示压力值,当压力低于30pa时,黄灯闪烁,闪烁周期为1秒。当压力高于150pa时,红灯闪烁。LED的显示内容为P=XXX。X为测试值。
选题九:可变输出频率方波发生器设计
要求:设计一个输出方波频率可利用按键改变的方波信号发生器(可以使用D/A也可以直接使用8253产生方波),利用键盘选择方波发生器的输出频率并驱动喇叭。输出频率=键号*100HZ
选题十:直流电机速度控制器设计
要求:利用D/A转换器和按键设计一个直流电动机转速控制器。按键定义如下:0 停止,1-1/10转速,2-2/10转速„„ 9 最高速(D/A输出满量程),键号每加1,D/A输出增加0.5V
选题十一:可任意启动/停止的电子秒表设计
要求:6位LED数码显示,计时单位为1/100秒。利用功能键进行启/停控制。其功能为:上电后计时器清0,当第一次(或奇数次)按下启/停键时开始计数。第2次(或偶数次)按下该键时停止计时,再一次按启/停键时清零后重新开始计时„„
选题十二:温度测试系统设计
要求:利用温度传感器和ADC0809设计一个温度测试系统,将测试结果(十进制)在LED上显示出来,并定义一个保持按键,当按下该键时,将当前测试值保持不变(按键不动作时为正常测量显示)。温度显示格式为:XXX ℃。(可以每隔0.3秒测量一次)
选题十三:压力测试系统设计(二)要求:利用压力传感器和ADC0809设计一个压力测试系统,并将测试结果(十进制)在LED上显示出来,并定义一个测试最大值按键,当按下该键时,可进行最大值测量(按键不动作时为正常测量显示),即:只有当当前测量值大于上次测量值时才刷新显示,显示格式为:P=XXX。可以每隔0.3秒测量一次。
选题十四:简易计算器系统设计
要求:设计一个可以进行2位数四则运算的计算器。
1、用按键输入数和运算符号;
2、用LED显示运算过程和结果(十进制数);
3、可以表示出当前的运算类型;
4、具有清零和复位功能;
5、具有连续运算功能。
选题十五:交通灯控制系统
要求:按照时间控制原则,利用并行接口和定时器,设计一套十字路口的交通灯管理系统,通行时间(或禁止时间)30秒,准备时间3秒,在准备时间里黄灯闪烁3次,闪烁频率为0.5秒,周而复始。可利用8255、8253等接口电路。
选题十六:计件系统设计
要求:利用8253计数,对外界脉冲技术,并将计数值在数码管上显示,可通过键盘控制重新计数。
四、设计任务及要求
1、接口设计:根据所选题目和所用的接口电路芯片设计出完整的接口电路,并在实验系统上完成电路的连接和调试通过。
2、程序设计:要求画出程序框图,设计出全部程序并给出程序设计说明和程序注释。
3、课程设计报告:(1)设计题目;
(2)系统的主要功能、作用以及主要技术性能指标;
(3)总体设计方案、工作和组成原理(框图)或设计说明、采用的技术路线等;
(4)系统设计:接口电路设计,程序设计(程序框图和程序清单及注释)其他有关的理论分析和计算;
(5)设计总结:对整个设计工作过程进行归纳和综合,对设计中所存在的问题和不足进行分析和总结,提出解决的方法、措施、建议和对这次设计实践的认识、收获和提高。