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

下载本文档

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

文档简介

1、目录目录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章两个实验总的电路图18第1章 数码管显示1.1. 【摘 要】 LED的技术进步是扩大市

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

3、个单独的发光二极管,内部有两种不同的连接方式,若将各二极管的阳极都连在一起引出个公共端称共阳数码管,如图(a);若将各二极管的阴极都连在一起引出个公共端称共阴数码管如图(b);使用时将共阴数码管公共端接低电平,若某笔画端接高电平则对应笔画点亮,共阳反之。LED的显示可分静态和动态显示。1.4. LED显示动态显示的原理动态显示,如图所示图1-4-1 六位动态显示器接口某一时刻位选先选通其中一位,如对图5-46的共阴数码管,要使最左边位能点亮,则令P3.0为1,其余位选位均为0;这时在字型口输出该位要显示的数字或字符的字型,亮1ms左右;接着位选选通另一位,其余位选关闭,字型口输出该位要显示的数

4、字或字符的字型,虽然这时前一位位选已关闭,但基于眼睛的惰性,前一位显示的数字或字型还留在眼中,依次一位位循环显示下去,直至最后一位显示完毕,一个动态扫描显示结束。 可见动态扫描显示是在执行动态扫描显示程序的。要连续显示必须反复的去执行动态扫描显示程序。一般可把动态扫描显示编成个子程序,主程序反复去调用它。人眼的惰性有一定时间,一般10ms左右, 超过这一时间再去执行显示程序,它就会闪烁,所以LED的位数不能太多。首先在内部数据存储器的若干连续单元中开辟一个显示缓冲区,每个单元顺序对应一个数码管,在调用动态扫描子程序以前,主程序中先在各显示缓冲单元中写入各数码管要显示的数字和字符在字型表中离开表

5、头位置的值,这样当动态扫描显示程序要向字型口输出字型时,只要读得该对应缓冲区内的值,通过查字型表获得输出字型。注意不是把缓冲单元的值直接输出。图1-4-2 硬件系统的总体设计框架1.5. 流程图1.6. 实现的功能及结果 六位数码管显示自己的姓名和学号(姓名为开头的英文字母)1.6.1. 数码管显示结果显示字符共阴极段选码显示字符共阴极段选码03FH56DH106H67DH25BH707H34FH87FH466H96FHT0CEHQ98H“灭”(黑) 00H表1 共阴极7 段LED显示字型编码表1.6.2. 程序及解释 ORG 0000H AJMP STARTSTART:MOV R0,#01H

6、 ; 扫描端口初植PLAY:MOV P0,#0FFH ; 清原数据 MOV R5,#160 ;滚动的速度 MOV A,R0 ADD A,#04H MOV R1,A MOV P2,#01H PLAY1:MOV A,R0 ; 6位数码管显示 DEC A ;A中的数减1 MOV DPTR,#TAB ; 段码表表址放入数据指针 MOVC A,A+DPTR ;查段码 MOV P0,A ; 段码数据放入P0口 LCALL DL512 ;长调用DL512 MOV A,R0 ;A恢复1 SUBB A,R1 JNC PLAY2 ;进位位不为1,程序转至PLAY2 INC R0 MOV A,P2 RL A ;A中

7、的数循环左移1位 MOV P2,A ;P2=0AH AJMP PLAY1PLAY2:DJNZ R5,PLAY4 ;R5中的数减1不为0,程序转至PLAY4 AJMP PLAY3PLAY3:MOV A,R0 ;使滚动 SUBB A,#04H MOV R0,A SUBB A,#010H ;显示扫描数据的长度 JNC START LJMP PLAYPLAY4:MOV A,R0 ;控制滚动时间 SUBB A,#05H MOV R0,A MOV P2,#01H LJMP PLAY1DL512:MOV R2,#0FFH ;延时 DL1: DJNZ R2,DL1 RET TAB:DB 0FFH,0FFH,0

8、FFH,0FFH,0FFH,0C0H,080H,0F9H,0B0H,0F9H,0C0H,0F9H,099H,0C0H,0FFH,0CEH,98H,98H,0FFH,0FFH,0FFHEND第2章 单片机时钟2.1. 【摘 要】 时钟是人类生活中必不可少的的工具,本设计从日常生活中的事物入手,通过对时钟计时器的设计,让我们认识到单片机已经深入到我们生活的每个领域,该设计不仅可以锻炼我们的动手能力,而且可以加深我们对单片机的认识和激发我们队位置科学领域的探索。 利用单片机实现教学数字时钟计时的主要功能,采用独立式按键进行时间调整,其中AT89C52是核心元件同是采用数码管LED动态显示“时”,“分

9、”,“秒”的现代计时装置。与传统机械表相比,它具有走时精确,显示直观等特点。它的计时周期为24小时,显满刻度为“23时59分59秒”。该系统同时具有硬件设计简单,工作稳定性高,价格低廉等优点。 2.2. 【关键词】 AT89C52 、LED显示2.3. 功能要求1) 六位数码管显示时、分、秒,以24小时运算2) 可实现时分调整2.4. 程序设计2.4.1. 主程序设计中计时采用定时器T0中断完成。主程序循环调用显示子程序和查键,当端口有开关按下时,转入相应的功能程序。流程图如图2-4-1所示。图2-4-1 主程序流程2.4.2. 显示子程序显示子程序每次显示6个连续内存单元的十进制BCD码数据

10、。由于采用7段共阳LED数码管动态扫描实现数据显示,显示十进制BCD码数据对应段码存放在ROM中。流程图如图2-4-2所示。显示时取内存地址中数据,然后查表得对应显示段码从P0口输出,P2口将为对应的数码管供电,于是数码管就会显示该地址单元的数据。图2-4-2 显示子程序2.4.3. 定时器T0中断服务程序定时溢出中断周期设为50MS,中断进入后先进行定时中断初值校正,当中断累加到20次时,对秒计数单元进行加1操作。时钟最大计时值为23时59分59秒。#7FH存放“熄灭符”数据,用于时间调整时的闪烁功能。在计数单元中,采用十进制BCD码计数,满十进位。流程图如图3.3所示在程序中采用12MHZ

11、晶振频率,精度为1MS,定时初值为50MS,用循环程序进行20次循环可到1S。当1S到时调用加1程序并判断秒、分是否为60,当秒为60时,秒清零,分加1;当分为60时,分清零。终端结束时,分时计时单元数据移入对应显示单元。图3.3 定时器T0中断服务程序2.5. 按键设置采用共阳七段LED显示器,其管脚a-g,ap与单片机AT89C52的P0口相连;P0口输出段码数据;为保证其输出的电平和LED显示器所需的电平相匹配;P2.0-P2.5作为列扫描输出; P1.0,P1.1,接2个按钮开关,用于调时.2.6. 数码管显示结果图中显示的是8点19分03秒2.7. 程序2.7.1. 汇编程序;-;X

12、AL 12MHz单片机STC89C52RC。;-BUZZ BIT P3.7 ;轰鸣器,整点报时KEY1 BIT P1.0 KEY2 BIT P1.1DISPRAM DATA 30H ;显示数字的暂存HOUR_REG DATA 38H MINU_REG DATA 39HSECO_REG DATA 3AHT0_COUNT DATA 3BHDISP_COUNT DATA 3CH ORG 0000H ;主程序的入口 LJMP MAIN ORG 000BH ; 定时器T0中断程序入口 LJMP T0_TIME ORG 0030HMAIN: MOV SP, #3FH ;堆栈指针设置堆栈地址存放 MOV H

13、OUR_REG, #0 MOV MINU_REG, #0 MOV SECO_REG, #0 MOV TMOD, #11H定时中断 ;选择工作方式1 MOV IE, #82H ; EA=1,CPU开放中断 ET0=1,使能定时器T0溢出中断 SETB TR0 ;开定时计数器MAIN1: LCALL TIME2STR ;调用时间数据显示 MOV R0, #DISPRAM LCALL DISPLAY JB KEY1, MAIN1 LCALL TIME_SET SJMP MAIN1;-;时间数据显示字符串功能;-TIME2STR: MOV R0, #DISPRAM 时间数据显示 MOV A, HOUR

14、_REG MOV B, #10 DIV AB MOV R0, A MOV A, B INC R0 MOV R0, A MOV A, MINU_REG MOV B, #10 DIV AB INC R0 MOV R0, A MOV A, B INC R0 MOV R0, A MOV A, SECO_REG MOV B, #10 DIV AB INC R0 MOV R0, A MOV A, B INC R0 MOV R0, A RET;-;设定的时间功能;-TIME_SET: CLR TR0 ;关定时计数器 MOV SECO_REG, #0 ;把秒清零 LCALL TIME2STRTIME_S1:

15、MOV R0, #DISPRAM LCALL DISPLAY JNB KEY1, TIME_S1 MOV R2, #2TIME_S2: MOV A, R2 JZ TIME_S3 LCALL TIME2STR CJNE R2, #2, TIME_S21 ORL DISPRAM, #80H ORL DISPRAM+1, #80H SJMP TIME_S22TIME_S21: ORL DISPRAM+2, #80H ORL DISPRAM+3, #80HTIME_S22: MOV R0, #DISPRAM LCALL DISPLAY JB KEY1, TIME_S23 DEC R2TIME_S221

16、:MOV R0, #DISPRAM LCALL DISPLAY JNB KEY1, TIME_S221TIME_S23: JB KEY2, TIME_S2 CJNE R2, #2, TIME_S231 INC HOUR_REG MOV A, HOUR_REG CJNE A, #24, TIME_S232 MOV HOUR_REG, #0 SJMP TIME_S232TIME_S231:INC MINU_REG MOV A, MINU_REG CJNE A, #60, TIME_S232 MOV MINU_REG, #0TIME_S232:MOV R3, #20TIME_S233:MOV R0,

17、 #DISPRAM LCALL DISPLAY DJNZ R3, TIME_S233 SJMP TIME_S2TIME_S3: SETB TR0 RET;-; 显示功能;6个LED数码管;-DISPLAY: PUSH ACC ;把ACC(累加器)中的数字压入堆栈 PUSH DPH ;把16位指针高8位压入堆栈 PUSH DPL PUSH PSW ;状态字入栈保护【保护现场】 MOV A, R4 PUSH ACC ;保存寄存器的数字R4、R5、R6、R7 MOV A, R5 PUSH ACC MOV A, R6 PUSH ACC MOV A, R7 PUSH ACC INC DISP_COUNT

18、 ANL DISP_COUNT, #7FH ;相与,闪烁,让灯可以由亮转为灭 MOV R5, #8 MOV R4, #01H MOV DPTR, #DISPTABLEDISPL1: MOV A, R0 PUSH ACC MOV P2, R4 ANL A, #80H JZ DISPL11 MOV A, DISP_COUNT SUBB A, #32 JNC DISPL11 MOV P2, #0DISPL11: POP ACC ANL A, #7FH MOVC A, A+DPTR MOV P0, A MOV R6, #00H MOV R7, #01H LCALL DELAY MOV P0, #0FF

19、H INC R0 MOV A, R4 RL A MOV R4, A DJNZ R5, DISPL1 POP ACC MOV R7, A POP ACC MOV R6, A POP ACC MOV R5, A POP ACC MOV R4, A POP PSW POP DPL POP DPH POP ACC RETDISPTABLE:DB 0C0H,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,

20、 8, 9, A, B, C, D, E, F, -, H, L, P, ;-延迟功能。;延迟时间=(R6R7)(ms);-DELAY: PUSH ACC MOV A, R4 PUSH ACC MOV A, R5 PUSH ACC MOV A, R7 JZ DELAY01 INC R6DELAY01: MOV R4, #02H MOV R5, #0F4HDELAY02: DJNZ R5, $ DJNZ R4, DELAY02 DJNZ R7, DELAY01 DJNZ R6, DELAY01 POP ACC MOV R5, A POP ACC MOV R4, A POP ACC RET;-;用

21、T0的中断功能;-T0_TIME: MOV TL0, #0B0H MOV TH0, #3CH PUSH PSW PUSH ACC INC T0_COUNT MOV A, T0_COUNT SUBB A, #20 JC T0_OUT MOV T0_COUNT, #0 INC SECO_REG MOV A, SECO_REG SUBB A, #60 JC T0_OUT MOV SECO_REG, #0 INC MINU_REG MOV A, MINU_REG SUBB A, #60 JC T0_OUT MOV MINU_REG, #0 INC HOUR_REG MOV A, HOUR_REG SU

22、BB A, #24 JC T0_OUT MOV HOUR_REG, #0T0_OUT: POP ACC POP PSW RETI;END2.7.2. C语言程序编译#include#define uchar unsigned char#define uint unsigned int#define ulong unsigned longsbit BUZZ=P37;sbit KEY1=P10;sbit KEY2=P11;uchar hour_reg,minute_reg,second_reg;void delay(uint);void display(uchar*);void time2str(

23、uchar*);void time_set(void);void main(void) uchar dispram8; TMOD=0x11; 选择工作方式1 IE=0x82; EA=1,CPU开放中断 ET0=1,使能定时器T0溢出中断 TR0=1; 开定时计数器 while(1) time2str(dispram); display(dispram); if(KEY1=0) time_set(); void time2str(uchar*ch) ch0=hour_reg/10; 显示小时的高位 ch1=hour_reg%10; 显示小时的低位 ch2=minute_reg/10; 显示分钟的高位 ch3=minute_reg%10; 显示分钟的低位 ch4=second_reg/10; 显示秒的高位 ch5=second_reg%10; 显示秒的低位 void time_set(void) uchar ch6; uchar i,c; TR0=0; 关定时计数器 second_reg=0; 秒钟清零 time2str(ch);do display(ch);while(KEY1=0);c=2;while(c) time2str(ch); if(c=2) ch0|=0x80;ch1|=0x80; 最高位补1 else ch2|=0x80;ch3|=0x80;

温馨提示

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

评论

0/150

提交评论