隔一秒加一数码管
认识单片机的定时器计数器

void main(void) { TMOD=0x01;
TH0=-25000/256; TL0=-25000%256; TR0=1; ET0=1; EA=1; while(1); } void timer0(void) interrupt 1 { TH0=-25000/256;
TL0=-25000%256; P10=~P10; }
根据定时时间T,及公式(1)、(2)分别可以求出初 值N为:
方式1: N=216-T×fosc/12
(3)
方式2、方式3 :N=28-T×fosc/12 (4)
如果fosc=12MHZ,以上公式可简化为
方式1: N=216-T
方式2、方式3 :N=28-T
例如:系统的时钟频率是12MHz,在方式1下,如果希望定时 器/计数器T0的定时时间T为10ms,则初值N =216-T=6553610000=55536
任务一、认识单片机的定时器/计数器
一、定时器/计数器及其应用 在单片机应用系统中,定时或计数是必不可少的。例如: 测量一个脉冲信号的频率、周期,或者统计一段时间里 电机转动了多少圈等。常用的定时方法有:
1、软件定时 软件定时是依靠执行一段程序来实现的,这段程序本身 没有具体的意义,通过选择恰当的指令及循环次数实现 所需的定时,由于执行每条指令都需一定的时间,执行 这段程序所需总的时间就是定时时间。 软件定时的特点是无需硬件电路,但定时期间CPU被占 用,增加了CPU的开销,因此定时时间不宜过长,而且 定时期间如果发生中断,定时时间就会出现误差。
led=_crol_(led,1); 满10次变量led左移1位送P0口
P0=led;
}
}
[案例3] 用定时器的计数方式实现外部中断。如图 所示,P0口控制8只发光管轮流点亮,发光管点 亮时间为500ms,单脉冲电路控制发光管的移动 方向,按下单脉冲按钮,发光管左移,再按下发 光管右移 。
单片机课设60秒计时器

单片机课程设计说明书题目:00—60秒表设计学院:机电工程学院专业:机械设计制造及其自动化学生姓名:xxx学号:xxx指导教师单位:xxx姓名:xxx2013年12月13日摘要60秒计时器以单片机为核心,由计时器,控制器等组成。
系统采用模块化设计,主要分为计时器显示模块和按键控制模块。
每个模块的程序结构简单,任务明确,易于编写、调试和修改。
编程后利用Kcil软件来进行编译,在生成HEX文件装入芯片中,在通过调试实现60s计时功能。
本设计中系统硬件电路主要是由以下几个部分组成:单片机AT89C51、振荡电路、显示电路和按键开关。
该系统具有60s内准确计时和计时清零的功能。
关键字:单片机,计时,显示,60s计时,复位清零目录前言 (1)一、概述 (1)1.1、课程设计任务与目的 (1)1.2、总体方案设计 (2)1.2.1、设计方案框图 (2)1.2.2、硬件方案 (2)1.2.3、软件方案 (2)二、系统硬件设计 (3)2.1、电路总体设计方案 (3)2.2、电路原理图 (3)2.3、各硬件模块设计与制作 (3)2.3.1、AT89C51单片机设计 (3)2.3.2、晶振输入电路设计 (6)2.3.3、复位电路设计 (7)2.3.5、数码管显示部分电路 (8)2.3.6、绘制原理图. (10)2.3.7、生成PCB图 (11)2.3.8、制作PCB板 (11)2.3.9、钻孔,并焊接芯片 (12)2.4、遇到的问题与解决办法 (13)三、系统软件设计 (14)3.1、软件总体设计方案 (14)3.2、程序流程图 (16)3.3、部分重要模块汇编程序: (16)四、系统调试 (17)4.1、软件调试 (17)4.2、硬件调试 (18)五、系统功能 (19)六、总结 (19)七、附录 (19)八、参考文献 (21)前言我们的任务是设计60s秒表计时器,用AT89S51单片机的定时/计数器T0产生一秒的定时时间,作为秒计数时间,当一秒产生时,秒计数加1,秒计数到60时,自动从0开始,实现0到60秒的循环显示的功能。
专题七动态扫描电路设计

Q[7..0] RD 读数据控制
ARCHITECTURE a OF MEMO_RD_WR IS
SIGNAL Q0,Q1,Q2,Q3: STD_LOGIC_VECTOR(7 DOWNTO 0);
SIGNAL Q4,Q5,Q6,Q7: STD_LOGIC_VECTOR(7 DOWNTO 0);
BEGIN
扫描控制器时序图
ARCHITECTURE a OF SCAN_8 IS SIGNAL NUM: INTEGER RANGE 7 DOWNTO 0;
BEGIN PROCESS(CLK2)
BEGIN IF CLK2'EVENT AND CLK2=‘1' THEN
IF NUM<=7 THEN NUM<=NUM+1;
单片机课程设计报告

中州大学工程技术学院单片机课程设计说明书课题名称秒表专业机械制造与自动化学生XX 马振杨班级机制一班学号7指导教师沈娣丽完成日期2013年9月25日目录摘要 (1)一.系统设计要求 (2)二.设计思路分析 (2)三.秒表电路原理图设计 (2)3.1系统总电路图 (2)3.2时钟电路设计 (3)3.3 输入模块电路设计 (3)3.4显示模块电路设计 (3)四.系统硬件电路设计 (3)4.1秒表显示模块 (4)4. 2控制器模块单片机的选择 (4)4. 3键盘的选择 (5)五.简易秒表软件系统设计 (6)5.1定时模块 (6)5.2 主程序流程图 (8)六.系统的调试 (8)七.心得体会 (11)八.参考文献 (12)摘要单片机在日用电子产品中的应用日益广泛,单片机控制秒表是基于单片机技术、模拟电子技术、数字技术为一体的机电一体化高科技产品,具有功耗低、平安性高使用方便等优点。
秒表是人们日常生活中常常需要用到的一种工具。
本文采用AT89S51单片机从硬件和软件两方面介绍了一款简易的秒表设计过,并对硬件原理图和程序流程图作了简洁的描述。
关键字:单片机AT89C51,LED,秒表,计数器引言:随着单片机技术的不断开展,单片机在日用电子产品中的应用越来越广泛,而本文设计并制作了一款基于AT89C51的3位数码管显示的秒表,其电路简单,软硬件构造模块化,易于实现。
产品和技术革新的日新月异都让人非常惊讶。
在电子科学技术高速开展的今天,高科技产品越来越多的应用在我们的日常生活中,给我们的生活带来了非常大的方便,每时每秒我们都能感受到产品的更新换代。
像平常我们工作所用的电脑、手机和生活所用的电视机,收音机,Mp3等等,这些高科技产品给我们带来了极大的方便,但这要归功于科学技术的高速开展。
一、设计要求⑴硬件设计:根据任务要求,完成单片机最小系统及其扩展设计。
⑵软件设计:根据硬件设计完成显示功能要求,完成控制软件的编写与调试;⑶功能要求:用S1启动秒表和停顿秒表,S2键将秒表归零,按一下S1,即开场定时,在数码管上每秒加1,加到60,归零。
数码管显示数字

在第6课里,我们讲到数码管的静态显示,利用静态显示法,通过控制位选和段选,可以让数任意几位数码管显示任意字符,但由于所有位数码管的相同的段选全部接在一起,所以只能同时显示相同的数字,例如8位同时显示8字,1、3、5位同时显示3字。
但大家想一下,如果我们要让数码管同一时刻显示不同的数字,如图1所示的现象,用静态显示的方法就不能够实现,这里就只能用到动态显示的方法,今天这一节我们主要讲解数码管动态显示的原理的程序实现的方法。
图1 数码管同时显示123456在讲解动态显示方法之前,我们先介绍在种数码管及单片机程序开发过程常用的方法-数组编码法。
1、数组编码在跟数码管相关的程序中,可以对位进行编码,也可对段进行编码,这里我们以段编码进行讲解。
通过第8课的程序我们知道,在位选确定后,要显示数字8时,P0=0x80,显示数字3时P0=0xb0,也就是0xb0,0x80分别可以表示数字3和8,按此方法,我们把在数码管上显示0-f,16个数字全部用16制度表示出来,这16个16进制数就称为数码管可显示0-f的相应的编码,如图2所示(注意共阳和共阴极数码管相应的编码有所不同,这里以实验板上共阳极的为例)。
图2 共阳极数码管编码在编程中,编码的表示方法如下:unsigned char code table[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e };这里编码表示的方法与C语言中数组定义的方法基本一样。
table是数组名,后面需加[],中括号中需加上数组中元素的个数,也可以不写。
等号的右边用一个大括号将所有元素包含起来,里面的元素之间用“,”隔开,在大括号外用“;”结束。
等号左边的unsigned char 是数据元素的数据类型,这里定义为无符号字符型,也就是元素的值范围只能是0-255之间。
数码管倒计时电路的设计

数码管倒计时电路的设计LED数码管倒计时电路采用24H计时方式,时分秒用6位数码管显示,分、秒之间为闪烁位,每0.5秒闪烁一次。
该电路采用AT89C51单片机,可按需求设计计时数。
数码管时钟电路如图1所示,其采用AT89C51单片机,LED先是采用动态扫描方式实现,P1口输出段码数据,P3.3~P3.5口接三八译码器作扫描输出,P0.0~P0.6口接按钮开关,为了提高秒计时的精确性,采用12MHz晶振。
1.主程序本设计中的计时采用定时器T0中断完成,其余状态循环调用显示子程序,当P0.6端口开关按下时,转入调时功能程序。
2.显示子程序数码管显示的数据存放在内存单元40H~45H中,其中40H~41H存放秒数据,42H~43H 存放分数据,44H~45H存放时数据,每一地址单元内均为十进制BCD码。
由于采用软件动态扫描实现数据显示功能,显示用十进制BCD码数据的对应段码存放在ROM表中。
显示时,先取出40H~45H某一地址中的数据,然后查得对应的显示用段码从P1口输出。
P3.3~P3.5口将对应的数码管选中,就能显示该地址单元的数据值。
3.定时器T0中断服务程序定时器T0用于时间计时。
定时溢出中断周期设为50ms,中断累计20次(即1秒)时对秒计数单元进行加1操作。
时间计数单元地址分别在40H~41H(s),46H~77H(min),78H~79H(h),20H单元内存放“熄灭符”数据。
在计数单元中采用十进制BCD码计数,满60进位。
4.设置计时数程序设置计时数程序的设计方法是,P0.0~P0.5分别对应秒个位秒十位,分个位分十位,时个位时十位,P0.6设置位,当P0.6为0时,进入设置状态,各位清0,设置结束,按P0.6开始计时。
5.汇编程序清单ORG 0000HLJMP STARTORG 000BHLJMP ZM0;*****************************; 主程序;*****************************START: MOV TMOD,#11H ;设置定时器为0工作方试1MOV TL0,#0B0HMOV TH0,#3CH ;设置定时器0为50msSETB EA ;开总中断SETB ET0 ;开定时器0中断MOV DPTR,#TAB ;表格地址MOV 20H,#0FFH ;设置闪烁位MOV 40H,#00H ;秒个位MOV 41H,#00H ;秒十位MOV 42H,#00H ;分个位MOV 43H,#00H ;分十位MOV 44H,#00H ;时个位MOV 45H,#00H ;时十位MOV 50H,#0C0H ;秒个位显示码MOV 51H,#0C0H ;秒十位显示码MOV 52H,#0C0H ;分个位显示码MOV 53H,#0C0H ;分十位显示码MOV 54H,#0C0H ;时个位显示码MOV 55H,#0C0H ;时十位显示码MOV R2,#20 ;计数用,20*50ms为一秒SETB TR0 ;定时器0开始计时MAIN: ACALL DISPLAY ;显示JB P0.6,MAIN ;调整键按下ACALL DISP ;除抖JB P0.6,MAINACALL SETTIME ;进入调时SJMP MAIN;****************************; 计时中断0;****************************ZM0: PUSH ACC ;保护现场PUSH PSWCLR ET0 ;关闭总中断CLR TR0 ;关计时器0中断MOV A,#0B7H ;中断响应时间同步修正ADD A,TL0MOV TL0,AMOV TH0,#3DHSETB TR0 ;开计时器0DEC R2 ;闪烁位每0.5秒闪烁一次MOV A,R2MOV b,#10DIV ABMOV A,BCJNE A,#0,NEXT ;到0.5秒了吗CPL 06h ;闪烁位取反NEXT: CJNE R2,#0,OUT ;到一秒钟对40H至45H各位进行调整MOV R2,#20MOV R0,#40H ;秒数减一ACALL DEC1MOV R3,41HCJNE R3,#255,OUTACALL CLSMOV R0,#42HACALL DEC1 ;秒数数到0时,分数减一MOV R3,43HCJNE R3,#255,OUTACALL CLSMOV R0,#44H ;分数减到0时,小时数减一ACALL DEC1MOV R3,45HCJNE R3,#255,OUTMOV 40H,#00H ;秒个位归0MOV 41H,#00H ;秒十位归0MOV 42H,#00H ;分个位归0MOV 43H,#00H ;分十位归0MOV 44H,#00H ;时个位归0MOV 45H,#00H ;时十位归0MOV 20H,#0BFHACALL OUT1 ;BCD码化为显示码CLR TR0CLR TR0 ;关闭计时器0SJMP MAIN ;都减为0时,程序结果,等待下一次设置时间OUT: MOV R5,#6;将40H至45H的BCD码译为相应的显示码存放在50H至55H中MOV R0,#45HMOV R1,#55HBIAN: MOV A,@R0MOVC A,@A+DPTRMOV @R1,ADEC R0DEC R1DJNZ R5,BIANPOP ACCPOP PSWSETB ET0RETI;**************************; 减一程序;**************************DEC1: CJNE @R0,#0,OUTT ;对相应的十位与个位进行减一处理MOV @R0,#9INC R0DEC @R0DEC R0RETOUTT: DEC @R0RET;**************************; 归位程序;**************************CLS: MOV @R0,#9INC R0MOV @R0,#5RET;***************************; BCD码化为显示码程序;***************************OUT1: MOV R5,#6 ;将40H至45H的BCD码译为相应的显示码存放在50H至55H中MOV R0,#45HMOV R1,#55HBIAN1: MOV A,@R0MOVC A,@A+DPTRMOV @R1,ADEC R0DEC R1DJNZ R5,BIAN1RET;**********************************; 设置计时数程序;**********************************SETTIME:CLR TR0 ;关闭计时器ACALL DISPLAYMOV 40H,#00H ;秒个位归0MOV 41H,#00H ;秒十位归0MOV 42H,#00H ;分个位归0MOV 43H,#00H ;分十位归0MOV 44H,#00H ;时个位归0MOV 45H,#00H ;时十位归0MOV 20H,#0BFHACALL OUT1 ;BCD码化为显示码ACALL DISP ;除抖JB P0.6,REI1SELF: JNB P0.6,SELF ;等待键释放PUSH ACC ;保护现场PUSH PSWMOV TL0,#0B0H ;重置计数器MOV TH0,#3CHWAIT: ACALL DISPLAY ;等待设置健按下MOV A,P0CPL AJZ WAITACALL DISP ;除抖MOV A,P0CPL AJZ WAITMOV B,A ;保存数据SELF1: MOV A,P0 ;等待健释放CJNE A,#0FFH,SELF1MOV A,B ;计算是哪个键按下,对相应的内存加一MOV R1,#3FHCLR CAGAIN: RRC AINC R1JNC AGAININC @R1MOV B,R1ACALL SETTIME0 ;对时间数据作相应的调整ACALL OUT1 ;BCD码化为显示码MOV R1,BCJNE R1,#46H,W AIT ;p0.6再次为0时,开始计时REI1: POP ACCPOP PSWSETB TR0RET ;返回;*********************************; 调整程序;**********************************SETTIME0:MOV A,40H ;秒个位满10归0CJNE A,#10,SET1MOV 40H,#0SET1: MOV A,41H ;秒十位满6归0CJNE A,#6,SET2MOV 41H,#0SET2: MOV A,42H ;分个位满10归0CJNE A,#10,SET3MOV 42H,#0SET3: MOV A,43H ;分十位满6归0CJNE A,#6,SET4MOV 43H,#0SET4: MOV A,44H ;时个位满4归0CJNE A,#4,SET5MOV 44H,#0SET5: MOV A,45H ;时十位满3归0 CJNE A,#3,SET6MOV 45H,#0SET6: RET;**********************************; 显示程序;**********************************DISPLAY:MOV P1,50H ;显示秒个位MOV P3,#0ACALL DISPMOV P1,#0FFHMOV P1,51H ;显示秒十位MOV P3,#8ACALL DISPMOV P1,#0FFHMOV P1,20H ;显示闪烁位MOV P3,#16ACALL DISPMOV P1,#0FFHMOV P1,52H ;显示分个位MOV P3,#24ACALL DISPMOV P1,#0FFHMOV P1,53H ;显示分十位MOV P3,#32ACALL DISPMOV P1,#0FFHMOV P1,20H ;显示闪烁位MOV P3,#40ACALL DISPMOV P1,#0FFHMOV P1,54H ;显示时个位MOV P3,#48ACALL DISPMOV P1,#0FFHMOV P1,55H ;显示时十位MOV P3,#56ACALL DISPMOV P1,#0FFHRET;*******************************; 0.5ms延时程序;*******************************DISP: MOV 30H,#5DD: MOV 31H,#50DJNZ 31H,$DJNZ 30H,DDRET;*************************************; 表格;*************************************TAB: DB 0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H ;0至9的共阳显示码END。
单片机数码管0到9编程间隔为1秒的实验报告

单片机数码管0到9编程间隔为1秒的实验报告
本次实验使用的是单片机数码管及定时器。
实验目的:
熟悉单片机数码管及定时器的编程方法,掌握基本的数码管数码显示及定时器操作。
实验材料:
单片机、LED数码管、跳线、电源、电动推杆。
实验原理:
基于单片机的GPIO控制与定时器编程实现数码管计数器的设计。
实验步骤:
1.连接电路如图所示(VCC连接到5V、GND连接到GND、COM连接到任意采用数字型数码管)。
2.完成电路后打开KEIL编译软件,新建一个工程文件并命名,选择C语言,按照所使用调试器的型号进行对应的选项设置,确定。
3.在编写代码前对单片机进行初始化配置,设定所需的端口进行数据的输入输出,主函数加入时钟初始化语句。
4.编写数码管显示代码,定时器中断触发的显示程序,以及定时器相关的中断服务程序。
5.在代码中加入宏定义,把需要显示的数字和时间间隔等参数进行定义,以便后期修改和使用。
6.调试程序,编译及下载程序到单片机中并运行,观察程序效果。
实验结果:
将数码管上的数字从0到9逐个显示,并每个数字停留1秒钟。
实验总结:
通过本次实验,我深入了解了单片机数码管和定时器的原理及编程技术。
对单片机编程的整个流程、基本控制语句和数据类型的使用有了更为深入全面的认识,并对实际项目的设计和开发也有了一定的指导性。
四位数码管显示时间的原理

四位数码管显示时间的原理
四位数码管是一种常见的显示器件,用于显示数字。
它由四个七段数码管组成,每个数码管有七个段(a-g)用于显示数字0-9。
通过控制这些段的亮灭,可以显示不同的数字。
数码管显示时间的原理如下:
1. 时钟信号:时钟信号是一个周期性的信号,用于控制数码管的刷新频率。
通常,数码管的刷新频率为几十赫兹,即每秒刷新几十次。
2. 数字转换:将当前的时间转换为需要显示的数字。
例如,将小时、分钟和秒分别转换为四个数字。
3. 数字显示:将转换后的数字依次显示在四位数码管上。
通过控制数码管的七段,可以让特定的段亮起,显示对应的数字。
4. 刷新:由于刷新频率较高,每个数码管只能持续亮起很短的时间,然后迅速切换到下一个数码管。
通过快速刷新,人眼会感觉到所有数码管都同时亮起。
这样,通过不断地刷新和更新显示的数字,就可以实现数码管显示时间的功能。
需要注意的是,数码管只能显示数字,不能直接显示字母和其他符号。
如果需要显示字母、符号或者更复杂的信息,可能需要使用其他类型的显示器件。