C51单片机应用设计与技能训练(第2版)课件 任务9 设计六轴机械臂控制系统_第1页
C51单片机应用设计与技能训练(第2版)课件 任务9 设计六轴机械臂控制系统_第2页
C51单片机应用设计与技能训练(第2版)课件 任务9 设计六轴机械臂控制系统_第3页
C51单片机应用设计与技能训练(第2版)课件 任务9 设计六轴机械臂控制系统_第4页
C51单片机应用设计与技能训练(第2版)课件 任务9 设计六轴机械臂控制系统_第5页
已阅读5页,还剩66页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

单片机与键盘的连接一、键盘及其抖动问题键盘是由若干按键组成的开关矩阵,它是微型计算机最常用的输入设备,用户可以通过键盘向计算机输入指令、地址和数据。一般单片机系统中采用非编码键盘,非编码键盘是由软件来识别键盘上的闭合键,它具有结构简单,使用灵活等特点,因此被广泛应用于单片机系统。一、键盘及其抖动问题组成键盘的按键有触点式和非触点式两种,单片机中应用的一般是由机械触点构成的。当开关S断开时,P1.0输入为高电平,S闭合时,P1.0输入为低电平。由于按键是机械触点,当机械触点断开、闭合时,会有抖动。消除抖动的方法硬件方法:一般不常用。软件方法:单片机设计中常用软件法,软件去除抖动其实很简单,就是在单片机获得P1.0口为低的信息后,不是立即认定S已被按下,而是延时10毫秒或更长一段时间后再次检测P1.0口,如果仍为低,说明S的确按下了,这实际上是避开了按键按下时的抖动时间。而在检测到按键释放后(P1.0为高),再延时5~10个毫秒,消除后沿的抖动,然后再对键值处理。二、单片机与键盘的连接将每个按键的一端接到单片机的I/O口,另一端接地。1、通过I/O口连接:(一)独立式按键接口技术实例如下图所示,采用不断查询的方法,即检测是否有键闭合,如有键闭合,则去除键抖动,判断键号并转入相应的键处理。假设两个键定义如下:P3.0:开始执行某种操作(假设让8只发光二极管闪烁)。P3.1:停止执行。voiddelay(unsignedchar);bitkey();voidlsd(unsignedchar);unsignedcharvkey;bitstart_end=0;voidmain(){unsignedcharldata;while(1){}}if(key()){if(vkey==1)start_end=1;elsestart_end=0;}if(start_end){ldata=~ldata;delay(250);}elseldata=0xff;P0=ldata;源程序源程序(延时函数delay())voiddelay(unsignedchart){unsignedchari,j;for(i=t;i>0;i--)

for(j=200;j>0;j--);}bitkey(){unsignedchartemp;bitflag=0;temp=P3;temp=temp|0xfc;temp=temp^0xff;if(temp==0)returnflag;else{}}delay(25);temp=P3|0xfc;temp=temp^0xff;if(temp==0)

returnflag;else{vkey=temp;flag=1;

while(temp){temp=P3|0xfc;temp=temp^0xff;}}returnflag;源程序(判断是否有键按下函数)2、采用中断方式各个按键都接到一个与非门上,当有任何一个按键按下时,都会使与门输出为低电平,从而引起单片机的中断,它的好处是不用在主程序中不断地循环查询,如果有键按下,单片机再去做相应的处理。实例试编程实现由3个按键控制发光二极管的全亮、闪烁或全灭。#include<reg51.h>voiddelay(unsignedchar);unsignedcharflag;voidmain(){IT0=1;EA=1;EX0=1;while(1){switch(flag){case1:P0=0x00;break;case2:P0=~P0;delay(250);break;case3:P0=0xff;break;}}}voiddelay(unsignedchart){unsignedchari,j;for(i=t;i>0;i--)for(j=200;j>0;j--);}中断服务函数voidisr_int0()interrupt0{unsignedcharkdata;kdata=P1;kdata=kdata^0xff;kdata>>=1;if(kdata!=0){kdata>>=1;if(kdata!=0)flag=3;elseflag=2;}elseflag=1;}(二)矩阵式键盘接口技术在键盘中按键数量较多时,为了减少I/O口的占用,通常将按键排列成矩阵形式。在矩阵式键盘中,每条水平线和垂直线在交叉处不直接连通,而是通过一个按键加以连接。这样,一个端口(如P1口)就可以构成4*4=16个按键,在需要的键数比较多时,采用矩阵法来做键盘是合理的。1、矩阵式键盘的结构当按键没有按下时,所有的输入端都是高电平,代表无键按下。一旦有键按下,则输入线就会被拉低,这样,通过读入输入线的状态就可判断是否有键按下了。1、矩阵式键盘的结构2、矩阵式键盘的按键识别方法——行扫描法1)判断键盘中有无键按下。将全部行线置低电平,然后检测列线的状态。只要有一列的电平为低,则表示键盘中有键被按下,而且闭合的键位于低电平线与4根行线相交叉的4个按键之中。若所有列线均为高电平,则键盘中无键按下。2)判断闭合键所在的位置。在确认有键按下后,即可进入确定具体闭合键的过程。其方法是:依次将行线置为低电平,即在置某根行线为低电平时,其它线为高电平。在确定某根行线位置为低电平后,再逐行检测各列线的电平状态。若某列为低,则该列线与置为低电平的行线交叉处的按键就是闭合的按键。2、矩阵式键盘的按键识别方法——行扫描法行扫描法行扫描法识别按键的方法就象在二维平面上找确定的点,要在二维平面上找到确定的点。确定这点的横坐标:行线位置确定它的纵坐标:列线位置公式:键值=行号×列数+列号实例89S51单片机的P1口用作键盘I/O口,P0口用作输出口,用于输出所按键的键号(0~F)。89S51单片机的P1口用作键盘I/O口,键盘的列线接到P1口的低4位,键盘的行线接到P1口的高4位。列线P1.0~P1.3分别接有4个上拉电阻到正电源+5V,并把列线P1.0~P1.3设置为输入线,行线P1.4~P1.7设置为输出线。4根行线和4根列线形成16个相交点。行扫描识别步骤(1)检测当前是否有键被按下:检测的方法是P1.4~P1.7输出全“0”,读取P1.0~P1.3的状态,若P1.0~P1.3为全“1”,则无键闭合,否则有键闭合。(2)去除键抖动:当检测到有键按下后,延时一段时间再做下一步的检测判断。(3)若有键被按下,应识别出是哪一个键闭合。识别键闭合的方法对键盘的行线进行扫描。P1.4~P1.7按下述4种组合依次输出:P1.71110P1.61101P1.51011P1.40111在每组行输出时读取P1.0~P1.3,若全为“1”,则表示为这一行没有键闭合,否则有键闭合。由此得到闭合键的行值和列值,然后可采用计算法或查表法将闭合键的行值和列值转换成所定义的键值。流程图效标志键盘扫描有键闭合延时去抖动扫描键盘计算键值闭合键释放建立有效标志建立无返回找到闭合键NYNYNY键盘扫描程序#include<reg51.h>unsignedcharseg[16]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e};voiddelay(unsignedchar);unsignedcharkey_scan();voidmain(){unsignedcharval_key;while(1){val_key=key_scan();if(val_key!=0xff)P0=seg[val_key];}}voiddelay(unsignedchart){unsignedchari,j;for(i=0;i<t;i++)

for(j=0;j<200;j++);}键盘扫描程序键盘扫描函数unsignedcharkey_scan(){unsignedcharkdata,vkey,keyNo;bitiskey=0;//标志,在确定具体哪一个键按下时,如果检测到有一个键按下则该标志置1P1=0x0f;//行线送“0”kdata=P1;//读取列线值

kdata&=0x0f;if(kdata==0x0f)return0xff;//无键按下,建立无效标志(0xff为无键按下的无效标志)

键盘扫描函数else//若列线均为“1”则无键按下,否则有键按下

{delay(25);//有键按下,去除抖动

kdata=0xef;while(!iskey)//扫描键盘

{vkey=P1=kdata;//送扫描码至P1口行线,并将扫描码保存到vkey中

kdata=P1;//读取列线值

kdata&=0x0f;if(kdata==0x0f){kdata=vkey;//若没有键盘按下,则取出行扫描码

kdata<<=1;//换扫描下一行的扫描码(循环向左移一位

kdata|=1;}键盘扫描函数else//若有键按下则键处理{kdata^=0x0f;//为计算列值的方便,将列线P1.3~P1.0分别与1异或即按位取反

switch(kdata)//计算列值

{case1:keyNo=0;break;case2:keyNo=1;break;case4:keyNo=2;break;case8:keyNo=3;break;}iskey=1;}}

键盘扫描函数vkey=vkey>>4;//取行扫描码

vkey^=0x0f;//将行扫描码取反

switch(vkey){case1:keyNo+=0;break;//把行值加到列值中

case2:keyNo+=4;break;case4:keyNo+=8;break;case8:keyNo+=12;break;}do{kdata=P1;kdata&=0x0f;}while(kdata!=0x0f);//判断键释放

}returnkeyNo;}案例空调制冷控制系统预置温度控制如下图所示,“UP”是“升温”按钮,接INT0,“DOWN”是“降温”按钮,接INT1。显然,该案例中,提高或降低调节温度均采用中断方式实现,按“UP”则产生外部中断0,按“DOWN”产生外部中断1。源程序(主函数)调节温度的设置可分别在外部中断0和外部中断1的中断服务程序中实现,在中断服务程序中,调节温度放在变量temp(采用BCD码)中,每发生一次中断,temp中的数据加1或减1,并再分别由8051的P1、P2控制的两个数码管显示其温度值。#include<reg51.h>unsignedchartemp=30;main(){unsignedchart10,t;IT0=IT1=1;t10=temp/10;t=temp%10;P1=(t10<<4)|(t&0x0f);EA=1;EX0=EX1=1;while(1);}//按升温按钮的中断服务程序voidisr_int0()interrupt0{unsignedchart10,t;if(temp<30)temp++;t10=temp/10;t=temp%10;P1=(t10<<4)|(t&0x0f);}温度设定中断子程序://按降温按钮的中断服务程序voidisr_int1()interrupt2{unsignedchart10,t;if(temp>20)temp--;t10=temp/10;t=temp%10;P1=(t10<<4)|(t&0x0f);}温度设定中断子程序:提示:本案例还解决了一个处理十进制温度(BCD码)的问题,请留意。本案例只是提供一个思路,仅供参考,不要把思维局限在本案例上。本案例只用了两个按钮,可以直接采用中断法,但本任务却要四个按钮,能直接用吗?显然不行?知识梳理与总结本任务通过温度报警器预置温度的实现,让读者掌握键盘工作原理及其与单片机接口的相关知识,学会应用。本任务重点内容如下:(1)键盘工作原理、按键抖动问题及其消除方法;(2)独立式按键与单片机连接的电路及其编程;(3)矩阵式键盘的结构及其按键识别方法——行列扫描法的程序设计。任务作业P281~P282T8-4~T8-6串行接口结构通信的概念所谓通信,是指微型计算机系统内部部件之间、微型计算机与外部设备之间、微型计算机与微型计算机之间的数据传送(信息交换)。分类并行通信串行通信串行通信和并行通信并行通信,即数据的各位同时传送;串行通信,即数据一位一位顺序传送。

计算机1GND

计算机2GND并行通信

计算机1GND

计算机2GND发送接收串行通信一、串行通信的分类

数据通常是以字符(或字节)为单位组成字符帧传送的。字符帧由发送端一帧一帧地发送,通过传输线为接收设备一帧一帧地接收。发送端和接收端可以有各自的时钟来控制数据的发送和接收,这两个时钟源彼此独立,互不同步。1.异步通信1)字符帧——也叫数据帧起始位。位于字符帧开头,只占一位,始终为逻辑0低电平。数据位。根据情况可取5位、6位、7位或8位,低位在前高位在后。若所传送数据为ASCII字符,则取7位。奇偶校验位。仅占一位,用于表征串行通信中采用奇校验还是偶校验。停止位。位于字符帧末尾,为逻辑“1”高电平,通常可取1位、1.5位或2位。帧格式:第n-1字符帧D70/110D0D1D2D3D4D5D6D70/110D0D18位数据奇偶校验奇偶校验停起止始位位停起止始位位第n+1字符帧第n字符帧帧格式:第n-1字符帧10D0D1D2D3D4D5D6D70/111110D08位数据奇偶校验空闲位停起止始位位停止位起始位第n字符帧第n+1字符帧插入了3个空闲位的帧2)波特率波特率(BautRate)是指每秒钟传送信号的数量,单位为波特(Baud)。在异步通信中,波特率是最重要的指标,用于表征数据传输的速度。波特率越高,数据传输速度越快。可以由用户根据实际情况而通过软件设定。提示:(1)要注意波特率与比特率是有区别的,每秒钟传送二进制数的位数定义为比特率,单位是bit/s。由于在单片机串行通信中传送的信号就是二进制信号,因此波特率与比特率数值上相等,单位采用bit/s。(2)波特率与字符的实际传输速率不同,字符的实际传输速率是指每秒钟内所传字符的帧数。例如,假如数据传送的速率是120字符/秒,而每个字符如上述规定包含10数位(1个起始位,8个数据位和1个停止位组成一帧),则其传送波特率为:10bit×120字符/s=1200波特。2.同步通信在异步通信中,每个字符要用起始位和停止位作为字符开始和结束的标志,占用了时间;所以在数据块传递时,为了提高速度,常去掉这些标志,采用同步传送。由于数据块传递开始要用同步字符来指示,同时要求由时钟来实现发送端与接收端之间的同步,故硬件较复杂。二、串行通信的传输方向A站发送器B站接收器A站B站发送器发送器接收器接收器A站B站发送器接收器接收器发送器单工半双工全双工三、MCS-51单片机的串行接口结构MCS-51系列单片机内部有一个串行接口(SerialPort),是一个可编程的全双工(能同时进行发送和接收)通信接口,具有UART(Universalasynchronousreceivertransmitter通用异步接收和发送器)的全部功能。该串行接口电路主要由串行口控制寄存器SCON、发送和接收电路等三部分组成。MCS-51串行接口的结构去申请中断发送SBUF(99H)接收SBUF(99H)发送控制器TI接收控制器RI移位寄存器波特率发生器T1≥1A累加器输出控制门RxDTxDP3.1P3.0CPU内部串行控制寄存器98H1.数据缓冲器SBUF在物理上有两个SBUB:一个发送寄存器SBUF、一个接收寄存器SBUF二者共用一个地址99H和相同的名称SBUF。一个只能被CPU读、一个只能被CPU写发送时,CPU写入的是发送SBUF接收时,读取的是接收SBUF,接收寄存器是双缓冲的,以避免在接收下一帧数据之前,CPU未能及时响应接收器的中断,没有把上一帧数据读走,而产生两帧数据重叠的问题。2.控制寄存器SCON工作方式选择多机通信控制位允许接收控制位接收数据的第9位发送数据的第9位接收中断标志发送中断标志SM0SM1SM2RENTB8RB8TIRI9FH9EH9DH9CH9BH9AH99H98H在方式2和方式3中,仅用于接收,当接收机的SM2=1时可以利用收到的第9位来控制是否置RI(当RB8=0时不激活RI,并且将接收到的前8位数据丢弃;当RB8=1时,才将接收到的前8位数据送入SBUF,并置位RI产生中断请求)。当SM2=0时,则不论第9位数据为0或1,都将前8位数据装入SBUF中,并产生中断请求。

串行口的工作方式SM0SM1工作方式功能说明波特率00方式08位同步移位寄存器常用于扩展I/O口fosc/1201方式110位UART8位数据、起始位、结束位可变(取决于定时器1溢出率)0方式211位UART8位数据、起始位、结束位和奇偶校验位fosc/64或fosc/3211方式311位UART可变(取决于定时器1溢出率)只有该位有用,为1时,波特率×2;为0时不变。3.电源控制寄存器PCONSMOD×××GF1GF0PDIDL87H不能位寻址,在对其进行初始化时需用字节传送指令!!!

串行接口的工作方式一、串行接口的工作方式方式0——同步移位寄存器方式串行口的SBUF是作为8位同步移位寄存器用,主要用于和外部同步移位寄存器外接以扩展一个并行I/O接口(将串行口变为1个8位并行I/O口使用)。此方式是半双工的,并非是一种同步通信方式。

波特率固定为fosc/12,即每个机器周期移位一次。串行数据从RXD(P3.0)端输入或输出,同步移位脉冲由TXD(P3.1)送出。这种方式常用于扩展I/O口,也可外接同步输入/输出设备。ABCLK345610111213数据输出移位脉冲RXDTXD805174LS164D7D6D5D4D3D2D1D0(1)发送操作

SBUF中的串行数据由RXD逐位移出;TXD输出移位时钟,频率=fosc/12;

每送出8位数据,TI就自动置1;

必须用软件清零TI。RXD不再是接收引脚、TXD也不再是发送引脚。ACLK654314131211数据输入移位脉冲RXDTXD805174LS165D0D1D2D3D4D5D6D7(2)接收操作

串行数据由RXD逐位移入SBUF中;TXD输出移位时钟,频率=fosc/12;

每接收8位数据RI就自动置1;

必须用软件清零RI。例写出串行口工作方式0接收时的串行口控制字。方式0时:SM0,SM1=00方式0时SM2必须为0:SM2=0

REN=1时允许接收:REN=1方式0为8位数据,TB8、RB8=00接收前,发送中断标志TI=0

接收中断标志RI=0故控制字(SCON)=00010000B=10H案例用单片机的串行口扩展输出口用8051串行口外接CD4094扩展8位并行输出口,8位并行口的各位都接一个发光二极管,要求发光二极管自右向左以一定速度依次显示,呈流水灯状态。案例用单片机的串行口扩展输出口本例是将串行口工作于方式0,串行口工作于方式0时有两种不同的用途:把串行口设置成并入串出的输出口,此时需要外接一片8位串行输入和并行输出的同步移位寄存器74LS164或CD4094;将串行口设置成串入并出的输入口,此时需要外接一片8位并行输入和串行输出的同步移位寄存器74LS165或CD4014。CD4094CD4094是一种8位串行输入(D端)并行输出的同步移位寄存器,采用CMOS工艺制成。CLK为同步脉冲输入端,STB为控制端:若STB=0,则8位并行数据输出端关闭,但允许串行数据从D输入;若STB=1,则D输入端关闭,但允许8位数据并行输出。案例用单片机的串行口扩展输出口#include<reg51.h>sbitp10=P1^0;voidisr_serial();unsignedcharsdata=0xfe;voidmain(){SCON=0;p10=0;SBUF=sdata;EA=1;ES=1;while(1);}voidisr_serial()interrupt4{inti;p10=1;for(i=10000;i>0;i--);sdata<<=1;sdata|=1;if(sdata==0xff)sdata=0xfe;p10=0;SBUF=sdata;TI=0;}中断方式!2.方式1

方式1、方式2、方式3均为全双工方式,串行数据经TXD(P3.1)端发送给外设,而外设发出的串行数据由RXD(P3.0)端接收,发送和接收可同时进行。当SM0=0,SM1=1时,串行口工作在方式1。串行口为10位异步通信方式。方式1多用于两个单片机(双机)之间或单片机与外设电路间的通信。在此方式下字符帧除8位数据位外,还有一位起始位(0)和1位停止位(1)。(1)发送过程发送操作在TI=0时进行,任何一条“写SBUF”指令都可以启动一次发送,CPU向发送器缓冲寄存器写入一个字节的数据后,发送电路自动在8位发送字符前后分别添加1位起始位和1位停止位,并在移位脉冲的作用下在TXD线上依次发送一帧信息。发送完后自动维持TXD线为高电平(1状态),TI由硬件在发送停止位时置1,并向CPU申请中断。(2)接收过程接收操作在RI=0和REN=1条件下进行。方式1是靠检测RXD来判断的,CPU不断采样RXD端,当采样到负跳变时,启动一次接收。在移位脉冲控制下,把接收的数据移入接收SBUF中,直到接收到数据第9位(即停止位)时,同时满足:RI=0SM2=0或接收到的停止位为1

则把接收到的8位数据存入“接收SBUF”,把停止位送入RB8中,并使RI置1和发出串行口中断请求,通知CPU执行“读SBUF”指令,从SBUF中取出接收到的一个数据。如果条件不满足,则这次收到的数据就被舍去,不送入“SBUF(接收)”中,这就意味着丢失了一组数据。3.方式2和方式3方式2和方式3都是11位为一帧的UART方式1个起始位,9个数据位和一个停止位。第9位数据位既可作奇偶校验位也可作控制位,发送之前应先在SCON的TB8位中准备好。方式3和方式2除波特率不同之外,其它的性能完全一样,两种工作方式的通信过程完全相同。方式2的波特率只有fosc/32和fosc/64两种而方式3的波特率是可变的,由用户根据需要

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论