闹钟声音间隔四短一长,用32单片机再怎么做出来?

作者&投稿:俎榕 (若有异议请与网页底部的电邮联系)
怎么用stm32做一个闹钟,需要什么知识~

STM32的编程,C语言,单片机,模拟电路,数字电路,元器件选型,PCB原理图绘制,PCB电路板绘制。差不多了

下面的程序就是用AT89C2051做的数字式时钟,数码管显示,具有闹钟功能,整点报时,几点蜂鸣器响几下,晚上九点到第二天早上六点整点不报时。给你参考一下吧。

#include
#include
#define uint unsigned int
#define uchar unsigned char

sbit sda=P3^1;
sbit scl=P3^0;
sbit key1=P1^7;
sbit key2=P1^6;
sbit key3=P1^5;
sbit kz=P3^5;
sbit bs=P3^4;
char shi=12,fen=12,ke1,mm,mi,nh,nf,mn,mms,baos,a;
bit ms,nt,b;
uchar code SEG8[]={ 0x50,0x5F,0x94,0x15,0x1B,
0x31,0x30,0x57,0x10,0x11,
0x40,0x4F,0x84,0x05,0x0B,
0x21,0x20,0x47,0x00,0x01,
0x21,0xa2,0x52,0xff};
//0-9,0.-9.;s.,f.,n暗
void delay1ms(uchar ms)
{
uchar i;
while(ms--)
{
for(i = 0; i< 250; i++)
{
_nop_();
_nop_();
_nop_();
_nop_();
}
}
}
void display(char numh,char numf)
{
uchar qian,bai,sh,ge;
if(ke1==1)
qian=20;
else if(ke1==2)
qian=21;
else if((ke1==3)||(ke1==4))
qian=22;
elseif(ke1==0)
qian=numh/10;
if((ke1==1)||(ke1==2))
bai=23;
else if(ke1==3)
bai=20;
else if(ke1==4)
bai=21;
elseif(ke1==0)
{
bai=numh%10;
if(ms)
bai=bai+10;
}
if((ke1==1)||(ke1==3))
{sh=numh/10;ge=numh%10;}
else if((ke1==2)||(ke1==4)||(ke1==0))
{sh=numf/10;ge=numf%10;}
P1=SEG8[qian];
P3_3=0;delay1ms(2);P3_3=1;
P1=SEG8[bai];
P3_7=0;delay1ms(2);P3_7=1;
P1=SEG8[sh];
P3_2=0;delay1ms(2);P3_2=1;
P1=SEG8[ge];
P3_0=0;delay1ms(2);P3_0=1;
}
///////////x24c02//////////////////
void delay24()
{ ;; }

void init24c02() //初始化
{
sda=1;
delay24();
scl=1;
delay24();
}

void start2() //开始信号
{
sda=1;
delay24();
scl=1;
delay24();
sda=0;
delay24();
}

void stop() //停止
{
sda=0;
delay24();
scl=1;
delay24();
sda=1;
delay24();
}

void respons() //应答
{
uchar i;
scl=1;
delay24();
while((sda==1)&&(i<250))i++;
scl=0;
delay24();
}

void write_byte(char date) // 写数据子函数
{
uchar i,temp;
temp=date;

for(i=0;i<8;i++)
{
temp=temp<<1;
scl=0;
delay24();
sda=CY;
delay24();
scl=1;
delay24();
}
scl=0;
delay24();
sda=1;
delay24();
}

uchar read_byte() // 读数据子函数
{
uchar i,k;
scl=0;
delay24();
sda=1;
delay24();
for(i=0;i<8;i++)
{
scl=1;
delay24();
k=(k<<1)|sda;
scl=0;
delay24();
}
return k;
}
///////写数据函数///////////////////
void write_add(uchar address,char date)
{
start2();
write_byte(0xa0);
respons();
write_byte(address);
respons();
write_byte(date);
respons();
stop();
}
char read_add(uchar address) //读数据函数
{
uchar date;
start2();
write_byte(0xa0);
respons();
write_byte(address);
respons();
start2();
write_byte(0xa1);
respons();
date=read_byte();
stop();
return date;
}

void keyf(char *con,char up,char don)
{
uint i;
for(i=0;i<800;i++)
{
if((ke1==1)||(ke1==2))
display(shi,fen);
else if((ke1==3)||(ke1==4))
display(nh,nf);
P1=0xff;
if(key1==0)
{
delay1ms(10);
if(key1==0)
{
ke1++;
if(ke1>=5)
ke1=0;
while(!key1);
break;
}
}
if(key2==0)
{
delay1ms(10);
if(key2==0)
{
i=0;
*con+=1;
if(*con>up)
*con=0;
while(!key2);
}
}

if(key3==0)
{
delay1ms(10);
if(key3==0)
{
i=0;
*con-=1;
if(*con<don)
*con=up;
while(!key3);
}
}

}
}
void key()
{
P1=0xff;
if(key1==0)
{
EA=0;
delay1ms(20);
if(key1==0)
{
ke1++;
if(ke1>=5)
ke1=0;
while(!key1);
}
if(ke1==1)
{
keyf(&shi,23,0);
}
if(ke1==2)
{
keyf(&fen,59,0);
}
if(ke1==3)
{
keyf(&nh,23,0);
}
if(ke1==4)
{
keyf(&nf,59,0);
}
P1=0xff;P3=0xff;
write_add(0x01,nh);
delay1ms(5);
write_add(0x03,nf);
ke1=0;
EA=1;
}

}
void Timer0Init(void)
{
TMOD |= 0x01;
TL0 = 0xB0;
TH0 = 0x3C;
TF0 = 0;
TR0 = 1;
EA=1;
ET0=1;
}

void main()
{
P1=0xff;
P3=0xff;
init24c02();
nh=read_add(0x01);
delay1ms(50);
nf=read_add(0x03);
delay1ms(50);
Timer0Init();
while(1)
{
key();
display(shi,fen);
}
}
void tim0 ()interrupt 1
{
TH0=0X3C;
TL0=0XB0;
if(++mms>=10)
{
mms=0;
ms=!ms;
}
if(++mm>=20)
{
mm=0;
if(++mi>=60)
{
mi=0;
if(++fen>=60)
{
fen=0;
if(++shi>=24)
shi=0;
}
}
}
if(fen==0)
{
if((shi>=7)&&(shi<=20))
{
if((baos==0)&&(b==0))
{
baos=shi;
baos=baos*2;
b=1;
}
if(++a==10)
{
a=0;
if(--baos!=0)
{
bs=!bs;
}
else
{
bs=1;
}
}
}
}
else
b=0;
if(nh==shi)
{
if(nf==fen)
{
if(nt==0)
{
P1=0xff;
if(++mn==10)
{
mn=0;
kz=!kz;
}
if(key3==0)
{
nt=1;
kz=1;
}
}
}
else
{
nt=0;
kz=1;
}
}
}

四短一长是同一个声音的单一频率,还是不同频率?
前者,用个定时器以输出中意的音频频率信号,再用个定时器或者延时例程去控制是否输出音频信号即可

响60MS,熄60MS,4组这样的,然后休息480MS,就形成了传统闹钟的声音。其实这个嘀嘀嘀嘀中间是有休息的,滴停 滴停 滴停 滴停 停停 停停 停停 停停 。前面4组每组120MS,单个60MS,后面4组共停480MS,如此循环就OK了。之前做过闹钟的声音所以分享一下。有源蜂鸣器简单些,无源要控制其频率。

需要重新设置

7$


为什么钟敲四下有三个间隔
便于识别和统计时间,避免混淆和误解。1、便于识别和统计时间:通过在整点报时时敲击一次,在两个短暂的间隔后再敲击两次,可以帮助人们更容易地识别整点的到来。2、避免混淆和误解:间隔可以避免敲击声之间产生混淆,设置三个间隔可以让整点报时声音更加清晰和可辨识,确保人们能够准确地捕捉时间信息。

电脑开机,一声长响,四声短响,但可以正常启动和使用,什么原因?
没见过一长四短的。。不过肯定是硬件故障。可以自己把打开机箱显卡,内存什么的拔掉。清理一下再插插试试。,金手指都用橡皮擦下 (吹干净。不要弄进去水或者其他的杂物)。主板电池拿出来,过会装上。开机看看。包括键盘。各个连接线。记得别弄错或者忘记插那里了。、一个一个的弄比较保险,估计是显卡...

电脑主机开机4短一长是什么问题?
我不知道你主板的BIOS是Award的还是AMI的,因此这里将两种情况都告诉你:1、对于Award的BIOS,一长四短警报音表示键盘控制器错误,请仔细键盘的插头有没有插好、键盘连线有没有断线,如果确认插头插接没问题、键盘连线没有断线,一般是键盘损坏,请换一个好的键盘试机。2、对于AMI的BIOS,一长四短警报...

电脑主板的警报声都代表什么,就是一短一长什么的
1 长 3 短 内存错误 更换内存 1 长 8 短 显卡测试错误 检查显示器数据线或者显卡是否插牢 Phoenix BIOS Phoenix BIOS 已经很少见了,在此不列表,仅供参考。1短 系统启动正常 1短1短1短 系统加电初始化失败 1短1短2短 主板错误 1短1短3短 CMOS或电池失效 1短1短4短 ROM BIOS校验错误 1...

初二物理第一章试题 声现象,人教版,和答案
4、在15℃的气温下,人对高墙喊话,能听清回声,人与墙之间的距离至少是 ( ) A.17米 B.大于17米 C.小于17米 D.无法确定 5.第一次测定声音在铸铁里的传播速度是在巴黎用下述的方法进行的:从铸铁管的一端敲一下钟,在管的另一端听到两次响声.第一次是由铸铁管传来的,管长931米;两次响声相隔2.5秒,如果...

我的电脑隔一段时间就会发出滴滴的声音 为什么
一短:系统正常启动。两短:CMOS设置错误,需重新设置。一长一短:内存或主板错误。一长两短:显示器或显卡错误。一长三短:键盘控制器错误。一长九短:主板BIOS的FLASH RAM或EPROM错误。2)AMI的BIOS设定为:一短:内存刷新故障。两短:内存ECC校验错误。三短:系统基本内存检查失败。四短:系统时钟...

电脑开机发出三短一长的响声,无法开机,主板已经更换,内存条已经更换,CPU...
不停地响(长声):内存条未插紧或损坏 不听地响:电源、显示器未和显卡连接好 重复短响:电源有问题 无声音无显示:电源有问题 AWI BIOS:1短:内存刷新失败。解决方法,更换内存条 2短:内存ECC效验错误。解决方法:进入CMOS设置,将ECC效验关闭 3短:系统基本内存(第一个64KB)检查失败 4短:...

电脑一开机就会嘀嘀响4下,且还显示不了是什么问题?
1长3短:键盘控制器错误。检查主板。4短:系统时钟出错。1长3短:内存错误。内存损坏,更换即可。1短1短2短:主板错误

电脑的电源报警声一长一短什么意思?跟救护车声音一样
一短:系统正常启动。两短:CMOS设置错误,需重新设置。一长一短:内存或主板错误。一长两短:显示器或显卡错误。一长三短:键盘控制器错误。一长九短:主板BIOS的FLASH RAM或EPROM错误。2)AMI的BIOS设定为:一短:内存刷新故障。两短:内存ECC校验错误。三短:系统基本内存检查失败。四短:系统时钟...

电脑开机响5声1长4短并且每次开机都要按F1
2. 二短声,内存奇偶校验错误。可以进入cmos设置,将内存parity奇偶校验选项关掉,即设置为disabled。不过一般来说,内存条有奇偶校验并且在cmos设置中打开奇偶校验,这对微机系统的稳定性是有好处的。 3. 三短声,系统基本内存(第1个64kb)检查失败。更换内存吧。 4. 四短声,系统时钟出错。维修或更...

栖霞市17555562961: 闹钟声音间隔四短一长,用32单片机再怎么做出来? -
夔面锌可: 四短一长是同一个声音的单一频率,还是不同频率?前者,用个定时器以输出中意的音频频率信号,再用个定时器或者延时例程去控制是否输出音频信号即可

栖霞市17555562961: 如何用单片机实现闹钟功能 -
夔面锌可: 如果要求精度不高的话就用单片机自带的定时计数器.将定时计数器设定50ms中断一次,中断20次就是一秒,60秒后分加一秒计数单元清零,分满60小时加一分清零,以后以此类推.定时就是将你要设定的时间与当前的时间依次比较,比较不等程序继续执行,比较相等开闹钟.

栖霞市17555562961: 单片机控制定时闹钟 -
夔面锌可: 单片机输出不同频率的信号,驱动蜂鸣器发出不同音.你设置的初值TH1=0xd8; TL1=0xef; 要改变的,7个音节的初值都是不同的.由于蜂鸣器电路太简单,做成后音质较差.

栖霞市17555562961: 用单片机加DS1302做一个时间.要求带闹钟.用LCD1602显示、、、求大神.个人因为没时间写了.又有点赶. -
夔面锌可: 主程序=include #include "ds1302.h"#include...

栖霞市17555562961: 用C语言编写AT89C51单片机程序,设计一个智能数字钟. -
夔面锌可: 基本要求:1.C语言程序要求是模块化设计.2.该闹钟基于AT89C51单片机及相关外围电路进行设计.3.该闹钟有6个数码管(共阳极),可分别显示时间(时、分、秒)、及定时时间(分、秒).4.该闹钟有4个按钮,S1是切换显示按键,该键按下时可分别实现切换正常走时显示、设定走时显示、设置定时时间,启动定时,回到正常状态等功能.S2是设定键,即该键按下,将分别选中需要设定的选项.S3键是加键,即按下去表示相应选项加1.S4键是减键,即按下去表示相应的选项减1.5.该闹钟可以定时时间到,LED将发出提示闪光,且持续30s.发挥要求:1.定时时间可被打断,即打断后恢复时继续计时.2.设置闹钟报警功能;3.能切换显示年月日等信息.

栖霞市17555562961: 如何拿单片机用C语言编程做一个闹钟? -
夔面锌可: 下面的程序就是用AT89C2051做的数字式时钟,数码管显示,具有闹钟功能,整点报时,几点蜂鸣器响几下,晚上九点到第二天早上六点整点不报时.给你参考一下吧.#include<AT89X051.h>#include<intrins.h>#define uint unsigned int#define...

栖霞市17555562961: 单片机电子时钟设计问题(包含时间、日历、闹铃、秒表多点定时、音乐提示音)跪求大神 -
夔面锌可: 1、采用单片机开发;搭建硬件电路,这个不难,网上有现成的资料;2、采用单片机定时器,定时中断,为了计时准确,必须选择晶振,要考虑温漂,则要选择温补晶振;3、根据功能需求,先编写相关的软件说明和软件流程图;4、编程,软件算法不会难,建议采用C语言编程,函数、公式有了即可完成;5、仿真调试,建议写完一个模块,即马上调试;6、音乐声,如果是简单的单音频输出,可以用单片机IO口或DA口直接输出,如果是比较复杂的音乐,则建议采用现成的音乐集成IC来做,然后根据通讯协议来控制音乐IC;7、串行通信可以采用普通的同步串行(IIC也行),其中1台作为主控,另1台作为从控.这个项目很简单哦,多动动脑筋就OK了.

栖霞市17555562961: 单片机的c语言 时钟函数带有闹钟功能,当我们调好闹钟以后,想设置响铃的时间,程序的思路 -
夔面锌可: 这个可以用中断实现 设置初始最小中断时间 比如 1分钟 在添加一个按钮中断 调节中断时间

栖霞市17555562961: 如何用单片机汇编语言,来实现多个时间的闹钟?如在07:30和12:00都响? -
夔面锌可: 当然可以实现啊 比如MIN表示分,HOR表示时,先判断时值是否满足设定值,再判断分值是否满足,两者同时满足时转向门铃输出程序;多个闹钟和单个闹钟的区别无非就是多加几个判断而已,其它都一样啊.

栖霞市17555562961: 我想用单片机做个闹钟,怎么选元器件呀,求指点下 -
夔面锌可: 1、采用单片机的最小系统,51系列的吧,程序多一些,好找2、显示,可以采用1602液晶,也可以是数码管3、1602的显示是2*16可以是32个字符,数码管显示是有限的4、闹铃采用蜂鸣器完成5、将硬件连接后,接着就是单片机的软件编写6、软件和硬件结合,完成你的功能

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 星空见康网