版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第11章接口技术
教学目的:了解80C51系列单片机与键盘、显示器、功率器件及打印机等外设连接的技术。教学重点:1.键盘接口的工作原理及应用;
2.LED显示器接口的工作原理及应用。
3.打印机的接口及应用。教学难点:1.键盘接口的工作原理。
2.LED显示器接口的工作原理
11.1键盘接口
键盘电路的设计应使CPU不仅能识别是否有键按下,还要能识别是哪一个键按下,而且能把此键所代表的信息翻译成计算机所能接收的形式。 在单片机应用系统中多采用非编码键盘,其分为独立式键盘和矩阵式键盘,硬件上此类键盘只提供通、断两种状态,其它工作都靠软件来完成。
11.1.1键盘工作原理1.键输入原理2.键输入接口与软件应解决的问题(l)键开关状态的可靠输入通常去抖动影响的方法有硬、软件两种。
图11.1键闭合及断开时的电压波动
(2)对按键进行编码以给定键值或直接给出键号
①监测有无键按下;②有键按下后,在无硬件去抖动电路时,应用软件延时方法除去抖动影响;③有可靠的逻辑处理办法;④输出确定的键号以满足散转指令要求。11.1.2独立式按键
1.独立式按键结构
在此电路中,按键输入都设置为低电平有效,上拉电阻保证了按键断开时,I/O口线有确定的高电平。
图11.2独立式按键电路2.独立式按键的软件编制
START:MOVA,#0FFH ;置输入方式
MOVP1,AL1:MOVA,P1;输入键状态
CJNEA,#0FFH,L3;有键按下转L3LCALLDELAY;延时5mS,省略
SJMPL1L3:LCALLDELLAY;延时5mSLCALLDELLAY ;延时5mSMOVA,P1 ;再读P1口
CJNEA,#0FFH,L2;确实有键按下转L2SJMPL1;误读键,返回L2:JNBACC.0,TAB0 ;为0转0号键首地址
JNBACC.1,TAB1;为1转1号键首地址
JNBACC.2,TAB2;为2转2号键首地址
JNBACC.3,TAB3;为3转3号键首地址
JNBACC.4,TAB4 ;为4转4号键首地址JNBACC.5,TAB5 ;为5转5号键首地址JNBACC.6,TAB6 ;为6转6号键首地址JNBACC.7,TAB7 ;为7转7号键首地址SJMPL1;再次读入键状态TAB0:LJMPOPR0 ;转向0号键功能程序TAB1:LJMPOPR1……..
TAB7:LJMPOPR7……..
OPR0:…….. ;0号键功能程序 LJMPSTART ;0号键程序执行完返回
……0PR7:……..;7号键功能程序……. LJMPSTART;7号键程序执行完返回
C51语言程序清单:#include<reg52.h> //包含SFR寄存器的头文件
#defineuintunsignedint //定义数据类型
#defineucharunsignedchar //定义数据类型main(void){uinti; //定义一个整型变量ucharvalue; while(1){P1=0xff; //设置P1口为输入方式do{}while(P1==0xff); //等待键盘输入for(i=0;i<1000;i++){}; //延时(值可自定)去抖动value=P1; //读取键值switch(value){case0xfe:K0_pro();break;//0号键调用K0_pro()键处理程序
case0xfd:K1_pro();break;//1号键调用K1_pro()键处理程序 ………..case0x7f:K7_pro();break;//7号键调用K7_pro()键处理程序 default:break; }do{}while(P1!=0xff); //等待键盘释放for(i=0;i<1000;i++){}; //延时(值可自定)去抖动
} }11.1.3行列式键盘1.行列式键盘电路的结构及原理
图11.3单片机I/O口组成的行列式键盘2.键盘的工作方式(l)循环扫描方式键盘扫描程序一般应具备下述几个功能:判断键盘上有无键按下;去除键的抖动影响;扫描键盘,得到按下键的键号;判别闭合的键是否释放。图11.3中32个键的键值从左上角的数字“0”键对应为如下分布:00H,01H,02H,03H,04H,05H,06H,07H08H,09H,0AH,0BH,0CH,0DH,0EH,0FH10H,11H,12H,13H,14H,15H,16H,17H18H,19H,1AH,1BH,1CH,1DH,1EH,1FH行线P2.0~P2.3处于输入状态,列线P1.0~P1.7为输出状态。按键设置在行、列线交点上,当某个键闭合时,则对应的行线和列线短路,行线输入即为列线输出。获取这32个键值时,P1口和P2口输出与输入的相应值为如下分布:
012345670FE×EFD×EFB×EF7×EEF×EDF×EBF×E7F×E8FE×DFD×DFB×DF7×DEF×DDF×DBF×D7F×D10FE×BFD×BFB×BF7×BEF×BDF×BBF×B7F×B18FE×7FD×7FB×7F7×7EF×7DF×7BF×77F×7
由以上分布可以总结出:闭合键的键值=行首键号+列号例如,当P1口的输出为F7H(11110111B),即其第3列有输出,读出P2口低4位的值为0DH(1101B),说明是第1行与第3列相交的键闭合,则键号=8+3=11。读键盘程序如下:KEY:LCALLKS ;调用KS判别有键按下吗?JNZK1 ;有键按下转移
LCALLDELAY;无键按下,调延时子程序
LJMP KEYK1:LCALLDELAY;加长延时时间,消除键抖动
LCALLDELAYLCALLKS;调用KS子程序再次判别有无键闭合JNZK2 ;键按下,转逐列扫描LJMPKEY;误读键,返回K2:MOVR2,#0FEH;首列扫描键码值送R2MOVR4,#00H ;首列号送R4K3:MOVA,R2 MOVP1,A;列扫描键码值送P1口MOVA,P2;读取行扫描键码值值JBACC.0,L1 ;第0行无键按下,转查第1行MOVA,#00H ;第0行有键按下,该行的行首键号#0H送ALJMPLK ;转求键值L1:JBACC.1,L2;第1行无键按下,转查第2行MOVA,#08H ;第1行有键按下,该行行首键号#08H送ALJMPLK ;转求键值L2:JBACC.2,L3;第2行无键按下,转查第3行MOVA,#l0H ;第2行有键按下,该行的行首键号#l0H送ALJMPLK ;转求键值L3:JBACC.3,NEXT;第3行无键按下,改查下一列
MOVA,#18H ;第3行有键按下,该行的行首键号 ;#l8H送ALK:ADDA,R4;行首键号加列号形成键值,送入APUSHACC ;键值入栈保护K4: LCALLDELAYLCALLKS ;等待键释放
JNZK4;未释放,等待
POPACC;键释放,弹栈送ACCRET;键扫描结束,返回NEXT:INCR4;修改列号,指向下一列MOVA,R2JNBACC.7,KEY;第7位为0,已扫描完最高列转KEYRLA ;未扫描完,键码值左移一位,变为下列键码值MOVR2,A ;扫描字暂存R2LJMPK3;转下列扫描KS:MOVA,#0 MOVP1,A ;将全键码值
#00H送P1口MOVA,P2;读入P2口行状态CPLA;变正逻辑,以高电平表示有键按下ANLA,#0FH ;屏蔽高4位RET ;出口状态:A
0时有键按下
(2)中断工作方式
采用中断扫描工作方式可提高CPU的工作效率。一种简易键盘接口如图11.5所示。图11.5中断方式键盘电路由于P1口为双向I/O口,可以采用“线路反转”法识别键值。步骤如下:(1)P1.0~P1.3输出0,由P1.4~P1.7输入并保存数据到A中;(2)P1.4~P1.7输出0,由P1.0~P1.3输入并保存数据到B中;(3)A的高四位与B的低四位相或成为键码值;(4)查表求得键号。线路反转汇编程序如下:
ORG0000H LJMPSTART ORG0003 LJMPFZH;转读键值程序
ORG 0030HSTART: MOVSP,#50HMOVP1,#0FH MOVIE,#81H;CPU和外部中断0开中断
… SJMP$ ORG0080H;读键值中断程序FZH:SETBRS0;选择第1组工作寄存器
MOVP1,#0F0H;设P1.0~P1.3输出0 MOVA,P1;读P1口
ANLA,#0F0H;屏蔽低4位,保留高4位
MOVB,A;P1.4~P1.7的值存B
MOVP1,#0FH;反转设置,设P1.4~P1.7输出0MOVA,P1 ANLA,#0FH;屏蔽高4位,保留低4位
ORLA,B;与P1.4~P1.7的值相或,形成按键的键码值
MOVB,A MOVR0,#00H;置键号初值
MOVDPTR,#TAB;LOOP:MOVA,R0 MOVCA,@A+DPTR;取键码值
CJNEA,B,NEXT2;与按键值相比较,不相等,继续
SJMPRR0;相等返回,键码值在A中NEXT2:INCR0;键值加1 CJNER0,#10H,LOOP;是否到最后一个键RR0:CLRRS0;恢复第0组工作寄存器
RETI TAB:DB0EEH,0EDH,0EBH,0E7H;0,1,2,3的键码值
DB0DEH,0DDH,0DBH,0D7H;4,5,6,7的键码值
DB0BEH,0BDH,0BBH,0B7H;8,9,10,11的键码值
DB07EH,07DH,07BH,077H;12,13,14,15的键码值 C51语言程序如下:ucharkeycode;ucharcodekey_value[16]={0xee,0xed,0xeb,0xe7,0xde,0xdd,0xdb,0xd7, 0xbe,0xbd,0xbb,0xb7,0x7e,0x7d,0x7b,0x77};//键码值voidmain(void){P1=0x0F; IT0=0; //外部中断0采用边沿触发方式IE=0x81; //CPU开中断,允许外部中断0中断while(1) //等待键值处理{…..};}voidint0_pro()interrupt0using1 //定义外部中断0中断函数,用第1组工作寄存器{{ucharkey,i;keycode=0x00; //置键号初值P1=0xf0; //设P1.0~P1.3输出0key=P1&0xf0; //保存P1.4~P1.7的值P1=0x0f; //反转设置,设P1.4~P1.7输出0key+=P1&0x0f; /与P1.4~P1.7的值相或,形成键码for(i=0;i<16;i++){if(key==key_value[i]) //查表得到键码值{keycode=i; //返回键号 break;}}}11.2显示器接口
10.2.1显示器概述10.2.2LED显示器的结构与原理图11.6“8”字型数码管下面以共阴极数码管为例说明字形与字形码的关系。对照图11.6(a)字段,字形码各位定义如下:D7D6D5D4D3D2D1D0DPGfedcba数据位D0与a字段对应,D1与b字段对应……,依此类推。参考图10-6(a)和(b)可以看出,如要显示“1”字形,b、c2字段应点亮,所以对应的字形码为00000110B。11.2.3LED静态显示方式
图11.7三位静态显示电路2.用串行口控制显示器1.用并行口控制显示器2.用串行口控制显示器11.2.4LED动态显示方式表
图11.8扫描式显示电路
这种工作方式是分时轮流选通数码管的公共端,使得各个数码管轮流导通,即各数码管是由脉冲电流导电的(循环扫描一次的时间一般为10ms)。当所有数码管依次显示一遍后,软件控制循环,使每位显示器分时点亮。例如,如果要显示“123DEF”时,位选码、段选码扫描一遍的相应显示状态如表11.2所示。
这种方式不但能提高数码管的发光效率,而且由于各数码管的字段线并联使用,从而大大简化了硬件线路。
按照图11.8所示电路编写一段6位数码管的显示子程序。设DIS0~DIS5是片内显示缓冲区,共6个单元,对应6个数码管的显示内容。程序中,先取DIS5中的数据,对应选中图11.8所示扫描式显示电路中最左边的数码管,其余以此类推。汇编语言程序清单如下:DIR:PUSH ACC PUSHDPHPUSHDPLMOVR0,#DIS5 ;指向显示缓冲区首单元 MOVR6,#20H ;选中最左边的数码管 MOVR7,#00H ;设定显示时间 MOVDPTR,#TAB1 ;指向字形表首地址DIR1:MOVA,#00HMOVP2,A ;关断显示 MOVCA,@R0 ;取要显示的数据MOVCA,@A+DPTR ;查表得字形码
MOVP1,A ;送字形码
MOVA,R6 ;取位选字
MOVP2,A ;送位选字HERE:DJNZR7,HERE ;延时
INCR0 ;更新显示缓冲单元
CLRC MOVA,R6 RRCA ;位选字右移
MOVR6,A JNZDIR1 ;未扫描完,继续循环
POPDPLPOPDPHPOPACC ;恢复现场
RETTAB1: DB3FH,06,5BH,4FH,66H,6DH,7DH,07;0H~7H DB7FH,6FH,77H,7CH,39H,5EH,79H,71H;8H~0FHC51语言程序清单如下:#include<reg51.h>#defineucharunsignedcharucharTABLE1[]={0x20,0x10,0x08,0x04,0x02,0x01};//位选码ucharTABLE2[]={0x06,0x5b,0x4f,0x5e,0x79,0x71}; //段选码,显示1,2,3,D,E,Fvoiddelay(void) //延时函数{uchari,j;for(i=0;i<200;i++){for(j=0;j<5;j++){;} //延时(参数可自定)}}
main(void) {uchari;for(;;){for(i=0;i<6;i++){P2=0X00; //关断显示P1=TABLE2[i]; //送字形码,显示某个字符P2=TABLE1[i]; //送位选字,选中某一位delay(); //调用延时函数}}}11.3功率开关器件接口
11.3.1输出接口的隔离技术(a)光电隔离原理图(b)光电隔离正确接法(c)光电隔离错误接法图11.9光电隔离器原理及接法
11.3.2功率开关器件举例
1.直流负载驱动电路
1)晶体管2)达林顿开关驱动电路3)功率场效应管图11.10直流电源负载驱动电路2.晶闸管(可控硅)驱动的负载电路
1)晶闸管及主要特性2)晶闸管与单片机接口电路图11.12单片机控制的可控硅接口电路3.继电器接口电路
1)电磁继电器
图11.13单片机控制的继电器接口电路J1一中间继电器;J2一交流负载。2)固态继电器图11.13固态继电器接口电路(a)DC-SSR接口电路(b)AC-SSR接口电路
10.4打印机接口
10.4.1微型打印机简介1.一般微型打印机的主要技术性能2.打印接口举例SP-RMDIIID型热敏微打的串行接口,常用引脚名称及功能如下:①RXD:数据线,打印机接收从计算机发来的数据。②GND:地线,③CTS:打印机“忙”状态信号。当该信号有效(高电平)时,表示打印机正忙于处理数据。此时,主计算机不能向打印机送入新的数据,否则将丢失。
10.4.2字符代码及打印命令1.命令代码2.字符代码
11.4.3打印机与单片机接口举例
本节以SP-RMDIII智能打印机为例介绍与单片机的连接与编程。打印机与单片机的连接如图11.16所示。该智能打印机默认的串行口波特率为9600,按照图11.16所示电路,编制一个程序。要求打印机先打印片内50H~5FH单元内的数据,此数据区内的数据已是分离的BCD码,均放在低半字节,然后再打印时间“2021年8月8日”。图11.16SP-RMDIII打印机与单片机的连接图汇编语言程序清单: ORG0000H LJMPMAIN ORG0200HMAIN:MOV SCON,#40H MOVTMOD,#20H MOVTH1,#0FDH ;串口波特率设置为9600 SETBTR1 MOVR0,#50H ;送打印数据区首地址 MOVR7,#16 ;送数据长度LOOP1:MOVA,@R0 ADDA,#30H ;变换为ASCII码LCALLPRT ;打印一个数据或字符 INCR0 DJNZR7,LOOP1 ;是否打印完数据MOVA,#0AH ;送换行命令代码
LCALLPRT CLRA MOVR3,ALP2:MOVDPTR,#TAB ;指向表首
MOVCA,@A+DPTR ;取待打印字符
LCALLPRT ;调打印程序
INCR3 MOVA,R3 XRLA,#9 JZLP3 ;打印完9个字符转LP3 MOVA,R3 SJMPLP2LP3:MOVA,#0AH ;送回车换行符
LCALLPRTHERE: SJMPHEREPRT: PUSHDPH PUSHDPLPRT1: JBP3.0,PRT1
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- DB51T 1618-2023 乡镇(街道)便民服务中心建设规范
- DB51T 988-2010 地震报警器规范
- DB51T 1079-2010 饲料中呕吐毒素的测定 高效液相色谱法
- 按钮开关生产加工项目可行性研究报告
- 摩托车锁投资项目可行性分析报告
- (施工建设)化肥测定仪项目可行性研究报告
- 聚四氢呋喃醚生产加工项目可行性研究报告
- 2024-2030年新版中国银钨合金项目可行性研究报告
- 2024-2030年新版中国明治橡皮布项目可行性研究报告
- 2024-2030年新版中国低压电路控制器项目可行性研究报告
- 影像科与临床科室定期沟通制度
- 2023-2024学年河南省洛阳市洛龙区数学四年级第一学期期末预测试题含答案
- 项目管理绩效考核管理办法
- 提高髋关节置换患者VTE防控措施落实PDCA
- 广西2023年广西北部湾银行校园招聘考试参考题库含答案详解
- 大学生心理健康教育读本PPT(第2版)高职完整全套教学课件
- 加油站安全检查表分析(SCL)及评价记录
- 丰田车系卡罗拉(双擎)轿车用户使用手册【含书签】
- 幼儿园突发安全事件事故处置措施
- 现代药物制剂与新药研发智慧树知到答案章节测试2023年苏州大学
- 肺结核的学习课件
评论
0/150
提交评论