标题:
51单片机做时钟程序,怎么写代码让 蜂鸣器整点报时?
[打印本页]
作者:
麦克拉伦
时间:
2018-5-4 15:54
标题:
51单片机做时钟程序,怎么写代码让 蜂鸣器整点报时?
求各位大神:
利用51单片机做时钟程序,怎么写代码让
蜂鸣器整点报时?
作者:
yzwzfyz
时间:
2018-5-4 19:28
建议楼主改学CEO。
作者:
小猫猫爱吃鱼
时间:
2018-5-4 20:13
你好!整点报时,是语音报出几点整吗?具体要求可以加我QQ
作者:
胡HUI
时间:
2018-6-27 18:33
小猫猫爱吃鱼 发表于 2018-5-4 20:13
你好!整点报时,是语音报出几点整吗?具体要求可以加我QQ
你的QQ是多少?
作者:
mrjhl
时间:
2018-6-27 21:04
怎么报时,响一下吗,在整点的时候放个标志位置1,在函数里放个while判断这个标志位,到了时间进去后标志位清加上零蜂鸣响的代码就可以了。
作者:
3510
时间:
2018-6-27 23:03
if (!sec && !min) { //整点报时
for (i = 0; i < 200; i++) {
SPK = 0; for (j = 0; j < 100; j++);
SPK = 1; for (j = 0; j < 100; j++);
} }spk是任意定义的端口当分和秒等于0是就报时
作者:
abcd1318567790
时间:
2018-6-27 23:44
#define uchar unsigned char //定义一下方便使用 #define uint unsigned int #define ulong unsigned long #include <reg52.h> //包括一个52标准内核的头文件 uchar code zixing[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90}; uchar code ziwei[]={0x10,0x20,0x40,0x80}; uchar *h,*m; uchar hour=12,min=0,sec=0,h_ding,m_ding,count=0,ms_50,ms_10,miaobiao_sec; sbit dp=P0^7; sbit k1=P3^2; sbit k2=P3^3; sbit k3=P3^4; sbit sound=P2^3; sfr ZIXING=0x80; //p0口输出字形 sfr ZIWEI=0xa0; //P2口输出字位 typedef enum //枚举类型:4种状态// { CLOCK, SET_RING1, SET_RING2, MIAOBIAO_RUN, }STATE; STATE status; typedef struct //定时时间的数据结构// { uchar hour; uchar min; }DINGSHI_TIME; DINGSHI_TIME dingshi_time[2]; #define NO_KEY -1 //定义一下方便使用 #define KEY_1 1 #define KEY_2 2 #define KEY_3 3 bit show_on_flag; //#######定时器T0中断服务程序########// Timer0() interrupt 1 { TH0=0x3c;TL0=0xb4; //50ms ms_50++; if(ms_50==20) {sec++;ms_50=0;} if(sec==60) {sec=0;min++;} if(min==60) {min=0;hour++;} if(hour==24) {hour=0;} } //#######定时器T1中断服务程序########// Timer1() interrupt 3 { TH1=0xd8;TL1=0xf4; //10ms ms_10++; if(ms_10==100) { miaobiao_sec++; ms_10=0; } if(miaobiao_sec==60) miaobiao_sec=0; } //##############数码管显示#####################// show(uchar time_high,uchar time_low) { uchar m; uint n,k; k=time_high*1000/10+time_low; for(m=0;m<4;m++) { ZIXING=zixing[k%10]; if(ms_50<10) dp=0; ZIWEI=~ziwei[m]; for(n=0;n<500;n++); ZIXING=0xff; for(n=0;n<100;n++); k=k/10; } } //显示 on 定时编号// show_on(uchar id) //id:定时编号// { uchar m; uint n; for(m=0;m<2;m++) { ZIXING=zixing[id%10]; dp=0; ZIWEI=~ziwei[m]; for(n=0;n<500;n++); ZIXING=0xff; for(n=0;n<80;n++); id=id/10; } ZIXING=0xc8; //字母n// ZIWEI=~ziwei[2]; for(n=0;n<500;n++); ZIXING=0xff; for(n=0;n<200;n++); ZIXING=0xc0; //字母0// ZIWEI=~ziwei[3]; for(n=0;n<500;n++); ZIXING=0xff; for(n=0;n<200;n++); } /*************启动秒表***************/ void run_miaobiao() { ms_10=0; miaobiao_sec=0; TH1=0xd8; //标准是0xd8e4 TL1=0xf4; // TR1=1; //启动定时器1 } /*************显示秒表***************/ void show_miaobiao() { show(miaobiao_sec,ms_10); } /*********** 检测按键动作函数 *************/ int get_key() { uchar d; if(!k1) { for(d=0;d<50;d++); if(!k1) { while(!k1); return(KEY_1); } } if(!k2) { for(d=0;d<50;d++); if(!k2) { while(!k2); return(KEY_2); } } if(!k3) { for(d=0;d<50;d++); if(!k3) { while(!k3); return(KEY_3); } } else return NO_KEY; } /***************************************** 各状态下按键处理函数 ******************************************/ void key_process_clock() // 处理时钟状态下的按键和显示// { switch(get_key()) { case KEY_1: status=SET_RING1; ;//切换状态 show_on_flag=1; show_on(1); break; case KEY_2: hour++; if(hour==24) hour=0; show(hour,min); break; case KEY_3: min++; if(min==60) min=0; show(hour,min); break; case NO_KEY: //没有按键操作// show(hour,min); break; } } /****************设定时1或2状态下的按键处理及显示*****************/ void key_process_set_dingshi() { switch(get_key()) { case KEY_1: if(status==SET_RING1) { status=SET_RING2; //切换设第二段定时状态 show_on_flag=1; show_on(2); } else if(status==SET_RING2) { status=MIAOBIAO_RUN; //切换到秒表运行状态 run_miaobiao(); show_miaobiao(); } break; case KEY_2: dingshi_time[status-1].hour++; if(dingshi_time[status-1].hour==24) dingshi_time[status-1].hour=0; show(dingshi_time[status-1].hour,dingshi_time[status-1].min); show_on_flag=0; break; case KEY_3: dingshi_time[status-1].min++; if(dingshi_time[status-1].min==60) dingshi_time[status-1].min=0; show(dingshi_time[status-1].hour,dingshi_time[status-1].min); show_on_flag=0; break; case NO_KEY: //没有按键操作// if(show_on_flag) show_on(status); else show(dingshi_time[status-1].hour,dingshi_time[status-1].min); break; } } /********秒表运行状态按键处理及显示*********/ void key_process_miaobiao_run() { switch(get_key()) { case KEY_1: TR1=0; status=CLOCK; //回到时钟显示状态 break; case KEY_2: TR1=!TR1; //定时器1暂停、继续 break; case KEY_3: TR1=0; //秒表复位 miaobiao_sec=0; ms_10=0; break; case NO_KEY: //无按键操作// show_miaobiao(); break; } } //############主程序#######################// void main(void) { sound=1; TH0=0x3c; TL0=0xb4; TMOD=0x11; TR0=1; ET0=1; TR1=0; ET1=1; EA=1; status=CLOCK; dingshi_time[0].hour=0; dingshi_time[0].min=0; dingshi_time[1].hour=0; dingshi_time[1].min=0; while(1) //程序循环 { switch(status) { case CLOCK: key_process_clock(); // 处理时钟状态下的按键和显示// break; case SET_RING1: case SET_RING2: key_process_set_dingshi(); //处理设置定时状态下的按键和显示// break; case MIAOBIAO_RUN: key_process_miaobiao_run(); //处理秒表状态下的按键和显示// break; } if( ((hour==dingshi_time[0].hour) //定时响铃// &&(min==dingshi_time[0].min) &&(sec<5)) || ((hour==dingshi_time[1].hour) //定时响铃// &&(min==dingshi_time[1].min) &&(sec<5)) ) sound=0; else sound=1; } }
作者:
abcd1318567790
时间:
2018-6-27 23:44
这个功能建议你用DS1302时钟芯片实现!编程就容易多
作者:
wulin
时间:
2018-6-28 09:19
//简单的整点30秒时长报时
void Buzzer_nz()
{
if((min==0)&&(sec<30))
Buzzer=1;
else Buzzer=0;
}
作者:
zx8633
时间:
2018-6-28 22:00
void Buzzer_nz()
{
if((min==0)&&(sec<30))
Buzzer=1;
else Buzzer=0;
}
作者:
dcm51
时间:
2018-6-29 02:29
同时判断分位和秒位全部为零即可,如果需要语音报数字首先要对语音功能进行学习
作者:
我的宝宝
时间:
2018-7-1 13:35
小猫猫爱吃鱼 发表于 2018-5-4 20:13
你好!整点报时,是语音报出几点整吗?具体要求可以加我QQ
#include
#define uint unsigned int
sbit bb=P3^5; //位定义蜂鸣器接口
sbit led1=P0^0; //位定义LED接口
unsigned int i=0;
void delay(uint z); //延迟函数声明
void main()
{
TMOD=0x01; //TMOD赋值,以确定T0和T1的工作方式
TH0=(65536-50000)/256; //计算初值,并将其写入TH0、TL0或TH1、TL1
TL0=(65536-50000)%6;
EA=1; //打开总中断
ET0=1; //打开定时器0中断
TR0=1; //启动定时器0
while(1)
{
if(i==20) //定时器计数时间20*50MS=1S
{
i=0; //清除标志位
led1=0;
bb=0;
delay(500);
led1=1;
bb=1;
delay(500);
}
}
}
void exter0() interrupt 1 //定时器0中断函数
{
TH0=(65536-50000)/256; //中断函数中也需要赋定时器初值
TL0=(65536-50000)%6;
i++; //定时器每50MS就使i加一
}
void delay(uint z) //延迟函数
{
uint x,y;
for(x=z;x>0;x--)
for(y=20;y>0;y--);
}
欢迎光临 (http://www.51hei.com/bbs/)
Powered by Discuz! X3.1