单片机应用技术(第三版)课件 任务7 单片机控制交通灯设计_第1页
单片机应用技术(第三版)课件 任务7 单片机控制交通灯设计_第2页
单片机应用技术(第三版)课件 任务7 单片机控制交通灯设计_第3页
单片机应用技术(第三版)课件 任务7 单片机控制交通灯设计_第4页
单片机应用技术(第三版)课件 任务7 单片机控制交通灯设计_第5页
已阅读5页,还剩32页未读 继续免费阅读

下载本文档

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

文档简介

任务7单片机控制交通灯设计教学规划

知识重点:

知识难点:

教学方式:(1)LED数码管的结构

(2)数码管的静态显示、动态显示(3)数组定义与数组元素的引用(4)LED点阵显示应用

LED点阵显示

以任务入手,通过案例让学生掌握数组的应用以及LED数码管和LED点阵的应用7.1数组7.2单片机控制数码管显示案例12数码管静态显示案例13数码管动态显示7.3LED点阵显示目录案例148×8LED点阵显示图形案例15有时间显示交通灯设计7.1.1

一维数组7.1数组1.一维数组的定义和初始化数据类型数组名[常量表达式];ExampleInt

a[10];chars1[5];定义了一个一维整形数组a,10表示有10个元素:a[0],a[1],a[2],……a[8],a[9]定义了一个一维字符数组s1,5表示有5个元素:s1[0],s1[1],s1[2],s1[3],s1[4]还有以下方法可以初始化一维数组。(l)对数组的部分元素初始化,例如:unsignedchara[10]={1,2,5,9,3};只给前面5个元素分别赋初值1、2、5、9、3,后5个元素的值为0。(2)如果对静态数组不赋初值,编译器会对所有数组元素自动赋0,例如:unsignedchara[10];数组a中所有元素都被初始化为0。(3)在对全部数组元素赋初值时,可以不指定数据长度,例如:unsignedchara[5]={a,2,5,9,3};可以写成:unsignedchara[]={a,2,5,9,3};提示:(1)数组名后面方括号不能换成圆括号或大括号。(2)整型常量表达式表示数组元素的个数,即数组长度。例如a[10]表示数组a有10个数组元素,下标从0开始,依次是a[0],

a[1],a[2],……a[9]。注意,不能使用数组元素a[10]。(3)整型常量表达式可以包含常量和符号常量,不能包含变量。例如下面的数组定义是合法的:

#defineN5

unsignedinta[N];而以下定义是非法的,因为n是变量:

intn=5;

unsignedinta[n];2、一维数组元素的引用数组名[下标];下标可以是整型常量、整型变量和整型表达式。Exampleintn=5,a[20];

a[1]

a[n]

a[3*n]表示引用数组a中的第2个元素表示引用数组a中的第6个元素表示引用数组a中的第16个元素3、一维数组的应用一维数组大量用在查表程序中。把数组作为一个表格,预先存储在存储器中,需要时可以通过查找数组元素快速地获得其中的数据。对于这些运行时无需修改的数组,通常将其定义为code存储器类型,将其存放在程序存储器中以节省数据存储器的空间。7.1.2二维数组

1.二维数组的定义和初始化数据类型数组名[常量表达式1][常量表达式2];Example

intx[2][3];行列x[0][0]x[0][1]x[0][2]x[1][0]x[1][1]x[1][2]对二维数组的初始化有以下5种方法。(1)分行对二维数组初始化Exampleinta[2][3]={{1,2,3},{4,5,6}};初始化后:

123

456方法直观!(2)按数组排列的顺序初始化数据较多时容易遗漏,不易检查!Example

inta[2][3]={1,2,3,4,5,6};初始化后:

123

456Exampleinta[2][3]={{1,2,3},{}};初始化后:

123

000(3)给部分元素赋初值Exampleinta[2][3]={{1,2},{4}};结果:

120400(4)对各行部分元素赋初值(5)对全部数组元素初始化省略行号Exampleinta[][3]={1,2,3,4,5,6};初始化后:

123

4562.二维数组的引用数组名[行下标][列下标]Exampleinta[3][4];a[0][0]=3;a[0][1]=a[0][0]+10;a[3][4]=3;a[1,2]=1;/*下标越界*//*a[1][2]=1;*/7.1.3字符数组1.字符数组的定义和初始化unsignedchara[10]={‘C’,’5’,’1’};C51\0\0\0\0\0\0\0如果提供的初值个数与预定的数组长度相同,在定义的时候可以忽略数组长度,系统会自动根据初值个数确定数组长度,例如:staticchara[]=”Welcomeyou!”数组a的长度自动定为12。用这种方式,编程人员不必数出一个字符数组中包含多少个字符,尤其在赋初值的字符个数较多时比较方便。2.字符数组元素的引用7.2单片机控制数码管显示7.2.1

LED数码管的结构

LED显示器内部由多个发光二极管组成。7.2.2显示字形与字段码关系显示字符共阴极共阳极显示字符共阴极共阳极显示字符共阴极共阳极字段码字段码字段码字段码字段码字段码03FHC0H96FH90HT31HCEH106HF9HA77H88HY6EH91H25BHA4HB7CH83HL38HC7H34FHB0HC39HC6H8FFH00H466H99HD5EHA1H“灭”0FFH56DH92HE79H86H………………67DH82HF71H8EH707HF8HP73H8CH87FH80HU3EHC1H表7-2

LED显示器字形段码表7.2.3LED数码管显示方式1.静态显示方式LED数码管有两种驱动方法:静态显示法和动态显示法静态显示:适宜位数较少,高亮度,硬件复杂,编程简单。动态显示:适宜数码管较多,亮度不足,硬件简单,编程复杂。静态显示的特点是每个数码管必须接一个8位锁存器,用来锁存待显示的字形码。送入一次字形码显示字形一直保持,直到送入新字形码为止。这种方法的优点是占用CPU时间少,显示便于监测和控制;缺点是硬件电路比较复杂,成本较高。案例12数码管静态显示要求P0口、P2口、P1口各接一个数码管,三个数码管分别显示1、2、3.三个数字。#include<reg51.h>voidmain(){

unsignedcharcodeLed_code[i]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};

//共阳数码管0~9的段码

P0=Led_code[1];

P2=Led_code[2];P1=Led_code[3];while(1);}2动态显示

动态含义:逐位点亮各个LED,每一位点亮约1ms,在10ms~20ms间再被点亮一次,重复不止。利用人视觉暂留现象,看到多只LED同时点亮并不察觉闪烁现象。特点:将所有数码管段选线并联在一起,通过控制位选信号来控制数码管点亮。数码管采用动态扫描显示。动态显示的亮度比静态显示要差一些,所以在选择限流电阻时应略小于静态显示电路中的限流电阻。

案例13数码管动态显示要求P0口作为数据端,P2口作为位选端,动态显示接法接四位数码管,INT0接一按钮,每按一次数码管显示的数字加1。#include<reg51.h>unsignedcharled[10]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,

0xf8,0x80,0x90};

//0~9共阳段码unsignedcharcon[4]={0x1,0x2,0x4,0x8};

//位码unsignedinta=0;main(

){unsignedinti,j;

unsignedcharb[4];

IT0=1;

EX0=1;

EA=1;while(1)

{

b[3]=a/1000;

b[2]=(a%1000)/100;

b[1]=(a%100)/10;

b[0]=a%10;

for(i=0;i<4;i++)

{

P2=con[i];

//先送出位码

P0=led[b[i]];

//再送出段码

for(j=100;j>0;j--);//延时

}

};}voidisr_int0(void)interrupt0{

a++;}7.3

LED点阵显示最常见的LED点阵显示模块有5×7(5列7行),7×9(7行9列),8×8(8行8列)结构。在电子市场,有专门的LED点阵模块产品,图7-9所示为8×8点阵模块,它有64个像素,可以显示一些较为简单的字符或图形。图7-10所示是LED模块内部结构等效电路。它有8行(Y0~Y7),8列(X0~X7),对外有16个引脚,其中8根行线用数字0~7表示,8根列线用字母A~H表示。LED点阵动态显示原理:要点亮跨接在模块某行某列的二极管,其对应的行为高电平,对应的列为低电平。在很短时间内依次点亮多个发光二极管,重复进行则可以看到显示的数字、字母或图形。显示“大”的过程如下:先给第1行送高电平(行高电平有效),同时给8列送11101111(列低电平有效,从数据高位往低位读数);然后给第2行送高电平,同时给8列送11101111,……,最后给第8行送高电平,同时给8列送11111111。每行点亮延时时间为1ms,第8行结束后再从第1行开始循环,利用视觉驻留现象,人们看到的就是一个稳定的“大”字。案例14用8×8LED点阵显示心形图形用单片机控制8×8LED点阵显示模块,P2口控制列线,P1口控制行线。为了提高驱动能力P1口通过74LS245与LED行线连接。#include<reg51.h>voiddelay1ms(unsignedintms);voidmain(){

unsignedcharcode

led[]={0xff,0x99,0x66,0x7e,0xbd,0xdb,0xe7,0xff};

unsignedcharw,i;

while(1)

{w=0x01;

for(i=0;i<8;i++)

{

P1=w;

//P1口控制行线

P2=led[i];

//P2口控制列线

delay1ms(1);

//1ms延时

w<<=1;

}

}}

voiddelay1ms(unsignedintms){unsignedinti,j;for(i=0;i<ms;i++)

for(j=0;j<110;j++);}842184210xff11111111

0x991

00

11

0010x6601100110

0x7e

01111110

0xbd10111101

0xdb11011011

0xe711100111

0xff11111111案例15有时间显示的交通灯控制器设计由P0口连接12个发光二极管,分别代表四个路口的红、绿、黄灯,初始态为四个路口的红灯全亮之后,东西绿灯亮、南北红灯亮共20秒;东西黄灯、南北红灯,黄灯每隔1s闪烁1次共3次;东西红灯亮,南北绿灯亮共20秒;东西红灯亮、南北绿灯熄灭,黄灯每隔1s闪烁共3次后,再切换到东西绿灯亮20s;之后重复以上过程。本任务涉及两个定时时间,一是每个路口的绿灯亮20s,另一个是黄灯闪烁时间间隔0.5s,可以用定时器0控制路口绿灯亮的时间,用定时器1控制黄灯闪烁的时间间隔,但是两个定时器的定时都不可达到20s或0.5s,所以可以让两个定时器都工作于方式1,定时时间为50ms,引进变量time*dup=400和timey=10,当定时器发出中断时,这两个变量分别减1,直到为0则达到定时时间。根据以上分析,TMOD应赋值为0x11,两个定时器计数次数为50000。#include<reg51.h>unsignedchartime=20,dup=20,timey=10,county=6;unsignedcharallr=0x36;

//所有路口的灯全红unsignedcharewg_snr=0x1e;

//东西绿灯亮,南北红灯亮unsignedcharewy=0x2e;

//东西黄灯亮,南北红灯亮unsignedcharsng_ewr=0x33;

//南北绿灯亮,东西红灯亮unsignedcharsny=0x35;

//南北黄灯亮,东西红灯亮unsignedcharled[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};

//共阳数码管0~9段码sbitP01=P0^1;sbitP04=P0^4;//所有黄灯均以状态取反来实现闪烁bitewg=1;//ewg是一个标志位

//ewg=1,此时是东西绿南北红状态

//ewg=0,此时是南北绿东西红状态main(){unsignedint

i;P0=allr;

//所有路口红灯全亮复位下

P1=0;for(i=50000;i>0;i--);

//延时P0=ewg_snr;

//开始进入第一种状态P2=led[time/10];

P3=led[time%10];TMOD=0x11;

//定时器1和定时器0均工作于方式1TL0=-50000;TH0=-50000>>8;//T1、T0均定时50msTL1=-50000;TH1=-50000>>8;EA=1;ET0=1;ET1=1;TR0=1;

//T0先定时工作50mswhile(1);}voidisr_time0()interrupt1//定时器0的中断服务程序{TL0=-50000;TH0=-500

温馨提示

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

评论

0/150

提交评论