《单片机原理及应用-C51语言课件.ppt》由会员分享,可在线阅读,更多相关《单片机原理及应用-C51语言课件.ppt(36页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、2023/1/81第4章 80C51人机接口技术LED、数码管及蜂鸣器接口技术 4.1按键及键盘接口技术 4.2字符型LCD显示器接口技术 4.3单片机最小系统AT89S52LED数码管蜂鸣器LCD按键键盘开关n 每根口线最大可吸收10mA的(灌)电流n P0口吸收电流的总和不能超过26mA n P1、P2和P3每个口吸收电流的总和限制在15mA n 4个口所有口线的吸收电流总和限制在71mA 2023/1/834.1 LED、数码管及蜂鸣器接口技术4.1.1 LED接口 LED的特性及其灌电流驱动LED典型工作点:1.75V,10mA。单个LED驱动特性如下图:多个LED并口直接驱动 限流与
2、上拉电阻共享驱动 2023/1/85void main(void)uchar i;P21=1;while(1)for(i=0;i8;i+)DataPort=ScanCodei;DelayMs(500);【例4-1】2023/1/86 数码管4.1.2 数码管接口 2023/1/87 晶体三极管驱动2023/1/88 达林顿阵列驱动2023/1/89常序相接时 uchar code SegCode=/段码0 x3F,0 x06,0 x5B,0 x4F;dpdpg gf fe ed dc cb ba a0 0000110共阴极字形“1”编码示例:06H2023/1/810uchar code Se
3、gCode=/段码0 xC0,0 xF9,0 xA4,0 xB0,0 x99,0 x92,0 x82,0 xF8,0 x80,0 x90;uchar code BitCode=0 xfe,0 xfd,0 xfb,0 xf7;/位码uchar DispBuf4;/显示数字要先送入此缓冲数组 void BufToSeg(void)uchar i;for(i=0;i 0;j-)/发声250ms BEEP=BEEP;/取反及调用指令占用约3us d622us();/共延时625us,周期1250us,频率800Hz for(j=400*4;j 0;j-)/静音1000ms BEEP=1;/关闭蜂鸣器
4、d622us();4.2.1 独立按键接口 按键及其消抖 简单开关及输入接口4.2 按键及键盘接口技术2023/1/815 开关闭合与断开时的抖动及去抖电路 按键较少时:去抖电路 按键较多时:软件延时,通常为10ms2023/1/816 矩阵键盘接口电路4.2.2 键盘接口 逐行扫描法 n 判有无键按下。将列线设置为输出口,输出全0(所有列线为低电平),然后读行线状态,若行线状态不全为高电平,则可断定有键按下。n 判按下哪个键。先置列线C0为低电平,其余列线为高电平,读行线状态,如行线状态不全为“1”,则说明所按键在该列;否则所按键不在该列,再使C1列线为低电平,其它列为高电平,判断C1列有无
5、按键按下。其余类推。n 获得相应键号。键号:键号=行首号+列号。行首号为行数乘以行号。根据键号就可以进入相应的键功能实现程序。线反转法 例如按下“2”号键,先使列线输出全“0”,读行线,结果为E0H;再使行线输出全“0”,读列线,结果为0BH。将2次读到的结果拼成一个字节,即EBH,该值称为键值。4.3 字符型LCD显示器接口技术4.3.1 LCD1602模块的外形与引脚 引脚01、02:VSS、VDD,接地和+5V引脚引脚03:VL,对比度调整端,接地时对比度最高引脚04:RS,1-数据寄存器/0-命令寄存器引脚05:RW,1-读/0-写引脚06:E,使能端引脚0714:D0D7,8位双向数
6、据线引脚15、16:BLA、BLK,背光正、负极LCD1602模块组成 4.3.2 LCD1602模块的组成 对于16x2字符的显示要增加HD44100驱动器 HD44780本身可以驱动16x1字符或8x2字符 HD44780 HD44780由三部分构成:nCGROM 字符发生器,存储不同的点阵字符图形表,每个字符都有固定的代码。nCGRAM 自定义字符发生器,可定义8个字符图形。nDDRAM 显示缓冲区。例:代码41H显示字符“A”。CGROM CGRAM 可以自定义8个字符:n 07n 或8-15 CGRAM的内容:unsigned char code WeekWord=LoadCgram
7、(WeekWord);DispChar(0,1,0);LoadCgram定义为:WCmd(0 x40);for(i=0;i64;i+)WDat(ptcgrami);DDRAM有80个单元,但第1行仅用00H0FH单元,第2行仅用40H4FH单元 4.3.3 LCD1602模块的命令 序号序号指令指令RSR/WD7D6D5D4D3D2D1D01清屏清屏00000000012光标归位光标归位000000001*3输入模式设置输入模式设置00000001I/DS4显示与不显示设置显示与不显示设置0000001DCB5光标或屏幕内容移位光标或屏幕内容移位选择选择000001S/CR/L*6功能设置功能
8、设置00001DLNF*7CGRAM地址设置地址设置0001CGRAM地址地址8DDRAM地址设置地址设置001DDRAM地址地址9读忙标志和计数器地读忙标志和计数器地址设置址设置01BF计数器地址计数器地址10写写DDRAM或或CGROM10 要写的数据要写的数据11读读DDRAM或或CGROM11 读出的数据读出的数据4.3.4 LCD1602模块的命令 接口电路 驱动程序sbit RS=P2 0;/*命令/数据选择*/sbit RW=P2 1;/*读/写选择*/sbit EN=P2 2;/*高到低使能*/uchar code dis1=WELCOME TO;uchar code dis2
9、=HUST ZDH;uchar code WeekWord=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 xff,0 x00,0 x00,0 x00,/一,代码 0 x01-;void WCmd(uchar cmd)Busy();RS=0;RW=0;EN=1;P0=cmd;D10us();EN=0;写命令函数:写数据函数:void WDat(uchar dat)Busy();RS=1;RW=0;EN=1;P0=dat;D10us();EN=0;void Init()Del
10、ayMs(10);WCmd(0 x38);/功能设置:8位口,2行,5*7点阵DelayMs(10);WCmd(0 x0c);/显示设置:开显示,关光标,无闪烁DelayMs(10);WCmd(0 x06);/输入模式:右移一格,地址加1DelayMs(10);WCmd(0 x01);/清显示DelayMs(10);初始化函数:void Pos(uchar x,uchar y)if(y=0 x01)WCmd(x|0 x80);/高位置1if(y=0 x02)WCmd(x|0 xc0);/高位置1,再加40H位置设置及在指定位置显示字符函数:void DispChar(uchar x,uchar y,uchar dat)Pos(x,y);WDat(dat);void WStr(uchar str)uchar num=0;while(strnum)WDat(strnum+);DelayMs(100);DelayMs(100);显示字符串函数:显示示例:Init();while(1)Pos(0,1);/第一行显示WStr(dis1);Pos(0,2);/第二行显示WStr(dis2);DelayMs(1000);LoadCgram(WeekWord);DispChar(0,1,0);DelayMs(3000);WCmd(0 x01);/清显示内容DelayMs(2);