




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、输出输出/输入端口的应用输入端口的应用l 如何申请免费样片如何申请免费样片l 输出端口的应用输出端口的应用l 输入口的应用输入口的应用l 输入输出端口的高级应用输入输出端口的高级应用输出端口的应用输出端口的应用输出电路的设计输出电路的设计 89S51的输出端口可直接连接数字电路,也可驱动的输出端口可直接连接数字电路,也可驱动LED、蜂鸣器、继、蜂鸣器、继电器或固态继电器等负载。电器或固态继电器等负载。1、驱动、驱动LED LED具有二极管的特点,其特性曲线如图,通过增加具有二极管的特点,其特性曲线如图,通过增加LED正向电流可以正向电流可以使其更亮,但会缩短其寿命或烧断,以使其更亮,但会缩短其
2、寿命或烧断,以10-20mA为宜。为宜。 89S51的的I/O端口都有类似漏极开路的输出,其中端口都有类似漏极开路的输出,其中P1、P2与与P3内部具有内部具有30K上拉电阻,它们不能输出上拉电阻,它们不能输出10-20mA电流,其电路如图。电流,其电路如图。 此电路中,当输出低电平时,输出端此电路中,当输出低电平时,输出端FET导通,输出电压接近导通,输出电压接近0V;而;而LED正向导通电压为约正向导通电压为约1.7V,限流电阻,限流电阻R两端约两端约3.3V(VCC=5.0V),此时限流电),此时限流电阻值为:阻值为: R=(5-1.7)/0.01=330 对于对于TTL电平的数字电流,
3、电平的数字电流,LED所串接的限流电阻大多为所串接的限流电阻大多为470。2、驱动蜂鸣器、驱动蜂鸣器 蜂鸣器(蜂鸣器(buzzer)类似小型)类似小型喇叭,一般用作电路板上的发喇叭,一般用作电路板上的发声装置。它分为电压型与脉冲声装置。它分为电压型与脉冲型两类,电压型送电即响,其型两类,电压型送电即响,其频率固定;脉冲型必须加入脉频率固定;脉冲型必须加入脉冲信号,声音频率就是加入脉冲信号,声音频率就是加入脉冲的频率。冲的频率。 在此使用脉冲型蜂鸣器。在此使用脉冲型蜂鸣器。 89S51驱动蜂鸣器的信号为驱动蜂鸣器的信号为各种频率的脉冲,其驱动方各种频率的脉冲,其驱动方式采用达林顿管,或以两个式采
4、用达林顿管,或以两个常用的小三极管(常用的小三极管(cs9013)连接成达林顿结构。如图,连接成达林顿结构。如图,这两个驱动电路属高电平动这两个驱动电路属高电平动作,即输出作,即输出“1”蜂鸣器吸住。蜂鸣器吸住。 也可采用低电平动作,如图输出也可采用低电平动作,如图输出0时,蜂鸣器吸住;输出时,蜂鸣器吸住;输出1时,蜂鸣器释放。时,蜂鸣器释放。在晶体管在晶体管BE之间连接一个泄放电阻(之间连接一个泄放电阻(3.3K),其目的是让晶体管从饱和到),其目的是让晶体管从饱和到截止时提供一个泄放截止时提供一个泄放BE间少数载流子的路径,以加快切换,放止拖音。间少数载流子的路径,以加快切换,放止拖音。3
5、、驱动继电器、驱动继电器 若要若要89S51控制不同电压或较大电流的负载时,则可以通过继电器控制不同电压或较大电流的负载时,则可以通过继电器(RELAY)来实现。)来实现。 电路板上使用的继电器体积小,使用电压有电路板上使用的继电器体积小,使用电压有DC12V、DC9V、DC6V和和DC5V等,图中,等,图中,c-b之间为常闭(之间为常闭(NC)触点,)触点,c-a之间为常开(之间为常开(NO)触点,)触点,只有一组触点,称为只有一组触点,称为1P。 89S51驱动的继电器大多为驱动的继电器大多为DC6V或或DC5V,尽管如此,尽管如此,89S51输出口的驱输出口的驱动能力还是不够的,而且,继
6、电器线圈感性负载还需要保护。动能力还是不够的,而且,继电器线圈感性负载还需要保护。 如图如图a为高电平驱动的继电器为高电平驱动的继电器驱动电路。驱动电路。 如图如图b为低电平驱动继电器为低电平驱动继电器电路图。电路图。 对于微型计算机系统,采用低对于微型计算机系统,采用低电平动作的继电器驱动电路属电平动作的继电器驱动电路属于较优的设计。于较优的设计。 由于线圈是电感负载,续流二由于线圈是电感负载,续流二极管起到保护晶体管的损坏。极管起到保护晶体管的损坏。 如果要同时驱动多个继电器。如果要同时驱动多个继电器。可使用集电极开路(可使用集电极开路(OC)输出)输出的反相门,如的反相门,如7405(驱
7、动(驱动5V继继电器)或电器)或7406(驱动较高电压(驱动较高电压继电器,最高继电器,最高30V)。)。4、驱动固态继电器、驱动固态继电器 固态继电器(固态继电器(SSR)类似一般继电器,可用较小的控制信号来驱动,以控)类似一般继电器,可用较小的控制信号来驱动,以控制较大的负载。制较大的负载。SSR没有实际的触点,不会有触点动作的火花与机械动作。没有实际的触点,不会有触点动作的火花与机械动作。一般一般SSR是由光耦合器输入控制信号,而另一端则是较大容量的功率半导体是由光耦合器输入控制信号,而另一端则是较大容量的功率半导体器件(如器件(如SCR、TRIAC或或IGBT)。)。 如图为常见的如图
8、为常见的SSR,其输出端为,其输出端为AC250V/10A。 SSR的输入端为的输入端为LED,所以其驱动方法与所以其驱动方法与LED一样,一样,不过需要较大的电压和电流。不过需要较大的电压和电流。 如图如图a为高电平驱为高电平驱动电路;图动电路;图b为低电为低电平驱动电路。平驱动电路。5、驱动七段数码管、驱动七段数码管 七段七段LED数码管是利用数码管是利用7个个LED组合而成的显示装置,可以显示组合而成的显示装置,可以显示0-9数字数字和和A-F字母。七段字母。七段LED数码管有共阴极与共阳极两种。数码管有共阴极与共阳极两种。共阳极(共阳极(Common Anode)七段)七段LED数码管
9、数码管 电路连接如图电路连接如图a,com接接+5V,每个阴极引脚各接一个限流电阻。图,每个阴极引脚各接一个限流电阻。图b为不为不合理的接法。若合理的接法。若a接接8051输出端口的最低位(输出端口的最低位(LSB),),dp接接8051的最高位的最高位(MSB),则),则0-9的驱动信号如表所示(小数点不亮)。的驱动信号如表所示(小数点不亮)。共阴极(共阴极(Common Catchode)七)七段段LED数码管数码管 电路连接如图电路连接如图a,com接接GND,每个阳极引脚各接一个限流电阻。每个阳极引脚各接一个限流电阻。图图b为不合理的接法。若为不合理的接法。若a接接8051输输出端口的
10、最低位(出端口的最低位(LSB),),dp接接8051的最高位(的最高位(MSB),则),则0-9的的驱动信号如表所示(小数点不亮)。驱动信号如表所示(小数点不亮)。实例实例1、驱动蜂鸣器、驱动蜂鸣器l 电路电路 蜂鸣器由蜂鸣器由P3.7经晶体管驱动。经晶体管驱动。l 声音产生原理声音产生原理 声音是蜂鸣器簧片振动产生的,声音是蜂鸣器簧片振动产生的,若要产生若要产生f的频率,需要在周期的频率,需要在周期T时间内进行吸、放各一次,即通时间内进行吸、放各一次,即通断时间各断时间各1/2T。l 程序设计程序设计 本程序将产生本程序将产生1KHz信号持续信号持续0.1s,停止,停止0.5s,再产生,再
11、产生1KHz信号持续信号持续0.1s停止停止0.5s,然后从,然后从头开始执行。头开始执行。/*ch01.c -蜂鸣器程序蜂鸣器程序-*/*声明区声明区*#include sbit buzzer=P37; void delay(int);void pulse_BZ(int,int,int);/*主程序主程序*Main() while(1) pulse_BZ(100,1,1); delay(1000); /*子程序子程序*/*延迟函数延迟函数 x0.5ms */void delay(int x) int i,j; for(i=0;ix;i+) for(j=0;j60;j+);/*蜂鸣器发声函数蜂
12、鸣器发声函数 count计数计数 TH高电平时间高电平时间 TL低电低电平时间平时间 */void pulse_BZ(int count,int TH,int TL) int i; for(i=0;icount;i+) buzzer=1; delay(TH); buzzer=0; delay(TL); 对程序进行仿真调对程序进行仿真调试,如图高电平持续试,如图高电平持续时间为时间为0.000944-0.000422=0.000522s 同样,低电平持续同样,低电平持续时间也为时间也为0.5ms。 如果有目标板,可以如果有目标板,可以将编译生成的将编译生成的2.HEX文件下载至目标器件,文件下载
13、至目标器件,如图。如图。 思考:思考: 若想产生若想产生1KHZ声音声音0.2S,暂停,暂停0.05S、600HZ声音声音0.1S、暂停、暂停0.2S。应如何修改程序。应如何修改程序。2、驱动继电器、驱动继电器l 电路电路 蜂鸣器由蜂鸣器由P3.7经晶体管驱动,继电器由经晶体管驱动,继电器由P3.6经晶体管驱动。经晶体管驱动。l 继电器驱动原理继电器驱动原理 由电路图可知,由电路图可知,P3.6输出输出1,则晶体,则晶体管饱和导通,继电器管饱和导通,继电器线圈得电,继电器吸线圈得电,继电器吸合;合;P3.6输出输出0,则,则晶体管截止,继电器晶体管截止,继电器释放。释放。 继电器使用时,一继电
14、器使用时,一定要看清楚它上面的定要看清楚它上面的标示,如标示,如“0.5A,120VAC RES”,表示该,表示该继电器触点可以驱动继电器触点可以驱动0.5A,交流,交流120V的电阻性负载。的电阻性负载。 本例子是由本例子是由P3.6驱动继电器每秒钟开关一次,开关驱动继电器每秒钟开关一次,开关10次后,蜂鸣器响两次后,蜂鸣器响两声,然后从头开始执行。声,然后从头开始执行。/*-ch02.c-*/#includesbitbuzzer=P37;sbitrelay=P36;voiddelay(int);voidpulse_BZ(int,int,int);voidpulse_RL(int,int,i
15、nt);main()while(1)pulse_RL(10,2000,2000);/relayon/off10tinmes,2000 x0.5=1spulse_BZ(100,1,1);/buzzerfirston100 x(0.5+0.5)=0.1sdelay(200);/delay200 x0.5=0.1mspulse_BZ(100,1,1);delay(200);/-delay-voiddelay(intx)inti,j;for(i=0;ix;i+)for(j=0;j60;j+);/-pulse_BZ-voidpulse_BZ(intcount,intTH,intTL)inti;for(i
16、=0;icount;i+)buzzer=1;delay(TH);buzzer=0;delay(TL);/-relaycontrol-voidpulse_RL(intcount,intTH,intTL)inti;for(i=0;icount;i+)relay=1;delay(TH);relay=0;delay(TL); 思考:思考: 若让继电器吸合若让继电器吸合10S,断开,断开5S,周而复,周而复始,应如何修改程序。始,应如何修改程序。3、霹雳灯、霹雳灯 霹雳灯是指在一排霹雳灯是指在一排LED里(此处里(此处8个),任何一个个),任何一个时间只有一个时间只有一个LED亮,亮亮,亮灯顺序为由左而
17、右再由右灯顺序为由左而右再由右而左,感觉上就像一个而左,感觉上就像一个LED由左跑到右,再由右由左跑到右,再由右跑到左。跑到左。 在程序设计中,采用计在程序设计中,采用计数循环的方式,首先左移数循环的方式,首先左移7次,在右移次,在右移7次,如此循环。次,如此循环。 左移采用左移采用LED1指令。指令。LED的初始值为的初始值为11111110,左移时,右边将移入,左移时,右边将移入0,必须将最右边的位变成,必须将最右边的位变成1,采用,采用OR运算,运算,即即LED=(LED1|0X80。 移位完成判断可采用计数的方式,也可采用判断最高位为移位完成判断可采用计数的方式,也可采用判断最高位为0
18、的方式(左的方式(左移)或最低位为移)或最低位为0(右移)。(右移)。/*-ch03.c-*/#include#defineLEDP1voiddelay(int);main()unsignedchari;LED=0 xfe;while(1)for(i=0;i7;i+)delay(100);/delay100 x5ms=0.5sLED=(LED1)|0 x01;for(i=0;i1)|0 x80;/-delay-voiddelay(intx)inti,j;for(i=0;ix;i+)for(j=0;j600;j+);/count600delay5ms思考:思考:1、修改程序,将它变成双灯的、修改
19、程序,将它变成双灯的霹雳灯功能。霹雳灯功能。2、用判断的方式重写上述程序。、用判断的方式重写上述程序。4、七段、七段LED数码管数码管 电路如图,由电路如图,由P0驱动共阳极数码管。驱动共阳极数码管。 数码管上显示的数字从数码管上显示的数字从0开始,每隔开始,每隔0.5S增加增加1,直到,直到9之后,再从之后,再从0开始,开始,如此循环。如此循环。/*-ch04.c-*/#include#defineSEGP0charcodeTAB=0 xc0,0 xf9,0 xa4,0 xb0,0 x99,0 x92,0 x83,0 xf8,0 x80,0 x98;voiddelay(int);main()
20、unsignedchari;while(1)for(i=0;i10;i+)SEG=TABi;delay(500);/delay500 x1ms=0.5s/-delay-voiddelay(intx)inti,j;for(i=0;ix;i+)for(j=0;j120;j+);/count120delay1ms思考:思考:1、修改程序,让数码管从、修改程序,让数码管从9开开始显示,递减到始显示,递减到0循环。循环。2、修改程序,让数码管从、修改程序,让数码管从0开开始显示,递增到始显示,递增到9,再递减到,再递减到0,循环。循环。输入设备与输入电路的设计输入设备与输入电路的设计1、输入设备、输入设
21、备 对于数字电路,最基本的输入器件是开关,开关分为两类:对于数字电路,最基本的输入器件是开关,开关分为两类:l 按钮开关,具有自动恢复(弹回按钮开关,具有自动恢复(弹回)功能,在电路板中,最典型的按钮开关功能,在电路板中,最典型的按钮开关是是Tack Switch ,如图,如图a所示,也有以导电橡皮所组成的按钮组。所示,也有以导电橡皮所组成的按钮组。l 闸刀开关(闸刀开关(Knife Switch)不会自动恢复,电路板中最典型的是拨码开)不会自动恢复,电路板中最典型的是拨码开关(关(DIP Switch),如图),如图b所示。有所示。有2P、4P、8P等,通常会在一边标示等,通常会在一边标示O
22、N。输入端口的应用输入端口的应用l 面板用数字型拨码开关面板用数字型拨码开关 是一种附有数字轮盘的拨码开关,嵌在控制面板上,如图所示。可分为是一种附有数字轮盘的拨码开关,嵌在控制面板上,如图所示。可分为下列两种类型:下列两种类型:a.BCD拨码开关提供拨码开关提供0-9的的BCD编码输出。编码输出。b.十六进制拨码开关提供十六进制拨码开关提供0-F十六进制编码输出十六进制编码输出l 电路板用数字型拨码开关电路板用数字型拨码开关 如图所示。如图所示。 2、输入电路设计、输入电路设计 在设计数字电路或微处理器输入电路时,要在设计数字电路或微处理器输入电路时,要避免不确定状态,即输入端不要空接。避免
23、不确定状态,即输入端不要空接。 对开关输入至数字电路,一般会接一个电阻对开关输入至数字电路,一般会接一个电阻到到VCC或或GND。3、抖动与去抖动、抖动与去抖动l 抖动现象抖动现象 开关动作并不是想象的那样工作很确定,在操作的时候,由于触点的弹开关动作并不是想象的那样工作很确定,在操作的时候,由于触点的弹性,会出现触点反复动作而使输入的电平出现波动的不稳定现象,这个性,会出现触点反复动作而使输入的电平出现波动的不稳定现象,这个现象称为按键的抖动。现象称为按键的抖动。 抖动一般是一个过渡过程,出现在按键按下和松开的过程中,一般持续抖动一般是一个过渡过程,出现在按键按下和松开的过程中,一般持续10
24、-20毫秒的时间。毫秒的时间。l 硬件去抖动硬件去抖动 如图为与非门组成的去抖动电路如图为与非门组成的去抖动电路(debouncer),这个电路需要的元),这个电路需要的元件多,占用电路面积大,使用较少。件多,占用电路面积大,使用较少。 利用利用RC去抖动电路较多,如图所示,去抖动电路较多,如图所示,电路中只需要增加一个电容。电路中只需要增加一个电容。应用实例应用实例1、拨码开关、拨码开关 设计一个由拨码开关控制设计一个由拨码开关控制LED的系统,拨码开关输入到的系统,拨码开关输入到P2,对应的,对应的LED灯由灯由P1输出控制,电路如图。输出控制,电路如图。/*-ch05.c-*/#incl
25、ude#defineSWP2#defineLEDP1main()SW=0 xff;while(1)LED=SW;思考:思考:1、本程序中,有没有抖动的困扰。、本程序中,有没有抖动的困扰。2、若希望拨码开关的、若希望拨码开关的S1、S3、S5三个三个都合上时,前都合上时,前4个个LED亮;亮;S2或或S4或或S6合上时,后合上时,后4个个LED亮;亮;S7及及S8合上时,合上时,所有所有LED亮,编写程序。亮,编写程序。2、按钮开关、按钮开关 如图,若按下如图,若按下PB1,则,则P1.0所连接的所连接的LED亮;若按亮;若按下下PB2,则关闭,则关闭P1.0所接的所接的LED。/*-ch05.
26、c-*/#includesbitPB1=P20;sbitPB2=P21;sbitLED=P10;main()LED=1;PB1=1;PB2=1;while(1)if(PB2=0)LED=1;elseif(PB1=0)LED=0;思考:思考:1、本程序中,有没有抖动的困扰。、本程序中,有没有抖动的困扰。2、若同时按下、若同时按下PB1和和PB2按钮会怎样按钮会怎样?3、按钮开关切换、按钮开关切换 如图,若初始如图,若初始P1.0接的接的LED不亮,按下不亮,按下PB1,则,则LED亮,再按一次亮,再按一次PB1,则,则LED熄灭,以此类推;当按住不放时,不会改熄灭,以此类推;当按住不放时,不会改
27、变。变。/*-ch05.c-*/#includesbitPB1=P20;sbitLED=P10;voiddebouncer(void);main()LED=1;/LEDoffPB1=1;/setP2.0toinputwhile(1)if(PB1=0)debouncer();LED=LED;while(PB1!=1);debouncer();/-debouncer-voiddebouncer(void)inti;for(i=0;i2400;i+);思考:思考: 改变改变debouncer时间长短看看有什么时间长短看看有什么影响。影响。4、按钮开关控制数码管、按钮开关控制数码管 如图,如图,P0接
28、数码管,接数码管,P2.0接按钮接按钮PB1,P2.1接按钮接按钮PB2,其中,其中PB1控制数码显示控制数码显示递增,递增,PB2控制递减。程序开始数码管显控制递减。程序开始数码管显示示0,当按钮按住不放时,数码管显示不,当按钮按住不放时,数码管显示不变。变。/*-ch05.c-*/#include#defineSEGP0charcodeTAB=0 xc0,0 xf9,0 xa4,0 xb0,0 x99,0 x92,0 x83,0 xf8,0 x80,0 x98;sbitPB1=P20;sbitPB2=P21;voiddebouncer(void);main()unsignedchari=0
29、;PB1=PB2=1;/settoinputSEG=TABi;/while(1)if(PB1=0)debouncer();i=(i0)?i-1:9;SEG=TABi;while(PB2=0);debouncer();/-debouncer-voiddebouncer(void)inti;for(i=0;i2400;i+);思考:思考: 同时按住同时按住PB1和和PB2会怎么样?会怎么样?5、BCD拨码开关拨码开关 如图,如图,P0接数码管,接数码管,P2的低的低4位连接到位连接到BCD型数字型拨码开关,数码管显示拨码型数字型拨码开关,数码管显示拨码开关的值。开关的值。/*-ch05.c-*/#
30、include#defineSEGP0#defineSWP2#defineSW_H()SW&0 x0fcharcodeTAB=0 xc0,0 xf9,0 xa4,0 xb0,0 x99,0 x92,0 x83,0 xf8,0 x80,0 x98;main()SW=0 xff;/settoinputwhile(1)SEG=TABSW_H();思考:思考: 1、本程序中有没有抖动的困、本程序中有没有抖动的困扰?扰? 2、如果将、如果将BCD型改成十六进型改成十六进制,程序如何修改?制,程序如何修改?6、多开关、多开关 如图,如图,P1接接8个个LED,P2的低的低4位连接位连接4个按钮开关
31、,程序功能要求如下。个按钮开关,程序功能要求如下。 a.按下按下PB1:前:前4个个LED,后,后4个个LED交交替显示替显示3次,间隔次,间隔0.5S,然后,然后8个个LED闪烁闪烁3次。次。 b.按下按下PB2:单灯左移:单灯左移3圈,然后圈,然后8灯闪灯闪烁烁3次。次。 c.按下按下PB3:单灯右移:单灯右移3圈,然后圈,然后8灯闪灯闪烁烁3次。次。 d.按下按下PB4:霹雳灯:霹雳灯3圈,然后圈,然后8灯闪烁灯闪烁3次。次。本例子目的是了解模块化和按钮优先等级本例子目的是了解模块化和按钮优先等级。/*-自己写的链接-*/#defineLEDP1voiddebouncer(void);/
32、去抖voiddelay10ms(int);/10ms延时voidalter(int);/交替闪烁voidleft(int);/单灯左移voidright(int);/单灯右移voidpili(int);/霹雳灯voidflash(int);/闪烁/-去抖函数,延时约20ms-voiddebouncer(void)delay10ms(2);/-延时函数,延时=x*10ms-voiddelay10ms(intx)inti,j;for(i=0;ix;i+)for(j=0;j1200;j+);/-高低电平交替闪烁,执行x次voidalter(intx)inti;LED=0 x0f;for(i=0;i2
33、*x-1;i+)delay10ms(50);LED=LED;delay10ms(50);/-全灯闪烁,执行x次-voidflash(intx)inti;LED=0 x00;for(i=0;i2*x-1;i+)delay10ms(50);LED=LED;delay10ms(50);/-单灯左移,执行x圈-voidleft(intx)inti,j;for(i=0;ix;i+)LED=0 xfe;for(j=0;j7;j+)delay10ms(25);LED=(LED1)|0 x01;delay10ms(25);/-单灯右移,执行x圈-voidright(intx)inti,j;for(i=0;ix
34、;i+)LED=0 x7f;for(j=0;j1)|0 x80;delay10ms(25);/-霹雳灯,执行x圈-voidpili(intx)inti;for(i=0;ix;i+)left(1);right(1);/*-ch05.c-*/#include#includemyio.hsbitPB1=P20;sbitPB2=P21;sbitPB3=P22;sbitPB4=P23;main()LED=0 xff;P2=0 xff;/settoinputwhile(1)if(PB1=0)debouncer();alter(3);flash(3);elseif(PB2=0)debouncer();lef
35、t(3);flash(3);elseif(PB3=0)debouncer();right(3);flash(3);elseif(PB4=0)debouncer();pili(3);flash(3);思考:思考: 本程序中若同时按下多键会如何?若按本程序中若同时按下多键会如何?若按住按键不放会如何?住按键不放会如何? 前面程序中,前面程序中,PB1具有最高优先具有最高优先级,若改成无优先权的问题时,可级,若改成无优先权的问题时,可用用SWITCH语句。语句。 /*-ch05.c-*/#include#includemyio.h#definePBP2main()LED=0 xff;P2=0 xff
36、;/ttoinputwhile(1)switch(PB)case0 x01:debouncer();alter(3);flash(3);break;case0 x02:debouncer();left(3);flash(3);break;case0 x04:debouncer();right(3);flash(3);break;case0 x08:debouncer();pili(3);flash(3);break;思考:思考: 本程序中去抖本程序中去抖动函数是否有必动函数是否有必要?要? 若同时按下多若同时按下多键会产生什么结键会产生什么结果?果? 若按住某键不若按住某键不放会有什么结果?放
37、会有什么结果? 前面程序中,如何解决按键按住前面程序中,如何解决按键按住不放的问题。不放的问题。 /*-ch05.c-*/#include#includemyio.h#definePBP2main()LED=0 xff;P2=0 xff;/ttoinputwhile(1)switch(PB)case0 x01:debouncer();while(PB=1);debouncer();alter(3);flash(3);break;case0 x02:debouncer();while(PB=1);debouncer();left(3);flash(3);break;case0 x04:debou
38、ncer();while(PB=1);debouncer();right(3);flash(3);break;case0 x08:debouncer();while(PB=1);debouncer();pili(3);flash(3);break;输入端口的高级应用输入端口的高级应用1、键盘扫描、键盘扫描 在计算机系统中,若需要多个按钮,通常将这些按钮组成阵列,如在计算机系统中,若需要多个按钮,通常将这些按钮组成阵列,如16个个按钮,则排成按钮,则排成44阵列,称之为键盘(阵列,称之为键盘(Keyboard)。)。 44是指是指4列(列(Column)与)与4行(行(Row)所构成的键盘,如图
39、所示。在)所构成的键盘,如图所示。在电路中可使用电路中可使用Tack Switch在在PCB上制成键盘。上制成键盘。 当然,象上面连接键盘还不够,在每行上都必须接一个上拉电阻(当然,象上面连接键盘还不够,在每行上都必须接一个上拉电阻(10k),这里使用一个),这里使用一个4R5P视为排阻,如图。视为排阻,如图。l 键盘扫描原理键盘扫描原理 键盘电路如图,进行键盘扫描时,键盘电路如图,进行键盘扫描时,将扫描信号送至将扫描信号送至X0-X3,再由,再由Y0-Y3读取键盘状态,判断哪个按键被按下。读取键盘状态,判断哪个按键被按下。键盘扫描方式有两种,即低电平扫描键盘扫描方式有两种,即低电平扫描与高电
40、平扫描。与高电平扫描。a.低电平扫描低电平扫描 它是将它是将COM端连接端连接VCC,在没有,在没有按键按下时,按键按下时,Y0-Y3保持为保持为高高电平(即电平(即1)。在)。在x0-x3上送上送低低电平,如果对电平,如果对应的行有按键按下,则读取应的行有按键按下,则读取Y0-Y3中会有中会有低低电平状态。整个扫描分为电平状态。整个扫描分为4个个阶段:阶段: 第一个阶段是判断第一列的按键,在第一个阶段是判断第一列的按键,在X0送低电平,送低电平,X1-X3送高电平,读送高电平,读取取Y0-Y3的状态,若有低电平值,则第一列对应的按键按下。的状态,若有低电平值,则第一列对应的按键按下。 第二、
41、三、四阶段分别依次判断第二、三、四列的按键,依次在第二、三、四阶段分别依次判断第二、三、四列的按键,依次在X1、X2、X3上送低电平,分别读取上送低电平,分别读取Y0-Y3。b.高电平扫描高电平扫描 它是将它是将COM端连接端连接GND,在没有按键按下时,在没有按键按下时,Y0-Y3保持为保持为低低电平(即电平(即0)。在)。在x0-x3上送上送高高电平,如果对应的行有按键按下,则读取电平,如果对应的行有按键按下,则读取Y0-Y3中中会有会有高高电平状态。整个扫描分为和低电平扫描过程一样。电平状态。整个扫描分为和低电平扫描过程一样。 两种扫描的速度很快,每个扫描周期只需要几个毫秒,通常以低电平
42、扫两种扫描的速度很快,每个扫描周期只需要几个毫秒,通常以低电平扫描为主,本章以低电平扫描来介绍。描为主,本章以低电平扫描来介绍。l 44键盘程序分析键盘程序分析 如图,当按下按键后,按键上的如图,当按下按键后,按键上的键值将显示在键值将显示在DS1七段数码管上。七段数码管上。程序如下:程序如下: /-keyscansub-#defineSEGP0#defineKEYPP2charcodeTAB=0 xc0,0 xf9,0 xa4,0 xb0,0 x99,0 x92,/0-40 x83,0 xf8,0 x80,0 x98,0 xa0,0 x83,/5-90 xa7,0 xa1,0 x84,/a-
43、e0 x8e,0 xbf,0 x7f;/f-.chardisp=0 x7f;unsignedcharscan=0 xef,0 xdf,0 xbf,0 x7f;/-扫描44键盘及4个七段显示器函数-voidscanner(void)unsignedcharcol,row,dig;unsignedcharrowkey,kcode;for(col=0;col4;col+)KEYP=scancol;SEG=disp;rowkey=KEYP&0 x0f;if(rowkey!=0)if(rowkey=0 x01)row=0;elseif(rowkey=0 x02)row=1;elseif(rowk
44、ey=0 x04)row=2;elseif(rowkey=0 x08)row=3;kcode=4*col+row;disp=TABkcode;while(rowkey!=0)rowkey=KEYP&0 x0f;delay1ms(4);l 认识认识MM74C922/MM74C923 对于键盘的状态检测,除了利用键盘对于键盘的状态检测,除了利用键盘扫描软件,还可以应用键盘扫描扫描软件,还可以应用键盘扫描IC,如如NS公司的公司的MM74C922/MM74C923,其中,其中MM74C922为为44键盘扫描键盘扫描IC,MM74C923为为45键盘扫描键盘扫描IC,如图。各引脚定义如下:,如
45、图。各引脚定义如下:DataA-DataE:输出检测键盘的结果,连接到输出检测键盘的结果,连接到处理器的输入口。处理器的输入口。ColumnX0-ColumnX3:连接键盘的连接键盘的x0-x3。RowY0-RowY4:连接键盘的连接键盘的Y0-Y4行。行。Oscillator:振荡引脚,接:振荡引脚,接0.1F电容到地。电容到地。Keyboard Mask:按键屏蔽引脚(:按键屏蔽引脚(KBM),功能是提供屏蔽按键抖动的周期,即,功能是提供屏蔽按键抖动的周期,即硬件去抖动。当按键按下时,进入屏蔽硬件去抖动。当按键按下时,进入屏蔽周期,首先将暂停周期,首先将暂停IC内部的计数,同时内部的计数,
46、同时DA引脚变为高电平,直到按键释放才恢引脚变为高电平,直到按键释放才恢复低电平。复低电平。Data Available:允许数据输出(:允许数据输出(DA),无),无键时为低电平,有按键时为高电平,允键时为低电平,有按键时为高电平,允许键盘状态由许键盘状态由DataA-DataE输出。输出。Output Enable:输出使能(:输出使能(OE),通过逻辑门或反相器设置数据输出引脚),通过逻辑门或反相器设置数据输出引脚DataA-DataE与微处理器之间的传输方式(同步交互式、同步数据传输及异步数据传输等)与微处理器之间的传输方式(同步交互式、同步数据传输及异步数据传输等),如图所示。,如图
47、所示。上图上图C中,中,MM74C922的的ABCD连接到连接到89S51的的P2.4到到P2.7,DA脚连接脚连接89S51的的P3.2,89S51的的P2.0-P2.3连接连接7447,按下键盘的任意键其数值将显示在数码管上。,按下键盘的任意键其数值将显示在数码管上。程序如下:程序如下:/-MM74C922-#include Sbit IRQ=P32;char code disp=8,0,5,1;unsigned char scan;main() P2=0 xff; while(1) if(IRQ=1) P2=(P24)|0 xf0; 2、七段、七段LED数码管扫描数码管扫描 前面讨论了单
48、个数码管的显示,如果有多个数码管显示时,若还是与单前面讨论了单个数码管的显示,如果有多个数码管显示时,若还是与单个数码管一样采用个别(独立)的驱动方式就很没效率,也将占用较多个数码管一样采用个别(独立)的驱动方式就很没效率,也将占用较多的硬件资源。在此将讨论将多个七段的硬件资源。在此将讨论将多个七段LED数码管封装在一起的七段数码数码管封装在一起的七段数码管模块,以及利用视觉暂留现象的快速扫描的驱动方式。管模块,以及利用视觉暂留现象的快速扫描的驱动方式。l 七段七段LED数码管模块数码管模块 多个数码管同时使用时,首先将每个七段多个数码管同时使用时,首先将每个七段LED数码管的数码管的a,b,
49、g引脚都引脚都连在一起,再使用晶体管分别驱动每个数码管的连在一起,再使用晶体管分别驱动每个数码管的com端。如图:端。如图: 这种数码管模块显示时必须采用动态扫描的方式,但要求扫描时间第一这种数码管模块显示时必须采用动态扫描的方式,但要求扫描时间第一个到最后一个不超过个到最后一个不超过16ms,即,即60Hz,这样才不会有闪烁的感觉。,这样才不会有闪烁的感觉。 以扫描方式驱动多个数码管时,驱动信号包括显示数据与扫描信号,以扫描方式驱动多个数码管时,驱动信号包括显示数据与扫描信号,“显示数据显示数据”是所要显示的驱动信号编码,与驱动单个数码管一样;是所要显示的驱动信号编码,与驱动单个数码管一样;
50、“扫描扫描信号信号”就是开关,以决定驱动哪一数码管,它分为高电平与低电平两种,就是开关,以决定驱动哪一数码管,它分为高电平与低电平两种,与电路结构有关,上图中的扫描就是低电平扫描。与电路结构有关,上图中的扫描就是低电平扫描。 数码管模块就是将多个位数的数码管封装在一起,其中各个数码管的数码管模块就是将多个位数的数码管封装在一起,其中各个数码管的a,bg是连接在一起的,而是连接在一起的,而com端独立。端独立。 对于扫描方式(动态)驱动的数码管,其亮度和稳定性是一对矛盾。建对于扫描方式(动态)驱动的数码管,其亮度和稳定性是一对矛盾。建议扫描频率限制在议扫描频率限制在60Hz以上,即在以上,即在1
51、6ms之内完成一次扫描不会闪烁。即之内完成一次扫描不会闪烁。即对于对于4位模块的扫描,其每位数的工作周期为固定式负载的位模块的扫描,其每位数的工作周期为固定式负载的1/4,其亮度约,其亮度约为固定式负载的为固定式负载的1/4;对;对8位模块,则为位模块,则为1/8,其亮度更低。如何提高亮度,其亮度更低。如何提高亮度: a.降低限流电阻值降低限流电阻值 4位数码管使用位数码管使用50-100;8位则位则25-50。这个方法在在线仿真时要注意。这个方法在在线仿真时要注意,程序停止或暂停时,其电流值会很大,容易烧数码管。,程序停止或暂停时,其电流值会很大,容易烧数码管。 b.选用高亮度数码管模块选用
52、高亮度数码管模块l 7447/7448 对于对于BCD码转换成七段显示的译码驱动码转换成七段显示的译码驱动IC,首推,首推7447系列,包括系列,包括7446、7447、7448与与7449。其中。其中7446/7447输出低电平,用以驱动共阳极数码输出低电平,用以驱动共阳极数码管;管;7448/7449则驱动共阴极数码管。其引脚说明如下:则驱动共阴极数码管。其引脚说明如下:D、C、B、A:BCD码输入脚。码输入脚。a-g:七段数码管段驱动引脚。:七段数码管段驱动引脚。Lamp Test(LT):测试引脚,输入低电平时所):测试引脚,输入低电平时所 有的段亮。有的段亮。RBI:消隐(灭灯)输入
53、引脚。:消隐(灭灯)输入引脚。BI/RBO:消隐输入或动态消隐输出引脚。:消隐输入或动态消隐输出引脚。 消除前置消除前置0 是指若数字整数部分靠左边的数若为是指若数字整数部分靠左边的数若为0,则不显示该位数。,则不显示该位数。若使用若使用7446、7447、7448所提供的消除前置所提供的消除前置0功能,则可将整数部分最左功能,则可将整数部分最左边位数的边位数的RBI引脚接地,引脚接地,BI/RBO引脚连接到其右边位数的引脚连接到其右边位数的RBI引脚,个位引脚,个位的的RBI不接前左边的不接前左边的BI/RBO,以避免全部的整数不显示;同时,将其,以避免全部的整数不显示;同时,将其dp引引脚
54、连接限流电阻后接地,以显示小数点。如图例输入脚连接限流电阻后接地,以显示小数点。如图例输入“0000 0001 0001”显示显示“11.”。 消除尾端消除尾端0 若使用若使用7446、7447、7448所提供的消除尾端所提供的消除尾端0功能,则可功能,则可将小数部分最右边位数的将小数部分最右边位数的RBI引脚接地,引脚接地,BI/RBO引脚连接到其左边位数的引脚连接到其左边位数的RBI引脚,以此类推。如图显示引脚,以此类推。如图显示“5” l 74138/74139 键盘扫描和多个数码管扫描,都需要扫描信号,可以利用微处理器程序键盘扫描和多个数码管扫描,都需要扫描信号,可以利用微处理器程序产
55、生,这样需要占用微处理器的输出端口,在本节利用产生,这样需要占用微处理器的输出端口,在本节利用2-4译码器或译码器或3-8译译码器来产生码器来产生4位或位或8位扫描信号,达到节省微处理器本身输出口的目的。位扫描信号,达到节省微处理器本身输出口的目的。74139是具有双是具有双2-4译码器的译码器的IC,74138则是则是3-8译码器译码器IC。3、静态显示与动态显示、静态显示与动态显示l 使用使用BCD码译码器码译码器 如图:扫描信号通过如图:扫描信号通过P1.3-P1.0送至送至Q3-Q0的基极,以低电平驱动数码的基极,以低电平驱动数码管模块的四位数码。显示信号由管模块的四位数码。显示信号由
56、P1.7-P1.4输出输出BCD码至码至7447译码,译码,7447的的LT、BI/RBO及及RBI引脚接引脚接VCC或悬空,对于或悬空,对于TTL,输入脚悬空,输入脚悬空等同于输入高电平,到容易受到干扰,要养成习惯,不用的脚尽量不要等同于输入高电平,到容易受到干扰,要养成习惯,不用的脚尽量不要悬空。悬空。程序如下:程序如下:main() while(1) P1=0 x1e; /dig.0显示显示1 delay1ms(4); P1=0 x5d; /dig.1显示显示5 delay1ms(4); P1=0 x0b; /dig.2显示显示0 delay1ms(4); P1=0 x87; /dig.
57、3显示显示8 delay1ms(4); 这种方式优点是只要一个端口,这种方式优点是只要一个端口,程序设计简单。但要改变显示数字程序设计简单。但要改变显示数字,程序设计灵活性差。,程序设计灵活性差。 若把显示信号与驱动信号分开由若把显示信号与驱动信号分开由两个端口输出,则可利用数组存储两个端口输出,则可利用数组存储所要显示的数据,而以移位的方式所要显示的数据,而以移位的方式产生扫描信号,如图。产生扫描信号,如图。程序如下:程序如下:char code disp=8,0,5,1;unsigned char scan;main() while(1) scan=1; for(i=0;i4;i+) P2
58、=dispi; P1=scan; delay1ms(4); scan=1; 对于对于8个位的数码管显示,采用上述个位的数码管显示,采用上述电路,对程序只做少量修改即可。电路,对程序只做少量修改即可。l 直接驱动直接驱动 如图:直接以如图:直接以P1输出扫描信号、输出扫描信号、P2输出显示驱动信号,不使用其输出显示驱动信号,不使用其他他IC。程序设计如下:。程序设计如下:char code TAB=0XC0,;char code disp=8,0,5,1;unsigned char scan;char i,j;main() while(1) scan=1; for(i=0;i4;i+) j=di
59、sp3-i; P2=TABj; P1=scan; delay1ms(4); scan=1; l 使用扫描译码器使用扫描译码器 如图:以如图:以P1输出输出BCD信号经信号经74138输出扫描信号,输出扫描信号,P2输出显示驱动信号。输出显示驱动信号。程序设计如下:程序设计如下:char code TAB=0XC0,;char code disp=2,0,0,8, 1,2,2,5;unsigned char scan;char i,j;main() while(1) for(i=0;i8;i+) j=disp7-i; P2=TABj; P1=i; delay1ms(2); l 闪烁闪烁 就是时亮
60、时不亮,以直接驱动就是时亮时不亮,以直接驱动4位数码管模块位数码管模块为例,若要显示为例,若要显示“8051”,扫描一次,扫描一次16ms,希望这四个数字显示约希望这四个数字显示约0.48s,熄灭,熄灭0.48S,交,交替循环。程序如下:替循环。程序如下:char code TAB=0XC0,;char code disp=8,0,5,1;char scan;char i,j,k;main() while(1) for(k=0;k30;k+) scan=1 for(i=0;i4;i+) j=disp3-i; P2=TABj; P1=scan; delay1ms(4); scan=1; P2=0 xff; delay1ms(48)
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 提升化妆品品牌的知名度计划
- 2024年小金县招聘事业单位人才笔试真题
- 软件设计师2025年考试必知试题及答案
- 计算机二级VB考试历年试题及答案分析
- 2024年温州平阳县委党校引进人才笔试真题
- 专注提升2025年法学概论考试试题及答案
- 软件技术员考前模拟试题及答案
- 重庆市南开(融侨)中学2025届八年级数学第二学期期末调研模拟试题含解析
- 高考数学阶段性复习试题及答案
- 领导电子商务品牌的发展计划
- 混凝土罐车运输合同协议
- 西部计划笔试试题及答案
- 重庆金太阳2025届高三5月联考英语及答案
- 护理事业编试题及答案
- 全国新能源汽车关键技术技能大赛理论知识竞赛题库
- 外籍人员雇佣合同(中英文对照)6篇
- 《不可或缺的医疗保障:课件中的健康险》
- 财产申报表-被执行人用
- 委托聘请演员合同协议
- 水库防汛知识培训
- 2025年贵州省遵义市中考一模英语试题(含笔试答案无听力原文及音频)
评论
0/150
提交评论