《第4章80C51的并行口应用课件电子教案幻灯片.ppt》由会员分享,可在线阅读,更多相关《第4章80C51的并行口应用课件电子教案幻灯片.ppt(36页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、2023/1/91第第4 4章章 80C5180C51人机接口技术人机接口技术LEDLED、数码管及蜂鸣器接口技术、数码管及蜂鸣器接口技术 4.1按键及键盘接口技术按键及键盘接口技术 4.2字符型字符型LCDLCD显示器接口技术显示器接口技术 4.3单片机单片机最小系统最小系统AT89S52AT89S52LEDLED数码管数码管蜂鸣器蜂鸣器LCDLCD按键按键键盘键盘开关开关n 每根口线最大可吸收每根口线最大可吸收10mA10mA的(灌)电流的(灌)电流n P0P0口吸收电流的总和不能超过口吸收电流的总和不能超过26mA26mA n P1P1、P2P2和和P3P3每个口吸收电流的总和限制在每个
2、口吸收电流的总和限制在15mA15mA n 4 4个口所有口线的吸收电流总和限制在个口所有口线的吸收电流总和限制在71mA71mA 2023/1/934.1 LED、数码管及蜂鸣器接口技术、数码管及蜂鸣器接口技术4.1.1 4.1.1 LEDLED接口接口 LED LED的特性及其灌电流驱动的特性及其灌电流驱动LEDLED典型工作点:典型工作点:1.75V1.75V,10mA10mA。单个单个LEDLED驱动特性如下图:驱动特性如下图:多个多个LEDLED并口直接驱动并口直接驱动 限流与上拉电阻共享驱动限流与上拉电阻共享驱动 2023/1/95void void main(voidmain(v
3、oid)ucharuchar i;i;P21=1;P21=1;while(1)while(1)for(ifor(i=0;i8;i+)=0;i8;i+)DataPortDataPort=ScanCodeiScanCodei;DelayMs(500);DelayMs(500);【例例4-14-1】2023/1/96 数码管数码管4.1.2 4.1.2 数数码码管接口管接口 2023/1/97 晶体三极管驱动晶体三极管驱动2023/1/98 达林顿阵列驱动达林顿阵列驱动2023/1/99常序相接时常序相接时 ucharuchar code code SegCodeSegCode=/=/段码段码0 x
4、3F,0 x3F,0 x060 x06,0 x5B,0 x4F;,0 x5B,0 x4F;dpdpg gf fe ed dc cb ba a0 0000110共阴极共阴极字形字形“1 1”编码示例:编码示例:0606H H2023/1/910ucharuchar code code SegCodeSegCode=/段码段码0 xC0,0 xF9,0 xA4,0 xB0,0 x99,0 x92,0 x82,0 xF8,0 x80,0 x90;0 xC0,0 xF9,0 xA4,0 xB0,0 x99,0 x92,0 x82,0 xF8,0 x80,0 x90;ucharuchar code co
5、de BitCodeBitCode=0 xfe,0 xfd,0 xfb,0 xf7;=0 xfe,0 xfd,0 xfb,0 xf7;/位码位码ucharuchar DispBuf4;DispBuf4;/显示数字要先送入此缓冲数组显示数字要先送入此缓冲数组 void void BufToSeg(voidBufToSeg(void)ucharuchar i;i;for(ifor(i=0;i 4;i+)=0;i 0;j-)for(j=400;j 0;j-)/发声发声250ms250ms BEEP=BEEP;BEEP=BEEP;/取反及调用指令占用约取反及调用指令占用约3us3us d622us()
6、;d622us();/共延时共延时625us625us,周期,周期1250us1250us,频率频率800Hz800Hz for(j=400*4;j 0;j-)for(j=400*4;j 0;j-)/静音静音1000ms1000ms BEEP=1;/BEEP=1;/关闭蜂鸣器关闭蜂鸣器 d622us();d622us();4.2.1 4.2.1 独立按独立按键键接口接口 按键及其消抖按键及其消抖 简单开关及输入接口简单开关及输入接口4.2 按键及键盘接口技术按键及键盘接口技术2023/1/915 开关闭合与断开时的抖动及去抖电路开关闭合与断开时的抖动及去抖电路 按键较少时:去抖电路按键较少时:
7、去抖电路 按键较多时:软件延时按键较多时:软件延时,通常为通常为10ms10ms2023/1/916 矩阵键盘接口电路矩阵键盘接口电路4.2.2 4.2.2 键盘键盘接口接口 逐行扫描法逐行扫描法 n 判有无键按下。判有无键按下。将列线设置为输出口,输出全将列线设置为输出口,输出全0 0(所有列线为低电平),然后读行线状态,若行线状(所有列线为低电平),然后读行线状态,若行线状态不全为高电平,则可断定有键按下。态不全为高电平,则可断定有键按下。n 判按下哪个键。判按下哪个键。先置列线先置列线C0C0为低电平,其余列线为为低电平,其余列线为高电平,读行线状态,如行线状态不全为高电平,读行线状态,
8、如行线状态不全为“1”1”,则,则说明所按键在该列;否则所按键不在该列,再使说明所按键在该列;否则所按键不在该列,再使C1C1列列线为低电平,其它列为高电平,判断线为低电平,其它列为高电平,判断C1C1列有无按键按列有无按键按下。其余类推。下。其余类推。n 获得相应键号。获得相应键号。键号:键号:键号键号 =行首号行首号+列号列号。行首。行首号为行数乘以行号。根据键号就可以进入相应的键功号为行数乘以行号。根据键号就可以进入相应的键功能实现程序。能实现程序。线反转法线反转法 例如按下例如按下“2”2”号键,号键,先使列线输出全先使列线输出全“0”0”,读行线,结果为,读行线,结果为E0HE0H;
9、再使行线输出全;再使行线输出全“0”0”,读列线,结果为,读列线,结果为0BH0BH。将。将2 2次读到的结次读到的结果拼成一个字节,即果拼成一个字节,即EBHEBH,该值称为键值。,该值称为键值。4.3 字符型字符型LCD显示器接口技术显示器接口技术4.3.1 LCD16024.3.1 LCD1602模块的外形与引脚模块的外形与引脚 引脚引脚0101、0202:VSSVSS、VDDVDD,接地接地和和+5V+5V引脚引脚引脚引脚0303:VLVL,对比度调整端,对比度调整端,接地接地时对比度最高时对比度最高引脚引脚0404:RSRS,1-1-数据寄存器数据寄存器/0-/0-命令寄存器命令寄存
10、器引脚引脚0505:RWRW,1-1-读读/0-/0-写写引脚引脚0606:E E,使能端,使能端引脚引脚07071414:D0D0D7D7,8 8位双向数据线位双向数据线引脚引脚1515、1616:BLABLA、BLKBLK,背光,背光正、正、负负极极LCD1602LCD1602模块组成模块组成 4.3.2 LCD16024.3.2 LCD1602模块的组成模块的组成 对于对于16x216x2字符的显示要增加字符的显示要增加HD44100HD44100驱动器驱动器 HD44780HD44780本身可以驱动本身可以驱动16x116x1字符字符或或8x28x2字符字符 HD44780 HD447
11、80HD44780由三部分构成:由三部分构成:nCGRCGRO OM M 字符发生器,字符发生器,存储不同的点阵字符图形表,存储不同的点阵字符图形表,每个字符都有固定的代码。每个字符都有固定的代码。nCGRCGRA AM M 自定义字符发生器,自定义字符发生器,可定义可定义8 8个字个字符图符图形。形。nDDRAMDDRAM 显示缓冲区。显示缓冲区。例:代码例:代码41H41H显示字符显示字符“A A”。CGRCGRO OM M CGRCGRA AM M 可以自定义可以自定义8 8个字符:个字符:n 07 07n 或或8-158-15 CGRAMCGRAM的内容:的内容:unsigned ch
12、ar code unsigned char code WeekWordWeekWord=LoadCgram(WeekWordLoadCgram(WeekWord););DispChar(0,1,0);DispChar(0,1,0);LoadCgramLoadCgram定义为:定义为:WCmd(0 x40);WCmd(0 x40);for(ifor(i=0;i64;i+)=0;i64;i+)WDat(ptcgramiWDat(ptcgrami););DDRAMDDRAM有有8080个单元,但个单元,但第第1 1行行仅用仅用00H00H0FH0FH单元,单元,第第2 2行行仅用仅用40H40H4F
13、H4FH单元单元 4.3.3 LCD16024.3.3 LCD1602模块的命令模块的命令 序号序号指令指令RSR/WD7D6D5D4D3D2D1D01清屏清屏00000000012光标归位光标归位000000001*3输入模式设置输入模式设置00000001I/DS4显示与不显示设置显示与不显示设置0000001DCB5光标或屏幕内容移位光标或屏幕内容移位选择选择000001S/CR/L*6功能设置功能设置00001DLNF*7CGRAM地址设置地址设置0001CGRAM地址地址8DDRAM地址设置地址设置001DDRAM地址地址9读忙标志和计数器地读忙标志和计数器地址设置址设置01BF计数
14、器地址计数器地址10写写DDRAM或或CGRAM10 要写的数据要写的数据11读读DDRAM或或CGRAM11 读出的数据读出的数据4.3.4 LCD16024.3.4 LCD1602模块的命令模块的命令 接口电路接口电路 驱动程序驱动程序sbitsbit RS=P2 0;RS=P2 0;/*/*命令命令/数据选择数据选择*/sbitsbit RW=P2 1;RW=P2 1;/*/*读读/写选择写选择*/sbitsbit EN=P2 2;EN=P2 2;/*/*高到低使能高到低使能*/ucharuchar code dis1=WELCOME TO;code dis1=WELCOME TO;uc
15、haruchar code dis2=HUST ZDH;code dis2=HUST ZDH;ucharuchar code code WeekWordWeekWord=0 x18,0 x18,0 x07,0 x08,0 x08,0 x08,0 x07,0 x00,/0 x18,0 x18,0 x07,0 x08,0 x08,0 x08,0 x07,0 x00,/,代码,代码 0 x00 0 x00 0 x00,0 x00,0 x00,0 x00,0 xff,0 x00,0 x00,0 x00,/0 x00,0 x00,0 x00,0 x00,0 xff,0 x00,0 x00,0 x00,/
16、一,代码一,代码 0 x010 x01-;void void WCmd(ucharWCmd(uchar cmdcmd)Busy();Busy();RS=0;RS=0;RW=0;RW=0;EN=1;EN=1;P0=P0=cmdcmd;D10us();D10us();EN=0;EN=0;写命令函数:写命令函数:写数据函数:写数据函数:void WDat(uchar dat)void WDat(uchar dat)Busy();Busy();RS=1;RS=1;RW=0;RW=0;EN=1;EN=1;P0=dat;P0=dat;D10us();D10us();EN=0;EN=0;void Init(
17、)void Init()DelayMs(10);DelayMs(10);WCmd(0 x38);/WCmd(0 x38);/功能设置功能设置:8 8位口,位口,2 2行,行,5*75*7点阵点阵DelayMs(10);DelayMs(10);WCmd(0 x0c);/WCmd(0 x0c);/显示设置显示设置:开显示,关光标,无闪烁:开显示,关光标,无闪烁DelayMs(10);DelayMs(10);WCmd(0 x06);/WCmd(0 x06);/输入模式输入模式:右移一格,地址加:右移一格,地址加1 1DelayMs(10);DelayMs(10);WCmd(0 x01);/WCmd(
18、0 x01);/清显示清显示DelayMs(10);DelayMs(10);初始化函数:初始化函数:void void Pos(ucharPos(uchar x,ucharx,uchar y)y)if(yif(y=0 x01)=0 x01)WCmd(x|0 x80);/WCmd(x|0 x80);/高位置高位置1 1if(yif(y=0 x02)=0 x02)WCmd(x|0 xc0);/WCmd(x|0 xc0);/高位置高位置1 1,再加再加40H40H 位置设置及在指定位置显示字符函数:位置设置及在指定位置显示字符函数:void void DispChar(ucharDispChar(u
19、char x,ucharx,uchar y,uchary,uchar datdat)Pos(Pos(x,yx,y););WDat(datWDat(dat););void void WStr(ucharWStr(uchar strstr)ucharuchar num=0;num=0;while(while(strnumstrnum)WDat(strnumWDat(strnum+);+);DelayMs(100);DelayMs(100);DelayMs(100);DelayMs(100);显示字符显示字符串串函数:函数:显示示例:显示示例:Init();Init();while(1)while(1)Pos(0,1);/Pos(0,1);/第一行显示第一行显示WStr(dis1);WStr(dis1);Pos(0,2);/Pos(0,2);/第二行显示第二行显示WStr(dis2);WStr(dis2);DelayMs(1000);DelayMs(1000);LoadCgram(WeekWordLoadCgram(WeekWord););DispChar(0,1,0);DispChar(0,1,0);DelayMs(3000);DelayMs(3000);WCmd(0 x01);/WCmd(0 x01);/清显示内容清显示内容DelayMs(2);DelayMs(2);
限制150内