设计与开发

单片机数字钟报告 学习笔记单片机的40个经典实验之20:数字钟﹝﹞

小编 2024-10-13 设计与开发 23 0

学习笔记单片机的40个经典实验之20:数字钟﹝﹞

一、实验任务

(1. 开机时,显示 12:00:00 的时间开始计时;

(2. P0.0/AD0 控制“秒”的调整,每按一次加 1 秒;

(3. P0.1/AD1 控制“分”的调整,每按一次加 1 分;

(4. P0.2/AD2 控制“时”的调整,每按一次加 1 个小时;

二、电路原理图

图 4.20.1

三、 系统板上硬件连线

(1. 把“单片机系统”区域中的 P1.0-P1.7 端口用 8 芯排线连接到“动态数码显示”区域中的 A-H 端口上;

(2. 把“单片机系统:区域中的 P3.0-P3.7 端口用 8 芯排线连接到“动态数码显示”区域中的 S1-S8 端口上;

(3. 把“单片机系统”区域中的 P0.0/AD0、P0.1/AD1、P0.2/AD2 端口分别用导线连接到“独立式键盘”区域中的 SP3、SP2、SP1 端口上;

四、相关基本知识

(1. 动态数码显示的方法

(2. 独立式按键识别过程

(3. “时”,“分”,“秒”数据送出显示处理方法

五、程序框图

六、汇编源程序

SECOND EQU 30H

MINITE EQU 31H

HOUR EQU 32H

HOURK BIT P0.0

MINITEK BIT P0.1

SECONDK BIT P0.2

DISPBUF EQU 40H

DISPBIT EQU 48H

T2SCNTA EQU 49H

T2SCNTB EQU 4AH

TEMP EQU 4BH

ORG 00H

LJMP START

ORG 0BH

LJMP INT_T0

START: MOV SECOND,#00H

MOV MINITE,#00H

MOV HOUR,#12

MOV DISPBIT,#00H

MOV T2SCNTA,#00H

MOV T2SCNTB,#00H

MOV TEMP,#0FEH

LCALL DISP

MOV TMOD,#01H

MOV TH0,#(65536-2000) / 256

MOV TL0,#(65536-2000) MOD 256

SETB TR0

SETB ET0

SETB EA

WT: JB SECONDK,NK1

LCALL DELY10MS

JB SECONDK,NK1

INC SECOND

MOV A,SECOND

CJNE A,#60,NS60

MOV SECOND,#00H

NS60: LCALL DISP

JNB SECONDK,$

NK1: JB MINITEK,NK2

LCALL DELY10MS

JB MINITEK,NK2

INC MINITE

MOV A,MINITE

CJNE A,#60,NM60

MOV MINITE,#00H

NM60: LCALL DISP

JNB MINITEK,$

NK2: JB HOURK,NK3

LCALL DELY10MS

JB HOURK,NK3

INC HOUR

MOV A,HOUR

CJNE A,#24,NH24

MOV HOUR,#00H

NH24: LCALL DISP

JNB HOURK,$

NK3: LJMP WT

DELY10MS:

MOV R6,#10

D1: MOV R7,#248

DJNZ R7,$

DJNZ R6,D1

RET

DISP:

MOV A,#DISPBUF

ADD A,#8

DEC A

MOV R1,A

MOV A,HOUR

MOV B,#10

DIV AB

MOV @R1,A

DEC R1

MOV A,B

MOV A,#10

MOV@R1,A

INT_T0:

ADD A,DISPBIT

MOV R0,A

MOV A,@R0

MOV DPTR,#TABLE

MOVC A,@A+DPTR

MOV P1,A

MOV A,DISPBIT

MOV DPTR,#TAB

MOVC A,@A+DPTR

MOV P3,A

INC DISPBIT

MOV A,DISPBIT

CJNE A,#08H,KNA

MOV DISPBIT,#00H

KNA: INC T2SCNTA

MOV A,T2SCNTA

CJNE A,#100,DONE

MOV T2SCNTA,#00H

INC T2SCNTB

MOV A,T2SCNTB

CJNE A,#05H,DONE

CJNE A,#60,NEXT

CJNE A,#24,NEXT

MOV HOUR,#00H

NEXT: LCALL DISP

DONE: RETI

TABLE: DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH,40H

TAB: DB 0FEH,0FDH,0FBH,0F7H,0EFH,0DFH,0BFH,07FH

END

七、C 语言源程序

#include <AT89X51.H>

unsigned char code dispcode={0x3f,0x06,0x5b,0x4f,

0x66,0x6d,0x7d,0x07,

0x7f,0x6f,0x77,0x7c,

0x39,0x5e,0x79,0x71,0x00};

unsigned char dispbitcode={0xfe,0xfd,0xfb,0xf7,

0xef,0xdf,0xbf,0x7f};

unsigned char dispbuf[8]={0,0,16,0,0,16,0,0};

unsigned char dispbitcnt;

unsigned

char second;

char minite;

char hour;

int tcnt;

char mstcnt;

unsigned char i,j;

void main(void)

{

TMOD=0x02;

TH0=0x06;

TL0=0x06;

TR0=1;

ET0=1;

EA=1;

while(1)

{

if(P0_0==0)

{

for(i=5;i>0;i--)

for(j=248;j>0;j--);

second++;

if(second==60)

{

second=0;

}

dispbuf[0]=second%10;

dispbuf[1]=second/10;

while(P0_0==0);

if(P0_1==0)

minite++;

if(minite==60)

{

minite=0;

}

dispbuf[3]=minite%10;

dispbuf[4]=minite/10;

while(P0_1==0);

if(P0_2==0)

hour++;

if(hour==24)

{

hour=0;

}

dispbuf[6]=hour%10;

dispbuf[7]=hour/10;

while(P0_2==0);

void t0(void) interrupt 1 using 0

{

mstcnt++;

if(mstcnt==8)

{

mstcnt=0;

P1=dispcode[dispbuf[dispbitcnt]];

P3=dispbitcode[dispbitcnt];

dispbitcnt++;

if(dispbitcnt==8)

{

dispbitcnt=0;

tcnt++;

if(tcnt==4000)

{

tcnt=0;

阅读本文用了: 秒,转发只需1秒

转载是一种智慧 分享是一种美德❀

单片机实例:六位显示数码管时钟((附闹钟设置,源码,原理图)

从左到右的开关控制分别为:秒设置、分设置、时设置、进入时间设置(设置时间需要按一下这个再按前面3个按键设置)、闹钟设置(通过前面3个按键设置)、保存设置(设置完成后按下保存并退出)。

时钟可以显示到秒位

数码管用的是共阴,共阳的话加三极管闲麻烦,没加。数码管a~g接的P0口,没用10K排阻上拉,试了下觉得亮度太低了,就都换成了2K的作为上拉。

有兴趣的可以给加上温度传感器,可以显示温度(我这里面就没加了)初学单片机没多久,欢迎大佬指导。材料如下:89C52*1 4位数码管*1+2位数码管*1(当然如果有六位的也可以直接用,找不到其他数码管了就这么混搭了) 有源蜂鸣器*1(试过无源,但时间计算过于占用资源导致发声不是很完美,大佬可以改一下) 轻触开关*7(1个用于复位,其余六个用于设置) + 自锁开关*1 电池*1 + 5V稳压*1

单 片 机 时 钟 源 码 程 序--戳可见--->51单片机六位显示数码管时钟实例(带闹钟设置,源码,原理图)

相关问答

led 数字 电子时钟工作原理?

去购一块“数字时钟集成电路IC”,再搞一块LED显示屏模块,配套的电源变压器,自己组装啦。也可直接买一个全套的散件,回来简单的焊吧焊吧就可用啦。...

电子钟怎么调时间 数字 电子钟有什?

[回答]数字电子钟的设计数字电子钟的设计方法有多种,例如,可用中小规模集成电路组成电子钟;也可以利用专用的电子钟芯片配以显示电路及其所需要的外围电路...

在座的同志,急需帮忙!用51 单片机 做电子钟,自动校时方面最...

采用数字电路设计数字电子钟。主要是掌握三个知识点:1、计数器的灵活应用通过门电路组合逻辑控制计数器的清零、置位或装载,将计数器设置为不同的进...

用C语言写51 单片机 闹钟程序 - 132****9191 的回答 - 懂得

****************//实现2113功能:本程序实现在P1口模拟一个流水5261灯程序//**************************...#definep_outP1//宏定义...

单片机 计数输入端最高脉冲频率是多少? - 萱萱Nana 的回答 - 懂得

作为定时器时,计数时钟来自内部脉冲时钟,频率为1/12的晶振频率。作为计数器时,计数时钟来自外部脉冲时钟,最高频率为1/24的晶振频率。外部脉冲的变...

有没有 用51 单片机 做电子钟,自动校时方面最简单的能用什么方法?

电子钟是一个将“时”,“分”,“秒”显示于人的视觉器官的计时装置。它的计时周期为24小时,显示满刻度为23时59分59秒,具有校时功能和报时功能。1...

51 单片机 如何控制电话拨号,原理是什么?电路如何接?谢谢了?

有专门用于单片机控制拨号的芯片,,拨号线D0,D1,D2,D3能排列成十六种状态,能出16种双音频信号或15钟脉冲信号.单片机用四条线控制D0,D1,D2,D3,再用两条线控制/C...

带温度显示的LED钟怎么调整温度显示值- 一起装修网

带温度显示的LED钟怎么调整温度显示值

挂在墙上电子钟如何调温度.i温度显示很低怎么调节,有没有办法调?

如果是采用DS18B20这种一体化数字式温度传感器的话,没法调节,只能更改单片机的程序来解决这个误差。如果是热敏电阻之类的传感器的话,检查一下周围有没有电位...

将片内30H单元的内容送入到片外RAM1000H单元的数据传输指令怎么编写?

若是MCS51单片机,用汇编语言则如下:MOVA,30HmovDPTR,#1000HMOVX@DPTR,A若用C语言,则要用到期XBYTE[],DBYTE[]等宏或自己用指钟来写.若是...

猜你喜欢