资源预览内容
第1页 / 共49页
第2页 / 共49页
第3页 / 共49页
第4页 / 共49页
第5页 / 共49页
第6页 / 共49页
第7页 / 共49页
第8页 / 共49页
第9页 / 共49页
第10页 / 共49页
亲,该文档总共49页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述
项目6 简易数字电子时钟设计, 知识目标: 1.了解 7段LED数码管的结构及其工作原理; 2. 掌握单片机对数码管的静态、动态显示控制方式; 3. 应用单片机进行计数控制的原理。 能力目标: 1. 能根据设计任务要求编制不同进制计数器的程序流程图,理解 程序对数字电子时钟的控制原理; 2. 会利用电路仿真软件绘制简易数字电子时钟的电路原理图; 3. 会用keil C51软件对源程序进行编译调试及与protues软件联 调,实现电路仿真。,引言,单片机控制实现的数字电子时钟要完成的功能是显示小时、分和秒,是一台按秒计数并显示的计数器。其中小时采用24进制,秒和分采用60进制。 本项目从1位计数器的实现入手,逐步介绍不同进制的多位计数,最终达到设计简易数字电子时钟的目的。,任务1 从0到9的加1计数显示(静态)设计,一、知识储备,1.1 数码管的基本知识,数码管是一类显示屏通过对其不同的管脚输入相对的电流使其发亮从而显示出数字。可以显示时间、日期、温度等可以用数字代替的参数。由于它的价格便宜、使用简单,在电器特别是家电领域应用极为广泛,空调、热水器、冰箱等等绝大多数用的都是数码管。,任务1 从0到9的加1计数显示(静态)设计,1.1 数码管的基本知识,LED数码管是一种半导体发光器件,其基本单元是发光二极管,如图6.4。,任务1 从0到9的加1计数显示(静态)设计,1.1 数码管的基本知识,(1)按段数可以分为七段数码管和八段数码管,八段数码管比七段数码管多一个发光二极管单元(多一个小数点显示); (2)按能显示多少个“8”可以分为1位、2位、4位、8位数码管; (3)按发光二极管单元连接方式划分可分为共阳极/共阴极数码管。共阳极数码管是指将所有发光二极管的阳极接到一起形成公共阳极(COM)的数码管。当某一字段发光二极管的阴极为低电平时,相应字段就点亮。共阴极数码管是指将所有发光二极管的阴极接到一起形成公共阴极(COM)的数码管。当某一字段发光二极管的阳极为高电平时,相应字段就点亮。如图6.4。,任务1 从0到9的加1计数显示(静态)设计,1.2 LED数码管的静态驱动方式,数码管要正常显示,就要用驱动电路来驱动数码管的各个段码,从而显示出我们要的数字,因此根据数码管的驱动方式的不同,可以分为静态式和动态式两类。 静态驱动也称直流驱动。静态驱动是指每个数码管的每一个段码都由一个单片机的I/O端口进行驱动,或者使用如BCD码二-十进制译码器译码进行驱动。显示数据时,直接将要显示的数字的编码通过单片机送到段码显示端即可。静态驱动的优点是编程简单,显示亮度高,缺点是占用I/O端口多,如驱动5个数码管静态显示则需要5840根I/O端口来驱动,而一个AT89S51单片机芯片可用的I/O端口才32个,实际应用时必须增加译码驱动器进行驱动,硬件电路较复杂。,任务1 从0到9的加1计数显示(静态)设计,一位计数器是单片机控制数码管计数显示的最简单的例 子,本任务采用AT89S51单片机控制数码管静态显示的方式实现从0到9的加1计数显示。,1.1 提出任务,用AT89S51的P2口做输出口,接一位LED数码管,编写程序,使数码管显示从0到9的加1计数,时间间隔为0.5s。即每显示一个数字后,保持0.5s,再显示下一个,显示到数字“9”之后再从“0”开始循环。,二、设计示例,1.2 分析任务,1.硬件电路设计,任务1 从0到9的加1计数显示(静态)设计,电路组成:这里选择具有内部程序存储器的AT89S51单片机作为控制电路(未做特殊说明,则本项目4个任务设计时均采用该单片机芯片),P2口接1个1位共阳数码管,其中P2.0到P2.6分别连接数码管的af引脚,P2.7连接小数点h端。硬件电路原理图如图6.1所示。 电路分析:要使LED数码管依次显示数字,则P2口对应输出七段数码管数字显示对应的编码即可。由于流过LED的电流通常较小,为了在仿真实验中让数字显示的更亮一些,所以一般还要在回路中接入合适的限流电阻。一般情况下,根据驱动LED的电流电压计算,在这里取限流电阻为150。当P2.x输出为低电平时,对应的LED亮,输出高电平时,对应的LED不亮。,任务1 从0到9的加1计数显示(静态)设计,1.2 分析任务,2. 软件设计思路,任务1 从0到9的加1计数显示(静态)设计,1.2 分析任务,2. 软件设计思路,任务1 从0到9的加1计数显示(静态)设计,根据前面分析,实现任务的思路是: (1)程序开始时,给数组元素的变量赋初始值0,并将数组中第1个元素送P2端口; (2)延时0.5s后,将变量i加1,并判断是否已读取到第10个元素; (3)如果已经读取完,则对变量i重新赋值0,如果没有,则继续读取数组中第i个元素送到P2端口,依次循环。,思考与练习,任务1 从0到9的加1计数显示(静态)设计,若该从0到9的加1计数显示采用共阴极数码管,则单片机控制的硬件电路及程序如何修改? 修改程序lsd5-1中显示的数据,使其显示范围扩大到0F共16个十进制数。,一、知识储备,1.1 LED数码管动态显示驱动方式,动态驱动是将所有数码管的8个显示笔划adp的同名端连在一起,另外为每个数码管的公共极COM增加位选通控制电路,位选通由各自独立的I/O线控制; 当单片机输出字形码时,所有数码管都接收到相同的字形码,我们只要将需要显示的数码管的选通控制打开,该位就显示出字形,没有选通的数码管就不会亮。 通过分时轮流控制各个数码管的的COM端,就使各个数码管轮流受控显示,这就是动态驱动。,任务2 从0到59的加1计数显示(动态)设计,数码管动态显示接口是单片机中应用最为广泛的一种显示方式之一;,1.1 LED数码管动态显示驱动方式,关于视觉暂缓效应: 在轮流显示过程中,每位数码管的点亮时间为12ms,由于人的视觉暂留现象及发光二极管的余辉效应,尽管实际上各位数码管并非同时点亮,但只要扫描的速度足够快,给人的印象就是一组稳定的显示数据,不会有闪烁感,动态显示的效果和静态显示是一样的,但动态显示更能够节省大量的I/O端口,而且功耗更低。,任务2 从0到59的加1计数显示(动态)设计,1.2 60进制计数程序设计说明,两位数计数函数可以采用一位数的计算方法实现,本任务实现60进制计数即是采用一位计数方法: unsigned char time=0 /定义变量time为计数值,初值为0 void calc() /计数程序 time0+; /计数值加1 if(time059) /判断计数是否到59 time0=0; /到59,则计数从0重新开始 ,任务2 从0到59的加1计数显示(动态)设计,1.2 60进制计数程序设计说明,由于数据存储结构的改变,导致计算的数据结构与原有的显示程序数据 结构不一致,于是本任务中将计算的数据通过一个数据转换程序后送到原有 的数据结构中,实现加1计数并显示。 数据转换程序:由于是一位(time)计数,两位(059)显示,因此将 计数器所计数time转换为数码管显示所需要的十位和个位数值,转换方法是: 将计数值time对10去整得到十位,对10求余得到个位。程序如下: void convert() /计数转换程序 display_data0=time/10; /对计数值取整得到计数的十位 display_data1=time%10; /对计数值求余得到计数的个位 ,任务2 从0到59的加1计数显示(动态)设计,1.2 60进制计数程序设计说明,(2)分别计数方法 两位数计数函数的实现方法还可以在原有的加1计算的程序基础上进行改进,即将个位数和十位数分别计数,个位计数每到9(满10),向十位进1,十位就加1,个位再从0开始计数。将计数值从数码管编码表读出且送端口显示数据,并控制个位显示在十位的右边,就完成了两位数的计数显示。其计数程序可以简要写作: int time=0,0 /time0用于个位计数,time1用于存放十位计数 void calc() /计算程序 time0+; /个位计数, if(time09) /判断是否计数到9 time0=0; /若计数到9,则十位加1,个位重新从0开始 time1+; if time15; /判断十位是否计数到5 time1=0 /若十位计数到5,则计数重新开始 ,任务2 从0到59的加1计数显示(动态)设计,在时钟计数时,分和秒计数一般均为60进制,也就是说从0开始到59,之后重复。基于数字电子钟设计由浅入深的原则,在实现一位数计数的基础上,本任务介绍采用AT89S51单片机控制数码管实现两位数计数。主要解决多位数计数以及不同位数的计数显示控制。,1.1 提出任务,用AT89S51的P2口做输出口,接一个8位LED数码管,编写程序,使数码管从0开始计数,到59时复位为0,即一个两位的加法计数器,数字显示时间间隔为0.5s。,二、设计示例,任务2 从0到59的加1计数显示(动态)设计,1.2 分析任务,1.硬件电路设计,任务2 从0到59的加1计数显示(动态)设计,电路组成:仍然选用 AT89S51单片机作为控制核心,1个8位共阳极数码管作为输出显示端。AT89S51的P0口接数码管的段码控制,其中P0.0P0.6分别连接数码管的AG引脚,P0.7连接DP端,低电平有效。P2口接数码管位码选通部分,P2.0口控制第1个数码管,一直到P2.7口控制第8个,高电平有效。硬件电路原理图如图6.5所示,选择8位数码管的前面两位进行计数显示。 电路分析:要使8位数码管显示实现从0到59的动态计数,实际上就是通过P2口输出控制信号轮流选通数码管,共阳型数码管公共端为高电平方可选通,因此要求P2口由P2.7到P2.0依次输出高电平,然后在数码管段码控制端口P0按照一定规律送出要显示的数字09。由于P0口带负载能力较小,因此仿真电路中P0接入一排上拉电阻。,任务2 从0到59的加1计数显示(动态)设计,1.2 分析任务,2. 软件设计思路,AT89S51端口输出电平分析:根据数码管的动态显示方式,要显示的数码管的8个笔画端接在单片机的P0端口的8位上,而单片机的另一个端口P2的各个位分别控制8位数码管的公共端,控制数码管是否点亮选通。在程序的控制下依次快速输出要显示的各个数,并同时控制对应的数码管工作,在这里选择最左侧两个数码管输出。P0端口输出电平如表6-2所示。,任务2 从0到59的加1计数显示(动态)设计,表6-2 数码管60进制动态显示段码任务分析表(一),任务2 从0到59的加1计数显示(动态)设计,表6-2 数码管60进制动态显示段码任务分析表(二),任务2 从0到59的加1计数显示(动态)设计,2. 软件设计思路,从表6-2可以看出,各个数码管的段码都是P0口的输出,即各个数码管输入的段码都是一样的, 其计数过程是先只让最低位显示0(含点),经过一段延时,再只让次低位显示1,如此类推。可是,单片机控制的数码管选通一次只能有一位数码管显示,在计数超过9之后进入两位数计数过程,,即怎样才能使人在视觉上同时看到两位数? 实际上,数码管的动态显示达到一定速度的时候,由于人的视觉暂留,只要我们的延时时间足够短,就能够使得数码的显示看起来非常的稳定,其显示过程和静态显示一样,不会产生闪烁,显示内容清楚。一般显示时间取几个毫秒,本任务中设计延时时间为0.5ms。程序工作时,使电路选通某一位数码管后,该数码管被点亮并保持一段时间。,任务2 从0到59的加1计数显示(动态)设计,2. 软件设计思路,根据前面分析,实现任务的思路是: (1)将要显示内容的09十个数字存放在数组中; (2)程序开始后,数组中的元素不断地逐个送到数码管的段码端口P0 (3) 位码控制P2端选通要显示的数码管,则数字显示在选中的数码管上。,任务2 从0到59的加1计数显示(动态)设计,思考与练习,若要求LED数码管显示从59到0的减1计数,程序lsd5-2如何修改? 若采用两位数分
网站客服QQ:2055934822
金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号