找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開(kāi)始

搜索
查看: 12476|回復(fù): 11
打印 上一主題 下一主題
收起左側(cè)

51單片機(jī)做時(shí)鐘程序,怎么寫代碼讓 蜂鳴器整點(diǎn)報(bào)時(shí)?

  [復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:322150 發(fā)表于 2018-5-4 15:54 | 只看該作者 回帖獎(jiǎng)勵(lì) |倒序?yàn)g覽 |閱讀模式
求各位大神:
利用51單片機(jī)做時(shí)鐘程序,怎么寫代碼讓
蜂鳴器整點(diǎn)報(bào)時(shí)?
分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復(fù)

使用道具 舉報(bào)

沙發(fā)
ID:123289 發(fā)表于 2018-5-4 19:28 | 只看該作者
建議樓主改學(xué)CEO。
回復(fù)

使用道具 舉報(bào)

板凳
ID:303383 發(fā)表于 2018-5-4 20:13 | 只看該作者
提示: 作者被禁止或刪除 內(nèi)容自動(dòng)屏蔽
回復(fù)

使用道具 舉報(bào)

地板
ID:356445 發(fā)表于 2018-6-27 18:33 | 只看該作者
小貓貓愛(ài)吃魚(yú) 發(fā)表于 2018-5-4 20:13
你好!整點(diǎn)報(bào)時(shí),是語(yǔ)音報(bào)出幾點(diǎn)整嗎?具體要求可以加我QQ

你的QQ是多少?
回復(fù)

使用道具 舉報(bào)

5#
ID:360463 發(fā)表于 2018-6-27 21:04 | 只看該作者
怎么報(bào)時(shí),響一下嗎,在整點(diǎn)的時(shí)候放個(gè)標(biāo)志位置1,在函數(shù)里放個(gè)while判斷這個(gè)標(biāo)志位,到了時(shí)間進(jìn)去后標(biāo)志位清加上零蜂鳴響的代碼就可以了。
回復(fù)

使用道具 舉報(bào)

6#
ID:360656 發(fā)表于 2018-6-27 23:03 | 只看該作者
if (!sec && !min) { //整點(diǎn)報(bào)時(shí)
          for (i = 0; i < 200; i++) {
            SPK = 0; for (j = 0; j < 100; j++);
            SPK = 1; for (j = 0; j < 100; j++);
        } }spk是任意定義的端口當(dāng)分和秒等于0是就報(bào)時(shí)
回復(fù)

使用道具 舉報(bào)

7#
ID:360680 發(fā)表于 2018-6-27 23:44 | 只看該作者
#define uchar unsigned char //定義一下方便使用 #define uint  unsigned int #define ulong unsigned long #include <reg52.h>     //包括一個(gè)52標(biāo)準(zhǔn)內(nèi)核的頭文件 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種狀態(tài)// {     CLOCK,     SET_RING1,     SET_RING2,     MIAOBIAO_RUN, }STATE; STATE status; typedef struct       //定時(shí)時(shí)間的數(shù)據(jù)結(jié)構(gòu)// {     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; //#######定時(shí)器T0中斷服務(wù)程序########// 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;}   } //#######定時(shí)器T1中斷服務(wù)程序########// 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; } //##############數(shù)碼管顯示#####################// 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 定時(shí)編號(hào)// show_on(uchar id) //id:定時(shí)編號(hào)// {     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++); } /*************啟動(dòng)秒表***************/ void run_miaobiao() {     ms_10=0;     miaobiao_sec=0;     TH1=0xd8;    //標(biāo)準(zhǔn)是0xd8e4     TL1=0xf4; //    TR1=1;        //啟動(dòng)定時(shí)器1 } /*************顯示秒表***************/ void show_miaobiao() {     show(miaobiao_sec,ms_10); } /***********  檢測(cè)按鍵動(dòng)作函數(shù)  *************/ 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; } /***************************************** 各狀態(tài)下按鍵處理函數(shù) ******************************************/ void key_process_clock() // 處理時(shí)鐘狀態(tài)下的按鍵和顯示// {     switch(get_key())     {         case KEY_1:             status=SET_RING1;         ;//切換狀態(tài)             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:               //沒(méi)有按鍵操作//             show(hour,min);             break;     } } /****************設(shè)定時(shí)1或2狀態(tài)下的按鍵處理及顯示*****************/ void key_process_set_dingshi() {     switch(get_key())     {         case KEY_1:             if(status==SET_RING1)             {                 status=SET_RING2;         //切換設(shè)第二段定時(shí)狀態(tài)                 show_on_flag=1;                 show_on(2);             }             else if(status==SET_RING2)             {                 status=MIAOBIAO_RUN;         //切換到秒表運(yùn)行狀態(tài)                 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:       //沒(méi)有按鍵操作//             if(show_on_flag)                 show_on(status);             else                 show(dingshi_time[status-1].hour,dingshi_time[status-1].min);             break;     } }     /********秒表運(yùn)行狀態(tài)按鍵處理及顯示*********/ void key_process_miaobiao_run() {     switch(get_key())     {         case KEY_1:             TR1=0;             status=CLOCK;                 //回到時(shí)鐘顯示狀態(tài)             break;         case KEY_2:             TR1=!TR1;                    //定時(shí)器1暫停、繼續(xù)              break;         case KEY_3:             TR1=0;                        //秒表復(fù)位             miaobiao_sec=0;             ms_10=0;             break;         case NO_KEY:                    //無(wú)按鍵操作//             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) //程序循環(huán)            {          switch(status)          {              case CLOCK:                 key_process_clock();   // 處理時(shí)鐘狀態(tài)下的按鍵和顯示//                 break;                   case SET_RING1:              case SET_RING2:                 key_process_set_dingshi();    //處理設(shè)置定時(shí)狀態(tài)下的按鍵和顯示//                 break;                   case MIAOBIAO_RUN:                 key_process_miaobiao_run();    //處理秒表狀態(tài)下的按鍵和顯示//                 break;          }         if(             ((hour==dingshi_time[0].hour)        //定時(shí)響鈴//             &&(min==dingshi_time[0].min)             &&(sec<5))             ||             ((hour==dingshi_time[1].hour)        //定時(shí)響鈴//             &&(min==dingshi_time[1].min)             &&(sec<5))           )             sound=0;         else    sound=1;     } }
回復(fù)

使用道具 舉報(bào)

8#
ID:360680 發(fā)表于 2018-6-27 23:44 | 只看該作者
這個(gè)功能建議你用DS1302時(shí)鐘芯片實(shí)現(xiàn)!編程就容易多
回復(fù)

使用道具 舉報(bào)

9#
ID:213173 發(fā)表于 2018-6-28 09:19 | 只看該作者
//簡(jiǎn)單的整點(diǎn)30秒時(shí)長(zhǎng)報(bào)時(shí)
void Buzzer_nz()
{
        if((min==0)&&(sec<30))
                Buzzer=1;
        else Buzzer=0;
}
回復(fù)

使用道具 舉報(bào)

10#
ID:357395 發(fā)表于 2018-6-28 22:00 | 只看該作者
void Buzzer_nz()
{
        if((min==0)&&(sec<30))
                Buzzer=1;
        else Buzzer=0;
}
回復(fù)

使用道具 舉報(bào)

11#
ID:361466 發(fā)表于 2018-6-29 02:29 | 只看該作者
同時(shí)判斷分位和秒位全部為零即可,如果需要語(yǔ)音報(bào)數(shù)字首先要對(duì)語(yǔ)音功能進(jìn)行學(xué)習(xí)
回復(fù)

使用道具 舉報(bào)

12#
ID:357536 發(fā)表于 2018-7-1 13:35 | 只看該作者
小貓貓愛(ài)吃魚(yú) 發(fā)表于 2018-5-4 20:13
你好!整點(diǎn)報(bào)時(shí),是語(yǔ)音報(bào)出幾點(diǎn)整嗎?具體要求可以加我QQ

#include
#define uint unsigned int

sbit bb=P3^5;                  //位定義蜂鳴器接口
sbit led1=P0^0;       //位定義LED接口
unsigned int i=0;

void delay(uint z);       //延遲函數(shù)聲明

void main()
{
TMOD=0x01;                 //TMOD賦值,以確定T0和T1的工作方式      
TH0=(65536-50000)/256;   //計(jì)算初值,并將其寫入TH0、TL0或TH1、TL1
TL0=(65536-50000)%6;
EA=1;   //打開(kāi)總中斷
ET0=1;   //打開(kāi)定時(shí)器0中斷
TR0=1;   //啟動(dòng)定時(shí)器0
while(1)
{
if(i==20)   //定時(shí)器計(jì)數(shù)時(shí)間20*50MS=1S
{
i=0;               //清除標(biāo)志位
led1=0;
bb=0;
delay(500);
led1=1;
bb=1;
delay(500);
}
}
}

void exter0() interrupt 1       //定時(shí)器0中斷函數(shù)
{
TH0=(65536-50000)/256; //中斷函數(shù)中也需要賦定時(shí)器初值
TL0=(65536-50000)%6;
i++;                        //定時(shí)器每50MS就使i加一
}

void delay(uint z) //延遲函數(shù)
{
uint x,y;
for(x=z;x>0;x--)
for(y=20;y>0;y--);
}
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

手機(jī)版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表