《C51数码管控制》PPT课件.ppt_第1页
《C51数码管控制》PPT课件.ppt_第2页
《C51数码管控制》PPT课件.ppt_第3页
《C51数码管控制》PPT课件.ppt_第4页
《C51数码管控制》PPT课件.ppt_第5页
已阅读5页,还剩50页未读 继续免费阅读

下载本文档

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

文档简介

任务六 带时间显示的交通灯 任课教师:李靖 v 教学内容 n 单片机控制数码管 n 数组 v 教学目标 n掌握数码管的控制方法 n掌握数组的应用 本任务 1LED显示器结构 LED显示器内部由多个发光二极管组成。 6.1 单片机控制数码管显示 单个LED数码显示的控制 显示字形与字段码关系 a a b c d e f g a b ced g fcom com 10 9 87 6 12345 dp dp D7 D6 D5 D4 D3 D2 D1 D0 字dpgfedcba 011000000 111111001 210100100 310110000 410011001 510010010 610000010 711111000 810000000 910010000 字形 字段码 2字形与字段码 LED数码管显示字形与字段码关系 显示字形 共阳极字段 码 共阴极字 段码 显示字形 共阳极字段 码 共阴极字段 码 0C0H3FH990H6FH 1F9H06HA88H77H 2A4H5BHb83H7CH 3B0H4FHCC6H39H 499H66HdA1H5EH 592H6DHE86H79H 682H7DHF8EH71H 7F8H07H“熄灭”FFH00H 880H7FH com com +5V 举例:单个数码管与P1口接口电路 g f e d c b a 单个数码管显示单一数字如 何编程实现?例如:显示0 单个LED数码显示的控制 实现交替显示1、2两个数字呢? 3LED数码显示方式及控制电路 多LED数码显示的控制 1)静态显示方式 2)动态显示方式 (1)静态显示方式 74LS373 v 74ls373是常用的三态输出的八 D 锁存器 v 输出端 O0O7 可直接与总线相连。 v 当三态允许控制端 OE 为低电平时,Q0Q7为正常逻 辑状态,可用来驱动负载或总线。当 OE 为高电平时, Q0Q7 呈高阻态. v 当锁存允许端 LE 为高电平时,Q 随数据 D 而变。当 LE 为低电平时,D 被锁存在已建立的数据电平。 v 真值表: 3LED数码显示方式及电路 v特点: 所有位选线(数码管公共端)连接在一起,每个 数码管必须接一个8位锁存器用来锁存待显示的字 形码。送入一次字形码显示字形一直保持,直到 送入新字形码为止。 v优点:占用CPU时间少,显示便于监测和控制。 v缺点:硬件电路比较复杂,成本较高。静态显示 接口电路有许多种, (1)静态显示方式: 字段码 位选线 三个数码管分别显示0、1、2数字? 并行口静态显示电路 字段码 0 0 位选线 (2) 4位LED动态显示电路 轮流向各位数码管送出字形 码和相应的位选,利用发光 管的余辉和人眼视觉暂留作 用,使人的感觉好像各位数 码管同时都在显示。 (2)动态显示 v特点:将所有数码管的段选线并联在一起,通过 控制位选信号来控制数码管的点亮。数码管采用 动态扫描显示。 v动态显示的亮度比静态显示要差一些,所以在选 择限流电阻时应略小于静态显示电路中的限流电 阻。 (2)动态显示方式 三个数码管分别显示0、1、2数字? (2)动态显示方式 6.2 数组构造数据类型 什么是数组 什么是数组元素,如何表示 数组的定义 数组的初始化 数组元素的引用 6.2 数组构造数据类型 数组是一种将同类型数据集合管理的数据结构 。 数组是一种变量,将一组相同数据形态的变量 以一个相同的变量名称来表示,即数组名,其 中每个分量称数组元素。 既然是变量,使用前必须声明(定义)。 数组常用于查表控制 6.2 数组 数组中元素按顺序存放在一个连续的存储空间中,即 最低的地址存放第一个元素,最高的地址存放最后一 个元素。元素顺序用下标表示: 数组名下标 数据类型 数组名常量表达式; 定义了一个一维整形数组a,10表示有 10个元素: a0,a1,a2,a8,a9 Example int a10; char s15;定义了一个一维字符数组s1,5表示有 5个元素: s10,s11,s12,s13,s14 1一维数组的定义和初始化 6.2 数组 Example int a10; char s15; 不同的数据类型,为每个数组元素预留的存储器空间 也不相同. 对于运行时无需修改的数组,通常将其定义为code 存储器类型,以节省数据存储器的空间。 char table8; 该数组含有几个元素? 各数组元素如何表示? 编译器为它们各分配多 少存储单元? 1一维数组的定义和初始化 例如: int num3=30,21,1;/整数数组 char LCM9=“Testing.”;/此字符数组 相当于字符串 注意:字符串 的结尾以“0” 作为结束符 在定义数组的同时,为数组元素赋值,称为 数组的初始化。 初始化赋值的一般形式: 数据类型 数组名常量表达式值1,值2, ; 6.2 数组1一维数组的定义和初始化 6.2 数组 int a5=0,1,2,3,4; int a =0,1,2,3,4; (1)在定义数组时,对全部数组元素赋初值 此时可以省略数组的长度 Example 1一维数组的定义和初始化 int a5=1,2,3; 系统为其余元素赋0 (2)在定义数组时,对部分数组元素赋初值 Example 6.2 数组1一维数组的定义和初始化 Example unsigned char a5=1,2,5,9,3; 可以写成: unsigned char a =1,2,5,9,3; 6.2 数组1一维数组的定义和初始化 (3)在对全部数组元素赋初值时,可以不指定数据长度 6.2 数组1一维数组的定义和初始化 int a5=1,2,3,4,5,6,7; (4)当初值的个数多于数组元素的个数时, 编译出错 Example unsigned char a10=1,2,3,4,5; char string1“Welcome to china.”; unsigned char a=1,2,3,4,5; unsigned char a10; 这些数组定义及初始化合理吗? 若合理各数组元素的初始化内容是什么? 若不合理说出理由。 6.2 数组1一维数组的定义和初始化 数组名下标; 下标可以是整型常量 、整型变量和整型表 达式。 表示引用数组a中的第2个元素 Example int n=5,a20; a1 an a3*n 表示引用数组a中的第6个元素 表示引用数组a中的第16个元素 6.2 数组2一维数组的引用 单个数码管连续显示0 -9如何编程实现? 6.2 数组1一维数组的定义和初始化 #include unsigned char seg10=0xc0,0xf9,0xa4,0xb0,0x99, 0x92,0x82,0xf8,0x80,0x90; void main() unsigned int i, j; while(1) for(i=0;i0;j-); 实例6-2 数码管静态显示案例 利用下图,在三个数 码管中分别显示02。 实例6-2 数码管静态显示案例 #include unsigned char seg10=0xc0,0xf9,0xa4, 0xb0,0x99,0x92,0x82,0xf8,0x80,0x90; void main() unsigned int i ,ctr=0xfe; P2=0xff;/4个数码管均可送数 for(i=0;i unsigned char seg10=0xc0,0xf9,0xa4, 0xb0,0x99,0x92,0x82,0xf8,0x80,0x90; unsigned char con4=0xfe,0xfd,0xfb,0xf7; unsigned int i=0; void main() TMOD=2; TH0=6;TL0=6; EA=1;ET0=1;TR0=1; while(1); void isr_time0() interrupt 1 P1=coni; P2=segi; i+; if(i=4) i=0; 第十一周上机任务: 1、某啤酒自动生产线,每检测一瓶,数码管显 示该数字,检测到10瓶后重新计数显示(较易) 课后准备程序,实训课上用proteus演示, 检测信号用按钮代替。 要求:电路图自行设计 2、P189 题 6-2(易 ) 3、P189 题 6-3(难 ) 自选一题,演示登记。 题目及程序写在作业本上 本周四上机题目 设计一个电路,要求: 1)开关1闭合,开关2断开时,数码管显示数字1,3 ,5 ; 2)开关2闭合,开关1断开时,数码管显示数字2,4 ,6 ; 3)开关1、开关2均断开时,数码管显示数字0 课下准备程序,上机用proteus仿真显示结果 二维数组 x00 x01 x02 x10 x11 x12 数据类型 数组名常量表达式1常量表达式2; Example int x23; 行列 int a3,4, b(3,4); int c , d(3)(4); 6.2 数组2二维数组的定义和初始化 该数组含有哪些元素? (1)分行对二维数组初始化 Example int a23=1,2,3,4,5,6; 初始化后: 1 2 3 4 5 6 方法直观! 6.2 数组2二维数组的定义和初始化 (2)按数组排列的顺序初始化 数据较多时容易 遗漏,不易检查 ! Example int a23=1,2,3,4,5,6; 初始化后: 1 2 3 4 5 6 (3)对全部数组元素初始化 可省略行号,列号不能省 Example int a 3=1,2,3,4,5,6; 初始化后: 1 2 3 4 5 6 Example int a 3=1,2,3,4,5,6,7; 结果: 1 2 3 4 5 6 7 0 0 (4)对部分元素赋初值 Example int a23=1,2,4; 等价于? 结果: 1 2 0 4 0 0 a34=3; a1,2=1; 数组名行下标列下标 Example int a34; a00=3; a01=a00+10; a2-13*1 a34=3; a1,2=1; 引用: /* 下标越界 */ /* a12=1; */ 6.2 数组2二维数组的引用 这两个引用正确? 用二层循环语句处理数组,通常外循环控制行, 内循环控制列。 例如: unsigned char a23=1,2,3,4,5,6; 6.2 数组2二维数组的应用 for(i=0;i unsigned char code digit_code105= 0x41,0x3e,0x3e,0x3e,0x41, /0 0x7f,0x3d,0x00,0x3f,0x7f, /1 0x3d,0x1e,0x2e,0x36,0x39, /2 0x5d,0x3e,0x36,0x36,0x49, /3 0x67,0x6b,0x6d,0x00,0x6f, /4 0x58,0x3a,0x3a,0x3a,0x46, /5 0x43,0x35,0x36,0x36,0x4f, /6 0x7e,0x0e,0x76,0x7a,0x7d, /7 0x49,0x36,0x36,0x36,0x49, /8 0x79,0x36,0x36,0x56,0x61 /9 ; unsigned char num=0; unsigned char colm=0; void delay();/用于设定每个数之间显示的延时时间 void init_time0();/这是什么函数? void isr_time0(); void init_time0() TMOD = (TMOD TL0=-8000; TH0=(-8000)8; EA=1; ET0=1; TR0=1; void main() init_time0(); while(1) delay(); num =(num +1) %10; void delay() unsigned i,j; for(i=0;i8; EA=1;ET0=1; TR0=1; void isr_time0() interrupt 1 TL0=-8000; TH0=(-8000)8; colm=(colm+1)%5; P1=digit_codenumcolm; P3=(0x01 unsigned char seg10=0xc0,0xf9,0xa4,0xb0,0x99, 0x92,0x82,0xf8,0x80,0x90; unsigned char con6=0x1,0x2,0x4,0x8,0x10,0x20; unsigned char hh=0; /小时初值 unsigned char mm=0;/分钟初值 unsigned char ss=0;/秒初值 unsigned char count=100;/定时10ms*100=1s void main() TMOD=1; TH0=-100008; TL0=-10000; EA=1;ET0=1;TR0=1; while(1); 案例10 设计计时器

温馨提示

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

评论

0/150

提交评论