单片机原理及应用技术(C语言版)5.pptx

单片机原理及应用技术(C语言版)5.pptx

  1. 1、本文档共96页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多

单片机原理及应用技术

(C语言版)

第5章单片机I/O口及应用;第5章单片机I/O口及应用;第5章单片机I/O口及应用;5.1单片机I/O口结构原理;I/O口概述;5.1.1P1口;5.1.1P1口;5.1.1P1口;5.1.1P1口;5.1.1P1口;5.1.1P1口;5.1.2P2口;5.1.2P2口;5.1.2P2口;5.1.2P2口;5.1.3P3口;5.1.3P3口;5.1.3P3口;5.1.3P3口;5.1.3P3口;5.1.3P3口;5.1.4P0口;5.1.4P0口;5.1.4P0口;5.1.4P0口;5.1.4P0口;5.1.4P0口;5.1.5端口负载能力和接口要求;5.1.5端口负载能力和接口要求;5.1.5端口负载能力和接口要求;5.2I/O口输出——数码管及显示控制;5.2.1数码管显示器结构原理; 数码管有共阴极和共阳极两种。发光二极管的阳极连在一起的称为共阳极显示器,阴极连在一起的称为共阴极显示器。

当在某段发光二极管上施加一定的正向电压时,对应段点亮;不加电压则暗。

对共阴极发光二极管,某段的阳极加上正电压,则对应的段点亮。

对共阳极发光二极管,某段的阴极接低电位,则对应的段点亮。;以共阴极显示器为例,当a、b、c三段送1时,数码管显示数字7。;;表5-3共阴极和共阳极7段LED显示字型编码表;5.2.2数码管显示方式; 优点:亮度较高、编程容易、管理简单;

缺点:占用I/O口线资源较多。

2.数码管动态显示方式

所有位的段选线:并联在一起,由一个8位I/O口控制;

各位的公共端:分别由不同的I/O线控制,实现各位的分时选通。

图5-5为6位共阴极LED动态显示接口电路

;图5-56位数码管动态显示接口电路; 各位扫描显示:由于6位数码管所有段选线皆由P0口控制,要想每位显示不同的字符,就必须采用扫描方法轮流点亮各位LED,在每一瞬间只使某一位显示字符。

段选码、位选码控制:P0口输出相应字符段选码,P2口对该显示位送选通电平,保证该位显示相应字符,如此轮流。

扫描延时:段选码、位选码每送一次后至少延时1ms,保证每位有一定亮度,因人眼的视觉暂留(0.1s)效应,只要在0.1s之内再次重复显示,看上去数码管的每个位总是在亮。每秒每位扫25次以上。;5.2.3数码管显示控制;5.2.3数码管显示控制; C语言程序:

#includereg52.h //定义LED为??字段码

unsignedcharcodeLED[]={0x3f,0x06,0x5b,0x4f,

0x66,0x6d,0x7d,0x07,0x7f,0x6f};

unsignedcharbuf[6]; //定义显示缓冲区

voiddisp()

{ unsignedchari,scan=0xfe;

for(i=0;i6;i++) //6位显示,共阴极

{

P2=0xff; //各位关闭显示

P0=LED[buf[i]]; //段码送P0口

P2=scan; //位码送P2口

delayms(3); //延时3ms,原函数见例2-2

scan=(scan1)+0x80;

} };5.3I/O口输入——键盘及按键识别;;5.3.1键盘分类及按键识别;;按键时的抖动; 独立式按键是指各按键相互独立地接通一条输入数据线。当任何一个键按下时,与之相连的输入数据线即可读入数据0,而没有按下时读入1。; 例5-1:设计一个独立式按键的键盘接口,并编写键扫描程序,电路原理图如上图所示,键号从上到下分别为0~7。

C语言程序:

#includereg52.h

voidkey()

{ unsignedchark;

P1=0xff; //输入前P1口输出全1

k=P1; //读取按键状态

if(k==0xff)

return; //无键按下,返回

delayms(20); //有键按下,延时去抖; k=P1;

if(k==0xff) //确认键按下

return; //抖动引起,返回

while(P1!=0xff); //等待键释放

switch(k) //识别、执行按下的键

{ case0xfe:

… //0号键按下时执行程序段

break;

case0xfd:

… //1号键按下时执行程序段

break;

文档评论(0)

xiadaofeike + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

版权声明书
用户编号:8036067046000055

1亿VIP精品文档

相关文档