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

下载本文档

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

文档简介

单片机实例之数码管单片机实例之数码管单片机实例之数码管

课题目标本课题的任务是用单片机实现简易数字显示,演示效果如图4-1所示。通过编程,学会在单片机上实现一位数字和多位数字的静态和动态显示控制方法,以及不同进制计数的程序编写方法。通过阅读文学作品,我们能提高文学鉴赏水平,培养文学情趣;单片机实例之数码管单片机实例之数码管单片机实例之数码管

1

课题目标本课题的任务是用单片机实现简易数字显示,演示效果如图4-1所示。通过编程,学会在单片机上实现一位数字和多位数字的静态和动态显示控制方法,以及不同进制计数的程序编写方法。

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

数码管实际上是由7个发光管组成“8”字形构成的,加上小数点就是8个。这些段分别由字母a、b、c、d、e、f、g、dp来表示。当数码管特定的段加上电压后,这些特定的段就会发亮,以形成我们眼睛看到的字样。例如:显示一个“3”字,那么应当是a亮、b亮、c亮、d亮、e不亮、f不亮、g亮、dp不亮。数码管的内部结构如图2.4所示,其中COM引脚为公共端,用来控制数码管显示的打开或关闭,即起到“使能”作用。

根据公共端接法的不同,数码管又分为共阴极和共阳极两种结构,分别如图2.4(b)和图2.4(c)所示。

共阳极就是将8个LED的阳极连接到一起组成公共端COM,接正极,当相应字段为低电平“0”时,可以点亮该字段;当相应字段为高电平“1”时,该字段不亮。

共阴极就是将8个LED的阴极连接到一起组成公共端COM,接负极,当相应字段为高电平“1”时,可以点亮该字段;当相应字段为低电平“0”时,该字段不亮。数码管实际上是由7个发光管组成“8”字7数码管段码

表4-1共阴数码管显示数字的段码表数码管段码表4-1共阴数码管显示数字8数码管段码

表4-2共阳数码管显示数字的段码表数码管段码表4-2共阳数码管显示数字的9四、程序设计要实现0~9的显示,设计方法与前面彩灯花样显示类似,首先写出0~9的显示数据(表4-1中的字型码数据,注意电路中选用的是共阴或共阳数码管一致),这些数据在程序中作数组元素。程序中将数组元素依次读出送到端口,使数码管显示出对应的数字。程序的设计框图见图4-5。图4-5四、程序设计要实现0~9的显示,设计方101、C语言程序:#include<reg51.h>#defineucharunsignedcharunsignedcharcodetable[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};unsignedchardispcount;voiddelay02s(){unsignedchari,j,k; for(i=10;i>0;i--) for(j=200;j>0;j--) for(k=248;k>0;k--);}1、C语言程序:11voidmain(void){while(1){ for(dispcount=0;dispcount<10;dispcount++){ P1=table[dispcount]; delay02s(); } }}voidmain(void)122、汇编语言程序:org00haa: movr0,#00h movdptr,#tabsd: mova,r0 movca,@a+dptr movp1,a lcalldelay incr0 cjner0,#10,sd sjmpaa2、汇编语言程序:13delay: movr6,#5SS: MOVR7,#200LOOP:MOVR5,#249 DJNZR5,$ DJNZR7,LOOP DJNZR6,SS rettab: db3fh,06h,5bh,4fh,66h,6dh,7dh,07h,7fh,6fh end单片机实例之数码管14任务二LED数码管的动态显示本任务就是当单片机与数码管接成动态显示方式,编程实现数码管的0-7数字显示。

任务二LED数码管的动态显示本任务就是当单15一、电路原理

动态显示的电路有很多,本课题中所选用的电路如图4-6所示。图中用的是两只四位数码管。每只已将所有数码管的a~h分别连接在一起,再将两只四位数码管的a~h连接在一起,即将八只数码管八段显示的段码控制线连接在一起,作为整个数码管的段码控制。单片机端口驱动能力不足,在段码上使用74LS373提高数码管亮度。对每只数码管的公共端进行控制,使每只数码管可以单独显示。电路中,将每个数码管的COM端接位选信号dig,该引脚为低电平即接通显示,实现数码管的位控制。一、电路原理16图4-6数码管原理图图4-6数码管原理图17三、74LS138译码器:

74LS138为3线-8线译码器,其工作原理如下:当一个选通端(G1)为高电平,另两个选通端(/(G2A)和/(G2B))为低电平时,可将地址端(A、B、C)的二进制编码在一个对应的输出端以低电平译出。

图4-474LS138引脚图三、74LS138译码器:图4-474LS18真值表:

表4-274LS138功能表真值表:19图4-6数码管原理图图4-6数码管原理图201、C语言程序:#include<reg51.h>#defineucharunsignedcharsbita=P0^5;sbitb=P0^6;sbitc=P0^7;ucharcodetable[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};uchardispcount;voiddelay02s(void){unsignedchari,j,k; for(i=10;i>0;i--) for(j=200;j>0;j--) for(k=248;k>0;k--);}1、C语言程序:21voidmain(void){while(1){ for(dispcount=0;dispcount<10;dispcount++){ a=0; b=0; c=0; P1=table[dispcount]; delay02s(); } }}voidmain(void)222、汇编语言程序:org00haa:movr0,#00hmovdptr,#tabclrp0.5clrp0.6clrp0.7sd:mova,r0movca,@a+dptrlcalldelaymovp1,aincr02、汇编语言程序:23cjner0,#10,sdsjmpaadelay:movr6,#5SS:MOVR7,#200LOOP:MOVR5,#249DJNZR5,$DJNZR7,LOOPDJNZR6,SSrettab:db3fh,06h,5bh,4fh,66h,6dh,7dh,07h,7fh,6fhendcjner0,#10,sd24

如图4-6所示电路,在电路连接上将所有要显示的数码管的八个端并接在单片机同一个端口的八位上,而用单片机的另一个端口的各个位分别控制各数码管的公共端,控制数码管是否点亮。在程序的控制下,快速地依次输出要显示各个数,并同时控制对应数码管工作,这就是数码管的动态显示方式。

宏观看同时点亮,微观看依次点亮如图4-6所示电路,在电路连接上将所有要25图4-6数码管原理图图4-6数码管原理图26

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

下面,以在数码管上从左到右依次显示出8个数字(0~7)为例,编写动态显示程序。程序中将要显示的八个数字放在一个数组中(该数组取名为display_data)。如果从段码输出端口来看,动态显示程序的显示段码输出的过程,其实质和静态显示八个数字是一样的,依次输出各个段码;从位码端口看,要哪只数码管显示,就在那只数码对应位输出1,显示一个数字后,则下一位输出高电平,这与跑马灯的控制是一样的。将这两个程序结合起来,就是动态显示程序,流程图如图4-7所示。二、程序分析下面,以在数码管上从左到右依次显示出8个数28图4-7动态显示流程图变量赋初值化将数组display_data中第i个元素送段码端口等待一段时间Yes

i<8No变量指向下一个数据输出位码控制数据图4-7动态显示流程图变量赋初值化将数组display_291、C语言程序:#include<reg51.h>#defineucharunsignedcharucharcodetabledu[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};ucharcodetablewe[]={0x1f,0x3f,0x5f,0x7f,0x9f,0xbf,0xdf,0xff};1、C语言程序:30unsignedchardispcount;voiddelaynms(unsignedcharn){unsignedchari,j; for(i=n;i>0;i--) for(j=250;j>0;j--);}voidmain(void){while(1){ for(dispcount=0;dispcount<8;dispcount++){ P1=tabledu[dispcount]; P0=tablewe[dispcount]; delaynms(20);//10ms,12MHz } }}unsignedchardispcount;312、汇编语言:org00haa:movr0,#00hsd:movdptr,#tab2mova,r0movca,@a+dptrmovp0,amova,r0movdptr,#tab1movca,@a+dptrmovp1,alcalldelayincr0cjner0,#8,sdsjmpaa2、汇编语言:32delay:movr6,#5SS:MOVR7,#200LOOP:MOVR5,#249DJNZR5,$DJNZR7,LOOPDJNZR6,SSrettab1:db3fh,06h,5bh,4fh,66h,6dh,7dh,07htab2:db1fh,3fh,5fh,7fh,9fh,0bfh,0dfh,0ffhenddelay:movr6,#533单片机实例之数码管34思考1.若位控制不是由74Ls138控制,而是由P0口直接控制,程序应该做如何修改?2.两种位控制方式,各有什么优缺点?思考1.若位控制不是由74Ls138控制,而是由P0口直接控35任务三0~99999999加法计数器本任务是实现0~99999999的加1计数显示。任务三0~99999999加法计数器本任务是实现0~936程序设计分析1.需要定义一个变量,记录加1后的结果,该变量初值为0,问该变量定义为何种类型?

unsignedcharx[8]={0};2.对x加13.将x送显,4.延时5.跳转到2.程序设计分析1.需要定义一个变量,记录加1后的结果,该变量初37#include<reg51.h>unsignedcharcodetabledu[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};unsignedcharcodetablewe[]={0x1f,0x3f,0x5f,0x7f,0x9f,0xbf,0xdf,0xff};voiddelay02s(void){unsignedchari,j,k; for(i=10;i>0;i--) for(j=200;j>0;j--) for(k=248;k>0;k--);}voidmain(void){ unsignedchari; unsignedcharx[8]={0}; while(1){ //2.对x加1 for(i=0;i<8;i++){ x[i]++; if(x[i]>=10){ x[i]=0; } else break; } //3.将x送显,先送x[i]的段码,再送x[i]的位码 for(i=0;i<8;i++){ P1=tabledu[x[i]]; P0=tablewe[i]; //4.延时 delay02s(); } }}#include<reg51.h>38任务四24进制计数器本任务实现24进制计数器,计数范围为0~23。任务四24进制计数器本任务实现24进制计数器,计数范围为39程序设计分析1.24进制计数和前面的十进制计数不同的是,当计数到24时,个位数要变为0,同时十位数也要变为0。需要定义一个变量,记录加1后的结果,该变量初值为0,问该变量定义为何种类型?

unsignedcharx=0;2.对x加1,若x==24,则x=0;3.将x送显,个位a=x%10,b=x/10;4.延时5.跳转到2.程序设计分析1.24进制计数和前面的十进制计数不同的是,当40#include<reg51.h>unsignedcharcodetabledu[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};unsignedcharcodetablewe[]={0x1f,0x3f,0x5f,0x7f,0x9f,0xbf,0xdf,0xff};voiddelay02s(void){unsignedchari,j,k; for(i=10;i>0;i--) for(j=200;j>0;j--) for(k=248;k>0;k--);}voidmain(void){ unsignedchardispcount,i; unsignedcharx=0,a,b; while(1){ //2.对x加1 x++; if(x==24)x=0; //3.将x送显,求个位a,十位b, a=x%10; P1=tabledu[a]; P0=tablewe[0]; //4.延时 delay02s(); b=x%10; P1=tabledu[b]; P0=tablewe[1]; //4.延时 delay02s(); }}#include<reg51.h>41任务五简易数字钟要求利用单片机和数码管实现数字钟。任务五简易数字钟要求利用单片机和数码管实现数字钟。42任务分析数字钟要完成的功能是显示小时、分和秒和计数器。其中秒和分为60进制,小时为24进制(也可用12翻1)计数。为了确定1秒,首先要确定动态显示一次所

温馨提示

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

评论

0/150

提交评论