第 1 页 共 30 页
1 系统设计
1.1 设计要求
(1)扩展键盘键位编码符合显示分系统的约定。
(2)扩展键盘与显示处理机通讯通过其异步串行接口来完成,波特率为9600 b/s (3)扩展键盘与显示处理机通讯的接口电平为RS232C标准。
(4)利用89C52的片内E2PROM作为程序存贮器,避免外扩存贮器占用单片机的输入/输出口资源,利用P3口的第二功能完成异步串行通讯功能,用一片ICL232CPE作为接口电平转换芯片,实现键盘的全部硬件逻辑功能。 1.2 系统框图
图1-2是单片机系统中键盘系统的构成原理框图,列出了基于单片机的串行键盘系统框图,它主要由3个部分组成,他们分别是:串行接口模块、按键模块、单片机。串行键盘上的数据通过单片机锁存译码,处理好的数据通过串行接口与PC机相连,并在电脑上显示相应的数据。其中键盘接口芯片STC89C52是该子系统的核心部分,它应具备如下功能:第一,产生按键扫描时序,并进行软件去抖动。如果有按键按下,实现按键编码等功能。第二,可以区分处理数字键和功能键。对多个按键同时按下,按一定的编码优先级处理。第三,通过MAX232连接STC89C52芯片和计算机的串行通信口,计算机把程序从九针串口送到MAX232芯片,电平转换后送仅单片机串行口,单片机串行模块把数据送到程序区。
图1-2单片机框图
晶振 键盘 STC89C52 单片机 锁存 译码 PC 串行接口RS2-32 2 方案论证
2.1 单片机及外围电路 2.1.1单片机的选择
方案1:采用74LS244芯片
20个引脚的74LS244芯片带三态输出的8位锁存器,有8个输入端D1—D8及8个输出端Q1—Q8。用74LS244芯片可配合键盘使用,但是I/O口较少,无法实现更多按键的电路。
1
第 2 页 共 30 页
方案2:使用8279芯片
40个引脚的8279芯片是由Intel于80年代首先推出的,参考资料较多,应用比较成熟。8279是一种通用的可编程键盘器件。其键盘部分提供一种扫描的工作方式,可以和具有64个触点的键控制阵列相连。其缺点是:元器件多,面积大,电路复杂,综合成本较高。
方案3:使用STC89C52芯片
40个引脚的STC89C52有高可靠性,超低价,低功耗等特点,需要额外的时钟电路,外接按键扫描需要下拉电阻。使用STC89C52芯片在系统中可编程,无需仿真,使用起来很方便。
考虑到成本和电路的简便程度,本设计采用的是STC89C52芯片进行设计。STC89C52芯片是我们熟悉的芯片,对其性能、引脚、电路的接法等在学习的过程中也有一定的了解,所以,选择STC89C52芯片在制作过程中也不会有太大的困难。 2.1.2键盘
键盘是微型计算机系统中最常用的人机对话输入设备。在单片机应用系统中为了控制系统的工作状态,以及向系统输入数据,应用系统设有按键或键盘。在计算机系统中,键盘有两种基本类型:编码键盘和非编码键盘。编码键盘本身除了按键以外,还包括产生编码的硬件电路,使用虽然方便,但价格较高,在一般单片机应用系统中很少采用。非编码键盘靠软件来识别键盘上的闭合键,由此得出键码,在单片机应用系统中普遍采用。
键盘分为独立式键盘接口电路和矩阵式键盘接口电路两种方式。 方案1:独立式键盘
独立式键盘就是一个按键对应一个端口输入,没一个按键都有一个按键电路来区分其是否有键按下。它们可以直接与单片机I/O线相接或通过输入口与数据线相接,结构简单。这些测试线相互独立无编码关系,因而键盘软件不存在译码问题,一旦坚持到某测试线上有键闭合,便可直接转入到相应的键功能处理程序进行处理。
方案2:矩阵式键盘
在键盘中按键数量较多时,为了减少I/O口的占用,通常将按键排列成矩阵形式,也就是常说的行列键盘-。在矩阵式键盘中,每条水平线和垂直线在交叉处不直接连通,而是通过一个按键加以连接。这样,一个端口(如P1口)就可以构成4*4= 16个按键,比之直接将端口线用于键盘多出了一倍,而且线数越多,区别越明显,比如再多加一条线就可以构成20键的键盘,而直接用端口线则只能多出一键(9键)。由此可见,在需要的键数比较多时,采用矩阵法来做键盘是合理的。矩阵式结构的键盘显然比直接法要复杂一些,识别也要复杂一些,列线通过电阻接正电源,并将行线所接的单片机的I/O口作为输出端,而列线所接的 I/O口则作为输入。这样,当按键没有按下时,所有的输出端都是高电平,代表无键按下。行线输出是低电平,一旦有键按下,则输入线就会被
2
第 3 页 共 30 页
拉低,这样,通过读入输入线的状态就可得知是否有键按下了。因此,本设计采用的是矩阵式键盘。 2.1.3按键消抖
键盘按键一般采用触点式按键开关,按键本身是机械开关,当按键背按下或释放时,按键触点的弹性会产生一种抖动现象。即当按键按下时,触点不会迅速可靠地接通;当按键释放时,触点也不会立即断开,而是要经过一段时间的抖动才能稳定下来。抖动时间视按键材料的不同一般在5~10ms之间。
按键稳定闭合时间的长短则是由操作人员的按键动作决定的,一般为零点几秒至数秒。键抖动会引起一次按键被误读多次。为确保CPU对键的一次闭合仅作一次处理,必须去除键抖动。在键闭合稳定时读取键的状态,并且必须判别到键释放稳定后再作处理。按键的抖动有硬件或软件两种方案。
方案1:硬件电路消除法
硬件消抖可利用RS触发器来吸收按键的抖动,其硬件电路接法如下图。一旦有键按下时,触发器就立即翻转,触点的抖动便不会再对输出产生影响,按键释放时也是这样。如图2-1-3硬件电路:
方案2:软件延时法
常用软件方法去抖,即检测出键闭合后执行一个延时程序,产生5ms~10ms的延时,让前沿抖动消失后再一次检测键的状态,如果仍保持闭合状态电平,则确认为真正有键按下。当检测到按键释放后,也要给5ms~10ms的延时,待后沿抖动消失后才能转入该键的处理程序。
本设计采用的是软件延时法。 2.2 波特率的选择
在异型机种的串行通讯中,当规定了传输速率后,MCS-51/52单片机系统中选取适
图2-1-3硬件电路
当的晶体振荡频率至关重要。他与串行接口的工作方式、电源控制寄存器PCON的SMOD位、定时器T1一起决定着通讯的成败。MCS-51/52单片机串行接口工作在方式0时,其
3
第 4 页 共 30 页
波特率固定不变,其大小为:晶振频率/12。此方式为同步方式;工作在方式2时为异步方式,其波率为2SMOD/64晶振频率:①SMOD=0时,波特率为:晶振频率/64;②当SMOD=1时,波特率为:晶振频率/32;串行接口工作方式为1,3时为异步方式且其波特率是可变的,除了与SMOD位的取值有关外,主要取决于定时器1的溢出率。波特率可由下式确定: 定时器1溢出率=定时器1的计数速率/(256-X) 而定时器1的溢出率又由计数速率和定时时间预置数X决定,即:
定时器1溢出率=定时器1的计数速率/(256-X)
此时T1工作方式2,即8位自动装载方式。这种方式可以避免通过中断服务程序来重新装入初值,所得波特率也比较精确。式中X即为在TH1和TL1中装入的初始计数值。定时器1的计数速率与定时器工作方式的选择有关。当选定T1为定时工作方式时,其计数输入脉冲为内部时钟信号,即每个机器周期使寄存器值加1。而每个机器周期为12个振荡周期,故计数速率为晶振频率的1/12。因此:
波特率={2SMOD/32}*(晶振频率/12)*{1/(256-X)} =(2SMOD*晶振频率)/[32*12*(256-X)]
由于本扩展键盘与显示处理机的串行通讯为异步方式,所以设置他的串行接口的工作方式为方式1,定时器1的工作方式为方式2。再根据波特率要求(9 600 b/s)求他的预置值。若系统晶体的振荡频率12 MHz时,当SMOD选为1时,TH1,TL1的初值计算如下:
波特率=2*12*104/{32*12*(256-x)}=9600b/s
解上式可得:X1=250(FAH)或X2=249(F9H)将X置入TH1,TL1时,波特率发生器产生的实际的传为:
波特率1=2*12*104/{32*12*(256-250)}=10416.67b/s 波特率误差1=(9600-10416.67)/9600=-8.5%
或 波特率2=8 928.57 b/s,波特率误差2=7%无论置入哪个数,PC机与单片机之间均无法完成正常的通讯。
通过上面的公式,我们要得到9600 的波特率,晶振为11.0592M 和12M,定时器1 为模式2,SMOD 设为1,分别看看那所要求的TH1 为何值。代入公式: 11.0592M
9600=(2÷32)×((11.0592M/12)/(256-TH1)) TH1=250 12M
9600=(2÷32)×((12M/12)/(256-TH1)) TH1≈249.49
上面的计算可以看出使用12M 晶体的时候计算出来的TH1 不为整数,而TH1 的值只能取整数,这样它就会有一定的误差存在不能产生精确的9600 波特率。若采用11.059 2 MHz晶振,按照上面公式计算出X=250 FAH,实际的传输速率为9 599.83 b/s,其误差为0.001 77%,PC机与单片机的通讯可正常进行。另外,SMOD位的选择有
4
相关推荐: