久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 12429|回復: 11
收起左側

51單片機做時鐘程序,怎么寫代碼讓 蜂鳴器整點報時?

  [復制鏈接]
ID:322150 發表于 2018-5-4 15:54 | 顯示全部樓層 |閱讀模式
求各位大神:
利用51單片機做時鐘程序,怎么寫代碼讓
蜂鳴器整點報時?
回復

使用道具 舉報

ID:123289 發表于 2018-5-4 19:28 | 顯示全部樓層
建議樓主改學CEO。
回復

使用道具 舉報

ID:303383 發表于 2018-5-4 20:13 | 顯示全部樓層
提示: 作者被禁止或刪除 內容自動屏蔽
回復

使用道具 舉報

ID:356445 發表于 2018-6-27 18:33 | 顯示全部樓層
小貓貓愛吃魚 發表于 2018-5-4 20:13
你好!整點報時,是語音報出幾點整嗎?具體要求可以加我QQ

你的QQ是多少?
回復

使用道具 舉報

ID:360463 發表于 2018-6-27 21:04 | 顯示全部樓層
怎么報時,響一下嗎,在整點的時候放個標志位置1,在函數里放個while判斷這個標志位,到了時間進去后標志位清加上零蜂鳴響的代碼就可以了。
回復

使用道具 舉報

ID:360656 發表于 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是就報時
回復

使用道具 舉報

ID:360680 發表于 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;     } }
回復

使用道具 舉報

ID:360680 發表于 2018-6-27 23:44 | 顯示全部樓層
這個功能建議你用DS1302時鐘芯片實現!編程就容易多
回復

使用道具 舉報

ID:213173 發表于 2018-6-28 09:19 | 顯示全部樓層
//簡單的整點30秒時長報時
void Buzzer_nz()
{
        if((min==0)&&(sec<30))
                Buzzer=1;
        else Buzzer=0;
}
回復

使用道具 舉報

ID:357395 發表于 2018-6-28 22:00 | 顯示全部樓層
void Buzzer_nz()
{
        if((min==0)&&(sec<30))
                Buzzer=1;
        else Buzzer=0;
}
回復

使用道具 舉報

ID:361466 發表于 2018-6-29 02:29 | 顯示全部樓層
同時判斷分位和秒位全部為零即可,如果需要語音報數字首先要對語音功能進行學習
回復

使用道具 舉報

ID:357536 發表于 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--);
}
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 久久国产美女视频 | 成人在线观看欧美 | 91在线视频观看 | 中文字幕 在线观看 | 91精品国产乱码久久久久久 | 免费在线观看一区二区三区 | 日韩视频在线播放 | 日韩欧美成人精品 | 国产成人免费网站 | 毛片久久久 | 久久99国产精品久久99果冻传媒 | 成人福利网站 | 国产福利在线 | 日韩电影一区 | 国产在线拍偷自揄拍视频 | 国产91精品在线 | 国产日屁 | 草久在线| 欧美一级艳情片免费观看 | 秋霞a级毛片在线看 | 中文字幕99| www.888www看片| 久久久久国产成人精品亚洲午夜 | 久久精品99 | 国产欧美在线一区二区 | 国产免费拔擦拔擦8x高清 | 91精品国产日韩91久久久久久 | 国产99视频精品免费播放照片 | 天天想天天干 | 一区二区三区四区在线视频 | 亚洲视频中文字幕 | 久久国产高清 | 亚洲成人三级 | 国产毛片久久久久久久久春天 | 一区二区三区中文字幕 | 精品国产视频在线观看 | 国产1区2区3区 | 97色综合 | 欧美 中文字幕 | 成人二区| 天天操夜夜艹 |