C51单片机常用接口电路设计.ppt_第1页
C51单片机常用接口电路设计.ppt_第2页
C51单片机常用接口电路设计.ppt_第3页
C51单片机常用接口电路设计.ppt_第4页
C51单片机常用接口电路设计.ppt_第5页
已阅读5页,还剩85页未读 继续免费阅读

下载本文档

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

文档简介

2020 3 27 1 第7章80C51单片机常用接口电路设计 显示器接口原理及应用 7 1 键盘接口原理及应用 7 2 80C51单片机的模拟量接口 7 3 2020 3 27 2 在单片机应用系统中 显示器是最常用的输出设备 常用的显示器有 发光二极管 LED 液晶显示器 LCD 发光二极管 LED 又分为七段LED显示器 数码管 和LED点阵显示屏 液晶显示器 LCD 又分为字符液晶与图形液晶 7 1显示器接口原理及应用 2020 3 27 3 7 1 1七段LED显示器 数码管 LED的工作原理多位LED显示问题的解决 2020 3 27 4 LED的工作原理 七段式LED显示部件 a 典型的七段式LED器件 b 共阳极LED c 共阴极LED 2020 3 27 5 LED的主要部分是七段发光管 分别为a b c d e f g 有的产品还附带有小数点DP 通过发光段的不同组合 可以显示0 9和A F共16个字母数字 LED可分为 1 共阳级结构 2 共阴极结构 2020 3 27 6 共阴极LED显示器的发光二极管的阴极连在一起 通常此公共阴极接地 当某个发光二极管的阳极为高电平时 发光二极管点亮 相应的段被显示 共阳极LED显示器的发光二极管的阳极连在一起 通常此公共阳极接正电压 当某个发光二极管的阴极接低电平时 发光二极管被点亮 相应的段被显示 2020 3 27 7 数字到段码的译码方法 将一个4位二进制数据转换为LED的7位显示代码 段码 的方法有 1 专用芯片译码 2 软件译码 2020 3 27 8 用专用芯片完成段译码的示意 共阳极 2020 3 27 9 软件译码法 将0 F 或0 9 对应的段码组成一个表 存在存储器中 查表得段码 2020 3 27 10 多位LED显示问题的解决 1 问题的提出实际使用时 往往用几个显示管实现多位显示 如果每一个LED占用一个独立的输出端口 则占用的输出端口就很多 2020 3 27 11 2 问题的解决方法硬件 采用公用的驱动电路软件 采用扫描方法 2020 3 27 12 2020 3 27 13 一个数据通道作为位控制 该端口输出的选择信号使某一位为高电平 共阳极 时 该位对应的LED便显示数据 另一个数据通道输出段码 尽管所有的LED均收到了段码 但只有被位选择信号选中的那个LED才显示数据 其他并不发光 2020 3 27 14 在程序中 软件按一定频率循环输出位选择信号和对应的显示数据 利用眼睛的视觉惯性 从LED显示器上便可见到相当稳定的数字显示 2020 3 27 15 七段LED数码管实验 硬件连接情况在实验学习板中 有8个共阴极的LED 位选信号通过P0口 再通过74HC573驱动LED 段码通过74HC595 串行输入 并行输出 节约并口 输出至LED 实际上为了节约并口资源 P0口连接两个74HC573 另一片驱动点阵及交通灯电路 两个驱动芯片的转换通过一个波段开关控制 当开关拨到上边时 点阵驱动电路起作用 相反当拨到下边时 数码管驱动电路起作用 2020 3 27 16 实验1 在左边第一个LED上显示数字5步骤 1 通过74HC595送5的段码 2 通过P0口送位选信号 2020 3 27 17 include defineucharunsignedcharsbitclk P2 7 595时钟信号输入管脚sbitst P2 6 595锁存信号输入管脚sbitio P2 5 595数据信号输入管脚 2020 3 27 18 voidwr595 ucharucdat uchari clk 1 st 1 for i 8 i 0 i 循环八次 写一个字节 io ucdat 锁存数据 名称 wr595 向595发送一个字节的数据 功能 向595发送一个字节的数据 先发低位 2020 3 27 19 Voidmain while 1 uchark 0 xb6 5的段码wr595 k P0 0XFEH 2020 3 27 20 实验2 让8位数码管显示1 2 3 4 5 6 7 8 2020 3 27 21 include include defineucharunsignedchar defineuintunsignedint defineSLED BITP0 LED位选信号输入管脚sbitclk P2 7 595时钟信号输入管脚sbitst P2 6 595锁存信号输入管脚sbitio P2 5 595数据信号输入管脚ucharcodeuc7leds 0 xfc 0 x60 0 xda 0 xf2 0 x66 0 xb6 0 xbe 0 xe0 0 xfe 定义0 8段码uchardisplay 7leds 8 1 2 3 4 5 6 7 8 2020 3 27 22 功能 向595发送一个字节的数据 先发低位 voidwr595 ucharucdat uchari clk 1 st 1 for i 8 i 0 i 循环八次 写一个字节 io ucdat 锁存数据 2020 3 27 23 延迟程序delay uintdat while dat 2020 3 27 24 显示display 7leds 中的数据 voidwr7leds void uchari ch ch 0 x01 位选信号初始化for i 0 i 8 i 循环8次写8个数据 wr595 uc7leds display 7leds i 显示数据SLED BIT ch 送位选信号ch 1 位选信号右移 准备在下一个数码管显示下一个数字delay 300 延时 2020 3 27 25 Voidmain while 1 wr7leds 2020 3 27 26 实验3 利用实验系统相关资源 在LED上 左边第1 2两个 显示秒信息 60秒计时 要求左边第一个LED显示秒的高位值 第2个显示秒的低位值 初始值为00 2020 3 27 27 总体设计思路设置二个变量存储秒值 初值皆为0 设置一计数变量进行中断次数计数 初值为0 使用定时器 计数器 工作在方式1 每0 025秒 25ms 产生一次中断 每次中断时 先中断次数加1 并判断是否已达40次 若没有达40次 直接显示原秒值 若达40次 即 时间已过1秒 改变秒值 然后显示 2020 3 27 28 include 包含头文件 include defineucharunsignedchar defineuintunsignedintucharnum 0 shijian 0 miao1 0 miao2 0 74HC595与单片机连接口sbitclk P2 7 595时钟信号输入管脚sbitst P2 6 595锁存信号输入管脚sbitio P2 5 595数据信号输入管脚 定义P0口sbitP00 P0 0 sbitP01 P0 1 2020 3 27 29 ucharcodeuc7leds 16 0 xfc 0 x60 0 xda 0 xf20 x66 0 xb6 0 xbe 0 xe0 0 xfe 0 xe6 0 xee 0 x3e 0 x9c 0 x7a 0 x9e 0 x8E voidtime0 init voidwr595 ucharucdat voidwrleds void voiddelay uintdat 2020 3 27 30 voidmain 主函数 time0 init 调用定时器0初始化子函数while 1 等待中断 2020 3 27 31 voidtimer0 interrupt1 每中断一次num加1 若num到40 改变miao1 miao2 TH0 65536 23040 256 定时器赋初值 每0 025秒中断一次TL0 65536 23040 256 num if num 40 num 0 shijian miao1 shijian 10 miao2 shijian 10 if shijian 60 shijian 0 wrleds 显示miao1 miao2 2020 3 27 32 voidtime0 init TMOD 0X01 定时器0方式1TH0 65536 23040 256 定时器赋初值 每0 025秒中断一次TL0 65536 23040 256 EA 1 开总中断ET0 1 开定时器0中断TR0 1 启动定时器0 2020 3 27 33 voidwr595 ucharucdat 写595函数 uchari clk 1 st 1 for i 8 i 0 i 循环八次 写一个字节 io ucdat 锁存数据 2020 3 27 34 voidwrleds void ucharch1 ch2 ch1 0 xfe ch2 0 xfd 位选信号初始化wr595 uc7leds miao1 传送显示数据P0 ch1 送位选信号delay 500 延时 决定亮度 和闪烁 wr595 uc7leds miao2 传送显示数据P0 ch2 送位选信号delay 500 延时 决定亮度 和闪烁 voiddelay uintdat while dat 2020 3 27 35 7 1 2LED点阵显示屏 LED显示屏是一种由半导体发光二极管构成的显示点阵 通过控制每个LED的亮灭实现图形或字符的显示 由于LED显示屏亮度高 视角广 工作电压低 功耗小 寿命长 耐冲击 性能稳定 因而被广泛应用于机场 商场 医院 宾馆等公共场所 根据连接情况 可分为共阳极 共阴极 2020 3 27 36 2020 3 27 37 显示原理 如果采用动态扫描方式 扫描电路就可以实现多行发光二极管共用一套驱动器 动态扫描 简单说就是逐行轮流点亮 类似于多位LED 可以把LED点阵显示屏看成是多位LED的特殊形式 具体以8 8点阵模块为例显示字符 B 的过程 2020 3 27 38 即先送出对应于第一行发光二极管亮灭的列数据0FFH并锁存 然后选通第一行 即送行数据80H 延时一段时间后 送行数据00H 第一帧显示结束 再送第二行的列数据87H并锁存 然后选通第二行 即送行数据40H 点亮相同时间后 送行数据00H 相应二极管熄灭 第二帧显示结束 以此类推 第8行显示之后 又重新点亮第一行 周而复始 当这样轮回的速度足够快 每秒24次以上 时 就能看到显示屏上稳定的字符B了 2020 3 27 39 2020 3 27 40 实验1在LED点阵上显示5 2020 3 27 41 include include defineucharunsignedchar defineuintunsignedint defineSLED BITP0 LED位选信号输入管脚sbitclk P2 7 595时钟信号输入管脚sbitst P2 6 595锁存信号输入管脚sbitio P2 5 595数据信号输入管脚ucharcodeuc7leds 0 x00 0 x00 0 x72 0 x51 0 x51 0 x51 0 x4E 0 x00 5的字模码 共阴极 2020 3 27 42 功能 向595发送一个字节的数据 先发低位 voidwr595 ucharucdat uchari clk 1 st 1 for i 8 i 0 i 循环八次 写一个字节 io ucdat 锁存数据 2020 3 27 43 延迟程序delay uintdat while dat 2020 3 27 44 显示display 7leds 中的数据 voidwr7leds void uchari ch ch 0 x01 位选信号初始化for i 0 i 8 i 循环8次写8个数据 wr595 uc7leds i 显示数据SLED BIT ch 送位选信号ch 1 位选信号右移 准备在下一个数码管显示下一个数字delay 300 延时 2020 3 27 45 Voidmain while 1 wr7leds 2020 3 27 46 voidwr595 ucharucdat uchari clk 1 st 1 for i 8 i 0 i 循环八次 写一个字节 io ucdat 锁存数据 2020 3 27 47 实验2以1s间隔循环显示0 9 include include defineucharunsignedchar 管脚定义 sbitclk P2 7 595时钟信号输入管脚sbitst P2 6 595锁存信号输入管脚sbitio P2 5 595数据信号输入管脚 2020 3 27 48 要显示的数据代码 ucharcodeled 88seg 80 0 x00 0 x00 0 x3E 0 x41 0 x41 0 x41 0 x3E 0 x00 00 x00 0 x00 0 x01 0 x21 0 x7F 0 x01 0 x01 0 x00 10 x00 0 x00 0 x27 0 x45 0 x45 0 x45 0 x39 0 x00 20 x00 0 x00 0 x22 0 x49 0 x49 0 x49 0 x36 0 x00 30 x00 0 x00 0 x0C 0 x14 0 x24 0 x7F 0 x04 0 x00 40 x00 0 x00 0 x72 0 x51 0 x51 0 x51 0 x4E 0 x00 50 x00 0 x00 0 x3E 0 x49 0 x49 0 x49 0 x26 0 x00 60 x00 0 x00 0 x40 0 x40 0 x40 0 x4F 0 x70 0 x00 70 x00 0 x00 0 x36 0 x49 0 x49 0 x49 0 x36 0 x00 80 x00 0 x00 0 x32 0 x49 0 x49 0 x49 0 x3E 0 x00 9 2020 3 27 49 uchari 0 uchart 0 点阵显示函数时间 延时函数voiddelay uchari ucharj for i 0 i for j 0 j 125 j 2020 3 27 50 名称 wr595 向595发送一个字节的数据voidwr595 ucharucdat uchari clk 1 st 1 for i 8 i 0 i 循环八次 写一个字节 io ucdat 锁存数据 2020 3 27 51 voidtime0 init T0初始化函数 TMOD 0X01 定时器0方式1TH0 65536 23040 256 定时器赋初值 每0 025秒中断一次TL0 65536 23040 256 EA 1 开总中断ET0 1 开定时器0中断TR0 1 启动定时器0 2020 3 27 52 voidmain void ucharj ucharwx 位选信号控制time0 init while 1 wx 0 x01 for j i j i 8 j wr595 led 88seg j P0 wx delay 2 wx 1 2020 3 27 53 定时器中断0服务子函数 voidtimer0 interrupt1 TH0 65536 23040 256 TL0 65536 23040 256 定时器赋初值 每0 025秒中断一次t if t 40 t 0 i 8 显示下一列的段码值if i 80 i 0 2020 3 27 54 汉字字模的生成 由于要显示内容的不确定性 汉字字模的生成仅靠用户自己构建是不可能的 如果依靠单片机完成字模的创建和显示控制 则由于单片机运算能力有限 是无法实现汉字的选定和实时显示 为此利用PC机和相关软件 预先生成所要显示汉字的字模 通常可以利用UCDOS的汉字库构造需要显示的字模 2020 3 27 55 在UCDOS汉字库中汉字均以行字模的形式存储 只要确定了汉字在字库中的位置和字模的长度 就可以将需要汉字的行字模读出 汉字在字库中的位置可以通过汉字的机内码根据如下公式加以确定 Offset 94 m H m L 32式中 m H代表以16进制表示的汉字机内码的高8位 m L代表机内码的低8位 字模的长度则是由显示所用的点阵决定的 以常用的16 16点阵字模为例一个汉字字模需要16 16 8 32B 因此从字模的开始依次读取32个 2020 3 27 56 采用PCtoLCD2002字模软件 可以方便地生成字模数据 如图3所示 将生成的字模数据复制到系统源 2020 3 27 57 2020 3 27 58 液晶显示器是单片机应用系统中一种常用的人机接口形式 液晶显示器 LCD 的主要原理是以电流刺激液晶分子产生点 线 面并配合背部灯管构成画面 各种型号的液晶通常是按显示字符的行数或液晶点阵的行 列数来命名 如1602 每行16个字符 可以显示2行 类似的命名有0802 1601 7 1 3LCD1602 2020 3 27 59 如12232液晶属于图形液晶 该液晶由122X32个点来显示各种图形 可以通过程序控制每个点显示或不显示 类似的命名有 12864 根据客户需要 厂家可以设计出任意数组合的点阵显示 液晶显示器具有体积小 重量轻 功耗低 显示操作简单等特点 2020 3 27 60 弱点 温度范围窄 通用型液晶正常工作温度为0 55 存储温度范围 20 60 宽温级液晶 正常工作温度为 20 70 存储温度范围 30 80 2020 3 27 61 液晶显示器可分为三类 字段式 字符点阵式和点阵图形式液晶显示器 字符点阵式 LCD1602 单片机应用系统中广泛使用 2020 3 27 62 LCD1602模块的外形与引脚 共16根引脚 引脚01 VSS 接地引脚引脚02 VDD 接 5V电源引脚03 VL 对比度调整端引脚04 RS 数据 命令寄存器选择端 1 数据 0 命令引脚05 RW 读 写选择端 1 读 0 写引脚06 E 使能端 高电平跳变成低电平时 液晶模块执行命令引脚07 14 D0 D7 8位双向数据总线引脚15 BLA 背光正极引脚16 BLK 背光负极 2020 3 27 63 结构框图 LCD1602模块的组成 HD44780是典型的液晶显示控制器 集控制与驱动于一体 本身可以驱动单行16字符或2行8字符 对于2行16字符的显示要增加HD44100驱动器 2020 3 27 64 HD44780 由字符发生器CGROM 自定义字符发生器CGRAM和显示缓冲区DDRAM组成 CGROM存储了不同的点阵字符图形 包括数字 英文字母的大小写 常用的符号等 每一个字符都有一个固定的代码 数字 英文字母的大小写为其ASCII码 2020 3 27 65 DDRAM有80个单元 但第1行仅用00H 0FH单元 第2行仅用40H 4FH单元 DDRAM单元存放的是要显示字符的编码 ASCII码 控制器HD44780以该编码为索引 到CGROM 或CGRAM 中取点阵字形送液晶板显示 2020 3 27 66 LCD1602模块的命令 2020 3 27 67 命令说明命令1 清屏 DDRAM全写空格 光标回到屏幕左上角 地址计数器设置为0命令2 光标回到屏幕左上角 命令3 输入模式设置 设置每写入一个数据字节后 光标的移动方向及字符是否移动 I D 1 S 0 光标右移一格且计数器加1 常用 2020 3 27 68 命令4 显示与不显示设置 D 1 开显示 D 0 关显示 C 1 有光标 C 0 无光标 B 1 光标闪烁 B 0光标不闪烁 命令5 光标或屏幕内容移位选择 S C 1 移动屏幕内容 S C 0 移动光标 R L 1 右移 R L 0 左移 命令6 功能设置 DL 0 4位数据接口 DL 1 8位数据接口 N 0 单行显示 N 1 双行显示 F 0 5x7点阵 F 1 5X10点阵 2020 3 27 69 命令7 CGRAM地址设置命令8 DDRAM地址设置命令9 读忙标志和计数器地址 BF 1 忙 此时模块不能接收命令或数据 BF 0 不忙 理论上 在向模块写命令或数据时 先要检测为不忙状态 实际中 可通过适当延迟 而不需检测 命令10 写DDRAM或CGROM 要配合地址设置命令 命令11 读DDRAM或CGROM 要配合地址设置命令 2020 3 27 70 LCD1602的初始化 LCD1602在使用前先进初始化 1 清屏2 功能设置3 显示与不显示设置4 输入模式设置 2020 3 27 71 接口电路 LCD1602模块的接口示例 2020 3 27 72 实验1LCD1602显示 include defineucharunsignedchar defineuintunsignedintsbitrs P2 7 sbitlcden P2 5 sbitlcdrw P2 6 uchartable1 Iamastudent uchartable2 Ilikestudying 2020 3 27 73 延迟程序voiddelay uintx uinta b for a x a 0 a for b 10 b 0 b 2020 3 27 74 写命令至LCD1602voidwrite com ucharcom P0 com rs 0 lcden 0 delay 10 lcden 1 delay 10 lcden 0 2020 3 27 75 写数据至DDRAMvoidwrite date uchardate P0 date rs 1 lcden 0 delay 10 lcden 1 delay 10 lcden 0 2020 3 27 76 LCD1602初始化voidinit lcdrw 0 write com 0 x01 delay 20 write com 0 x38 delay 20 write com 0 x0e delay 20 write com 0 x06 delay 20 2020 3 27 77 voidmain uchara init write com 0 x80 delay 20 for a 0 a 14 a write date table1 a delay 2000 控制起初显示的速度 2020 3 27 78 write com 0 xc0 delay 50 for a 0 a 15 a writ

温馨提示

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

评论

0/150

提交评论