单片机实例之数码管_第1页
单片机实例之数码管_第2页
单片机实例之数码管_第3页
单片机实例之数码管_第4页
单片机实例之数码管_第5页
已阅读5页,还剩41页未读 继续免费阅读

下载本文档

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

文档简介

1、课题三(实例)课题三(实例) 之数码管显示之数码管显示 n任务一 单个单个LED数码管的静态控制显示方式数码管的静态控制显示方式 n任务二 多个多个LED数码管的动态控制显示方式数码管的动态控制显示方式 n任务三 099999999加法计数器加法计数器 n课题目标课题目标 本课题的任务是用单片机实现简易数字本课题的任务是用单片机实现简易数字 显示,演示效果如图显示,演示效果如图4-1所示。通过编程,所示。通过编程, 学会在单片机上实现一位数字和多位数字学会在单片机上实现一位数字和多位数字 的静态和动态显示控制方法,以及不同进的静态和动态显示控制方法,以及不同进 制计数的程序编写方法。制计数的程

2、序编写方法。 任务一任务一 LED数码管的静态显示数码管的静态显示 本任务就是将单片机与数码管接成图 4-2所示静态显示方式,编程实现数码管 每隔0.2s的0-9数字显示。 图4-2 数码管显示电路图 一、任务分析一、任务分析 所谓静态显示,就是当单片机某一端口输出 一组显示数据之后,该端口一直保持该数据输出, 维持数码管的显示数字,直到端口数据改变,又 保持显示下一数据的显示方式。 在具体电路连接上,将单片机一个端口的八 个端子接在一只数码管的八个引脚上(h端为小数 点),控制数码管的七段LED的亮或熄,显示器 出数字,这种显示控制方式就是静态显示。静态 显示电路连接特点是单片机端口的每一位

3、与数码 管的一个端相连接,相当于单片机的一个引脚外 接一只发光二极管。 二、LED数码管的结构和工作原理。 图4-3 数码管结构图 数码管实际上是由7个发光管组成“8”字形构成的,加上 小数点就是8个。这些段分别由字母a、b、c、d、e、f、g、 dp来表示。当数码管特定的段加上电压后,这些特定的段就 会发亮,以形成我们眼睛看到的字样。例如:显示一个“3” 字,那么应当是a亮、b亮、c亮、d亮、e不亮、f不亮、g亮、 dp不亮。数码管的内部结构如图2.4所示,其中COM引脚为 公共端,用来控制数码管显示的打开或关闭,即起到“使能”作 用。 根据公共端接法的不同,数码管又分为共阴极和共阳极 两种

4、结构,分别如图2.4(b)和图 2.4(c)所示。 共阳极就是将8个LED的阳极连接到一起组成公共端 COM,接正极,当相应字段为低电平“0”时,可以点亮该字 段;当相应字段为高电平“1”时,该字段不亮。 共阴极就是将8个LED的阴极连接到一起组成公共端 COM,接负极,当相应字段为高电平“1”时,可以点亮该字 段;当相应字段为低电平“0”时,该字段不亮。 数码管段码 表4-1 共阴数码管显示数字的段码表 数码管段码 表4-2 共阳数码管显示数字的段码表 四、程序设计 要实现09的显示,设 计方法与前面彩灯花样显示 类似,首先写出09的显示 数据(表4-1中的字型码数 据,注意电路中选用的是共

5、 阴或共阳数码管一致),这 些数据在程序中作数组元素。 程序中将数组元素依次读出 送到端口,使数码管显示出 对应的数字。程序的设计框 图见图4-5。 图4-5 1、C语言程序: #include #define uchar unsigned char unsigned char code table=0 x3f,0 x06,0 x5b,0 x4f,0 x66, 0 x6d,0 x7d,0 x07,0 x7f,0 x6f; unsigned char dispcount; void delay02s() unsigned char i,j,k; for(i=10;i0;i-) for(j=200

6、;j0;j-) for(k=248;k0;k-); void main(void) while(1) for(dispcount=0;dispcount10;dispcount+) P1=tabledispcount; delay02s(); 2、汇编语言程序: org 00h aa: mov r0,#00h mov dptr,#tab sd: mov a,r0 movc a,a+dptr mov p1,a lcall delay inc r0 cjne r0,#10,sd sjmp aa delay: mov r6,#5 SS:MOV R7, #200 LOOP:MOV R5, #249 D

7、JNZ R5, $ DJNZ R7,LOOP DJNZ R6,SS ret tab:db 3fh,06h,5bh,4fh,66h,6dh,7dh,07h,7fh,6fh end 任务二任务二 LED数码管的动态显示数码管的动态显示 本任务就是当单片机与数码管接成动态 显示方式,编程实现数码管的0-7数字显示。 一、电路原理 动态显示的电路有很多,本课题中所选用的动态显示的电路有很多,本课题中所选用的 电路如图电路如图4-6所示。图中用的是两只四位数码管。所示。图中用的是两只四位数码管。 每只已将所有数码管的每只已将所有数码管的ah分别连接在一起,再分别连接在一起,再 将两只四位数码管的将两只四

8、位数码管的ah连接在一起,即将八只连接在一起,即将八只 数码管八段显示的数码管八段显示的段码控制线连接段码控制线连接在一起,作为在一起,作为 整个数码管的段码控制。单片机端口驱动能力不整个数码管的段码控制。单片机端口驱动能力不 足,在段码上使用足,在段码上使用74LS373提高数码管亮度。对提高数码管亮度。对 每只数码管的公共端进行控制,使每只数码管的公共端进行控制,使每只数码管可每只数码管可 以单独显示以单独显示。电路中,将每个数码管的。电路中,将每个数码管的COM端接端接 位选信号位选信号dig,该引脚为低电平即接通显示,实现,该引脚为低电平即接通显示,实现 数码管的位控制。数码管的位控制

9、。 图4-6 数码管原理图 三、74LS138译码器: 74LS138 为3 线8 线译码器,其工作原理如下: 当一个选通端(G1)为高电平,另两个选通 端(/(G2A)和/(G2B))为低电平时,可将地址端 (A、B、C)的二进制编码在一个对应的输出端 以低电平译出。 图4-4 74LS138引脚图 n真值表: 表4-2 74LS138功能表 图4-6 数码管原理图 1、C语言程序: #include #define uchar unsigned char sbit a=P05; sbit b=P06; sbit c=P07; uchar code table=0 x3f,0 x06,0 x

10、5b,0 x4f,0 x66, 0 x6d,0 x7d,0 x07,0 x7f,0 x6f; uchar dispcount; void delay02s(void) unsigned char i,j,k; for(i=10;i0;i-) for(j=200;j0;j-) for(k=248;k0;k-); void main(void) while(1) for(dispcount=0;dispcount10;dispcount+) a=0; b=0; c=0; P1=tabledispcount; delay02s(); 2、汇编语言程序: org 00h aa:mov r0,#00h

11、mov dptr,#tab clr p0.5 clr p0.6 clr p0.7 sd:mov a,r0 movc a,a+dptr lcall delay mov p1,a inc r0 cjne r0,#10,sd sjmp aa delay:mov r6,#5 SS:MOV R7, #200 LOOP:MOV R5, #249 DJNZ R5, $ DJNZ R7,LOOP DJNZ R6,SS ret tab:db 3fh,06h,5bh,4fh,66h,6dh,7dh,07h,7fh,6fh end 如图如图4-6所示电路,在电路连接上将所有要显所示电路,在电路连接上将所有要显 示的

12、数码管的八个端并接在单片机同一个端口的示的数码管的八个端并接在单片机同一个端口的 八位上,而用单片机的另一个端口的各个位分别八位上,而用单片机的另一个端口的各个位分别 控制各数码管的公共端,控制数码管是否点亮。控制各数码管的公共端,控制数码管是否点亮。 在程序的控制下,在程序的控制下,快速地依次输出要显示各个数,快速地依次输出要显示各个数, 并同时控制对应数码管工作并同时控制对应数码管工作,这就是数码管的动,这就是数码管的动 态显示方式。态显示方式。 宏观看同时点亮,微观看依次点亮宏观看同时点亮,微观看依次点亮 图4-6 数码管原理图 动态显示达到一定速度时,由于人眼的视觉暂动态显示达到一定速

13、度时,由于人眼的视觉暂 留特性,在观察时,数码管所有内容如同静态显留特性,在观察时,数码管所有内容如同静态显 示一样,不会产生闪烁。所以,对动态扫描的频示一样,不会产生闪烁。所以,对动态扫描的频 率有一定的要求,率有一定的要求,LED数码管将出现数码管将出现 现象。如现象。如,由于每个,由于每个LED数码管点数码管点 亮的时间太短,亮的时间太短,LED数码管的亮度太低,数码管的亮度太低, 。所以,显示时间一般取。所以,显示时间一般取几个几个ms左右为宜。在左右为宜。在 编写程序时,常采用调用延时子程序来达到要求编写程序时,常采用调用延时子程序来达到要求 的保持时间。程序工作时,使电路的保持时间

14、。程序工作时,使电路选通某一位数选通某一位数 码管后,该数码管被点亮后并保持一定的时间码管后,该数码管被点亮后并保持一定的时间。 下面,以在数码管上从左到右依次显示出下面,以在数码管上从左到右依次显示出8 8个个 数字(数字(0 07 7)为例,编写动态显示程序。程序中)为例,编写动态显示程序。程序中 将要显示的八个数字放在一个数组中(该数组取将要显示的八个数字放在一个数组中(该数组取 名为名为display_datadisplay_data)。如果从段码输出端口来看,)。如果从段码输出端口来看, 动态显示程序的显示段码输出的过程,其实质和动态显示程序的显示段码输出的过程,其实质和 静态显示八

15、个数字是一样的,依次输出各个段码;静态显示八个数字是一样的,依次输出各个段码; 从位码端口看,要哪只数码管显示,就在那只数从位码端口看,要哪只数码管显示,就在那只数 码对应位输出码对应位输出1 1,显示一个数字后,则下一位输出,显示一个数字后,则下一位输出 高电平,这与跑马灯的控制是一样的。将这两个高电平,这与跑马灯的控制是一样的。将这两个 程序结合起来,就是动态显示程序,流程图如图程序结合起来,就是动态显示程序,流程图如图 4-74-7所示。所示。 二、程序分析二、程序分析 图4-7 动态显示流程图 变量赋初值化 将数组display_data中第i个 元素送段码端口 等待一段时间 Yes

16、i8 No 变量指向下一个数据 输出位码控制数据 1、C语言程序: #include #define uchar unsigned char uchar code tabledu=0 x3f,0 x06,0 x5b,0 x4f,0 x66, 0 x6d,0 x7d,0 x07,0 x7f,0 x6f; uchar code tablewe=0 x1f,0 x3f,0 x5f,0 x7f,0 x9f, 0 xbf,0 xdf,0 xff; unsigned char dispcount; void delaynms(unsigned char n) unsigned char i,j; for(

17、i=n;i0;i-) for(j=250;j0;j-); void main(void) while(1) for(dispcount=0;dispcount8;dispcount+) P1=tabledudispcount; P0=tablewedispcount; delaynms(20); /10ms,12MHz 2、汇编语言: org 00h aa:mov r0,#00h sd:mov dptr,#tab2 mov a,r0 movc a,a+dptr mov p0,a mov a,r0 mov dptr,#tab1 movc a,a+dptr mov p1,a lcall delay

18、 inc r0 cjne r0,#8,sd sjmp aa delay:mov r6,#5 SS:MOV R7,#200 LOOP:MOV R5,#249 DJNZ R5, $ DJNZ R7,LOOP DJNZ R6,SS ret tab1:db 3fh,06h,5bh,4fh,66h,6dh,7dh,07h tab2:db 1fh,3fh,5fh,7fh,9fh,0bfh,0dfh,0ffh end 思考 n1.若位控制不是由74Ls138控制,而是由P0 口直接控制,程序应该做如何修改? n2.两种位控制方式,各有什么优缺点? 任务三任务三 099999999加法计数器加法计数器 本任务

19、是实现本任务是实现099999999的加的加1计数显示。计数显示。 程序设计分析 1.需要定义一个变量,记录加1后的结果,该变量初值为 0,问该变量定义为何种类型? unsigned char x8=0; 2.对x加1 3.将x送显, 4.延时 5.跳转到2. #include unsigned char code tabledu=0 x3f,0 x06,0 x5b,0 x4f,0 x66,0 x6d,0 x7d,0 x07,0 x7f,0 x6f; unsigned char code tablewe=0 x1f,0 x3f,0 x5f,0 x7f,0 x9f,0 xbf,0 xdf,0 x

20、ff; void delay02s(void) unsigned char i,j,k; for(i=10;i0;i-) for(j=200;j0;j-) for(k=248;k0;k-); void main(void) unsigned char i; unsigned char x8=0; while(1) /2.对对x加加1 for(i=0;i=10) xi=0; else break; /3.将将x送显送显,先送先送xi的段码,再送的段码,再送xi的位码的位码 for(i=0;i8;i+) P1=tableduxi; P0=tablewei; /4.延时延时 delay02s();

21、任务四任务四 24进制计数器进制计数器 本任务实现本任务实现24进制计数器,计数范围为进制计数器,计数范围为023。 程序设计分析 1. 24进制计数和前面的十进制计数不同的是,当计数到 24时,个位数要变为0,同时十位数也要变为0。需要 定义一个变量,记录加1后的结果,该变量初值为0, 问该变量定义为何种类型? unsigned char x=0; 2.对x加1,若x=24,则x=0; 3.将x送显,个位a=x%10, b=x/10; 4.延时 5.跳转到2. #include unsigned char code tabledu=0 x3f,0 x06,0 x5b,0 x4f,0 x66,

22、0 x6d,0 x7d,0 x07,0 x7f,0 x6f; unsigned char code tablewe=0 x1f,0 x3f,0 x5f,0 x7f,0 x9f,0 xbf,0 xdf,0 xff; void delay02s(void) unsigned char i,j,k; for(i=10;i0;i-) for(j=200;j0;j-) for(k=248;k0;k-); void main(void) unsigned char dispcount,i; unsigned char x=0,a,b; while(1) /2.对对x加加1 x+; if(x=24) x=0

23、; /3.将将x送显送显,求个位求个位a,十位十位b, a=x%10; P1=tabledua; P0=tablewe0; /4.延时延时 delay02s(); b=x%10; P1=tabledub; P0=tablewe1; /4.延时延时 delay02s(); 任务五任务五 简易数字钟简易数字钟 要求利用单片机和要求利用单片机和 数码管实现数字钟。数码管实现数字钟。 任务分析任务分析 数字钟要完成的功能是显示小时、分和秒和计数器。数字钟要完成的功能是显示小时、分和秒和计数器。 其中秒和分为其中秒和分为60进制,小时为进制,小时为24进制(也可用进制(也可用12翻翻1)计)计 数。数。 为了确定为了确定1秒,首先要确定动态显示一次所需要的时秒,首先要确定动态显示一次所需要的时 间,如果每一只数码管显示的时间为间,如果每一只数码管显示的时间为0.5ms,则一次动态,则一次动态 显示(

温馨提示

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

评论

0/150

提交评论