利用单片机的定时器和数码管,设计一个电子时钟

利用单片机的定时器和数码管,设计一个电子时钟,显示格式为“XX:XX:XX”,由左向右分别是时、分、秒。开机时,显示00:00:00的时间开始计时;当时间不准时,可校时,P0.0控制“秒”的调整,每按一次加1s;P0.1控制“分”的调整,每按一次加1min;P2.0控制“时”的调整,每按一次加1h。计时满23:59:59时,返回00:00:00重新计时。

第1个回答  2014-06-04
给你个电路和程序,//前几天帮一个网友写,单片机定时时钟在调节功能,可以参考一下我程序

/***************************************************
* 6位数码管显示电子钟
*
* 功能: 按键加,按键减, 按键,启动和停止。
*
*
***************************************************/
#include "REG52.H"

sbit SHUG_01 = P2^0; //数码管1
sbit SHUG_02 = P2^1; //数码管2
sbit SHUG_03 = P2^2; //数码管3
sbit SHUG_04 = P2^3; //数码管4
sbit SHUG_05 = P2^4; //数码管5
sbit SHUG_06 = P2^5; //数码管6
sbit KEY0_01 = P0^0; //按键 启动或停止sbit KEY0_02 = P0^1; //按键 加
sbit KEY0_03 = P0^2; //按键减
sbit KEY0_04 = P0^3; //按键菜单
#define LED_DATA P1 //P1数据端口
unsigned char value_temp = 0;unsigned char value_Outk = 0;
unsigned char value_shio = 8;
unsigned char value_feno = 40;
unsigned char value_miao = 0;
unsigned char code value_tab0[]={0xc0, 0xf9, 0xa4, 0xb0, 0x99, 0x92, 0x82, 0xf8, 0x80, 0x90}; //共阳极unsigned char code value_tab1[]={0x40, 0x79, 0x24, 0x30, 0x19, 0x12, 0x02, 0x78, 0x00, 0x10}; //共阳极带点

/*
* 延时1ms延时子函数
**/
void Delay_1ms(unsigned int Time)
{
unsigned int x, y;
for(x = Time; x > 0; x--)
for(y = 120; y > 0; y--);
}
/* * 程序运行【启动和停止】子函数
**/
void Disp_layledketCmd(void)
{
/***小时***/
SHUG_01 = 1;
LED_DATA = value_tab0[value_shio / 10]; /*******小时的十位数显示***************/
Delay_1ms(5);
SHUG_01 = 0;
SHUG_02 = 1;
LED_DATA = value_tab1[value_shio % 10]; /*******小时的个位数显示***************/
Delay_1ms(5);
SHUG_02 = 0;
/***分钟***/ SHUG_03 = 1;
LED_DATA = value_tab0[value_feno / 10]; /*******分钟的十位数显示***************/
Delay_1ms(5);
SHUG_03 = 0;
SHUG_04 = 1;
LED_DATA = value_tab1[value_feno % 10]; /*******分钟的个位数显示***************/
Delay_1ms(5);
SHUG_04 = 0;
/***秒钟***/ SHUG_05 = 1;
LED_DATA = value_tab0[value_miao / 10]; /*******秒钟的十位数显示***************/
Delay_1ms(5);
SHUG_05 = 0;
SHUG_06 = 1;
LED_DATA = value_tab0[value_miao % 10]; /*******秒钟的个位数显示***************/
Delay_1ms(5);
SHUG_06 = 0;
}
/* * 定时器初始化定时50ms
**/
void Tero_Init(void)
{
TMOD = 0x01;
TH0 = 0x4C;
TL0 = 0x00;
ET0 = 1;
TR0 = 1;
EA = 1;
}
/* * 按键开关【启动和停止】子函数
**/
void Scan_keyoutCmd(void)
{
if(KEY0_01 == 0)
{
Delay_1ms(10);
if(KEY0_01 == 0)
{
TR0 = ~ TR0;
}
while(KEY0_01 == 0);
}
if(KEY0_02 == 0) {
Delay_1ms(10);
if(KEY0_02 == 0)
{
value_miao--;
if(value_miao == -1)
{
value_feno--;
value_miao = 59;
if(value_feno == -1)
{
value_shio--;
value_feno = 59;
if(value_shio == -1)
{
value_shio = 23;
}
}
}
while(KEY0_02 == 0);
}
}
if(KEY0_03 == 0) {
Delay_1ms(10);
if(KEY0_03 == 0)
{
value_miao++;
if(value_miao == 60)
{
value_miao = 0;
value_feno++;
if(value_feno == 60)
{
value_feno = 0;
value_shio++;
if(value_shio == 24)
{
value_shio = 0;
}
}
}
while(KEY0_03 == 0); //检测松手
}
}
}
/* * 函数主体
**/
int main(void)
{
P1 = P2 = P3 = 0x00;
Tero_Init();

while(1)
{
Scan_keyoutCmd();
Disp_layledketCmd(); //执行应运程序
}
}
/* * 定时器中断服务程序
**/
void Tmero()interrupt 1
{
TH0 = 0x4C;
TL0 = 0x00;
value_temp++;
if(value_temp == 20)
{
value_temp = 0;
value_miao++;
if(value_miao == 60)
{
value_feno++;
value_miao = 0;
if(value_feno == 60)
{
value_shio++;
value_feno = 0;
if(value_shio == 24)
{
value_shio = 0;
}
}
} }
}本回答被提问者和网友采纳

利用单片机的定时器和数码管,设计一个电子时钟
LED_DATA = value_tab0[value_feno \/ 10]; \/***分钟的十位数显示***\/ Delay_1ms(5);SHUG_03 = 0;SHUG_04 = 1;LED_DATA = value_tab1[value_feno % 10]; \/***分钟的个位数显示***\/ Delay_1ms(5);SHUG_04 = 0;\/***秒钟***\/ SHUG_05 = 1;LED_DATA = value_...

用数码管及定时器实现简易时钟
TMOD=0x11; \/\/定时器0,1工作于方式1;赋初值 TH0=(65536-5000)\/256;TL0=(65536-5000)%256;TH1=(65536-50000)\/256;TL1=(65536-50000)%256;EA=1;EX0=1; \/\/秒表中断 EX1=1; \/\/闹钟设定中断 ET0=1;ET1=1;IT0=1; \/\/边沿触发方式 IT1=1;PX0=1;PX1=1;TR0=0; \/...

单片机控制多位数码管的电子时钟程序
用单片机控制多位数码管的电子时钟,用独立按键进行控制,可显示时间,日期,有闹钟功能,独立按键进行时间日历,闹钟设置 软件编程: keil工程C语言代码:\/*** 项目名称:数码管电子时钟 实现功能:数码管显示时间、日期,时间、日 期可调,可设置闹钟,闹铃响一分钟。 ***\/ #include reg52.h #define...

基于51单片机简易时钟闹钟八位数码管显示Proteus仿真
本设计旨在实现一个基于51单片机的多功能数字时钟闹钟,其主要功能包括显示时、分、秒,并能设置时间和闹钟。该设计采用单片机内部定时器实现计时功能,通过八位数码管显示当前时间。用户可以对时、分、秒进行独立设置,设置时数码管将闪烁。此外,闹钟功能可让用户设置特定时间,当时间到达,蜂鸣器将每秒鸣响...

设计电子时钟 要用AT89S51单片机的定时器实现,用4位数码管显示,用点的...
一个调分钟键,一个设置闹钟时间键 实验方法:TIMER0中断用来计时,控制数码时钟的时间显示 还可设置半秒或四分之一秒,用来控制音调 TIMER1用来控制音普,,timer0用MODE2自动加载模式 *\/ include<reg52.h> sbit speaker=P2^3 ;sbit AA=P2^2 ; \/\/调时用 sbit BB=P2^1 ; \/\/调分用 sbit CC...

求一个以单片机为核心,组成一个电子时钟系统的程序
;*** 数码管电子时钟 ***;;*MCU: AT892051 ;;*MCU-crystal: 12M ;;*Version: 01 ;;*Last Updata: 2007-6-13 ;;*Author: zhaojun ;;*Description: ;;定时器T0、T1溢出周期为50MS,T0为秒计数用 ;;T1为调整时闪烁用 ;;P3.7为调整按钮,P1口为字符输出口,采用共阳显示管 ;;***;;; AT89C2051时...

设计电子时钟 要用AT89S51单片机的定时器实现,用4位数码管显示,用点的...
设计电子时钟 要用AT89S51单片机的定时器实现,用4位数码管显示,用点的闪烁表示秒,我需要电路原理图 80 时间可以通过按键修改2个或者3个或者4个按键都可以... 时间可以通过按键修改 2个或者3个或者4个按键都可以 展开  我来答 4个回答 #热议# 已婚女性就应该承担家里大部分家务吗?

单片机课程设计8位数码管电子钟at89c52代码怎么写?
设计旨在打造一个基于51单片机的多功能数字时钟闹钟,通过八位数码管进行显示,并具备多种功能。主要功能包括采用单片机内部定时器实现计时,使用八位数码管显示时分秒,实现时、分、秒的加减设置并伴有闪烁提示,设置闹钟并配置其响铃间隔与持续时间,以及手动消除闹钟。通过 Proteus 仿真软件,实现从硬件到...

采用定时器,设计制作一个时钟,用六位数码管显示时间,用三个按键可以调整...
用51单片机的定时器,设计一个时钟,用8位一体共阴数码管显示时间时分秒,用三个按键可以调整时间。可用proteus仿真实现,仿真图如下。

基于51单片机的数码管设计电子时钟,可以调时间的,怎么弄唉,大家帮帮...
说一下步骤吧:1、数码管驱动电路设计。一般用三极管如9013或者锁存器如74HC573来驱动,使其能够正常亮灭。2、使用动态扫描的方式让数码管能够显示你想要的数字,这个可以用中断来扫描也可以不用。3、使用实时时钟芯片如DS1302来获得你想要的时间数据。这种网上有很多源程序,你可以搜索看。你要学会几点:...

相似回答