设计目的:
1.熟悉PS/2协议的原理
2.学习单片机的使用
设计内容:
依照PS/2协议,在51芯片上开发汇编程序,使得按下开发板上的按键时,能够在PC机上输出a、b、c。
实验环境:
开发板、STC12C2052AD芯片、PS/2线、PC机、Keil软件、STC-ISP程序下载器
相关参数:
单片机振荡频率6MHz(具体情况请看此型号单片机用户手册)
指令周期0.5微秒(51型单片机的指令周期是其振荡频率的12分之一)
PS/2连接器引脚定义(见参考文献《PS/2技术参考》)
能够接受的键盘时钟信号频率10-20KHz(最大33KHz,推荐设为15KHz)
 
设计思想:
使用开发板上的按钮产生中断信号,使单片机进入相应的中断处理程序,从而向PC机发送相应的扫描码。PC机主板中有一个解码芯片,此芯片在收到扫描码之后,引发PC机操作系统的中断(I/O的中断),转到操作系统中的中断处理程序,从面在系统中输出相应字符。
原理:
实际的通用键盘上的每一个键都对应一个唯一个扫描码,这些键会在极短的时间内被扫描一遍,以确认它们有没有被按下,如果某个键被按下了,就发送其相应的扫描码。而在开发板上,51芯片有三个按键,对应芯片上的两个中断口和一个定时/计数器输入口。中断接口可以直接使用,当按下键时就触发中断,而定时/计数器需要设置为初始值为FFH,一旦按下键便会溢出而产生中断的计数器。
主机与键盘有四根线相连,时钟信号数、数据线、接地线、电源线。
时钟信号在任何时刻都是由键盘产生的,PC机在时种的下降沿接收数据线上的信号,要是PC机向键盘发送数据,则键盘在时钟的上升沿接收数据线上的数据。虽是由键盘产生时钟信号,但是PC机对总线有着绝对的控制权,只要其将时钟线拉低(高低电平信号有这样的特性:只有一端的信号为低电平,则整条线的信号都为低电平。这就是为什么要向单片机I/O口输出一个信号,要先将外部输入单片机这个I/O口的信号释放(拉高)。否则输出的永远都是低电平),就要以抵制键盘的输出。
总线上有这些几种状态:
1、PC等待键盘输出状态(键盘可以输出状态):CLK=1,DATA=1;
2、键盘等待PC输出状态(PC可以输出状态):CLK=1,DATA=0(这个状态之前还有一些状态要生产生的,详情请见参考文献《PS/2技术参考》)
3、正在输出状态:此时的时钟线与数据线上的信号没有定值,依据所要发送的数据不同而不同,CLK=X,DATA=X
键盘从外部存储器中读取相应键位的扫描码,当要改变某个键所要发送的扫描码时,只需改变外部存储器中对应位置的扫描码,这样就可以方便地改变某键所要发送的扫描码。在存放扫描码时,只需将扫描码按顺序存放,如E0,70按存储地址从小到大顺序地排列。因为通码(make code)最多只有两个十六进制数,且如有两个则第一个必是E0H,而断码(break code)最多只有三个,且如果有三个,则第一个必是E0H,如果有二个,则第一个必是F0H。所以,当发送时,如果发现第一个是E0H或F0H的话,则再发送其后的一个扫描码。
注意事项:
1、  发送8个数据位时,是低位先发送(least significant bit first),如果是用高位先发送,主机自然是无法识别会发送的数据,会报警;
2、  如果想要精确计算时间,那么像子程序调用语句会占用两个指令周期也应该考虑到;
3、  连接线应该连在指示灯靠近51芯片的一端,否则无法接收到主机发来的信号;PS/2
4、  汇编程序前的org 语句必须按其指示的地址大小排列,小的在前,大的在后;
 
程序:
; =======================================
; program
; check clk and data before every 8 bit data sending
; a function is created for send all 11bit data
; a function is created for parity calculating
; CAPSLOCK :BIG LETTER P1.3=0,SMALL LETTER P1.3=1  
; =======================================

; =======================================
; VARS USED LOCALY
; R0 IS USED LOCALY AS A COUNTER
; 20H.1 20H.2 20H.3 20H.4 IS USED IN FUNCTION AS TEMP VAR
; R3,R4,R5 USED LOCALLY IN DELAY()

; ===================================
; Define Samples
; ====================================
MCLK EQU P1 .2      ; VALUE OF CLOCK LINE
MDATA EQU P1 .1      ; VALUE OF DATA LINE
SCAN EQU R1         ; VALUE OF THE SCAN CODE
RECV EQU R2         ; VALUE RECEIVED BY KEYBOARD
RECV2 EQU R6     ; THE VALUE RECEIVED SECONDLY
NEXTBIT EQU CY    ; VALUE OF THE BIT WILL SENT NEXT
PARITY EQU 20H .1     ; VALUE OF PARITY
TEMP   EQU 20H .2     ; THIS BIT IS FOR TEMPORITARY USE
TEMP1  EQU 20H .3     ; THIS BIT IS FOR TEMP USE
TEMP8BIT EQU 21H
LOOPCOUNTER EQU 30H  ; COUNTER SPECIAL FOR SENDALLBIT
SCROLLLOCK EQU P1 .5
CAPSLOCK EQU P1 .6
NUMLOCK EQU P1 .7
ERROR_LIGHT EQU P1 .4            ; PARITY ERROR
ERROR_LIGHT_STOPBIT EQU P1 .3    ; STOP BIT RECEIVE ERROR
; ===================================

; ===================================
; ORG
; ===================================
ORG 00H
JMP MAIN

ORG 0003H
LJMP K1DOWN

ORG    000BH
LJMP K3DOWN

ORG 0013H
LJMP K2DOWN

; ============================================================
; MAIN 
; ============================================================
MAIN:

; ==============================
; SET INTERRUPTER AND TIMER
    mov ie , #10000101B  ; 中断使能
    mov ip , #00H  ; 中断优先
    mov tcon , #00000101b  ; 中断为电平触发

; TIME0 AS A BUTTON
    MOV TMOD , #06H
    MOV TH0 , #0FFH
    MOV TL0 , #0FFH
    SETB ET0
    SETB TR0
; ==============================

; ==============================
; SET CLK AND DATA LINE TO NORMAL STATUS
    SETB MCLK
    SETB MDATA
; ==============================

SETB CAPSLOCK  ; CAPSLOCK OFF(1)
    SETB NUMLOCK   ; NUMLOCK OFF(1)
    SETB SCROLLLOCK      ; SCROLLLOCK OFF(1)

CHKSTATUS:
    JNB MCLK , CHKSTATUS     ; IF MCLK==0 THEN GOTO CHKSTATUS
    JB  MDATA , CHKSTATUS       ; IF MDATA==1 THEN GOTO CHKSTAUS
     ; NOW MCLK=1 AND MDATA =0 ,READY TO RECEIVE DATA FROM PC
    LCALL RECV_CHK_SEND    ; RECEIVE DATA FROM PC

LJMP CHKSTATUS      ; WAIT FOR BREAK

; =========

一个PS/2仿真键盘的设计相关推荐

  1. 怎样成为一个PS高手

    一个PS高手的话 这是一个PS高手的体会,希望能对大家有所启迪. 1.不要看到别人的作品第一句话就说:给个教程吧!你应该想这个是怎么做出来的.当你自己想出来,再对照别人的教程的时候,你就知道自己和别人 ...

  2. 一个PS高手的话,对初学者很实用

    一个PS高手的话,对初学者很实用 2011年05月09日 1.不要看到别人的作品第一句话就说:给个教程吧!你应该想这个是怎么做出来的.当你自己想出来,再对照别人的教程的时候,你就知道自己和别人的思路的 ...

  3. HDLBits 系列(42)根据仿真波形来设计电路之时序逻辑

    文章目录 前言 电路设计1 原题复现 题目解析 我的设计 电路设计2 原题复现 题目解析 我的设计 电路设计3 原题复现 题目解析 我的设计 电路设计4 原题复现 题目解析 我的设计 前言 上篇博文讨 ...

  4. 基于Matlab的模拟通信实验平台设计,【通信原理仿真实验】通信原理虚拟实验仿真平台的设计和实现_玛雅作文网...

    作文「通信原理虚拟实验仿真平台的设计和实现」共有 4564 个字,其中有 2704 个汉字,1316 个英文,162 个数字,382 个标点符号.作者佚名,请您欣赏.玛雅作文网荟萃众多优秀学生作文,如 ...

  5. 全网最细海龟 (turtle) 画图讲解 (五):输入/输出文字及鼠标与键盘交互设计

    目录 一.输入/输出文字 1. 输出文字 2. 输入文字 二.鼠标与键盘交互设计 1. 键盘事件 2. 鼠标事件 2.1 获取鼠标点击的位置 3. 计时器 最近博主在 CSDN 上看到许多关于海龟画图 ...

  6. android实现仿真键盘(KeyboardView适配)

    原生的键盘布局声明了@deprecated被废弃,虽然可以使用但明显不合需求. /*** @deprecated This class is deprecated because this is ju ...

  7. android自定义金额输入键盘_触摸键盘的设计解析

    本文为PMCAFF作者 呆呆丶于社区发布 众所周知,移动设备的触摸键盘相比于电脑的实体键盘而言,易用性较差.原因有很多,比如使用习惯,人机工程原理,触摸实感差异等等.这些原因导致我们在使用移动设备的触 ...

  8. matlab创新开放性实验,基于MATLAB 的自动控制原理实验仿真系统的设计

    基于MATLAB 的自动控制原理实验仿真系统的设计 基于MATLAB 的自动控制原理实验仿真系统的设计 田晴,张茁 (河北联合大学电气工程学院,河北唐山063000) 摘要:MATLAB的图形用户界面 ...

  9. 软键盘输入设计(C语言)

    前言 之前写过一篇关于软键盘输入设计的文章点击这里查看,用的是掌机自支持的zzdbase语言,文章结尾说了其实最初想用C来实现的,但是中途遇到了困难,便改为zzdbase语言了.最近项目中想到一个比较 ...

最新文章

  1. Mac VirtualBox 命令行Centos 调整窗口大小
  2. docker添加阿里云专属镜像
  3. Imation亏损额急剧增长 CEO仍表示“成功”
  4. Redis 总结精讲
  5. Java环境变量的设置
  6. Eclipse调试Java程序技巧
  7. 一張表的數據導入到另一張表
  8. OPPO F11 Pro渲染图曝光:升降式前置摄像头设计
  9. 1D和2D条码生成、检测、识别控件Barcode Xpress
  10. java 容器(联系数据结构)
  11. 傅里叶变换复数形式的实部代表什么_二维傅里叶变换与逆变换基于Unity的实现...
  12. 楼板的弹性计算和塑形计算_板计算的时候什么时候用弹性计算
  13. php企鹅号_腾讯内容开放平台
  14. 值得推荐五个编程学习的网站
  15. 网易考拉海购:电商高并发架构设计的铁律
  16. web安全:x-frame-options(防止网页被嵌套)头配置
  17. win10进行系统还原 (可以还原注册表文件 还可以清除近期卸载不了的软件)
  18. R手册(Time Series)--zoo
  19. linux关于压缩解压tar包
  20. 【干货】柔性电池的未来展望

热门文章

  1. 日本展示机器人Erica,看脸还不错
  2. 如何下载最新版eclipse
  3. 别再傻傻的用CentOS 8的版本了,快升级成CentOS 8 Steam (升级教程)
  4. express框架学习笔记
  5. Fiddler调式使用知多少(一)深入研究
  6. Golang之数据库连接池
  7. Android 仿抖音可上下滑动切换视频或图片
  8. c语言-实型数据的舍入误差
  9. python 导入 arcpy模块_ArcPy学习入门(六):导入Arcpy-阿里云开发者社区
  10. 多目千兆网工业相机同步采集(FPGA+DDR+千兆网+上位机)