首页 项目6简易数字电子时钟设计

项目6简易数字电子时钟设计

举报
开通vip

项目6简易数字电子时钟设计项目6简易数字电子时钟设计引言单片机控制实现的数字电子时钟要完成的功能是显示小时、分和秒,是一台按秒计数并显示的计数器。其中小时采用24进制,秒和分采用60进制。本项目从1位计数器的实现入手,逐步介绍不同进制的多位计数,最终达到设计简易数字电子时钟的目的。任务1从0到9的加1计数显示(静态)设计一、知识储备1.1数码管的基本知识数码管是一类显示屏通过对其不同的管脚输入相对的电流使其发亮从而显示出数字。可以显示时间、日期 、温度等可以用数字代替的参数。由于它的价格便宜、使用简单,在电器特别是家电领域应用极为广泛,空调...

项目6简易数字电子时钟设计
项目6简易数字电子时钟 设计 领导形象设计圆作业设计ao工艺污水处理厂设计附属工程施工组织设计清扫机器人结构设计 引言单片机控制实现的数字电子时钟要完成的功能是显示小时、分和秒,是一台按秒计数并显示的计数器。其中小时采用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.2LED数码管的静态驱动方式数码管要正常显示,就要用驱动电路来驱动数码管的各个段码,从而显示出我们要的数字,因此根据数码管的驱动方式的不同,可以分为静态式和动态式两类。静态驱动也称直流驱动。静态驱动是指每个数码管的每一个段码都由一个单片机的I/O端口进行驱动,或者使用如BCD码二-十进制译码器译码进行驱动。显示数据时,直接将要显示的数字的编码通过单片机送到段码显示端即可。静态驱动的优点是编程简单,显示亮度高,缺点是占用I/O端口多,如驱动5个数码管静态显示则需要5×8=40根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分别连接数码管的a~f引脚,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计数显示(静态)设计LED数码管hgfedcbaP2口输出(16进制)功能说明P2口P2.7P2.6P2.5P2.4P2.3P2.2P2.1P2.0输出电平110000000xc0显示数字“0”111110010xf9显示数字“1”101001000xa4显示数字“2”101100000xb0显示数字“3”100110010x99显示数字“4”100100100x92显示数字“5”100000100x82显示数字“6”111110000xf8显示数字“7”100000000x80显示数字“8”100100000x90显示数字“9”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中显示的数据,使其显示范围扩大到0~F共16个十进制数。一、知识储备1.1LED数码管动态显示驱动方式动态驱动是将所有数码管的8个显示笔划"a~dp"的同名端连在一起,另外为每个数码管的公共极COM增加位选通控制电路,位选通由各自独立的I/O线控制;当单片机输出字形码时,所有数码管都接收到相同的字形码,我们只要将需要显示的数码管的选通控制打开,该位就显示出字形,没有选通的数码管就不会亮。通过分时轮流控制各个数码管的的COM端,就使各个数码管轮流受控显示,这就是动态驱动。任务2从0到59的加1计数显示(动态)设计数码管动态显示接口是单片机中应用最为广泛的一种显示方式之一;1.1LED数码管动态显示驱动方式关于视觉暂缓效应:在轮流显示过程中,每位数码管的点亮时间为1~2ms,由于人的视觉暂留现象及发光二极管的余辉效应,尽管实际上各位数码管并非同时点亮,但只要扫描的速度足够快,给人的印象就是一组稳定的显示数据,不会有闪烁感,动态显示的效果和静态显示是一样的,但动态显示更能够节省大量的I/O端口,而且功耗更低。任务2从0到59的加1计数显示(动态)设计1.260进制计数程序设计说明两位数计数函数可以采用一位数的计算方法实现,本任务实现60进制计数即是采用一位计数方法:unsignedchartime=0//定义变量time为计数值,初值为0voidcalc()//计数程序{time[0]++;//计数值加1if(time[0]>59)//判断计数是否到59time[0]=0;//到59,则计数从0重新开始}任务2从0到59的加1计数显示(动态)设计1.260进制计数程序设计说明由于数据存储结构的改变,导致计算的数据结构与原有的显示程序数据结构不一致,于是本任务中将计算的数据通过一个数据转换程序后送到原有的数据结构中,实现加1计数并显示。数据转换程序:由于是一位(time)计数,两位(0~59)显示,因此将计数器所计数time转换为数码管显示所需要的十位和个位数值,转换方法是:将计数值time对10去整得到十位,对10求余得到个位。程序如下:voidconvert()//计数转换程序{display_data[0]=time/10;//对计数值取整得到计数的十位display_data[1]=time%10;//对计数值求余得到计数的个位}任务2从0到59的加1计数显示(动态)设计1.260进制计数程序设计说明(2)分别计数方法两位数计数函数的实现方法还可以在原有的加1计算的程序基础上进行改进,即将个位数和十位数分别计数,个位计数每到9(满10),向十位进1,十位就加1,个位再从0开始计数。将计数值从数码管编码表读出且送端口显示数据,并控制个位显示在十位的右边,就完成了两位数的计数显示。其计数程序可以简要写作:inttime[]={0,0}//time[0]用于个位计数,time[1]用于存放十位计数voidcalc()//计算程序{time[0]++;//个位计数,if(time[0]>9)//判断是否计数到9{time[0]=0;//若计数到9,则十位加1,个位重新从0开始time[1]++;iftime[1]>5;//判断十位是否计数到5{time[1]=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.0~P0.6分别连接数码管的A~G引脚,P0.7连接DP端,低电平有效。P2口接数码管位码选通部分,P2.0口控制第1个数码管,一直到P2.7口控制第8个,高电平有效。硬件电路原理图如图6.5所示,选择8位数码管的前面两位进行计数显示。电路分析:要使8位数码管显示实现从0到59的动态计数,实际上就是通过P2口输出控制信号轮流选通数码管,共阳型数码管公共端为高电平方可选通,因此要求P2口由P2.7到P2.0依次输出高电平,然后在数码管段码控制端口P0按照一定规律送出要显示的数字0~9。由于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)将要显示内容的0~9十个数字存放在数组中;(2)程序开始后,数组中的元素不断地逐个送到数码管的段码端口P0(3)位码控制P2端选通要显示的数码管,则数字显示在选中的数码管上。任务2从0到59的加1计数显示(动态)设计思考与练习若要求LED数码管显示从59到0的减1计数,程序lsd5-2如何修改?若采用两位数分别计数的方法实现该60进制计数器,程序怎样设计?任务2从0到59的加1计数显示(动态)设计所谓任意进制计数器就n进制计数器,是指从0开始计数到n-1时,又重复从0开始进行的计数过程。例如数字电子时钟的小时可以是24进制计数,也可以是12进制计数,篮球比赛中用到30s规则中可以采用延时1s的30进制计数。本任务利用AT89S51单片机实现24进制计数器,并由此推广到任意进制计数。1.1提出任务用AT89S51的P2口做输出口,接一个8位LED数码管,编写程序,使数码管从0开始计数,到23时复位为0,即一个两位的加法计数器,数字显示时间间隔为0.5s。一、设计示例任务3任意进制计数器的设计1.2分析任务采用数码管的动态显示方式,硬件电路组成与0~59计数电路一致,仍然选择8位数码管的前两位计数并显示,如图6.5。要显示的数码管的8个笔画端接在单片机的P0端口的8位上,而单片机的另一个端口P2的各个位分别控制8位数码管的公共端,控制数码管是否点亮选通。在程序的控制下依次快速输出要显示的各个数,并同时控制对应的数码管工作。任务3任意进制计数器的设计1.3源程序#include"reg51.h"//定义头文件#defineucharunsignedcharuchardisplay_code[]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90};//定义数组存放显示数字的编码uchartime[]={0,0,0};//定义数组存放计数初值voiddelay(void)//延时0.5ms{uchari;for(i=250;i>0;i--);}任务3任意进制计数器的设计voiddisplay()//显示程序{uchari,k;k=0x80;for(i=0;i<8;i++){P2=0;P0=display_code[time[0]/10];//计数值取整得到十位数,送P0端口P2=k;k=k>>1;delay();P2=0;P0=display_code[time[0]%10];//计数值求余得到个位,送P0端口P2=k;k=k>>1;delay();}P2=0;}任务3任意进制计数器的设计1.3源程序voidcalc()//计算程序{timer[0]++;//计数值加1if(time[0]>23)//判断计数值是否到23time[0]=0;//计数到23,则重新从0开始}voidmain(void)//主函数{uchari;while(1)//无限循环{for(i=0;i<250;i++){display();}calc();}}任务3任意进制计数器的设计1.3源程序任务3任意进制计数器的设计二、知识链接2.112翻1减一计数的源程序#include"reg51.h"#defineucharunsignedcharuchardisplay_code[]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90,0x88,0x83,0xC6,0xA1,0x86,0x8E};uchartime[]={13,0,0};//定义计数初值voiddelay(void)//延时{uchari;for(i=250;i>0;i--);}任务3任意进制计数器的设计2.112翻1减一计数的源程序voiddisplay()//显示程序{uchari,k;k=0x80;for(i=0;i<8;i++){P2=0;P0=display_code[time[0]/10];P2=k;k=k>>1;delay();P2=0;P0=display_code[time[0]%10];P2=k;k=k>>1;delay();}P2=0;}任务3任意进制计数器的设计2.112翻1减一计数的源程序voidcalc()//计数程序{time[0]--;if(time[0]==0)time[0]=12;}voidmain(void)//主函数{uchari;while(1){for(i=0;i<250;i++){display();//先显示}calc();//再计算}}任务3任意进制计数器的设计2.112翻1减一计数的源程序显示效果如图6.10所示任务3任意进制计数器的设计2.2计数程序设计说明本任务中24进制和12翻1的计数程序均采用一位数计数方法,为了避免数据存储结构改变带来的影响,我们根据新的数据结构重新编写了新的显示程序,即不通过转换程序,直接将计数值取整求余后送到显示端口,二、知识链接任务3任意进制计数器的设计2.2计数程序设计说明voiddisplay()//显示程序{uchari,k;k=0x80;for(i=0;i<8;i++){P2=0;P0=display_code[time[0]/10];P2=k;k=k>>1;delay();P2=0;P0=display_code[time[0]%10];P2=k;k=k>>1;delay();}P2=0;}思考与练习若计数显示采用一位数计数,通过数据转换再显示,则程序如何修改?若采用两位数分别计数显示呢?设计程序,显示0~24以内的偶数。设计电路和程序,完成从0到365的循环计数,要求循环5次后停止。任务3任意进制计数器的设计数字钟是一个将“ 时”,“分”,“秒”显示于人的视觉器官的计时装置。它的计时周期为24小时,显示满刻度为23时59分59秒。本任务是基于AT89S51单片机的简易数字电子时钟,因此只简单实现计时并显示的过程,不包括校时功能和一些显示星期、报时、停电查看时间等附加功能。1.1提出任务利用AT89S51单片机控制LED数码管实现简易数字电子时钟设计。要求小时采用24进制计数,分和秒采用60进制计数。一、设计示例任务4简易数字电子时钟的设计1.2分析任务电路组成及分析:采用数码管的动态显示方式,硬件电路采用图5-5,要显示的数码管的8个笔画端接在单片机的P0端口的8位上,而单片机的另一个端口P2的各个位分别控制8位数码管的公共端,控制数码管是否点亮选通。在程序的控制下依次快速输出要显示的各个数,并同时控制对应的数码管工作。软件设计思路:根据任务分析可以确定整个程序的主框架是以定时1s计算依一次的方式来实现数字电子钟。定时1s的程序段,使用动态显示程序实现延时,即完成了延时1s,也完成了数字的显示。在计算程序中,使对应于时、分和秒的变量分别按照24进制和60进制进行计算,动态显示程序直接引用这些变量,达到显示的数字也随之不断的变化,即完成了数字钟的功能。任务4简易数字电子时钟的设计1.3源程序#include"reg51.h"//头文件#defineucharunsignedcharuchardisplay_code[]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90};//存放显示数字的编码uchartime[]={0,0,0,0};//定义数组,存放小时、分、秒的计数值voiddelay05ms(void)//延时程序{uchari;for(i=250;i>0;i--);}任务4简易数字电子时钟的设计voiddisplay()//显示程序{uchari,k;k=0x80;for(i=0;i<8;i++){P2=0;P0=display_code[time[i]/10];P2=k;k=k>>1;delay();P0=display_code[time[i]%10];P2=k;k=k>>1;delay();}P2=0;}1.3源程序任务4简易数字电子时钟的设计voidcalc()//计算程序{time[2]++;//秒加1if(time[2]>59)//判断是否计数到59s{//到59stime[2]=0;//秒从0计数time[1]++;//分加1if(time[1]>59)//判断是否到59分{//到59分time[1]=0;//分从0计数time[0]++;//小时加1if(time[0]>23)//判断是否计数23小时{//满23小时time[0]=0;//小时从0重新开始计数}}}1.3源程序任务4简易数字电子时钟的设计voidmain(void)//主函数{uchari;while(1){for(i=0;i<250;i++)//与所有程序语句配合,实现1s延时{display();}calc();}}1.3源程序任务4简易数字电子时钟的设计显示效果如图6.12所示任务4简易数字电子时钟的设计二、知识链接调试过程中应该注意的问题:(1)编辑的C语言源文件应该以.c后缀保存;(2)C语言文件编辑好要添加到工程项目中去才能编译;(3)编译要生成.hex文件,这是软件设计与硬件电路联系纽带,要实施仿真必须将.hex文件添加到硬件电路单片机芯片中去;(4)为了增加P0口驱动数码管的能力,加入上拉电阻,仿真库元件选择RES-PACK-8,注意其接线,1为电源引脚,2~9接数码管段码端口;(5)注意8段数码管选择,共阴极7seg-MPX4-CA(高电平选通,低电平亮),共阳极7seg-MPX4-CC(低电平选通,高电平亮);(6)程序中采用循环程序的延时时间来实现每隔1s计数,仿真效果观察时可能不够精确。一般都采用单片机定时/计数器的功能实现精确计时,这些内容将在后续课程介绍。任务4简易数字电子时钟的设计思考与练习在数字电子时钟程序中加入星期显示,周一到周日,电路及程序如何设计?设计一场足球比赛的倒计时器,每半场45分钟。设计一个简易的交通灯控制系统,要求用数码管显示两个方向的时间,用发光二极管代替三色交通灯,编写程序、绘制电路并仿真。任务4简易数字电子时钟的设计任务小结单片机外围扩展应用电路中,常常使用数码管实现数字显示。数码管实际上是一组普通发光二极管的连接,根据二极管的连接方式可分为共阳型数码管和共阴型数码管。要设计具有数码显示的单片机应用系统时,应根据要显示的数字内容来选择数码管及其驱动方式。数码管的驱动方式有静态式和动态式之分。在硬件连接上,静态式是每个数码管的每一个段码都由一个单片机的I/O端口进行驱动,即每个数码管的每一个笔画二极管都对应连接单片机的一个端口。动态式是将所有数码管的八个笔画二极管分为位码选通和段码显示两个部分,分别由单片机端口控制。显然,动态驱动显示 方案 气瓶 现场处置方案 .pdf气瓶 现场处置方案 .doc见习基地管理方案.doc关于群访事件的化解方案建筑工地扬尘治理专项方案下载 能节省大量的单片机I/O端口,因此在设计中多数数码管都采用动态式驱动。任务4简易数字电子时钟的设计演讲完毕,谢谢听讲!再见,seeyouagain3rew
本文档为【项目6简易数字电子时钟设计】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
该文档来自用户分享,如有侵权行为请发邮件ishare@vip.sina.com联系网站客服,我们会及时删除。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。
本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。
网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
下载需要: 免费 已有0 人下载
最新资料
资料动态
专题动态
个人认证用户
海洋里徜徉
暂无简介~
格式:ppt
大小:662KB
软件:PowerPoint
页数:49
分类:
上传时间:2023-03-30
浏览量:3