微机原理课程设计简易密码键盘的设计.docx
《微机原理课程设计简易密码键盘的设计.docx》由会员分享,可在线阅读,更多相关《微机原理课程设计简易密码键盘的设计.docx(26页珍藏版)》请在冰豆网上搜索。
微机原理课程设计简易密码键盘的设计
一.题意分析及解决方案
1、课程设计名称及内容
应用STARES598PCI单板开发机系列接口芯片设计一套密码键盘包含10个数字键,一个确认键,一个取消键
(1每次输入6位密码,按确定键,密码正确后蜂鸣器响一下表示密码正确,密码错误后红灯闪烁
(2可按下取消键取消所有输入
(3密码三次错误后蜂鸣器急促响达三分钟,不允许输入
2、题意需求分析
通过本设计给定的内容和要求,可以得出以下:
本设计主要完成时对用户输入的6位(0~9的密码进行核对,以及根据输入的密码的正确性作出相应的处理。
密码键盘在实际生活中应用十分广泛,要实现它必须解决以下问题:
(1输入部分此部分也是用户唯一的可见部分并有用户输入6位密码及修改,由于使用的是密码键盘,在此不能使用标准键盘,本实验采用倒序,即小键盘上标识的0键则实际输入的9键,1键对应8键···
(2实现用户输入的密码与预先设定密码的比较
(3应根据比较结果的正确性完成相应的处理工作
3、解决问题的思路及方法
①硬件部分
(1为了实现用户输入数据,应向用户提供键盘,此键盘应能够满足输入0~9十个数字及一个确定键或一个取消键,由于8255A的端口只有三个(A口B口C口为了不使用户盲输(即不显示输入的数据还需要将输入的数据输出(使用密码键盘必须使用户输入的密码显示出来,因为用户使用密码键盘时输入的数和键盘上标识的数并不相等,整个键盘上每个键对应的数值只有密码键盘的设计者自己知道,此时如使用8255A则端口数不够,经讨论后使用8279A,8279A芯片时一种通用的可编程的键盘/显示接口部件,用8279A作为键盘/显示器接口则可以实现对键盘、显示自动扫描,因此用8279A行线和列线配合确定用户输入的6位密码及确认键和取消键
(2由于密码比较后,对密码是否正确都需要使用蜂鸣器给出相应提示,因此应对蜂鸣器的响声频率作出改变,此应用8253A芯片对蜂鸣器的响声频率设定,另外当密码错误且次数小于三次时,红灯闪烁所以要应用逻辑笔,同时用8253A定时向逻辑笔输入低电平,以使红灯闪烁。
②软件部分
根据题意要求接口芯片使用的是8279A和8253A,软件部分应完成对两者的初始化㈠使8279A处于接受数据状态,即使8279A工作于键盘工作方式,当需输出用户输入的数据时应使8279A设置于显示工作方式(8个字符,左端口显示
㈡软件部分还应实现关键部分:
用户输入的密码与设定密码的比较及处理
㈢设置8253A当密码正确后用计数器0使蜂鸣器响声相对频率较高,用计数器1控制密码输入错误三次后蜂鸣器频率相对较高,计数器2在密码错误(次数小于3时,
向逻辑笔输出低电平,使红灯闪烁
二、硬件设计
1、选择器件74LS138译码器
174LS138译码器在本设计中的作用
扫描计数器采用编码工作方式
274LS138译码器的功能分析
74LS138是3/8译码器,即对3个输入信号进行译码。
得到8个输出状态。
G1,G2A,G2B,为数据允许输出端,G2A,G2B低电平有效。
G1高电平有效。
A,B,C为译码信号输出端,Y0~Y7为译码输出端,低电平有效。
74LS138管脚图功能表
374LS138译码器的技术参数
极限值
电源电压------------------------------------------------7V
输入电压------------------------------------------------7V
工作环境温度------------------------------------------0~70℃
贮存温度-------------------------------------------------65~150℃
2、选择器件74LS240
174LS240译码器在本设计中的作用
本设计实验中主要是为增加LED的驱动电流
274LS240译码器的功能分析
74LS240TTL八反相三态缓冲器/线驱动器
引出端符号:
1A,2A输入端
G
1,G
2三态允许端(低电平有效
1Y~8Y输出端
逻辑图:
逻辑表:
374LS240译码器的技术参数
表2-1374LS240技术参数
3、选择器件蜂鸣器
1蜂鸣器在本设计中的作用
在本实验中,蜂鸣器用作将8253产生的不同频率装换为不同的音调的声音。
2蜂鸣器的功能分析
扬声器是将电能转化成声能,并将声能辐射到空气中去的一种电声转换器件。
当输入端输入一定频率的方波时,在RC震荡电路的作用下,蜂鸣器会发出一定频率的声音。
8253A有六种工作方式,在本次实验中我们用到了方式0和方式3:
1.方式0(技术结束产生中断
方式0为程序启动,只计数/定时一次的工作方式,下图为其时序图:
2.方式3(方波发生器
如下图所示是方式3的时序图。
在这种方式下,可以从OUT得到对称的方波输出。
当
装入的计数值N为偶数时,则前N/2计数过程中,OUT为高电平;后N/2计数过程中OUT为低电平,计数过程连续进行。
若N为奇数,则(N+1/2计数过程中,OUT保持高电平;而(N-1/2计数期间,OUT为低电平。
38253的技术参数数据名称符号测试条件MAX
MIN单位输入低电压VIL
0.8
-0.5
V
输入高电压VIHVCC+0.52.4V输出低电压VOL
0.452.4V输出高电压VOHV输入负载电流IIL
±10ΗA输出浮动电流IOFLVIN=VCC∽0V±10ΗA电源电流VCC
VOUT=
VCC∽0.45V
140
MA
6、选择芯片8279A
18279A在本次设计中的作用
8279A用来接收用户输入的6位密码及确定键和取消键
2芯片8279的功能分析
8279A芯片是一种通用的可编程的键盘/显示接口,单个芯片就能完成键盘和LED
的显示控制两种功能,可与任何8位机接口相连,若8279A作为键盘/显示接口,则可实现
a.方式3计数值为偶数时的波形a.方式0正常计数
对键盘、显示器的自动扫描,它能同时完成键盘输入和显示控制两种功能。
键盘接口电路可最多控制64个按键或传感器组成的阵列,可自动消除开关抖动、自动识别键码并具有多键同时按下保护功能。
显示接口电路采用自动扫描方式工作,最多可连接16位LED显示器。
采用该芯片设计键盘与显示接口电路可简化程序,从而减少CPU运行时间,提高工作效率。
(1数据缓冲器及I/O控制
数据缓冲器为双向缓冲器,连接内、外总线,用于传送CPU和8279之间的命令或数据。
I/O控制线实现CPU对8279内部各种寄存器、缓冲器读写数据和读写控制命令进行控制。
(2控制与定时寄存器及定时控制
控制与定时寄存器用于寄存键盘及显示工作方式控制字以及其它操作方式控制字。
该寄存器接收并锁存CPU送来的命令,然后通过译码产生相应的控制信号,从而完成相应的控制功能。
定时与控制电路由N个基本计数器组成,其中,第一个计数器是一个可编程N级分频器,N可由软件编程在2~31间取值。
该分频器将外部时钟CLK分频得到内部所需的100kHz时钟,再经分频为键盘提供适当的扫描频率和显示时间。
3FIFO/传感器RAM及其状态寄存器
FIFO/传感器RAM是一个双重功能的8×8位RAM。
在键盘或选通工作方式时,它是FIFORAM,其输入/输出遵循先入后出的原则。
此时,FIFO状态寄存器存放FIFO的工作状态,若FIFO不空,IRQ信号为高电平,向CPU申请中断。
在传感器矩阵方式工作时,该存储器用于存放传感器矩阵中每一个传感器的状态。
在此方式中,若检出传感器发生变化,则IRQ信号变为高电平,向CPU申请中断。
4显示RAM和显示地址寄存器
显示RAM用于存储显示数据,容量为16×8。
在显示过程中,存储的显示数据轮流从显示寄存器输出。
显示寄存器分为A、B两组,OUTA3~0、OUTB3~0。
它们即可以单独送数,也可以组成一个8位的字,OUTA输出高4位,OUTB输出低4位。
显示寄存器的输出与显示扫描配合,轮流驱动被选中的显示器件,实现稳定的动态显示。
显示地址寄存器用来寄存CPU读/写显示RAM的地址,它可以由命令设定,也可以设置成在每次读出或写入之后自动递增。
8279的操作方式是通过CPU对8279送入命令时来实现编程的。
当数据选择端A0置1时,
CPU对8279写入数据为命令字,读出的数据为状态字。
8279共有八条命令。
其功能及命令字定义分述如下。
1.键盘/显示方式设置命令字
命令格式:
D7D6D5D4D3D2D1D0
000DDKKK
其中:
D7、D6、D5=000方式设置命令特征位。
DD(D4、D3:
来设定显示方式,其定义如下:
00:
8个字符显示,左入口
00:
16个字符显示,左入口
00:
8个字符显示,右入口
00:
16个字符显示,右入口
所谓左入口,即显示位置从最左一位(最高位开始,以后逐次输入的显示字符逐个向右顺序排列;所谓右入口,即显示位置从最右一位(最低位开始,以后逐次输入的显示字符时,已有的显示字符逐个向左顺序移动。
KKK(D2、D1、D0:
用来设定七种键盘、显示工作方式:
000编码扫描键盘,双键锁定
001译码扫描键盘,双键锁定
010编码扫描键盘,N键轮回
011译码扫描键盘,N键轮回
100编码扫描传感器矩阵
101译码扫描传感器矩阵
110选通输入,编码显示扫描
111选通输入,译码显示扫描
双键锁定与N键轮回是多键按下时的两种不同的保护方式。
双键锁定为两键同时按下提供的保护方法。
再消颤周期里,如果有两键同时按下,则只有其中一个键弹起,而另一个键保持在按下位置时,才被认可。
N键轮回为N键同时按下的保护方法。
当有若干键按下时,键盘扫描能够根据发现他们的顺序,依次将它们的状态送入FIFORAM中。
2.程序时钟命令
命令格式:
D7D6D5D4D3D2D1D0
001PPPPP
其中:
D7、D6、D5=001为时钟命令特征位。
PPPPP(D4、D3、D2、D1、D0用来设定外部输入CLK端的时钟进行分频的分频数N。
N取值为2~31。
例如外部时钟频率为2MHZ,PPPPP被置为10100(N=20,则对输入的外部时钟20分频,以获得8279内部要求的100KMZ的基本频率。
3.读FIFO/传感器RAM命令
命令格式:
D7D6D5D4D3D2D1D0
010AIXAAA
其中:
D7D6D5=010为读FIFO/传感器RAM命令特征位。
该命令字只在传感器方式时使用。
在CPU读传感器RAM之前,必须使用这条命令来设定传感器RAM中的8个地址(每个地址一个字节。
AAA(D2、D1、D0为传感器RAM中的八个字节地址。
AI(D4为自动增量特征位。
当AI=1时,每次读出传感器RAM后地址自动加1使地址指针指向下一个存储单元。
这样,下一个数据便从下一个地址读出,而不必重新设置读FIFO/传感器RAM命令。
在键盘工作方式中,由于读出操做严格按照先入先出顺序,因此,不需使用此命令。
4.读显示RAM命令
命令格式:
D7D6D5D4D3D2D1D0
011AIAAAA
其中:
D7D6D5=011为读显示RAM命令字的特征位。
该命令用来设定将要读出的显示RAM地址。
AAAA(D3、D2、D1、D0用来寻址显示RAM命令字的特征位。
由位显示RAM中有16个字节单元故需要4位寻址。
AI(D4为自动增量特征位。
当AI=1时,每次读出后地址自动加1指向下一地址。
5.写显示RAM命令
命令格式:
D7D6D5D4D3D2D1D0
100AIAAAA
其中:
D7D6D5=100为写显示RAM命令字的特征位。
在写显示器RAM之前用该命令用来设定将要写入的显示RAM地址。
AAAA(D3、D2、D1、D0为将要写入的存储单元地址。
AI(D4为自动增量特征位。
当AI=1时,每次写入后地址自动加1指向下一次写入地址。
6.显示禁止写入/消隐命令特征位
命令格式:
D7D6D5D4D3D2D1D0
101XIW
AIW
BBL
ABL
B
其中:
D7D6D5=101为显示禁止写入/消隐命令特征位。
IW/A、IW/B(D3、D2为A、B组显示RAM写入屏蔽位。
由于显示寄存器分成A、B两组,可以单独送数,故用两位来分别屏蔽。
当A组的屏蔽位D3=1时,A组的显示RAM禁止写入。
因此,从CPU写入显示器RAM数据时,不会影响A的显示。
这种情况通常在采用双4位显示器时使用。
因为两个双四位显示器是相互独立的。
为了给其中一个双四位显示器输入数据而又不影响另一个四位显示器,因此必须对另一组的输入实行屏蔽。
BL/A、BL/B(D1、D0为消隐显示位。
用于对两组显示输出消隐。
若BL=1时,对应组的显示输出被消隐。
当BL=0时,则恢复显示。
7.清除命令
命令格式:
D7D6D5D4D3D2D1D0
110CDCDCDCFCA
其中:
D7D6D5=110清除命令特征位。
CDCDCD(D4D3D2用来设定清除显示RAM方式。
共有四种消除方式,见表6-10-1。
CF(D1用来置空FIFO存储器,当=1时,执行清除命令后,FIFORAM被置空,使中断输出线复位。
同时,传感器RAM的读出地址也被置0。
CA(D0为总清的特征位。
它兼有CD和CF的联合效能。
在CD=1时,对显示的清除方式由D3、D2的编码决定。
清除显示RAM约需160S。
在此期间FIFO状态时的最高位DU=1,表示显示无效。
CPU不能向显示RAM写入数据。
四、状态格式与状态字
8279的FIFO状态字,主要用于键盘和选通工作方式,以指示FIFORAM中的字符数和有无错误发生。
其格式为:
D7D6D5D4D3D2D1D0
DUS/EOUFNNN
其中:
DU(D7为显示无效特征位。
当DU=1表示显示无效。
当显示RAM由于清除显示或全清命令尚未完成时,DU=1。
表6-10-1CD位定义的清除方式
D4D3D2清除方式
0将显示RAM全部清零
10将显示RAM清成20H(A组=0010;B组=0000
11将显示RAM全部置1
0不清除(若CA=1,则D3、D2仍有效
3芯片8279的技术参数
三、硬件设计分析1.硬件连接图
2、连接分析
在实验中用到这两片芯片,采用了不同的片选线,8253采作CS4片选,8279使用CS5片选,在编程中也对它们的端口地址进行了不同的编码。
8253的各个记数器中的门控信号均与高电平连接,每个记数器的时钟信号的频率依据程序要求的不同而不同,在本实验中三个时钟的频率分别为1593、62.5K,采用这些频率可以实现设计要求。
输出端也由要求来确定,分别用于控制蜂鸣器和红灯的工作。
8279部分的片选线由CS5确定,输入时钟为2M,A、B、C、D信号线分别与键盘区对应相连。
四、软件部分的实现
1、系统运行流程图
2、控制程序设计思想说明
简易密码键盘的主要功能是实现8279扩展的密码键盘,通过输入数据同初始设置的密码比较,若密码比较相同则蜂鸣器鸣响,密码比较错误则红灯闪烁,若密码三次错误后蜂鸣器急促鸣响3分钟,且不允许输入。
其中,初始设置为六位数字的密码,数据的键入通过扩展的小键盘来实现,当输入的数据在0-9之间时,输入正常并把数据寄存在缓冲区BUFFER中,当扫描到的数据为10时,则执行取消功能,即取消所有输入。
程序比较检验是否有6次输入,若有则执行确认功能,即执行密码比较子程序。
其中,主程序为键盘的扫描读取从键盘输入的数据,即将扫描的键码值转化为相应的键号值,数据键为0-9,功能键有确认取消键。
子程序有密码比较调用蜂鸣器和红灯的显示
输出的程序。
源程序如下:
.MODELTINY
PCIBAR3EQU1CH
Vendor_IDEQU10EBH
Device_IDEQU8376
.STACK100
.DATA
IO_Bit8_BaseAddressDW?
msg0DB'BIOS不支持访问PCI$'
msg1DB'找不到StarPCI9052板卡$'
msg2DB'读8位I/O空间基地址时出错$'
KEYCOUNTDB?
KEYDB7DUP(?
FLAGDB?
COUNTDB30H
LED_TABDB90H,080H,0f8H,82H,92H,99H,0B0H,0A4HDB0F9H,0C0H,88H,83H,0C6H,0A1H,86H,8EHCOM_ADDRDW00C3H
T0_ADDRDW00C0H
T1_ADDRDW00C1H
T2_ADDRDW00C2H
CMD_8279DW00B1H
DATA_8279DW00B0H
.CODE
START:
MOVAX,@DATA
MOVDS,AX
NOP
CALLInitPCI
CALLModifyAddress
CALLINIT8279
MOVKEYCOUNT,0
MOVSI,0
START11:
CALLSCAN_KEY
JNCSTART11
XCHGAL,KEYCOUNT
INCAL
CMPAL,7
JNZSTART2
MOVFLAG,30H
CALLCOMP
CMPFLAG,31H
JZRIGHT
CALLWRONG
EE:
MOVKEYCOUNT,0
MOVSI,0
CALLINIT8279_1
JMPSTART11
START2:
XCHGAL,KEYCOUNT
CALLKEY_NUM
LEABX,LED_TAB
XLAT
CALLWRITE_DATA
JMPSTART11
START_EXIT:
JMP$
RIGHT:
MOVDX,COM_ADDR
MOVAL,10H;选择通道0,方式0,二进制记数OUTDX,AL
MOVDX,T0_ADDR
MOVAL,7EH
OUTDX,AL
JMPEXIT
SCAN_KEYPROCNEAR
MOVDX,CMD_8279
INAL,DX
READ_FIFO:
ANDAL,7
JZNO_KEY
READ:
MOVAL,40H
OUTDX,AL
MOVDX,DATA_8279
INAL,DX
CMPAL,0CAH
JZEE
MOVBL,AL
SUBBL,0C9H
NEGBL
ADDBL,30H
MOVKEY[SI],BL
INCSI
STC
SCAN_KEY1:
RET
NO_KEY:
CLC
JMPSCAN_KEY1
SCAN_KEYENDP
WRONGPROCNEAR
MOVBL,COUNT
INCBL
MOVDX,COM_ADDR
MOVAL,7EH;选择通道1,方式3,二进制记数OUTDX,AL
MOVDX,T1_ADDR
MOVAL,7EH
OUTDX,AL
MOVAL,7EH
OUTDX,AL
CMPBL,33H
JNZRETU
MOVDX,COM_ADDR
MOVAL,0A0H;选择通道2,方式0,二进制记数OUTDX,AL
MOVDX,T2_ADDR
MOVAL,7EH
OUTDX,AL
MOVAL,7EH
OUTDX,AL
JMPSTART11
RETU:
MOVCOUNT,BL
RET
WRONGENDP
;8279初始化
INIT8279PROCNEARMOVDX,CMD_8279
MOVAL,34HOUTDX,AL
MOVAL,0
OUTDX,AL
RET
INIT8279ENDP
INIT8279_1PROCNEAR
CALLCLEAR
MOVAL,90H
OUTDX,AL
RET
INIT8279_1ENDP
CLEARPROCNEAR
MOVDX,CMD_8279
MOVAL,0DEH
OUTDX,AL
WAIT1:
INAL,DX
TESTAL,80H
JNZWAIT1
RET
CLEARENDP
KEY_NUMPROCNEAR
ANDAL,3FH
RET
KEY_NUMENDP
WRITE_DATAPROCNEARMOVDX,DATA_8279
OUTDX,AL
RET
WRITE_DATAENDP
COMPPROCNEAR
CMPKEY[0],31H
JNZMME
CMPKEY[1],32H
JNZMME
CMPKEY[2],33H
JNZMME
CMPKEY[3],34H
JNZMME
CMPKEY[4],35H
JNZMME
CMPKEY[5],36H
JNZMME
MOVFLAG,31H
MME:
MOVAL,AL
RET
COMPENDP
InitPCIPROCNEAR
MOVAH,00HMOVAL,03HINT10H;清屏MOVAH,0B1H
MOVAL,01H
INT1AH
CMPAH,0
JZInitPCI2
LEADX,msg0InitPCI1:
MOVAH,09HINT21H
JMPExit
InitPCI2:
MOVAH,0B1HMOVAL,02H
MOVCX,Device_IDMOVDX,Vendor_I