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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 15965|回復: 31
收起左側

ds3231時鐘鬧鐘不工作

  [復制鏈接]
ID:86421 發表于 2015-10-13 18:48 | 顯示全部樓層 |閱讀模式
做了一個由ds3231、1602顯示、51單片機的時鐘,從這個網上一個高手那下載的程序。安裝好后,時間顯示、時間調整、各種設置都好用,但鬧鐘到時間不鬧,請那位高手指點。在些感謝了!!!
回復

使用道具 舉報

ID:1 發表于 2015-10-13 18:55 來自手機 | 顯示全部樓層
把你的程序發出來看一下有什么問題
回復

使用道具 舉報

ID:86421 發表于 2015-10-13 19:03 | 顯示全部樓層
不好意思,那程序在電腦里,我還不會發。不過在這個論壇上有好多,我看了一下,都有一樣的。http://www.zg4o1577.cn/bbs/dpj-32645-1.html
回復

使用道具 舉報

ID:86421 發表于 2015-10-13 21:57 | 顯示全部樓層
void main()
{
Delay5Ms();
Delay5Ms();
Timer0Init(); //開啟定時器0中斷
Timer1Init(); //開啟定時器1中斷
Alarm_Int0_Init(); //開啟外部中斷0
while(!F_500ms) ; //啟動等待,等LCM講入工作狀態
   Beep(1); //開機提示音
Write_18B20();
    InitDS3231(); //初始化DS3231
   autoweek(); //開機自動星期轉換
LCMInit(); //LCM初始化
while(1)
{
  if(F_100ms&&SetFlag==0)
  {
   Disp_Time();
   F_100ms=0;F_100ms_b=0;
  }
  if(Al_Flag==1 && aa==0) Beep(2);!!![這是MAIN。C程序的一部分,我不知道這個Al_Flag==1是什么地方來的,問題可能就在這個位置上]
  if(Al_Flag==1 && aa==1) Play_Music(MusicTwo,5);
  if((min-alarmmin)==2) Al_Flag=0; //鬧鈴響2分鐘,停止鬧鈴
  Scan_Key();
  KeyProcess();
  if(Disp_b>=20) SetFlag=0;//10s沒有按下按鍵,則返回時間顯示
}

}

void Alarm_Int0() interrupt 0
{
Al_Flag=1; //鬧鈴標志位置位
alarmmin=min; //初始化鬧鈴時間
I2CWrite(DS3231_STATUS,0x00); //清DS3231內部鬧鐘標志位
//Beep2();
}
回復

使用道具 舉報

ID:86421 發表于 2015-10-13 22:01 | 顯示全部樓層
以下是DS3231.C的部分文件,不知道與上面的這個有什么關聯
void InitDS3231()
{
        SCL=1;
        delayus(5);
        SDA=1;
        delayus(5);
        I2CWrite(DS3231_AL1DAY,0x81);        //A1M4置位,時分秒匹配時鬧鐘響應
        I2CWrite(DS3231_AL2DAY,0x81);        //A2M4置位,時分匹配時鬧鐘響應
        I2CWrite(DS3231_CONTROL,0x04);        //中斷允許,鬧鐘1和2關閉
        I2CWrite(DS3231_STATUS,0x00);        //32KHZ輸出禁止,鬧鐘標志位清零
        //SetTime(11,1,14,8,10,0);
}
回復

使用道具 舉報

ID:86421 發表于 2015-10-21 16:46 | 顯示全部樓層
經過不斷的調試,鬧鈴二響了,可鬧鈴一還是不行,真不知道是什么原因,整的頭疼。
回復

使用道具 舉報

ID:79544 發表于 2015-10-22 08:50 | 顯示全部樓層
應該沒有調用鬧鈴2的函數,你再好好找找。我的都好用,就是紅外不好用,也在折騰。
回復

使用道具 舉報

ID:86421 發表于 2015-10-23 20:34 | 顯示全部樓層
這個程序中沒有紅外控制。鬧鐘是兩個的,但鬧鐘一現在還是不好用。
回復

使用道具 舉報

ID:86421 發表于 2015-10-23 20:39 | 顯示全部樓層
  1. #include "main.h"

  2. xdata uchar year,month,date,day,hour,min,sec,DTemp=0;
  3. xdata uchar al1_min,al1_hour,al1_day,al2_min,al2_hour,al2_day;
  4. bit ack;

  5. uchar BCD2HEX(uchar val)   //BCD轉換為Byte
  6. {
  7. uchar i;
  8.     i= val&0x0f;
  9.     val >>= 4;
  10.     val &= 0x0f;
  11.     val *= 10;
  12.     i += val;
  13.    
  14.     return i;
  15. }

  16. uchar B_BCD(uchar val)//B碼轉換為BCD碼
  17. {
  18. uchar i,j,k;

  19.   i=val/10;
  20.   j=val%10;
  21.   k=j+(i<<4);
  22.   return k;
  23. }

  24. void delayus(uchar i)
  25. {
  26.    while(--i) ;
  27. }
  28. /************************START***************************/
  29. void Start()
  30. {
  31.     SDA=1;                  //發送起始條件的數據信號
  32.     delayus(1);
  33.     SCL=1;
  34.     delayus(5);             //起始條件建立時間大于4.7us,延時
  35.    
  36.     SDA=0;                  //發送起始信號
  37.     delayus(5);             // 起始條件鎖定時間大于4μs
  38.       
  39.     SCL=0;                  //鉗住I2C總線,準備發送或接收數據
  40.     delayus(2);
  41. }
  42. /********************************************************/
  43. /************************STOP****************************/
  44. void Stop()
  45. {
  46.     SDA=0;                  //發送結束條件的數據信號
  47.     delayus(1);             //發送結束條件的時鐘信號
  48.     SCL=1;                  //結束條件建立時間大于4us
  49.     delayus(5);
  50.    
  51.     SDA=1;                  //發送I2C總線結束信號
  52.     delayus(4);
  53. }
  54. /********************************************************/
  55. /*******************************************************************
  56.                   字節數據發送函數               
  57. 函數原型:     void   SendByte(uchar Dat);
  58. 功能:      將數據c發送出去,可以是地址,也可以是數據,發完后等待應答,并對
  59.            此狀態位進行操作.(不應答或非應答都使ack=0)
  60.            ack=1        發送數據正常,
  61.            ack=0        被控器無應答或損壞。
  62. ********************************************************************/
  63. void SendByte(uchar Dat)
  64. {
  65. uchar BitCnt;
  66.    
  67.     for(BitCnt=0;BitCnt<8;BitCnt++)         //要傳送的數據長度為8位
  68.     {
  69.         if((Dat<<BitCnt)&0x80)
  70.             SDA=1;                          //判斷發送位
  71.         else
  72.             SDA=0;               
  73.           delayus(1);
  74.           SCL=1;                            //置時鐘線為高,通知被控器開始接收數據位
  75.           delayus(5);                       //保證時鐘高電平周期大于4μs   
  76.           SCL=0;
  77.     }
  78.    
  79.     delayus(2);
  80.     SDA=1;                                  //8位發送完后釋放數據線,準備接收應答位
  81.     delayus(2);  
  82.     SCL=1;
  83.     delayus(3);
  84.     if(SDA==1)
  85.         ack=0;   
  86.     else
  87.         ack=1;                              //判斷是否接收到應答信號
  88.     SCL=0;
  89.     delayus(2);
  90. }
  91. /********************************************************/
  92. /*******************************************************************
  93.                   字節數據接收函數               
  94. 函數原型:     uchar   RcvByte();
  95. 功能:      用來接收從器件傳來的數據,并判斷總線錯誤(不發應答信號),
  96.            發完后請用應答函數應答從機。  
  97. ********************************************************************/
  98. uchar RcvByte()
  99. {
  100. uchar retc;
  101. uchar BitCnt;

  102.    retc=0;
  103.    SDA=1;                           //置數據線為輸入方式
  104.    for(BitCnt=0;BitCnt<8;BitCnt++)
  105.    {
  106.         delayus(1);  
  107.         SCL=0;                      //置時鐘線為低,準備接收數據位
  108.       
  109.         delayus(5);                 //時鐘低電平周期大于4.7μs
  110.       
  111.         SCL=1;                      //置時鐘線為高使數據線上數據有效
  112.         delayus(3);
  113.         retc=retc<<1;
  114.         if(SDA==1)
  115.             retc=retc+1;            //讀數據位,接收的數據位放入retc中
  116.         delayus(2);
  117.    }
  118.    SCL=0;
  119.    delayus(2);
  120.    return(retc);
  121. }
  122. /********************************************************************
  123.                       應答子函數
  124. 函數原型:   void I2CACK(bit a);
  125. 功能:       主控器進行應答信號(可以是應答或非應答信號,由位參數a決定)
  126. ********************************************************************/
  127. void I2CACK(bit a)
  128. {

  129.     if(a==0)
  130.         SDA=0;              //在此發出應答或非應答信號
  131.     else
  132.         SDA=1;
  133.     delayus(3);     
  134.     SCL=1;
  135.    
  136.     delayus(5);             //時鐘低電平周期大于4μs
  137.    
  138.     SCL=0;                  //清時鐘線,鉗住I2C總線以便繼續接收
  139.     delayus(2);   
  140. }
  141. /****************************************************/
  142. /***********將一個字節寫入DS3231指定的地址***********/
  143. uchar I2CWrite(uchar addr,uchar bytedata)
  144. {
  145.         Start();
  146.     SendByte(ADDRTC);
  147.     if (ack == 0)
  148.         return 0;
  149.    
  150.     SendByte(addr);   
  151.     if (ack == 0)
  152.         return 0;
  153.    
  154.     SendByte(bytedata);
  155.     if (ack == 0)
  156.         return 0;
  157.    
  158.     Stop();
  159.     delayus(10);      
  160.     return 1;
  161. }
  162. /****************************************************/
  163. /************從DS3231當前地址讀一個字節************/
  164. uchar I2CRead()
  165. {
  166. uchar read_data;

  167.     Start();
  168.     SendByte(ADDRTC+1);
  169.     if(ack==0)
  170.     {
  171.                 DisplayChar(11,1,'t');
  172.                 return(0);
  173.            }       
  174.     read_data = RcvByte();
  175.     I2CACK(1);
  176.     Stop();
  177.     return read_data;
  178. }

  179. /****************************************************/
  180. /************從DS3231指定地址讀一個字節************/
  181. uchar I2CReadAdd(uchar addr)
  182. {
  183.     Start();
  184.     SendByte(ADDRTC);
  185.     if(ack==0)
  186.     {
  187.                 DisplayChar(12,1,'x');
  188.                 return(0);
  189.            }       
  190.     SendByte(addr);
  191.     if(ack==0)
  192.     {
  193.                 DisplayChar(13,1,'y');
  194.                 return(0);
  195.            }       
  196.     return(I2CRead());
  197. }
  198. /***************************************************/
  199. /*********************讀取時間**********************/
  200. void Readtime()
  201. {
  202. uchar temp;
  203.   
  204.   temp=I2CReadAdd(DS3231_SEC);//秒
  205.   sec=BCD2HEX(temp);
  206.   temp=I2CReadAdd(DS3231_MIN);//分
  207.   min=BCD2HEX(temp);
  208.   temp=I2CReadAdd(DS3231_HOUR);  //時
  209.   //temp&=0x3F;
  210.   hour=BCD2HEX(temp);
  211.   day=I2CReadAdd(DS3231_DAY);//星期
  212.   temp=I2CReadAdd(DS3231_DATE);  //日
  213.   date=BCD2HEX(temp);
  214.   temp=I2CReadAdd(DS3231_MONTH); //月
  215.   month=BCD2HEX(temp);
  216.   temp=I2CReadAdd(DS3231_YEAR);  //年
  217.   year=BCD2HEX(temp);
  218.   Dtemp=I2CReadAdd(DS3231_TEMP_H);//溫度
  219. }
  220. /***************************************************/
  221. /*******************讀取鬧鈴時間********************/
  222. void ReadAlarm()
  223. {
  224. uchar temp;
  225.   
  226.   temp=I2CReadAdd(DS3231_AL1MIN);//分
  227.   al1_min=BCD2HEX(temp);
  228.   temp=I2CReadAdd(DS3231_AL1HOUR);  //時
  229.   al1_hour=BCD2HEX(temp);
  230.   temp=I2CReadAdd(DS3231_AL1DAY);  //星期or日
  231.   al1_day=BCD2HEX(temp);
  232.   temp=I2CReadAdd(DS3231_AL2MIN);//分
  233.   al2_min=BCD2HEX(temp);
  234.   temp=I2CReadAdd(DS3231_AL2HOUR);  //時
  235.   al2_hour=BCD2HEX(temp);
  236.   temp=I2CReadAdd(DS3231_AL2DAY);  //星期or日
  237.   al2_day=BCD2HEX(temp);
  238. }
  239. /***************************************************/
  240. /****************修改時間***************************/
  241. /*void SetTime(uchar yea,uchar mon,uchar da,uchar hou,uchar min,uchar sec)
  242. {
  243. uchar temp=0;
  244.   
  245.   temp=B_BCD(sec);
  246.   I2CWrite(0x00,temp);//修改秒
  247.   temp=B_BCD(min);
  248.   I2CWrite(0x01,temp);//修改分
  249.   temp=B_BCD(hou);
  250.   I2CWrite(0x02,temp);//修改時
  251.   temp=B_BCD(da);
  252.   I2CWrite(0x04,temp);//修改日
  253.   temp=B_BCD(mon);
  254.   I2CWrite(0x05,temp);//修改月
  255.   temp=B_BCD(yea);
  256.   I2CWrite(0x06,temp);//修改年
  257. }*/

  258. bit runnian()//閏年判斷
  259. {
  260.         if((year%4==0&&year%100!=0)||(year%100==0&&year%400==0))
  261.         {
  262.                 return 1;
  263.         }
  264.         else
  265.         {
  266.                 return 0;
  267.         }


  268. }

  269. void autoweek()
  270. {
  271.         Readtime();
  272.         if( month == 1 || month == 2 )  
  273.     {
  274.         month += 12;
  275.         if( year> 0 )
  276.             year--;
  277.         else
  278.             year = 4;
  279.     }
  280.         day = (1+(( date + 2*month + 3*(month+1)/5 + year + year/4 ) %7));
  281.         I2CWrite(DS3231_DAY,day);
  282. }

  283. void InitDS3231()
  284. {
  285.         SCL=1;
  286.         delayus(5);
  287.         SDA=1;
  288.         delayus(5);
  289.         I2CWrite(DS3231_AL1DAY,0x81);        //A1M4置位,時分秒匹配時鬧鐘響應
  290.         I2CWrite(DS3231_AL2DAY,0x81);        //A2M4置位,時分匹配時鬧鐘響應
  291.         I2CWrite(DS3231_CONTROL,0x04);        //中斷允許,鬧鐘1和2關閉
  292.         I2CWrite(DS3231_STATUS,0x00);        //32KHZ輸出禁止,鬧鐘標志位清零
  293.         //SetTime(11,1,14,8,10,0);
  294. }

  295. /* -------- read temperature -------- */
  296. /*void    read_temp()
  297. {
  298. int     itemp;
  299. float   ftemp;

  300.         do
  301.         {
  302.                 itemp=I2CReadAdd(0x0e);
  303.         }       while(itemp & 0x20);            // wait until CNVT bit goes inactive

  304.         Start();
  305.         SendByte(ADDRTC);
  306.         SendByte(0x11);                 //address of temperature MSB
  307.         Start();
  308.         SendByte(ADDRTC + 1);           //send the device address for read
  309.         itemp = ( (int) RcvByte() << 5 );
  310.                 I2CACK(0);
  311.         itemp += ( RcvByte() >> 3);
  312.                 I2CACK(1);
  313.         Stop();
  314.         if(itemp & 0x1000) {itemp += 0xe000;}        //if sign bit set, make 16 bit 2's comp

  315.         ftemp = 0.03125 * (float) itemp;        // convert to degrees C
  316.         // ftemp = ftemp * 9 / 5 + 32;  // skip this if you don't want degrees F
  317.                 Dtemp  = (uchar) ftemp;
  318. }*/
復制代碼
回復

使用道具 舉報

ID:86421 發表于 2015-10-23 20:40 | 顯示全部樓層
上面是DS3231。C程序
回復

使用道具 舉報

ID:86421 發表于 2015-10-23 20:42 | 顯示全部樓層
不知道是不是出在303、304行。真的整不出來了。哪位老師幫著看看。
回復

使用道具 舉報

ID:86421 發表于 2015-10-23 20:57 | 顯示全部樓層
東東做出來了,放在一個小盒子里,挺好玩的。但原程序上是用三個按鍵控制的(一個設置,一個上調,一個下調),做的時候直接焊在了線路板上,也不想引線了。不知道有沒有高手能加一個紅外的程序,可以用搖控控制。
回復

使用道具 舉報

ID:93369 發表于 2015-10-23 21:37 | 顯示全部樓層
做出了功能正常了嗎,可以參考網上,做個定時器監控紅外發送的數據,根據數據操作時鐘修改,就相當于原來監控按鍵改監控紅外
回復

使用道具 舉報

ID:86421 發表于 2015-10-30 18:20 | 顯示全部樓層
怎么沒哪位高手幫忙說說鬧鐘一為什么不鬧呀?其實這個程序我也是從這個網上下來的,原作者沒試一下嗎?
回復

使用道具 舉報

ID:93926 發表于 2015-10-30 19:05 | 顯示全部樓層
做出了功能正常了嗎,可以參考網上,做個定時器監控紅外發送的數據,根據數據操作時鐘修改,就相當于原來監控按鍵改監控紅外
回復

使用道具 舉報

ID:86421 發表于 2015-12-23 20:31 | 顯示全部樓層
這個是全部的程序。

ds32311602時鐘.rar

125.63 KB, 下載次數: 303

DS3231、1602

回復

使用道具 舉報

ID:98321 發表于 2015-12-24 15:34 | 顯示全部樓層
表示也不會
回復

使用道具 舉報

ID:135053 發表于 2016-7-27 18:46 | 顯示全部樓層
1qaz2wsx77 發表于 2015-12-23 20:31
這個是全部的程序。

好人呀,終于找到全的程序了,謝謝!
回復

使用道具 舉報

ID:136679 發表于 2016-8-13 15:40 | 顯示全部樓層
好人呀   我也正在研究。
回復

使用道具 舉報

ID:146910 發表于 2016-12-18 13:01 | 顯示全部樓層
好人呀   我也正在研究。
回復

使用道具 舉報

ID:146910 發表于 2016-12-18 22:49 | 顯示全部樓層
仿制了一個,顯示不正常,不知道什么原因。哪位老師幫看看。
50FABF5A4C94D08CE3A4CE9B1CF80EC0.jpg
回復

使用道具 舉報

ID:108715 發表于 2017-2-3 19:49 | 顯示全部樓層
我也弄了好久,就是鬧鐘1不響,求教高手哪里的原因
回復

使用道具 舉報

ID:163384 發表于 2017-2-3 21:44 | 顯示全部樓層
把鬧鈴1刪了吧
回復

使用道具 舉報

ID:1989 發表于 2017-12-8 22:39 來自手機 | 顯示全部樓層
程序好復雜,還沒看透
回復

使用道具 舉報

ID:61840 發表于 2017-12-8 23:23 | 顯示全部樓層
303和304兩個地址是一樣的,所以只能是一個響應的
回復

使用道具 舉報

ID:61840 發表于 2017-12-8 23:25 | 顯示全部樓層
        I2CWrite(DS3231_AL1DAY,0x81);        //A1M4置位,時分秒匹配時鬧鐘響應

     I2CWrite(DS3231_AL2DAY,0x81);        //A2M4置位,時分匹配時鬧鐘響應

都在0X81地址,雖然寫了兩個鬧鈴的數據,但鬧鈴2覆蓋了鬧鈴1
回復

使用道具 舉報

ID:268888 發表于 2017-12-30 15:45 | 顯示全部樓層
看了你的代碼你的按鍵設定部分,再打開鬧鈴2的時候把鬧鈴1關閉了,應該是寫11才是12都開吧是不是^0x03是這樣么?
回復

使用道具 舉報

ID:98880 發表于 2018-6-6 22:36 | 顯示全部樓層
你要注意他這個圖紙上。ALARM腳是接在了DS3231的第3腳上的。這個腳是鬧鐘時間匹配了就輸出低電平的,所以判斷不是由單片機來完成的。是由DS3231完成的。你可能沒有看到這點。要看原圖紙才行。
回復

使用道具 舉報

ID:346756 發表于 2018-6-7 10:37 | 顯示全部樓層
注意看一下他的圖紙是不是由單片機實現的
回復

使用道具 舉報

ID:363038 發表于 2018-8-21 10:36 | 顯示全部樓層
我也正在做這個
回復

使用道具 舉報

ID:386381 發表于 2018-8-21 15:33 來自手機 | 顯示全部樓層
是呀,我也遇到同樣問題,希望高手們能解決,造福本壇。
回復

使用道具 舉報

ID:809677 發表于 2020-7-30 15:50 | 顯示全部樓層
ds3231兩個鬧鈴能同時用嗎?
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 国产精品免费av | 久久国产精品无码网站 | 日韩精品av一区二区三区 | 成人免费一区二区 | 日本不卡一二三 | 久久精品手机视频 | 国产免费拔擦拔擦8x高清 | 日本特黄a级高清免费大片 国产精品久久性 | 黄视频免费观看 | 国产精品a久久久久 | 91看片免费 | 欧洲一级毛片 | 夜夜骑首页 | 精品在线一区 | 久久国产精品-国产精品 | 国际精品鲁一鲁一区二区小说 | 欧美在线视频不卡 | 天天精品在线 | 国产一级特黄aaa大片评分 | 91丨九色丨国产在线 | 毛片一区二区三区 | 午夜黄色影院 | 日韩免费一区二区 | 日韩成人 | 亚洲高清在线视频 | 日韩av免费在线观看 | 久久精品国产久精国产 | 国产成人午夜高潮毛片 | 先锋av资源网 | 91精品国产色综合久久不卡98口 | 一级特黄色毛片 | 中文字幕av亚洲精品一部二部 | 亚洲不卡 | 国产一区二区三区在线 | 午夜小视频在线播放 | 美女久久| 看片地址| 国产精品美女久久久久久久久久久 | 一区二区在线免费观看 | 色综合久久天天综合网 | 波多野结衣一区二区三区在线观看 |