标题: 蜂鸣器要加在单片机程序的哪里? [打印本页]

作者: 1269210768    时间: 2020-6-23 08:50
标题: 蜂鸣器要加在单片机程序的哪里?
本帖最后由 1269210768 于 2020-6-26 20:59 编辑

当时钟走到整点时,蜂鸣器鸣响一分钟。按“E” 键,系统进入闹钟设定状态,数码管显示屏不再显示当前时间,而显示闹钟设定值,最初为00.00.00AL,然后根据“B”“C”“D”键来设定闹钟的秒,分,时。设定完毕,再次按“E”键,系统回到时钟走时状态,继续走时。其中AL代表闹钟状态alarm,且在闹钟设定时,后台的时钟继续走时。
当时钟时间与闹钟时间一致时,蜂鸣器鸣响一分钟。蜂鸣器播放音乐做闹钟铃声。



我的程序在下面,这个蜂鸣器的程序应该怎么编程,可以教一下我这个要怎么编辑吗?谢谢
#include<regx51.h>
#define uchar unsigned char
#define uint unsigned int
#define TIME=1200
sbit K1=P1^0;
sbit K2=P1^1;
sbit K3=P1^2;
sbit K4=P1^3;
sbit K5=P1^4;
unsigned int cnt=0;
unsigned char i=0;
unsigned long sec=0;
unsigned char second = 0;
unsigned char minute = 0;
unsigned char hour = 0;
unsigned char code segment_code[10] = {0x3f, 0x06, 0x5b, 0x4f,0x66, 0x6d, 0x7d, 0x07,0x7f, 0x6f};
unsigned char digital_tube[8]={0x3f,0x3f,0x3f,0x3f,0x3f,0x39,0x38};
void ScanLed()
{
        static unsigned char display_bit = 0;
        switch (display_bit)
        {
        case 0:
                P2=0xfe;
                break;
        case 1:
                P2=0xfd;
                break;
        case 2:
                P2=0xfb;
                break;
        case 3:
                P2=0xf7;
                break;
        case 4:
                P2=0xef;
                break;
        case 5:
                P2=0xdf;
                break;
        case 6:
                P2=0xbf;
                break;
        case 7:
                P2=0x7f;
                break;
        default:
                break;
}
        P0=digital_tube[display_bit];
                display_bit++;
        if (display_bit == 8)
                display_bit = 0;
}
void main()
{
        TMOD = 0x01;
    TH0 = 64536 / 256;
    TL0 = 64536 % 256;
    EA = 1;
    ET0 = 1;
    TR0 = 1;
        while (1)
                ;
}
void delay(unsigned int xms)
{
        unsigned int i,j;
        for(i=xms;i>0;i--)
                for(j=100;j>0;j--);
}
void Timer0() interrupt 1
{
        static int index = 0;
        TH0 = 64536 / 256;
   TL0 = 64536 % 256;
        index++;
        ScanLed();
        if (index == 1000)
        {
                index = 0;
                second++;
        }
        if (second == 60)
        {
                second = 0;
                minute++;
        }
        if (minute == 60)
        {
                minute = 0;
                hour++;
        }
        if (hour == 24)
        {
                hour = 0;
        }
        if(K4==0)
    {
  delay(10);
   if(K4==0)
{
hour++;
if(hour==24)        hour=0;
}
  while(!K4);
}
if(K3==0)
   {
  delay(10);
  if(K3==0)
{
  minute++;
  if(minute==60)        minute=0;
   }
while(!K3);
  }
if(K2==0)
{
delay(10);
if(K2==0)
   {
second++;
if(second==24)       second=0;
}
while(!K2);
}
if(K1==0)
     {
delay(10);
if(K1==0)
      {
hour=0;
minute=0;
second=0;
}
while(!K1);
}
digital_tube[0] = segment_code[hour / 10];
digital_tube[1] = segment_code[hour % 10]+0x80;
digital_tube[2] = segment_code[minute / 10];
digital_tube[3] = segment_code[minute % 10]+0x80;
digital_tube[4] = segment_code[second / 10];
digital_tube[5] = segment_code[second % 10]+0x80;
digital_tube[6] = 0x39;
digital_tube[7] = 0x38;        
}


作者: man1234567    时间: 2020-6-23 15:26
加在哪里都无所谓,只要闹钟程序触发后能调用到就可以。
作者: WychmBHA    时间: 2020-6-25 04:04
按照程序的安排来看,这个不是必要的操作,所以加在哪都可以
作者: xxpp2011    时间: 2020-6-25 12:43
要求是当时钟时间与闹钟时间一致时,蜂鸣器鸣响一分钟。
那就每秒比对一次时间,到点就控制蜂鸣器响60s就好了。
作者: ergeda    时间: 2020-6-25 13:48
当蜂鸣器需要调用时可以响应就行,自己可以找个位置加上,仿真调试实验一下!
作者: 跟爱的感觉走    时间: 2020-9-7 08:28
按照程序的安排来看,这个不是必要的操作,所以加在哪都可以
作者: 权威人物    时间: 2020-9-7 09:47
你这个程序放在主循环即可,能触发就行影响不大。养成良好的编程习惯,定时器尽量不要放代码,尽量将执行程序放在主循环,
作者: 梁廷明    时间: 2020-9-7 11:57
制作函数模块,用的时候可以调用
作者: 图锐工程    时间: 2020-9-7 13:31
制作蜂鸣器函数模块,需要使用的时候可以直接调用就行了
作者: TTQ001    时间: 2020-9-8 08:33
它应该在调用它的main函数中。
作者: qweneyu    时间: 2020-9-9 08:13
建议尝试采用时间片轮询的方式写整个程序的架构,可以让你对单片机的运转方式更加了解
作者: 暖西夏    时间: 2020-9-16 15:25
蜂鸣器的代码加到那都可以,看心情
作者: lbc8862ec    时间: 2020-9-17 09:18
如果是蜂鸣器检测时间的程序的话可以放在小时计数之后。影响不大
作者: lbc8862ec    时间: 2020-9-17 09:20
放在主函数中小时计时的后面,我习惯这么做
作者: gf.shao    时间: 2020-9-17 10:55
在main里面加,到时相应位置1




欢迎光临 (http://www.51hei.com/bbs/) Powered by Discuz! X3.1