单片机实例:六位显示数码管时钟((附闹钟设置,源码,原理图)
从左到右的开关控制分别为:秒设置、分设置、时设置、进入时间设置(设置时间需要按一下这个再按前面3个按键设置)、闹钟设置(通过前面3个按键设置)、保存设置(设置完成后按下保存并退出)。
时钟可以显示到秒位
数码管用的是共阴,共阳的话加三极管闲麻烦,没加。数码管a~g接的P0口,没用10K排阻上拉,试了下觉得亮度太低了,就都换成了2K的作为上拉。
有兴趣的可以给加上温度传感器,可以显示温度(我这里面就没加了)初学单片机没多久,欢迎大佬指导。材料如下:89C52*1 4位数码管*1+2位数码管*1(当然如果有六位的也可以直接用,找不到其他数码管了就这么混搭了) 有源蜂鸣器*1(试过无源,但时间计算过于占用资源导致发声不是很完美,大佬可以改一下) 轻触开关*7(1个用于复位,其余六个用于设置) + 自锁开关*1 电池*1 + 5V稳压*1
学习笔记单片机的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秒
❀ 转载是一种智慧❀ 分享是一种美德❀
相关问答
单片机数字钟 毕业中期检查表中的一个问题 - 沈禾欣子 的回答...电子钟相关毕2113业设计·数字电子钟的电5261路设计(字数:9242,页数4102:22)·数字电子钟的设计与制作1653(字数:8017,页数:22)·数字钟的设计(字数...
盆友们!问大家一下 led 数字 电子时钟工作原理?[回答]电子钟相关毕业设计·数字电子钟的电路设计·数字电子钟的设计与制作·数字钟的设计·基于8051单片机的数字钟·基于单片机的电子时钟控制系统·数...
EDA 数字钟 设计电路图显示时分秒日期星期能整点报...- 汇财吧...[回答]『数字电路』课程设计指导书一、教学目标(一)课程性质课程设计。(二)课程目的训练学生综合运用学过的数字电路的基本知识,独立设计比较复杂的数字电...
电子钟怎么调时间 数字 电子钟有什?数字电子钟的设计数字电子钟的设计方法有多种,例如,可用中小规模集成电路组成电子钟;也可以利用专用的电子钟芯片配以显示电路及其所需要的外围电路...
用51 单片机 做电子钟,自动校时方面最简单的能用什么方法?一、数字钟的组成与基本原理一、课程名称:数字电子钟的设计。二、内容:设计并制作一台数字电子钟,完成设计说明书。三、设计内容及要求:设计内容:要...
老表们,谁清楚,用51 单片机 做电子钟,自动校时方面最简单的...[回答]你的校时只的是调时间还是调时钟的准确度?如果是调时间用个2个按钮就好了。校时的话51就是走不准的一天有误差难免的。这个晶振有关系的,当然你觉...
用51 单片机 做电子钟,自动校时方面最简单的能用什么方法?[回答]电子钟表中AL是闹钟英文名称的缩写。电子钟表的时钟功能:具有可选的24h(小时)或12h(小时)的计时方式,显示时、分、秒;具有快速校准时、分、秒的功能...
用C语言写51 单片机 闹钟程序 - 156****1626 的回答 - 懂得汇编做的可以不.有秒表.有闹钟.//*********************************************************//实现2113功能:本程序实现在P1口模拟一个...
铷钟原理?铷钟又被称为铷原子钟,铷原子钟由铷量子部分和压控晶体振荡器组成。压控晶体振荡器的频率经过倍频和频率合成,送到量子系统与铷原子跃迁频率进行比较。误差信...
不要一直滴滴滴的响(做钟报时用的)-ZOL问答用无源蜂鸣器,通过单片机控制频率可能是某个地方磕得松动了内存之类的你打开看看额...是不是你线没连接好啊键盘上有很多组合键一起按电脑就会滴滴滴...