广西科技大学优秀课程设计《 基于单片机的PS2键盘解码器设计》.docx
《广西科技大学优秀课程设计《 基于单片机的PS2键盘解码器设计》.docx》由会员分享,可在线阅读,更多相关《广西科技大学优秀课程设计《 基于单片机的PS2键盘解码器设计》.docx(29页珍藏版)》请在冰豆网上搜索。
![广西科技大学优秀课程设计《 基于单片机的PS2键盘解码器设计》.docx](https://file1.bdocx.com/fileroot1/2022-11/20/9a50751f-8097-4208-8066-73a0eb184e24/9a50751f-8097-4208-8066-73a0eb184e241.gif)
广西科技大学优秀课程设计《基于单片机的PS2键盘解码器设计》
单片机技术课程设计任务书
课题名称基于单片机的PS2键盘解码器设计
系别理学院
专业_电子信息科学与技术_
班级___________
学号_______________________
姓名_______________________
指导教师刘青正_
2012年6月28日
项目名称:
基于单片机的PS2键盘解码器设计
项目类型
硬件设计
要求
设计结果+设计说明书
承担学生姓名
学号
专业
电子信息科学与技术
班级
项目设计要求:
1、主要研究内容和功能要求:
※研究内容:
单片机控制技术+PS2键盘原理+显示输出方法
※功能要求:
1)键盘按键的有效显示(可采用数码管或LCD屏,自主选择);
2)多键按下识别与连续按键的识别;
3)组合按键的识别;
4)完成相关电路的原理图绘制。
2、参考资料(部分,仅供参考、借鉴):
1)求实科技.单片机典型模块设计实例导航.北京:
人民邮电出版社,2004.5
2)任致程,凌红武.电子制作工艺技巧.北京:
人民邮电出版社,1999
3)王彦朋.大学生电子设计与应用.北京:
中国电力出版社.2007.3
4)胡汉才.单片机原理及其接口技术.北京:
清华大学出版社,2004
3、阶段成果自查:
0-0阶段:
第18周(6月11日~6月17日)理论研究、电路资料查找、焊接及测试。
2-1阶段:
第19周(6月18日~6月24日)硬件电路分析与程序设计、编程、调试。
2-2阶段:
第20周(6月25日~6月29日)完成调试,撰写课程设计说明书,验收。
项目设计进度具体要求:
2012年6月8日~2012年6月10日:
确定分组、选择题目、领用器件;
2012年6月11日~2012年6月13日:
资料查找、理论学习、原理分析、思路构建;
2012年6月14日~2012年6月17日:
电路焊接与测试;
2012年6月18日~2012年6月22日:
硬件设计、软件设计;
2012年6月23日~2012年6月24日:
系统联调、错误查找,进一步修改、完善;
2012年6月25日~2012年6月28日:
撰写设计说明书;
2012年6月28日下午:
电科091班学生,验收、上交设计说明书及相关文档;
2012年6月29日上午:
电科092班学生,验收、上交设计说明书及相关文档;
2012年6月29日下午:
电科093班学生,验收、上交设计说明书及相关文档;
项目验收方式与考核成绩评定:
1、在规定的时间统一进行验收。
(检查硬件、检查成果、检查设计说明书,问题回答)
2、考核成绩评定由成果验收(占30%)+设计说明书质量(60%)。
3、成绩由百分制转换为五等级。
例(100~90)为优秀,以此类推为良好、中等、及格、不及格。
项目开始时间:
2012-6-11
项目结束时间:
2012-6-29
任务下达:
刘青正
目录
一理论部分…………………………………………………………………3
1课题要求与内容…………………………………………………………3
2PS/2键盘原理……………………………………………………………3
二硬件部分…………………………………………………………………4
1单片机模块………………………………………………………………4
2LCD显示模块……………………………………………………………6
三软件部分…………………………………………………………………6
1编程思路…………………………………………………………………6
2电路原理图…………………………………………………………………7
3软件仿真…………………………………………………………………7
4硬件测试…………………………………………………………………7
四课程设计实践体会………………………………………………………7
参考文献……………………………………………………………………8
附录…………………………………………………………………………8
一理论部分
PS/2键盘解码
1课题要求与内容
在单片机系统中,经常使用的键盘都是专用键盘。
此类键盘为单独设计制作的,成本高、使用硬件连接线多,且可靠性不高,这一状况在那些要求键盘按键较多的应用系统中更为突出。
与此相比,在PC系统中广泛使用PS/2键盘具有价格低、通用可靠,且使用连接线少(仅使用2根信号线)的特点,并可满足多种系统的要求。
因此在单片机系统中应用PS/2键盘是一种很好的选择。
※研究内容:
单片机控制技术+PS2键盘原理+显示输出方法
※功能要求:
1)键盘按键的有效显示(可采用数码管或LCD屏,自主选择);
2)多键按下识别与连续按键的识别;
3)组合按键的识别;
4)完成相关电路的原理图绘制。
2PS/2键盘原理
PS/2协议:
目前,PC机广泛采用的PS/2接口为mini-DIN6pin的连接器,如图1所示:
PS/2设备有主从之分,主设备采用Female插座,从设备采用Male插头。
现在广泛使用的PS/2键盘鼠标均在从设备方式下工作。
PS/2接口的时钟与数据线都是集电极开路结构,必须外接上拉电阻(一般上拉电阻设置在主设备中)。
主从设备之间数据通信采用双向同步串行方式传输,时钟信号由从设备产生。
2.1从设备到主设备的通信
当从设备向主设备发送数据时,首先检查时钟线,以确认时钟线是否为高电平。
如果是高电平,从设备就可以开始传输数据;反之,从设备要等待获得总线的控制权,才能开始传输数据。
传输的每一帧由11位组成,发送时序及每一位的含义如图2所示:
每一帧数据中开始位总是为0,数据校验采用奇校验方式,停止位始终为1。
从设备到主设备通信时,从设备总是在时钟线为高时改变数据线状态,主设备在时钟下降沿读人数据线状态。
2.2主设备到从设备的通信
主设备与从设备进行通信时,主设备首先将时钟线和数据线设置为“请求发送”状态,具体方式为:
首先下拉时钟线至少100us抑制通信,然后下拉数据线“请求发送”,最后释放时钟线。
在此过程中,从设备在不超过10us的间隔内必须检查这个状态,当设备检测到这个状态时,它将开始产生时钟信号。
此时数据传输的每一帧由12位构成,其时序和每一位含义如图3所示:
与从设备到主设备通信相比,其每帧数据多了一个ACK位。
这是从设备应答接收到字节的应答位,由从设备通过拉低数据线产生,应答位ACK总是为0。
主设备到从设备通信过程中,主设备总是在时钟线为低电平时改变数据线的状态,从设备在时钟上升沿读人数据线状态。
2.3PS/2键盘的编码
目前,PC机使用的PS/2键盘都默认采用第2套扫描码集。
扫描码有两种不同的类型:
“通码(makecode)”和“断码(breakcode)”。
当一个键被按下或持续按住时,键盘会将该键的通码发送给主机;而当一个键被释放时,键盘会将该键的断码发送给主机。
根据键盘按键扫描码的不同,可将按键分为三类:
第一类按键通码为一个字节,断码为0xF0+通码形式。
如A键,其通码为0x1C;断码为0xF00x1C。
第二类按键通码为两字节0xE0+0xXX形式,断码为0xE0+0xF0+0xXX形式.如RightCtrl键,其通码为0xE00x14;断码为0xE00xF00x14。
第三类按键有两个:
PrintScreen键,其通码为0xE00x120xE00x7C,断码为0xE00xF00x7C0xE00xF00x12;Pause键,其通码为0xE10x140x770xE10xF00xl40xF00x77,断码为空。
组合按键扫描码的发送是按照按键发生的次序,如按下面顺序按左Shift十A键:
①按下左Shift键;②按下A键;③释放A键;④释放左Shift键。
那么计算机上接收到的一串数据为:
0x120x1C0xF00x1C0xF00x12。
二硬件部分
1单片机模块
STC12C5A16S2单片机是一款基于8位单片机处理芯片STC89C52RC的系统。
其功能强大,可以实现单片机开发的多种要求,学习、开发者可以根据需要选配多种常用模块,达到实验及教学的目的。
89C51单片机学习板功能强大,具有报警,跑马灯、串行通信(max232)、段码液晶(msm0801LCD)和字符液晶显示(LCD1602)、电机控制(L298)、A/D转换(TLC2543)、D/A转换(TLC5615)、温度采集(DS18B20)、数字信号合成(AD9851)、实时时钟电路(DS1302)、4—20mA输出、PWM输出(UC3842)、红外检测(KSM-603LM)控制等十七种功能,供学习者学习开发使用。
89C51-III单片机学习板采用的芯片都是常用芯片,使学习者对常用电子产品进一步学习理解。
主CPU电路选用STC89C52RC系列单片机,STC89C52RC是采用8051核的ISP(InSystemProgramming)在系统可编程芯片,最高工作时钟频率为80MHz,片内含8KBytes的可反复擦写1000次的Flash只读程序存储器,器件兼容标准MCS-51指令系统及80C51引脚结构,芯片内集成了通用8位中央处理器和ISPFlash存储单元,具有在系统可编程(ISP)特性,配合PC端的控制程序即可将用户的程序代码下载进单片机内部,省去了购买通用编程器,而且速度更快。
STC89C52RC系列单片机是单时钟/机器周期(1T)的兼容8051内核单片机,是高速/低功耗的新一代8051单片机,全新的流水线/精简指令集结构,内部集成MAX810专用复位电路。
STC12C5A16S2特点:
(1)增强型1T流水线/精简指令集结构8051CPU
(2)工作电压:
3.4V-5.5V(5V单片机)/2.0V-3.8V(3V单片机
(3)工作频率范围:
0-35MHz,相当于普通8051的0~420MHz.实际工作频率可达48MHz.
(4)用户应用程序空间12K/10K/8K/6K/4K/2K字节
(5)片上集成512字节RAM
(6)通用I/O口(27/23个),复位后为:
准双向口/弱上拉(普通8051传统I/O口)
可设置成四种模式:
准双向口/弱上拉,推挽/强上拉,仅为输入/高阻,开漏
每个I/O口驱动能力均可达到20mA,但整个芯片最大不得超过55mA
(7)ISP(在系统可编程)/IAP(在应用可编程),无需专用编程器
可通过串口(P3.0/P3.1)直接下载用户程序,数秒即可完成一片
(8)EEPROM功能
(9)看门狗
(10)内部集成MAX810专用复位电路(外部晶体20M以下时,可省外部复位电路)
(11)时钟源:
外部高精度晶体/时钟,内部R/C振荡器。
用户在下载用户程序时,可选择是使用内部R/C振荡器还是外部晶体/时钟。
常温下内部R/C振荡器频率为:
5.2MHz~6.8MHz。
精度要求不高时,可选择使用内部时钟,因为有温漂,请选4MHz~8MHz
(12)有2个16位定时器/计数器
(13)外部中断2路,下降沿中断或低电平触发中断,PowerDown模式可由外部中断低电平触发中断方式唤醒
(14)PWM(4路)/PCA(可编程计数器阵列),也可用来再实现4个定时器或4个外部中断(上升沿中断/下降沿中断均可支持)
(15)STC89Cc516AD具有ADC功能。
10位精度ADC,共8路
(16)通用异步串行口(UART)
(17)SPI同步通信口,主模式/从模式
(18)工作温度范围:
0-75℃/-40-+85℃
2LCD显示模块
显示模块使用1602液晶。
1602液晶也叫1602字符型液晶,它是一种专门用来显示字母、数字、符号等的点阵型液晶模块它有若干个5X7或者5X11等点阵字符位组成,每个点阵字符位都可以显示一个字符。
每位之间有一个点距的间隔每行之间也有间隔起到了字符间距和行间距的作用。
1602内部集成了160个不同的点阵字符图形,其代码为该字符的ASCII码。
1602采用了8位并行数据传输,其引脚功能如下表:
符号
引脚说明
符号
引脚说明
GND
电源地
VCC
电源正
V0
接电位器调整对比度
RS
数据/指令寄存器选择(H/L)
RW
读/写信号线(H/L)
E
使能端
D0
DataI/O
D1
DataI/O
D2
DataI/O
D3
DataI/O
D4
DataI/O
D5
DataI/O
D6
DataI/O
D7
DataI/O
BLA
背光电源正极
BLK
背光电源负极
三软件部分
1编程思路
编程流程图:
程序参见附录。
2电路原理图
电路原理图参见附录
3软件仿真
由于仿真软件没有键盘器件文件,故无法仿真,只能烧写程序进行测试。
4硬件测试
经过硬件测试,发现程序正常运行。
四课程设计实践体会
通过这两个星期的设计实践,使我对单片机的构造以及用法有了深入的了解,掌握到了一些课本上没有的知识。
具体的体会和收获如下:
1、对课上所学知识有了进一步的理解,同时加深了基础知识的印象,对今后的学习和工作有了很大的帮助。
2、熟悉了各种电子器件的外观以及电器特性。
3、初步了解并掌握了电子器件的焊接方法,达到了练手的目的。
4、对于单片机在各个方面的应用有了更加深入的了解,对于单片机的扩展应用印象深刻,深感单片机的小而强大。
5、对于专业的软件也有了充分的理解,当然也掌握了它们的用法。
6、同时也加强了自身的团队合作能力。
参考文献:
[1]求实科技.单片机典型模块设计实例导航.北京:
人民邮电出版社,2004.5
[2]任致程.凌红武.电子制作工艺技巧.北京:
人民邮电出版社,1999
[3]王彦朋.大学生电子设计与应用.北京:
中国电力出版社,2007.3
[4]胡汉才.单片机原理及其接口技术.北京:
清华大学出版社,2004
附录
源程序代码:
;安装1602液晶,烧写程序后,把键盘
;插入键盘接口,按键后液晶有显示
PS2_CLKBITP3.2
PS2_DATABITP3.4
LCD_RSBITP2.1;LCD控制端口
LCD_RWBITP2.2
LCD_ENBITP2.3
LCD_XEQU27H;LCD地址变量
KEY_DATAEQU30H
EXT0_NUMEQU31H
BEEPBITP3.3
RESETBIT20H.0;20H作为程序状态控制字
H_SCANBIT20H.1;行扫描标志
SHIFTBIT20H.3;SHIFT标志
BREAK_CBIT20H.4;断码标志
;---------------------------------------------------
ORG0000H
JMPMAIN
ORG0003H
JMPEXT0
ORG0030H
;---------------------------------------------------
MAIN:
MOVSP,#60H
MOVP0,#0FFH
MOVP1,#0FFH
MOVP2,#0FFH
MOVP3,#0FFH
ACALLINIT_LCD
ACALLSET_LCD1
ACALLSET_LCD2
MOVR5,#100;延时2S
ACALLDELAY
MOVA,#01H
ACALLWCOM;清屏
MOV20H,#00H
MOVLCD_X,#00H
MOVR1,#00H
MOVR2,#00H
MOVKEY_DATA,#00H
CLRIT0;外部中断0为低电平触发
SETBEA;开总中断
SETBEX0;开外部中断0
DISP:
JBRESET,MAIN;程序热复位
JMPDISP
;----------------------------------------------------------
;根据PS2的键值来查找其代码,并取得顺序码。
;然后再根据顺序码来查找ASCII码。
;入口:
;APS2的键值
;出口:
;A键值的ASCII码
;R3存放顺序码
;----------------------------------------------------------
PS2KEY_D:
MOVB,A
MOVDPTR,#TABLE_D
MOVR3,#0FFH
KEY_IN1:
INCR3
MOVA,R3
MOVCA,@A+DPTR
CJNEA,B,KEY_IN2
MOVA,R3;找到,取顺序码
MOVDPTR,#TABLE_D_ASC;根据顺序码来查找ASCII码
MOVCA,@A+DPTR
RET
KEY_IN2:
CJNEA,#0FFH,KEY_IN1;末完,继续查
RET;0FFH为结束码
;+++++++++++++++++++++++++++++++++++++++++++++++++++++++++
PS2KEY_U:
MOVB,A
MOVDPTR,#TABLE_D
MOVR3,#0FFH
KEY_IN3:
INCR3
MOVA,R3
MOVCA,@A+DPTR
CJNEA,B,KEY_IN4
MOVA,R3;找到,取顺序码
MOVDPTR,#TABLE_U_ASC;根据顺序码来查找ASCII码
MOVCA,@A+DPTR
RET
KEY_IN4:
CJNEA,#0FFH,KEY_IN3;末完,继续查
RET;0FFH为结束码
;------------------------------------------------------
;外部中断子程序
;R1中断次数计数
;------------------------------------------------------
EXT0:
CJNER1,#00H,IN_LOOP;跳过第一位启动位
JMPIN_LOOP3
IN_LOOP:
CJNER1,#09H,IN_LOOP1;2-9位为数据
IN_LOOP1:
JNCIN_LOOP3;大于或等于9,跳转。
RRA
JBPS2_DATA,IN_LOOP2;判数据是“1”,还是“0”
ANLA,#7FH;是“0”最高置位为0
JMPIN_LOOP3
IN_LOOP2:
ORLA,#80H;是“1”最高置位为1
IN_LOOP3:
INCR1;中断计数
JNBPS2_CLK,$;等待PS2_CLK变高
IN_LOOP4:
CJNER1,#0BH,IN_LOOP5;一桢数据是否读完?
IN_LOOP5:
JNCIN_LOOP6;大于或等于11,跳转。
JMPEXT0_END
IN_LOOP6:
CJNEA,#0F0H,IN_LOOP6E;断码是否开始
SETBBREAK_C;置断码标志
MOVR1,#00H
JMPEXT0_END
IN_LOOP6E:
CJNEA,#66H,IN_LOOP6A;BackSpace键功能
JBBREAK_C,IN_LOOP6F
MOVR1,#00H
MOVR4,LCD_X
CJNER4,#00H,IN_LOOP6G;判是否到显示起始位
JMPEXT0_END
IN_LOOP6G:
DECLCD_X;删除前一位数
MOVA,#20H
ACALLCONV1;有INCLCD_X指令
DECLCD_X;所以要再减一次
MOVA,#10H;光标左移一格
ACALLWCOM
JMPEXT0_END
IN_LOOP6F:
CLRBREAK_C
MOVR1,#00H
JMPEXT0_END
IN_LOOP6A:
CJNEA,#12H,IN_LOOP6C;左SHIFT
JBBREAK_C,IN_LOOP6B
MOVR1,#00H
SETBSHIFT;置SHIFT标志
JMPEXT0_END
IN_LOOP6B:
CLRSHIFT
CLRBREAK_C
MOVR1,#00H
JMPEXT0_END
IN_LOOP6C:
CJNEA,#59H,IN_LOOP7;右SHIFT
JBBREAK_C,IN_LOOP6D
MOVR1,#00H
SETBSHIFT
JMPEXT0_END
IN_LOOP6D:
CLRSHIFT
CLRBREAK_C
MOVR1,#00H
JMPEXT0_END
IN_LOOP7:
CJNEA,#71H,IN_LOOP8;DEL键功能,清屏。
JBBREAK_C,IN_LOOP7A
MOVR1,#00H
MOVA,#01H
ACALLWCOM
MOV20H,#00H;清所有的标志
MOVLCD_X,#00H
JMPEXT0_END
IN_LOOP7A:
CLRBREAK_C
MOVR1,#00H
JMPEXT0_END
IN_LOOP8:
CJNEA,#5AH,IN_LOOP9;ENTER键功能,换行。
JBBREAK_C,IN_LOOP8C
MOVR1,#00H
CPLH_SCAN;换行取反
JNBH_SCAN,IN_LOOP8A
MOVA,#0C0H