❶ 用单片机做一个电子时钟
这个很简单啊,两种思路:1,用单片机定时器来做,优点是外围电路简单,只需要一个单片机最小系统,和一个显示模块(1602液晶比较好);缺点是:定时不是很准,跑的时间长了会有误差,而且主要是程序,要写很多,不过程序不是很难。2,用时钟芯片,一般都用ds1302,还需要单片机最小系统和显示模块,优点是:定时准确,误差很小,在有备用电池的情况下,即使单片机掉电,也可以维持很长时间,程序相对简单。缺点是:外围电路比前者相对复杂一点。如果想做个实际的东西拿来用,建议使用第二种方法,如果是想锻炼自己的编程能力的话,选第一种吧。祝成功!
❷ 基于单片机的电子钟的工作原理
简单一点就用单片机加数码管。定时器实现秒,60秒进1分,60分进1小时,24小时归零,算法。
❸ 求用单片机c语言做一个电子时钟,实现调时、显示、整点报时等功能。
(1)用数字逻辑集成块实现;
(2)时间以24小时为一个周期,显示时、分、秒;
(3)计时过程具有报时功能,当时间到达整点前5秒进行蜂鸣报时;
(4)为了保证计时的稳定及准确须由晶体振荡器提供表针时间基准信号。
c51单片机 晶振为11.0592MHz
#include<reg52.h>
#define HOUR1 1
#define HOUR0 0
#define MIN1 2
#define MIN0 8
#define SEC1 2
#define SEC0 0
#define uint unsigned int
#define ulint unsigned long int
#define uchar unsigned char
sbit la=P2^6;
sbit wela=P2^7;
sbit beep=P2^3;
int i;
ulint
sharp,second,count=0,sec0=SEC0,sec1=SEC1,min0=MIN0,min1=MIN1,hour0=HOUR0,hour1=HOUR1;//秒计数全局变量
uchar code segment[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf};
uchar code time[]={
0x3f,0x06,0x5b,0x4f,
0x66,0x6d,0x7d,0x07,
0x7f,0x6f};
void delay(uint);//程序毫秒延时
void beeper(uchar);//开蜂鸣器毫秒
void init();//初始化函数
void display();//从数码管上显示
void counter();//计算进行过程中的时、分、秒值
void scan();//扫描键盘
void main()
{
init();
while(1)
{
scan();//扫描键盘看是否有键按下
for(i=6;i>0;i--)//动态扫描6位数码管
{
display();//显示时、分、秒
}
}
}
void init()
{
second=hour1*36000+hour0*3600+min1*600+min0*60+sec1*10+sec0;
TMOD=0x01;
TH0=(65536-46080)/256;
TL0=(65536-46080)%256;
EA=1;
ET0=1;
TR0=1;
}
void delay(uint z)//程序毫秒延时
{
uint x=0,y=0;
for(x=z;x>0;x--)
for(y=110;y>0;y--);
}
void timer0() interrupt 1
{
TH0=(65536-46080)/256;
TL0=(65536-46080)%256;
count++;
if(count==20)//判断是否到1秒
{
counter();//计算进行过程中的时、分、秒值
if(sharp!=hour0) beeper(1000);//判断小时的值是否改变,变则启动蜂鸣器
}
}
void beeper(uchar tt)
{
uchar t=tt;
count=0;
beep=0;//开蜂鸣器
delay(t);
beep=1;//关蜂鸣器
}
void display()
{
P0=0xff;//位消影(低电平选择位)
//送位选信号
wela=1;
P0=segment[i-1];
wela=0;
P0=0x00;//段消影(高电平选择段)
//送段选信号
la=1;
switch(i)
{
case 6 : P0=time[sec0]; break;
case 5 : P0=time[sec1]; break;
case 4 : P0=time[min0]; break;
case 3 : P0=time[min1]; break;
case 2 : P0=time[hour0]; break;
case 1 : P0=time[hour1]; break;
}
delay(1);
P0=0x00; //配合上面用于消隐
la=0;
}
void counter()
{
second++;
if(second==86400) second=0;
count=0;
sharp=hour0;//设置报时检测KEY
sec0=second%10;
sec1=(second%60-sec0)/10;
min0=((second%3600-sec1*10-sec0)/60)%10;
min1=((second%3600-sec1*10-sec0)/60-min0)/10;
hour0=(second%36000-min1*600-min0*60-sec1*10-sec0)/3600;
hour1=second/36000;
}
void scan()
{
}
❹ 51单片机设计一个电子钟,如何实现闹钟功能
用C语言If条件语句实现循环,当达到某一条件时给某一I/O端口传递信号,该I/O端口接蜂鸣器即可。电子技术中的计数器也可对此有帮助,设置60.60.24的程序,即可实现报时。
❺ 51单片机做数字电子钟
这么复杂的东西给这么少分 晕死了 你也太小气了吧,分多的话还可能帮你动动脑
❻ 51单片机做电子时钟
使用单片机的定时器中断可实现。例如定时器中断方式2,8位自动初值重装,初值设置为0,晶振为11.0592M的情况下,中断3600次为1秒钟..多做几个变量,比如秒、分、小时等...60秒时,分++,秒清零...60分时,小时++,分清零...外加一个显示或串口功能..就完成了一个简单的电子时钟
❼ 单片机电子钟原理图,帮我大概解释一下这个图的工作原理就可以了,谢谢。带图!5分
本电子钟采用PIC16C55单片机控制,适于温室的定时恒温或自来水的定时定压控制等。PIC16C55单片机工作电压为2.5~6.25V,功耗低、驱动能力强。本电子钟可以控制一路负载在24小时内的3次开/关;一个双限触发的定时输出口,既可接传统的功率保持型继电器,也可接脉冲继电器。本机用四位LED数码管扫描式显示,还有消隐(省电)工作方式,使用起来非常灵活、方便。
一、 电子钟工作原理
电子钟电路见图1。RB7口是定时指示端,在定时开期间输出高电平,驱动V1发光,该口也可经缓冲作定时输出口;RB6是双限触发控制的定时输出口,其工作方式是:在RB7高电平期间,若RB1为高电平,则RB6输出高电平;若RB0为高电平,RB6输出低电平;若RB1、RB0同为低电平,RB6保持原态; 同为高电平时,RB6输出低电平。RB5、RB4用于驱动脉冲继电器,RB6上升沿触发RB5输出高电平开脉冲;在RB6下降沿触发RB4时,RB4端输出高电平关脉冲,开/关脉冲的持续时间均为125ms。
图 1
RB3是消隐控制器,接高电平(即SK1闭合)时,显示屏及秒闪正常;否则,显示消隐。显示消隐时,时钟及各控制逻辑都正常运行,如忽略RB4至RB7各口的驱动电流,则在3V供电时,整机电流不足20μA,即两节5号电池可用数月!RB2选择数码管极性,RB2为低电平,使用共阴LED;RB2为高电平,则用共阳LED。数码管的极性是在上电初始化时,根据 RB2口状态确定的,工作过程中改变RB2的电平则不起作用。
本机设S1~S4四个按键,S1是功能选择键,S2是小时增量调整,S3是分钟增量,S4用于分钟减量调节,其使用方法为:
上电时,RB5至RB7均为低电平,RB4端送出一个关脉冲,使SK1闭合,整机正常显示、工作,RC7口送出秒闪脉冲,RC6~RC0送字段码。RA3~RA0分别为10时、时、10分、分位的位码输出。这时,按一下S2或S3(时增量/ 分增量键),可使RB7端置位或复位。
在正常走时期间,秒闪正常;在校对或设置定时时,秒停闪。例如:在正常走时期间,按一下S1键,秒闪停止,屏幕显示J-,表示可以校对时间。这时再按S2~S4中任一键,屏幕显示现在时间,但秒不闪,此刻可按S2~S4校对时钟。再次按S1,屏幕显示 1∪,表示可以设定第一次开时间,此时按S2~S4对时间进行查看及设置。继续按S1,系统显示1∩,表示可设置第一次关时间……依次进行。设置好系统及 3次开关时间后,整机回到正常显示状态,秒闪恢复。
如欲取消某次开/关定时,只需把该次的开与关时间设置成相同值即可。
笔者曾把该时钟用于定时定压供水控制系统,RB6端用于驱动继电器(也可用RB5与RB4两端驱动脉冲继电器),RB1端接水压(水位)的低限输入,RB0 端接高限输入,设置好定时,一个简易的定时定压自动供水系统即告完成。
二、 编程技巧
PIC16C55单片机程序存储器只有512字节,加上采用外接32768Hz晶体振荡方式,时钟速度较低,因此,统筹好系统的工作时序与人机界面之间的关系是软件设计成败的关键。本机编程采用如下方案:软件工作流程见附图2。
图 2
PIC16C55单片机的一个机器周期是4个时钟周期,不难算出,本系统中每秒有8192个机器周期。在编制软件时,先设定单片机内部定时计数器F1的计数方式为机器周期的64分频。这样,每当F1溢出时,系统递加2秒。平时,系统每128个机器周期内用RC口与RA口驱动扫描一次显示屏,可保证每秒内扫描64次显示屏,基本上无闪烁感。而 128个机器周期正是F1的第0位(为便于叙述以下简记为F1?0)每次下降沿的间隔时间,我们可以编一段程序,当F1?0的下降沿到来时,扫描一次显示屏,每当F1的低4位为全0时(125ms一次)使系统检测一次RB口与按键状态,并进行相关处理,部分相关程序如下:
WAIT BTFSC 1,0 ;等待F1?0的下降沿,编程时
GOTO WAIT ;要保证每次下降沿前到此
MOVFW 1
SKPNZ
GOTO CLOCK ;F1=0,满2秒,转时钟处理
ANDLW 0FH ;屏蔽F1高4位
SKPZ
GOTO DISPLAY;F1低4位不为0,转显示
MOVLW 0C0H ;满125mS,使RB口脉冲复位
ANDWF 6,1
MOVLW 0FH ;检测按键
TRIS 7
MOVFW 7
ANDLW 0FH ;保留按键数据
SKPZ
GOTO AN;有键值,转按键处理
DISPLAY …… ;显示扫描,定时管理RB口
CLOCK …… ;时钟,定时处理程序
AN …… ;按键管理程序
❽ 嵌入式单片机开发的“时钟”是如何实现的
一般有两种方法,通过定时器来作,另一种通过软件实现,还有一种常见的时间芯片方式
第一种,通过内部时钟或者外部时钟,一般使用外部晶振更准确。通过设置定时器,用IO引脚驱动数码管。
第二种,通过软件延时来,设计时分秒函数。由于代码在执行过程中产生延时,会产生比较大的误差。获得时钟显示在屏幕上就行了。
第三重,通单片机读取时间芯片的方式,比较多。时间准确,使用方便。网上有很多资料。
❾ 如何做一个单片机电子时钟
这个很简单啊,两种思路:1,用单片机定时器来做,优点是外围电路简单,只需要一个单片机最小系统,和一个显示模块(1602液晶比较好);缺点是:定时不是很准,跑的时间长了会有误差,而且主要是程序,要写很多,不过程序不是很难。2,用时钟芯片,一般都用DS1302,还需要单片机最小系统和显示模块,优点是:定时准确,误差很小,在有备用电池的情况下,即使单片机掉电,也可以维持很长时间,程序相对简单。缺点是:外围电路比前者相对复杂一点。如果想做个实际的东西拿来用,建议使用第二种方法,如果是想锻炼自己的编程能力的话,选第一种吧。祝成功!
❿ 单片机电子时钟详细流程图怎么画
利用实验平台上的4个LED数码管,设计带有闹铃功能的数字时钟。
1、 在4位数码管上显示当前时间,计时格式为“时时分分”
2、 由LED闪烁做秒显示
3、 利用按键可以对时间及闹钟进行设置,并可显示闹铃时间。当闹铃时间到蜂鸣器发出声响,按停止键可使闹铃声停止。