单片机、设计数码管显示-电子时钟整理资料_第1页
单片机、设计数码管显示-电子时钟整理资料_第2页
单片机、设计数码管显示-电子时钟整理资料_第3页
单片机、设计数码管显示-电子时钟整理资料_第4页
单片机、设计数码管显示-电子时钟整理资料_第5页
已阅读5页,还剩25页未读 继续免费阅读

下载本文档

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

文档简介

目录目录 1第1章 数码管显示 21.1. 【摘要】 21.2. 【关键词】 21.3. LED显示的原理 21.4. LED显示动态显示的原理 21.5. 流程图 41.6. 实现的功能及结果 41.6.1. 数码管显示结果 41.6.2. 程序及解释 5第2章 单片机时钟 62.1. 【摘要】 62.2. 【关键词】 72.3. 功能要求 72.4. 程序设计 72.4.1. 主程序 72.4.2. 显示子程序 72.4.3. 定时器T0中断服务程序 82.5. 按键设置 92.6. 数码管显示结果 92.7. 程序 102.7.1. 汇编程序 102.7.2. C语言程序编译 15第3章 两个实验总的电路图 18PAGE17数码管显示【摘要】\o"查看图片"

LED的技术进步是扩大市场需求及应用的最大推动力。最初,LED只是作为微型指示灯,在计算机、音响和录像机等高档设备中应用,随着大规模集成电路和计算机技术的不断进步,LED显示器正在迅速崛起,近年来逐渐扩展到证券行情股票机、数码相机、PDA以及手机领域。LED显示器集微电子技术、计算机技术、信息处理于一体,以其色彩鲜艳、动态范围广、亮度高、寿命长、工作稳定可靠等优点,成为最具优势的新一代显示媒体,目前,LED显示器已广泛应用于大型广场、商业广告、体育场馆、信息传播、新闻发布、证券交易等,可以满足不同环境的需要。【关键词】LED、动态显示、共阳极、位选、段选LED显示的原理

数码管的每段笔画其实就是一个单独的发光二极管,内部有两种不同的连接方式,若将各二极管的阳极都连在一起引出个公共端——称共阳数码管,如图(a);若将各二极管的阴极都连在一起引出个公共端——称共阴数码管如图(b);使用时将共阴数码管公共端接低电平,若某笔画端接高电平则对应笔画点亮,共阳反之。LED的显示可分静态和动态显示。LED显示动态显示的原理动态显示,如图所示图1-4-1六位动态显示器接口某一时刻位选先选通其中一位,如对图5-46的共阴数码管,要使最左边位能点亮,则令P3.0为1,其余位选位均为0;这时在字型口输出该位要显示的数字或字符的字型,亮1ms左右;接着位选选通另一位,其余位选关闭,字型口输出该位要显示的数字或字符的字型,虽然这时前一位位选已关闭,但基于眼睛的惰性,前一位显示的数字或字型还留在眼中,依次一位位循环显示下去,直至最后一位显示完毕,一个动态扫描显示结束。可见动态扫描显示是在执行动态扫描显示程序的。要连续显示必须反复的去执行动态扫描显示程序。一般可把动态扫描显示编成个子程序,主程序反复去调用它。人眼的惰性有一定时间,一般10ms左右,超过这一时间再去执行显示程序,它就会闪烁,所以LED的位数不能太多。首先在内部数据存储器的若干连续单元中开辟一个显示缓冲区,每个单元顺序对应一个数码管,在调用动态扫描子程序以前,主程序中先在各显示缓冲单元中写入各数码管要显示的数字和字符在字型表中离开表头位置的值,这样当动态扫描显示程序要向字型口输出字型时,只要读得该对应缓冲区内的值,通过查字型表获得输出字型。注意不是把缓冲单元的值直接输出。图1-4-2硬件系统的总体设计框架流程图实现的功能及结果六位数码管显示自己的姓名和学号(姓名为开头的英文字母)数码管显示结果显示字符共阴极段选码显示字符共阴极段选码03FH56DH106H67DH25BH707H34FH87FH466H96FHT0CEHQ98H“灭”(黑)

00H表1共阴极7段LED显示字型编码表程序及解释ORG0000HAJMPSTARTSTART:MOVR0,#01H;扫描端口初植PLAY:MOVP0,#0FFH;清原数据MOVR5,#160;滚动的速度MOVA,R0ADDA,#04HMOVR1,AMOVP2,#01HPLAY1:MOVA,R0;6位数码管显示DECA;A中的数减1MOVDPTR,#TAB;段码表表址放入数据指针MOVCA,@A+DPTR;查段码MOVP0,A;段码数据放入P0口LCALLDL512;长调用DL512MOVA,R0;A恢复1SUBBA,R1JNCPLAY2;进位位不为1,程序转至PLAY2INCR0MOVA,P2RLA;A中的数循环左移1位MOVP2,A;P2=0AHAJMPPLAY1PLAY2:DJNZR5,PLAY4;R5中的数减1不为0,程序转至PLAY4AJMPPLAY3PLAY3:MOVA,R0;使滚动SUBBA,#04HMOVR0,ASUBBA,#010H;显示扫描数据的长度JNCSTARTLJMPPLAYPLAY4:MOVA,R0;控制滚动时间SUBBA,#05HMOVR0,AMOVP2,#01HLJMPPLAY1DL512:MOVR2,#0FFH;延时DL1:DJNZR2,DL1RETTAB:DB0FFH,0FFH,0FFH,0FFH,0FFH,0C0H,080H,0F9H,0B0H,0F9H,0C0H,0F9H,099H,0C0H,0FFH,0CEH,98H,98H,0FFH,0FFH,0FFHEND单片机时钟【摘要】时钟是人类生活中必不可少的的工具,本设计从日常生活中的事物入手,通过对时钟计时器的设计,让我们认识到单片机已经深入到我们生活的每个领域,该设计不仅可以锻炼我们的动手能力,而且可以加深我们对单片机的认识和激发我们队位置科学领域的探索。利用单片机实现教学数字时钟计时的主要功能,采用独立式按键进行时间调整,其中AT89C52是核心元件同是采用数码管LED动态显示“时”,“分”,“秒”的现代计时装置。与传统机械表相比,它具有走时精确,显示直观等特点。它的计时周期为24小时,显满刻度为“23时59分59秒”。该系统同时具有硬件设计简单,工作稳定性高,价格低廉等优点。【关键词】AT89C52、LED显示功能要求六位数码管显示时、分、秒,以24小时运算可实现时分调整程序设计主程序设计中计时采用定时器T0中断完成。主程序循环调用显示子程序和查键,当端口有开关按下时,转入相应的功能程序。流程图如图2-4-1所示。图2-4-1主程序流程显示子程序显示子程序每次显示6个连续内存单元的十进制BCD码数据。由于采用7段共阳LED数码管动态扫描实现数据显示,显示十进制BCD码数据对应段码存放在ROM中。流程图如图2-4-2所示。显示时取内存地址中数据,然后查表得对应显示段码从P0口输出,P2口将为对应的数码管供电,于是数码管就会显示该地址单元的数据。图2-4-2显示子程序定时器T0中断服务程序定时溢出中断周期设为50MS,中断进入后先进行定时中断初值校正,当中断累加到20次时,对秒计数单元进行加1操作。时钟最大计时值为23时59分59秒。#7FH存放“熄灭符”数据,用于时间调整时的闪烁功能。在计数单元中,采用十进制BCD码计数,满十进位。流程图如图3.3所示在程序中采用12MHZ晶振频率,精度为1MS,定时初值为50MS,用循环程序进行20次循环可到1S。当1S到时调用加1程序并判断秒、分是否为60,当秒为60时,秒清零,分加1;当分为60时,分清零。终端结束时,分时计时单元数据移入对应显示单元。图3.3定时器T0中断服务程序按键设置采用共阳七段LED显示器,其管脚a-g,ap与单片机AT89C52的P0口相连;P0口输出段码数据;为保证其输出的电平和LED显示器所需的电平相匹配;P2.0P2.5作为列扫描输出;P1.0,P1.1,接2个按钮开关,用于调时.数码管显示结果图中显示的是8点19分03秒程序汇编程序;;XAL12MHz单片机STC89C52RC。;;BUZZBITP3.7;轰鸣器,整点报时KEY1BITP1.0KEY2BITP1.1DISPRAMDATA30H;显示数字的暂存HOUR_REGDATA38HMINU_REGDATA39HSECO_REGDATA3AHT0_COUNTDATA3BHDISP_COUNTDATA3CHORG0000H;主程序的入口LJMPMAINORG000BH;定时器T0中断程序入口LJMPT0_TIMEORG0030HMAIN:MOVSP,#3FH;堆栈指针设置堆栈地址存放MOVHOUR_REG,#0MOVMINU_REG,#0MOVSECO_REG,#0MOVTMOD,#11H定时中断;选择工作方式1MOVIE,#82H;EA=1,CPU开放中断ET0=1,使能定时器T0溢出中断SETBTR0;开定时计数器MAIN1:LCALLTIME2STR;调用时间数据显示MOVR0,#DISPRAMLCALLDISPLAYJBKEY1,MAIN1LCALLTIME_SETSJMPMAIN1;;时间数据显示字符串功能;TIME2STR:MOVR0,#DISPRAM时间数据显示MOVA,HOUR_REGMOVB,#10DIVABMOV@R0,AMOVA,BINCR0MOV@R0,AMOVA,MINU_REGMOVB,#10DIVABINCR0MOV@R0,AMOVA,BINCR0MOV@R0,AMOVA,SECO_REGMOVB,#10DIVABINCR0MOV@R0,AMOVA,BINCR0MOV@R0,ARET;;;设定的时间功能;TIME_SET:CLRTR0;关定时计数器MOVSECO_REG,#0;把秒清零LCALLTIME2STRTIME_S1:MOVR0,#DISPRAMLCALLDISPLAYJNBKEY1,TIME_S1MOVR2,#2TIME_S2:MOVA,R2JZTIME_S3LCALLTIME2STRCJNER2,#2,TIME_S21ORLDISPRAM,#80HORLDISPRAM+1,#80HSJMPTIME_S22TIME_S21:ORLDISPRAM+2,#80HORLDISPRAM+3,#80HTIME_S22:MOVR0,#DISPRAMLCALLDISPLAYJBKEY1,TIME_S23DECR2TIME_S221:MOVR0,#DISPRAMLCALLDISPLAYJNBKEY1,TIME_S221TIME_S23:JBKEY2,TIME_S2CJNER2,#2,TIME_S231INCHOUR_REGMOVA,HOUR_REGCJNEA,#24,TIME_S232MOVHOUR_REG,#0SJMPTIME_S232TIME_S231:INCMINU_REGMOVA,MINU_REGCJNEA,#60,TIME_S232MOVMINU_REG,#0TIME_S232:MOVR3,#20TIME_S233:MOVR0,#DISPRAMLCALLDISPLAYDJNZR3,TIME_S233SJMPTIME_S2TIME_S3:SETBTR0RET;;;显示功能;6个LED数码管;DISPLAY:PUSHACC;把ACC(累加器)中的数字压入堆栈PUSHDPH;把16位指针高8位压入堆栈PUSHDPLPUSHPSW;状态字入栈保护【保护现场】MOVA,R4PUSHACC;保存寄存器的数字R4、R5、R6、R7MOVA,R5PUSHACCMOVA,R6PUSHACCMOVA,R7PUSHACCINCDISP_COUNTANLDISP_COUNT,#7FH;相与,闪烁,让灯可以由亮转为灭MOVR5,#8MOVR4,#01HMOVDPTR,#DISPTABLEDISPL1:MOVA,@R0PUSHACCMOVP2,R4ANLA,#80HJZDISPL11MOVA,DISP_COUNTSUBBA,#32JNCDISPL11MOVP2,#0DISPL11:POPACCANLA,#7FHMOVCA,@A+DPTRMOVP0,AMOVR6,#00HMOVR7,#01HLCALLDELAYMOVP0,#0FFHINCR0MOVA,R4RLAMOVR4,ADJNZR5,DISPL1POPACCMOVR7,APOPACCMOVR6,APOPACCMOVR5,APOPACCMOVR4,APOPPSWPOPDPLPOPDPHPOPACCRETDISPTABLE:DB0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H,88H,83H,0C6H,0A1H,86H,8EH,0BFH,89H,0C7H,8CH,0FFH;"0","1","2","3","4","5","6","7","8","9","A","B","C","D","E","F","-","H","L","P","";;延迟功能。;延迟时间=(R6R7)(ms);DELAY:PUSHACCMOVA,R4PUSHACCMOVA,R5PUSHACCMOVA,R7JZDELAY01INCR6DELAY01:MOVR4,#02HMOVR5,#0F4HDELAY02:DJNZR5,$DJNZR4,DELAY02DJNZR7,DELAY01DJNZR6,DELAY01POPACCMOVR5,APOPACCMOVR4,APOPACCRET;;;用T0的中断功能;T0_TIME:MOVTL0,#0B0HMOVTH0,#3CHPUSHPSWPUSHACCINCT0_COUNTMOVA,T0_COUNTSUBBA,#20JCT0_OUTMOVT0_COUNT,#0INCSECO_REGMOVA,SECO_REGSUBBA,#60JCT0_OUTMOVSECO_REG,#0INCMINU_REGMOVA,MINU_REGSUBBA,#60JCT0_OUTMOVMINU_REG,#0INCHOUR_REGMOVA,HOUR_REGSUBBA,#24JCT0_OUTMOVHOUR_REG,#0T0_OUT:POPACCPOPPSWRETI;ENDC语言程序编译#include<reg51.h>#defineucharunsignedchar#defineuintunsignedint#defineulongunsignedlongsbitBUZZ=P3^7;sbitKEY1=P1^0;sbitKEY2=P1^1;ucharhour_reg,minute_reg,second_reg;voiddelay(uint);voiddisplay(uchar*);voidtime2str(uchar*);voidtime_set(void);voidmain(void){uchardispram[8];TMOD=0x11;选择工作方式1IE=0x82;EA=1,CPU开放中断ET0=1,使能定时器T0溢出中断TR0=1;开定时计数器while(1){time2str(dispram);display(dispram);if(KEY1==0)time_set();}}voidtime2str(uchar*ch){ch[0]=hour_reg/10;显示小时的高位ch[1]=hour_reg%10;显示小时的低位ch[2]=minute_reg/10;显示分钟的高位ch[3]=minute_reg%10;显示分钟的低位ch[4]=second_reg/10;显示秒的高位ch[5]=second_reg%10;显示秒的低位}voidtime_set(vo

温馨提示

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

最新文档

评论

0/150

提交评论