欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136

標(biāo)題: ds3231時(shí)鐘鬧鐘不工作 [打印本頁]

作者: 1qaz2wsx77    時(shí)間: 2015-10-13 18:48
標(biāo)題: ds3231時(shí)鐘鬧鐘不工作
做了一個(gè)由ds3231、1602顯示、51單片機(jī)的時(shí)鐘,從這個(gè)網(wǎng)上一個(gè)高手那下載的程序。安裝好后,時(shí)間顯示、時(shí)間調(diào)整、各種設(shè)置都好用,但鬧鐘到時(shí)間不鬧,請(qǐng)那位高手指點(diǎn)。在些感謝了。。

作者: admin    時(shí)間: 2015-10-13 18:55
把你的程序發(fā)出來看一下有什么問題
作者: 1qaz2wsx77    時(shí)間: 2015-10-13 19:03
不好意思,那程序在電腦里,我還不會(huì)發(fā)。不過在這個(gè)論壇上有好多,我看了一下,都有一樣的。http://www.raoushi.com/bbs/dpj-32645-1.html
作者: 1qaz2wsx77    時(shí)間: 2015-10-13 21:57
void main()
{
Delay5Ms();
Delay5Ms();
Timer0Init(); //開啟定時(shí)器0中斷
Timer1Init(); //開啟定時(shí)器1中斷
Alarm_Int0_Init(); //開啟外部中斷0
while(!F_500ms) ; //啟動(dòng)等待,等LCM講入工作狀態(tài)
   Beep(1); //開機(jī)提示音
Write_18B20();
    InitDS3231(); //初始化DS3231
   autoweek(); //開機(jī)自動(dòng)星期轉(zhuǎn)換
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程序的一部分,我不知道這個(gè)Al_Flag==1是什么地方來的,問題可能就在這個(gè)位置上]
  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沒有按下按鍵,則返回時(shí)間顯示
}

}

void Alarm_Int0() interrupt 0
{
Al_Flag=1; //鬧鈴標(biāo)志位置位
alarmmin=min; //初始化鬧鈴時(shí)間
I2CWrite(DS3231_STATUS,0x00); //清DS3231內(nèi)部鬧鐘標(biāo)志位
//Beep2();
}

作者: 1qaz2wsx77    時(shí)間: 2015-10-13 22:01
以下是DS3231.C的部分文件,不知道與上面的這個(gè)有什么關(guān)聯(lián)
void InitDS3231()
{
        SCL=1;
        delayus(5);
        SDA=1;
        delayus(5);
        I2CWrite(DS3231_AL1DAY,0x81);        //A1M4置位,時(shí)分秒匹配時(shí)鬧鐘響應(yīng)
        I2CWrite(DS3231_AL2DAY,0x81);        //A2M4置位,時(shí)分匹配時(shí)鬧鐘響應(yīng)
        I2CWrite(DS3231_CONTROL,0x04);        //中斷允許,鬧鐘1和2關(guān)閉
        I2CWrite(DS3231_STATUS,0x00);        //32KHZ輸出禁止,鬧鐘標(biāo)志位清零
        //SetTime(11,1,14,8,10,0);
}
作者: 1qaz2wsx77    時(shí)間: 2015-10-21 16:46
經(jīng)過不斷的調(diào)試,鬧鈴二響了,可鬧鈴一還是不行,真不知道是什么原因,整的頭疼。
作者: 騰飛的龍    時(shí)間: 2015-10-22 08:50
應(yīng)該沒有調(diào)用鬧鈴2的函數(shù),你再好好找找。我的都好用,就是紅外不好用,也在折騰。
作者: 1qaz2wsx77    時(shí)間: 2015-10-23 20:34
這個(gè)程序中沒有紅外控制。鬧鐘是兩個(gè)的,但鬧鐘一現(xiàn)在還是不好用。
作者: 1qaz2wsx77    時(shí)間: 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轉(zhuǎn)換為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碼轉(zhuǎn)換為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;                  //發(fā)送起始條件的數(shù)據(jù)信號(hào)
  32.     delayus(1);
  33.     SCL=1;
  34.     delayus(5);             //起始條件建立時(shí)間大于4.7us,延時(shí)
  35.    
  36.     SDA=0;                  //發(fā)送起始信號(hào)
  37.     delayus(5);             // 起始條件鎖定時(shí)間大于4μs
  38.       
  39.     SCL=0;                  //鉗住I2C總線,準(zhǔn)備發(fā)送或接收數(shù)據(jù)
  40.     delayus(2);
  41. }
  42. /********************************************************/
  43. /************************STOP****************************/
  44. void Stop()
  45. {
  46.     SDA=0;                  //發(fā)送結(jié)束條件的數(shù)據(jù)信號(hào)
  47.     delayus(1);             //發(fā)送結(jié)束條件的時(shí)鐘信號(hào)
  48.     SCL=1;                  //結(jié)束條件建立時(shí)間大于4us
  49.     delayus(5);
  50.    
  51.     SDA=1;                  //發(fā)送I2C總線結(jié)束信號(hào)
  52.     delayus(4);
  53. }
  54. /********************************************************/
  55. /*******************************************************************
  56.                   字節(jié)數(shù)據(jù)發(fā)送函數(shù)               
  57. 函數(shù)原型:     void   SendByte(uchar Dat);
  58. 功能:      將數(shù)據(jù)c發(fā)送出去,可以是地址,也可以是數(shù)據(jù),發(fā)完后等待應(yīng)答,并對(duì)
  59.            此狀態(tài)位進(jìn)行操作.(不應(yīng)答或非應(yīng)答都使ack=0)
  60.            ack=1        發(fā)送數(shù)據(jù)正常,
  61.            ack=0        被控器無應(yīng)答或損壞。
  62. ********************************************************************/
  63. void SendByte(uchar Dat)
  64. {
  65. uchar BitCnt;
  66.    
  67.     for(BitCnt=0;BitCnt<8;BitCnt++)         //要傳送的數(shù)據(jù)長度為8位
  68.     {
  69.         if((Dat<<BitCnt)&0x80)
  70.             SDA=1;                          //判斷發(fā)送位
  71.         else
  72.             SDA=0;               
  73.           delayus(1);
  74.           SCL=1;                            //置時(shí)鐘線為高,通知被控器開始接收數(shù)據(jù)位
  75.           delayus(5);                       //保證時(shí)鐘高電平周期大于4μs   
  76.           SCL=0;
  77.     }
  78.    
  79.     delayus(2);
  80.     SDA=1;                                  //8位發(fā)送完后釋放數(shù)據(jù)線,準(zhǔn)備接收應(yīng)答位
  81.     delayus(2);  
  82.     SCL=1;
  83.     delayus(3);
  84.     if(SDA==1)
  85.         ack=0;   
  86.     else
  87.         ack=1;                              //判斷是否接收到應(yīng)答信號(hào)
  88.     SCL=0;
  89.     delayus(2);
  90. }
  91. /********************************************************/
  92. /*******************************************************************
  93.                   字節(jié)數(shù)據(jù)接收函數(shù)               
  94. 函數(shù)原型:     uchar   RcvByte();
  95. 功能:      用來接收從器件傳來的數(shù)據(jù),并判斷總線錯(cuò)誤(不發(fā)應(yīng)答信號(hào)),
  96.            發(fā)完后請(qǐng)用應(yīng)答函數(shù)應(yīng)答從機(jī)。  
  97. ********************************************************************/
  98. uchar RcvByte()
  99. {
  100. uchar retc;
  101. uchar BitCnt;

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

  129.     if(a==0)
  130.         SDA=0;              //在此發(fā)出應(yīng)答或非應(yīng)答信號(hào)
  131.     else
  132.         SDA=1;
  133.     delayus(3);     
  134.     SCL=1;
  135.    
  136.     delayus(5);             //時(shí)鐘低電平周期大于4μs
  137.    
  138.     SCL=0;                  //清時(shí)鐘線,鉗住I2C總線以便繼續(xù)接收
  139.     delayus(2);   
  140. }
  141. /****************************************************/
  142. /***********將一個(gè)字節(jié)寫入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當(dāng)前地址讀一個(gè)字節(jié)************/
  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指定地址讀一個(gè)字節(jié)************/
  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. /*********************讀取時(shí)間**********************/
  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);  //時(shí)
  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. /*******************讀取鬧鈴時(shí)間********************/
  222. void ReadAlarm()
  223. {
  224. uchar temp;
  225.   
  226.   temp=I2CReadAdd(DS3231_AL1MIN);//分
  227.   al1_min=BCD2HEX(temp);
  228.   temp=I2CReadAdd(DS3231_AL1HOUR);  //時(shí)
  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);  //時(shí)
  235.   al2_hour=BCD2HEX(temp);
  236.   temp=I2CReadAdd(DS3231_AL2DAY);  //星期or日
  237.   al2_day=BCD2HEX(temp);
  238. }
  239. /***************************************************/
  240. /****************修改時(shí)間***************************/
  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);//修改時(shí)
  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置位,時(shí)分秒匹配時(shí)鬧鐘響應(yīng)
  290.         I2CWrite(DS3231_AL2DAY,0x81);        //A2M4置位,時(shí)分匹配時(shí)鬧鐘響應(yīng)
  291.         I2CWrite(DS3231_CONTROL,0x04);        //中斷允許,鬧鐘1和2關(guān)閉
  292.         I2CWrite(DS3231_STATUS,0x00);        //32KHZ輸出禁止,鬧鐘標(biāo)志位清零
  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. }*/
復(fù)制代碼

作者: 1qaz2wsx77    時(shí)間: 2015-10-23 20:40
上面是DS3231。C程序
作者: 1qaz2wsx77    時(shí)間: 2015-10-23 20:42
不知道是不是出在303、304行。真的整不出來了。哪位老師幫著看看。
作者: 1qaz2wsx77    時(shí)間: 2015-10-23 20:57
東東做出來了,放在一個(gè)小盒子里,挺好玩的。但原程序上是用三個(gè)按鍵控制的(一個(gè)設(shè)置,一個(gè)上調(diào),一個(gè)下調(diào)),做的時(shí)候直接焊在了線路板上,也不想引線了。不知道有沒有高手能加一個(gè)紅外的程序,可以用搖控控制。
作者: xiao0990    時(shí)間: 2015-10-23 21:37
做出了功能正常了嗎,可以參考網(wǎng)上,做個(gè)定時(shí)器監(jiān)控紅外發(fā)送的數(shù)據(jù),根據(jù)數(shù)據(jù)操作時(shí)鐘修改,就相當(dāng)于原來監(jiān)控按鍵改監(jiān)控紅外
作者: 1qaz2wsx77    時(shí)間: 2015-10-30 18:20
怎么沒哪位高手幫忙說說鬧鐘一為什么不鬧呀?其實(shí)這個(gè)程序我也是從這個(gè)網(wǎng)上下來的,原作者沒試一下嗎?
作者: 378182629    時(shí)間: 2015-10-30 19:05
做出了功能正常了嗎,可以參考網(wǎng)上,做個(gè)定時(shí)器監(jiān)控紅外發(fā)送的數(shù)據(jù),根據(jù)數(shù)據(jù)操作時(shí)鐘修改,就相當(dāng)于原來監(jiān)控按鍵改監(jiān)控紅外
作者: 1qaz2wsx77    時(shí)間: 2015-12-23 20:31
這個(gè)是全部的程序。

ds32311602時(shí)鐘.rar

125.63 KB, 下載次數(shù): 303

DS3231、1602


作者: 木木木木木    時(shí)間: 2015-12-24 15:34
表示也不會(huì)
作者: g-abc    時(shí)間: 2016-7-27 18:46
1qaz2wsx77 發(fā)表于 2015-12-23 20:31
這個(gè)是全部的程序。

好人呀,終于找到全的程序了,謝謝!
作者: li1557554    時(shí)間: 2016-8-13 15:40
好人呀   我也正在研究。
作者: wangjianb01978    時(shí)間: 2016-12-18 13:01
好人呀   我也正在研究。
作者: wangjianb01978    時(shí)間: 2016-12-18 22:49
仿制了一個(gè),顯示不正常,不知道什么原因。哪位老師幫看看。

50FABF5A4C94D08CE3A4CE9B1CF80EC0.jpg (100.82 KB, 下載次數(shù): 104)

50FABF5A4C94D08CE3A4CE9B1CF80EC0.jpg

作者: 啦啦啦1234    時(shí)間: 2017-2-3 19:49
我也弄了好久,就是鬧鐘1不響,求教高手哪里的原因
作者: uhiiih    時(shí)間: 2017-2-3 21:44
把鬧鈴1刪了吧
作者: lhuijiang    時(shí)間: 2017-12-8 22:39
程序好復(fù)雜,還沒看透
作者: 無罪之賓    時(shí)間: 2017-12-8 23:23
303和304兩個(gè)地址是一樣的,所以只能是一個(gè)響應(yīng)的
作者: 無罪之賓    時(shí)間: 2017-12-8 23:25
        I2CWrite(DS3231_AL1DAY,0x81);        //A1M4置位,時(shí)分秒匹配時(shí)鬧鐘響應(yīng)

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

都在0X81地址,雖然寫了兩個(gè)鬧鈴的數(shù)據(jù),但鬧鈴2覆蓋了鬧鈴1
作者: wangbo0727    時(shí)間: 2017-12-30 15:45
看了你的代碼你的按鍵設(shè)定部分,再打開鬧鈴2的時(shí)候把鬧鈴1關(guān)閉了,應(yīng)該是寫11才是12都開吧是不是^0x03是這樣么?
作者: homedou    時(shí)間: 2018-6-6 22:36
你要注意他這個(gè)圖紙上。ALARM腳是接在了DS3231的第3腳上的。這個(gè)腳是鬧鐘時(shí)間匹配了就輸出低電平的,所以判斷不是由單片機(jī)來完成的。是由DS3231完成的。你可能沒有看到這點(diǎn)。要看原圖紙才行。
作者: 周小浩帥呆了    時(shí)間: 2018-6-7 10:37
注意看一下他的圖紙是不是由單片機(jī)實(shí)現(xiàn)的
作者: hellobow    時(shí)間: 2018-8-21 10:36
我也正在做這個(gè)
作者: 文鳳軒    時(shí)間: 2018-8-21 15:33
是呀,我也遇到同樣問題,希望高手們能解決,造福本壇。
作者: alidmail    時(shí)間: 2020-7-30 15:50
ds3231兩個(gè)鬧鈴能同時(shí)用嗎?




歡迎光臨 (http://www.raoushi.com/bbs/) Powered by Discuz! X3.1