wwwxxx国产_337p日本欧洲亚洲大胆张筱雨_免费在线看成人av_日本黄色不卡视频_国产精品成熟老女人_99视频一区_亚洲精品97久久中文字幕_免费精品视频在线_亚洲色图欧美视频_欧美一区二三区

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 11258|回復: 25
打印 上一主題 下一主題
收起左側

DS1302電波鐘制作 附單片機源程序

  [復制鏈接]
跳轉到指定樓層
樓主
1、本人對單片機編程不在行,也是在不斷學習中,我是搞硬件工作的,對一般的硬件電路倒是很熟悉,也用單片機做個一些非常簡單的項目,比如一些試驗設備也是用單片機來控制,事半功倍啊。但那些程序相對IIC,紅外通信,1302來說都簡單得不得了。本著利用業余時間不斷學習精進的理想,一直在努力向前輩們學習中。平日里自己的作品都不能留在自己的手上,就像看著自己的兒子被人抱走一樣,也許沒什么技術含量,但自娛自樂一下,還是能提升不少荷爾蒙,為了彌補心中之遺憾,特別做一件留給自己的作品。
我不喜歡在開發板上作東西,那是開發前期試驗程序用的,不能算是一件作品。一件作品必須是獨立的實現預設的功能指標,所有的相關設計都是圍繞這個功能為中心,并且作品具有一定的實用性和便利性。

該作品硬件比較簡單,但程序部分花了我不少時間(因為是新手),電波鐘解碼部分找了些網上的相關解決方案和電波鐘的信號編碼規則,結合到手上1的程序,試驗調試,解決各種BUG,最后完成。

2、材料清單:
1、STC12CXXXX單片機一片
2、1英寸白色數碼管和紅色小數碼管共6只
3、74HC245一塊
4、DS1302模塊(用的現成的)一塊
5、報時語音模塊一塊
6、電波鐘模塊一塊
7、運放一塊
8、光敏,發光二極管,PNP和NPN數只,按鍵4只,
9、連接線若干
10、透明防水外殼一個
11、杜幫線若干
12、9V線性變壓電源一只
13、7805一塊,SM1117一塊
14、電解電容,鉭電容,電阻,貼片電阻容若干
15、洞洞板一塊,銅柱4根
16、防浪涌保護TVS管一只

3、開始工作
準備構思如何用好這些材料做出一個像樣的作品,前殼為什么要全透明呢,這是為了增加電子作品的藝術性,觀賞性(手工板也可以欣賞)能看清內部構造,即增加了作品的透明感,又增加了電子技術的神秘感。

理想中,成品應該可能也許大概是這樣的

焊接幾個,試試效果,不斷構思,不斷改進中。先用的綠色LED作為時分的分隔,后來發現綠光不純,偏黃,后換成紅色。

經過一天的焊接(業余時間),初步成型,先試試能不能動起來。嗯,不完美的地方來了,LED看起來亮與不亮的字段區分不明顯,對于我這個強迫癥來說,一定要加濾光片。不然難受,吃不下飯。

不管了,先把電波鐘模塊加上,淘寶15元。用熱熔膠粘上去。語音模塊也裝上,喇叭也在側面開了孔。電波模塊用LED試驗了一下,晚上能收到信號,白天基本不可能,電磁污染太嚴重(我就是搞EMC的),經我試驗,坐標廣州,收到商丘的電波鐘信號,要在晚上00點以后,才能在窗戶口收到正常的信號。


取個名《大笨鐘》,LED已經加了濾光片,現在已經完美了。按鍵加上了,電波的電源控制等部分也完成了。寫入程序,增加自己功能,并調試。白LED太亮,晚上就是小夜燈,所以在夜間要降低亮度,用光敏加運放自動控制。



紅色LED在電波對時成功后會關閉,綠色LED是電波鐘信號指示,會隨信號有無閃動。夜間2-3點自動開啟授時,授時失敗紅色LED亮起提示,直到第二次授時成功后,才會關閉。第4個按鍵改為強制手動授時。本來第4個鍵是手動關閉整點報時的。現在程序改為夜間自動關閉報時



最終完成,放在古董收音機上,不錯。為什么我的按鍵要放在里面呢,調時要開蓋,不方便??NONO,我的是電波授時,理論上,永遠不用調時。所以不需要開蓋調整。我也不需要年月日周,所以只要時間就OK。


以下是程序部分,發程序出來,不注釋,別人很難看懂,隔幾個月,自己可能都看不懂了。哈哈哈。

嚴正聲明:本程序部分純屬個人技術性開發娛樂,無任何商業用途,如認為有侵權行為,速與我聯系或與論壇管理員聯系并刪除。否則本人不承擔任何法律責任。

/**************************************************
程序名:《大笨鐘》
晶  振:24MHZ
功  能:LED數碼管顯示,按鍵可調,電波自動校時,整點報時功能,夜間光感自動亮度
全局變量已達到90個,有點多,后續要完善一下,只用一個程序文件寫完。
******************************************************/
  1. /**************************************************
  2. 程序名:《大笨鐘》
  3. 晶  振:24MHZ
  4. 功  能:LED數碼管顯示,按鍵可調,電波自動校時,整點報時功能,夜間光感自動亮度

  5. 全局變量已達到93個

  6. ******************************************************/
  7. #include<stc12c5a60s2.h>
  8. #include<intrins.h>

  9. #define uchar unsigned char
  10. #define uint unsigned int

  11. uchar Dat_su,Dat_num,min,hour,keysetnum;
  12. uchar s1,m1,h1;
  13. uchar hourshi,hourge,minshi,minge,secshi,secge;

  14. sbit DSIO = P2^2;          //1302信號腳
  15. sbit RST  = P2^1;          //1302復位信號腳
  16. sbit SCLK = P2^0;          //1302時鐘信號腳

  17. sbit keyset = P3^7;           //進入設置
  18. sbit keyshi = P3^6;           //時加按鍵設置
  19. sbit keyfen = P3^5;           //分加按鍵設置
  20. sbit keyBPC = P3^4;           //電波強制對時按鍵
  21. sbit Ring   = P2^4;           //整點報時輸出

  22. bit flag200ms;         //200MS讀DS1302標志位
  23. bit keysetflag;         //進入按鍵設置標志位
  24. bit alarmflag;         //報時標志位

  25. /******BPC***********/
  26. sbit BPC    = P3^3;         //BPC輸入,外部輸入
  27. sbit BPC_EN = P2^3;          //BPC 使能
  28. sbit BPC_FailLED = P2^5;         //BPC校時失敗指示燈
  29. bit keyBPCflag;                         //強制對時標志位
  30. bit BPC_add;                         //BPC中斷標志位
  31. bit BPC_ok = 1;            //對時成功標志位,默認為開啟才能開啟BPC
  32. bit Get_time,As_time;          //授時標志位
  33. uchar Dat_su,Dat_num,keyBPCnum;
  34. uchar data BPC_dat[3][19];         //BPC3列個19組數組
  35. uint BPC_temp,Dat_add;                  //BPC脈寬時間記錄變量
  36. uchar data Times[3];  //BPC "分,時,上/下午“數組


  37. uchar DisplayData[6];        //LED顯示緩存數組
  38. uchar code smgduan[10] = {0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0x78,0x80,0x90};        //LED 0-9

  39. //DS1302寫入和讀取時分秒的地址命令
  40. //秒分時日月周年最低位讀寫位
  41. uchar code READ_RTC_ADDR[7] = {0x81, 0x83, 0x85, 0x87, 0x89, 0x8b, 0x8d};
  42. uchar code WRITE_RTC_ADDR[7] = {0x80, 0x82, 0x84, 0x86, 0x88, 0x8a, 0x8c};

  43. //存儲順序秒分時日月周年,存儲格式是用BCD碼//
  44. uchar TIME[7];


  45. /*************************************
  46. * 函數名: delay()
  47. * 按鍵延時函數,按鍵使用
  48. ************************************/
  49. void delay()           //100ms
  50. {                                 
  51.     unsigned char a,b,c;
  52.     for(c=4;c>0;c--)
  53.         for(b=212;b>0;b--)
  54.             for(a=140;a>0;a--);
  55. }

  56. /*******************************************************************************
  57. * 函 數 名         : Ds1302Write
  58. * 函數功能                   : 向DS1302命令(地址+數據)
  59. * 輸    入         : addr,dat
  60. *******************************************************************************/

  61. void Ds1302Write(uchar addr, uchar dat)
  62. {
  63.         uchar n;
  64.         RST = 0;
  65.         _nop_();

  66.         SCLK = 0;               //先將SCLK置低電平。
  67.         _nop_();
  68.         RST = 1;                //然后將RST(CE)置高電平。
  69.         _nop_();

  70.         for (n=0; n<8; n++)     //開始傳送八位地址命令
  71.         {
  72.                 DSIO = addr & 0x01;//數據從低位開始傳送
  73.                 addr >>= 1;
  74.                 SCLK = 1;          //數據在上升沿時,DS1302讀取數據
  75.                 _nop_();
  76.                 SCLK = 0;
  77.                 _nop_();
  78.         }
  79.         for (n=0; n<8; n++)   //寫入8位數據
  80.         {
  81.                 DSIO = dat & 0x01;
  82.                 dat >>= 1;
  83.                 SCLK = 1;         //數據在上升沿時,DS1302讀取數據
  84.                 _nop_();
  85.                 SCLK = 0;
  86.                 _nop_();        
  87.         }        
  88.                  
  89.         RST = 0;              //傳送數據結束
  90.         _nop_();
  91. }

  92. /*******************************************************************************
  93. * 函 數 名         : Ds1302Read
  94. * 函數功能                   : 讀取一個地址的數據
  95. * 輸    入         : addr
  96. * 輸    出         : dat
  97. *******************************************************************************/

  98. uchar Ds1302Read(uchar addr)
  99. {
  100.         uchar n,dat,dat1;
  101.         RST = 0;
  102.         _nop_();

  103.         SCLK = 0;              //先將SCLK置低電平。
  104.         _nop_();
  105.         RST = 1;               //然后將RST(CE)置高電平。
  106.         _nop_();

  107.         for(n=0; n<8; n++)     //開始傳送八位地址命令
  108.         {
  109.                 DSIO = addr & 0x01;//數據從低位開始傳送
  110.                 addr >>= 1;
  111.                 SCLK = 1;          //數據在上升沿時,DS1302讀取數據
  112.                 _nop_();
  113.                 SCLK = 0;          //DS1302下降沿時,放置數據
  114.                 _nop_();
  115.         }
  116.         _nop_();
  117.         for(n=0; n<8; n++)    //讀取8位數據
  118.         {
  119.                 dat1 = DSIO;      //從最低位開始接收
  120.                 dat = (dat>>1) | (dat1<<7);
  121.                 SCLK = 1;
  122.                 _nop_();
  123.                 SCLK = 0;        //DS1302下降沿時,放置數據
  124.                 _nop_();
  125.         }

  126.         RST = 0;
  127.         _nop_();               //DS1302復位的穩定時間,必須的。
  128.         SCLK = 1;
  129.         _nop_();
  130.         DSIO = 0;
  131.         _nop_();
  132.         DSIO = 1;
  133.         _nop_();
  134.         return dat;        
  135. }

  136. /*******************************************************************************
  137. * 函 數 名         : Ds1302Init
  138. * 函數功能                   : 初始化DS1302  

  139. *******************************************************************************/

  140. void Ds1302Init()
  141. {
  142.         uchar dat;
  143.         RST = 0;
  144.     SCLK = 0;
  145.         dat = Ds1302Read(0x81);                 //讀1302最高位判斷掉電時間是否正常
  146.         if((dat&0x80)!=0)                           //為0,正常運行
  147.          {
  148.                  Ds1302Write(0x8E,0X00);                 //禁止寫保護,就是關閉寫保護功能
  149.                 Ds1302Write(0x84,0x00);                  //寫入時鐘最高位為0,定義為24小時制
  150.                
  151.                 /******
  152.                 本程序不需要寫入年月日和初始時間
  153.                 for (n=0; n<7; n++)          //寫入7個字節的時鐘信號:分秒時日月周年
  154.             {
  155.                         Ds1302Write(WRITE_RTC_ADDR[n],TIME[n]);        
  156.                 }
  157.                 *******/
  158.                 Ds1302Write(0x8E,0x80);                 //打開寫保護功能
  159.         }         
  160. }

  161. /*******************************************************************************
  162. * 函 數 名         : Ds1302ReadTime
  163. * 函數功能                   : 讀取時鐘信息

  164. *******************************************************************************/

  165. void Ds1302ReadTime()
  166. {
  167.         uchar n;
  168.         for (n=0; n<7; n++)    //讀取7個字節的時鐘信號:分秒時日月周年
  169.         {
  170.                 TIME[n] = Ds1302Read(READ_RTC_ADDR[n]);
  171.         }
  172.                
  173. }


  174. /*******************************************************************************
  175. * 函 數 名         : datapros()
  176. * 函數功能                   : 時間讀取處理轉換函數

  177. *******************************************************************************/

  178. void datapros()         
  179. {
  180.            Ds1302ReadTime();  //先讀取1302的時分秒
  181.         DisplayData[0] = smgduan[TIME[2]>>4];       //時十位                                    
  182.         DisplayData[1] = smgduan[TIME[2]&0x0f];                                 
  183.         DisplayData[2] = smgduan[TIME[1]/16];                //分十位
  184.         DisplayData[3] = smgduan[TIME[1]&0x0f];        
  185.         DisplayData[4] = smgduan[TIME[0]/16];                 //秒十位
  186.         DisplayData[5] = smgduan[TIME[0]&0x0f];
  187. }


  188. /*******************************************************************************
  189. * 函 數 名         :keyscan()
  190. * 函數功能                   :按鍵設置時間和BPC對時

  191. *******************************************************************************/
  192. void keyscan()
  193. {
  194.         if(keyset == 0)
  195.         {
  196.                 delay();
  197.                 if(keyset == 1)
  198.                   {                          
  199.                           keysetnum++;         //按鍵記錄值
  200.                         h1 = (TIME[2]>>4)*10+(TIME[2]&0x0f)%10;//先將1302暫停時的小時值轉換成十進制賦予變量H1時,以便在此基礎上累加調整改然后寫入1302
  201.                         m1 = (TIME[1]>>4)*10+(TIME[1]&0x0f)%10;//先將1302暫停的的分鐘值轉換成十進制賦予變量M1時,以便在此基礎上累加調整改然后寫入1302                    
  202.                   }
  203.                   if(keysetnum == 1)         //按一次
  204.                   {
  205.                           keysetflag = 1;           //按下KEYSET標志位,用以暫停讀1302
  206.                   }
  207.                   if(keysetnum >= 2)   //按二次,恢復讀1302,不能==2,可能因按鍵因素大于2
  208.                   {
  209.                           keysetnum = 0;                //清零
  210.                         keysetflag = 0;                //標志位清零,恢復讀1302        
  211.                         Ds1302Write(0x8E,0X00);         //關閉1302寫保護
  212.                         Ds1302Write(0x80,0);     //向秒寄存器寫入0
  213.                         Ds1302Write(0x8E,0x80);         //打開1302寫保護
  214.                   }
  215.      }
  216.          if(keyshi == 0)                                //“時”增加按鍵
  217.          {
  218.                  delay();
  219.                 if((keyshi==1)&&(keysetflag==1)) //判斷KEYSET標志位,只有KEYSET按下后才運行
  220.                 {                        
  221.                         h1++;                                                 //小時加1,24小時制
  222.                         if(h1>23)
  223.                         {
  224.                                 h1 = 0;
  225.                         }
  226.                         DisplayData[0] = smgduan[h1/10];  //十進制轉換送LED十位顯示
  227.                         DisplayData[1] = smgduan[h1%10];  //十進制轉換送LED個位顯示
  228.                         hour = (h1/10*16)+(h1%10);         //將H1的值轉換成BCD碼賦給HOUR
  229.                         Ds1302Write(0x8E,0X00);                //關閉1302寫保護
  230.                         Ds1302Write(0x84,hour);          //向1302“時”寄存器寫入小時值
  231.                         Ds1302Write(0x8E,0x80);         //打開1302寫保護
  232.                 }
  233.          }
  234.          if(keyfen == 0)                          //“分”增加鍵
  235.          {
  236.                  delay();
  237.                 if((keyfen==1)&&(keysetflag==1))   //判斷KEYSET標志位,只有KEYSET按下后才運行
  238.                 {        
  239.                         m1++;
  240.                         if(m1>59)                                   //分,十進制
  241.                         {
  242.                                 m1 = 0;
  243.                         }
  244.                         DisplayData[2] = smgduan[m1/10];         //十進制轉換送LED十位顯示
  245.                         DisplayData[3] = smgduan[m1%10];        //十進制轉換送LED個位顯示
  246.                         min = (m1/10*16)+(m1%10);                //將m1的值轉換成BCD碼賦給min
  247.                         Ds1302Write(0x8E,0X00);                    //關閉寫保護
  248.                         Ds1302Write(0x82,min);              //向"分"寄存器寫入分鐘值
  249.                         Ds1302Write(0x8E,0x80);                    //打開寫保護
  250.                 }
  251.          }
  252.          if(keyBPC == 0)          //按鍵強制開啟BPC
  253.          {
  254.                  delay();
  255.                 if(keyBPC == 1)
  256.                 {
  257.                         keyBPCnum++;
  258.                         if(keyBPCnum == 1)         //按下一次,開啟BPC
  259.                         {
  260.                           BPC_EN = 0;
  261.                           BPC_FailLED = 1;
  262.                           keyBPCflag = 1;
  263.                     }
  264.                         if(keyBPCnum >= 2)          //按下第二次,關閉BPC
  265.                         {
  266.                           keyBPCnum = 0;
  267.                           BPC_EN = 1;
  268.                           BPC_FailLED = 0;
  269.                           keyBPCflag = 0;        
  270.                         }
  271.                 }               
  272.          }
  273. }

  274. /*********************************************
  275. * 整點報時函數     :AlarmRing()
  276. * 函數功能         : 整點報時

  277. **********************************************/
  278. void AlarmRing()
  279. {
  280.         uchar p,q;
  281.         p = (TIME[1]>>4)*10+(TIME[1]&0x0f)%10;        //讀取1302 變為十進制,分鐘為00
  282.         q = (TIME[0]>>4)*10+(TIME[0]&0x0f)%10;        //秒鐘為00
  283.         if((p|q) == 0) //分與秒相或為0時
  284.         {        
  285.                 if(alarmflag == 1)         //先判斷報時標志打開,禁止報時段標志為0
  286.                 {
  287.                   Ring = 1;                          //觸發報時
  288.                   delay();
  289.                   delay();
  290.                   Ring = 0;                          //關閉觸發
  291.             }        
  292.     }        
  293. }
  294. /************************************************************
  295. * 整點報時設定函數 : Closealarm()
  296. **函數功能         : 設置整點報時時段

  297. ***********************************************************/
  298. void Closealarm()
  299. {
  300.         uchar k;
  301.         k = (TIME[2]>>4)*10+(TIME[2]&0x0f)%10;         //讀1302小時值,轉成十進制,設定關閉鬧鐘時間段
  302.         if((0<=k)&&(k<=5))         //小5點,大于0點時段,關閉整點報時
  303.         {
  304.                 alarmflag = 0;        //關閉報時標志 0-6點
  305.                 //alarmLED = 0;        //關閉報時指示燈
  306.         }
  307.         else                                //打開報時
  308.         {
  309.                 alarmflag = 1;          //否則打啟報時標志位
  310.                 //alarmLED = 1;
  311.         }
  312. }
  313. /******************************************************
  314. * BPC接收函數    : recieveBPCtime()
  315. * 函數功能       : 接收BPC授時和寫入DS1302時間

  316. *******************************************************/
  317. void recieveBPCtime()
  318. {   
  319.     if(As_time)         //正確接收19位數據標志位
  320.      {
  321.            As_time=0;        //清零標志,并判斷一分鐘內3列19組相同的數據,“分時周月年”
  322.            if(
  323.                      (BPC_dat[0][1]==BPC_dat[1][1])&&(BPC_dat[0][1]==BPC_dat[2][1])
  324.                    &&(BPC_dat[0][2]==BPC_dat[1][2])&&(BPC_dat[0][2]==BPC_dat[2][2])
  325.                    &&(BPC_dat[0][3]==BPC_dat[1][3])&&(BPC_dat[0][3]==BPC_dat[2][3])
  326.                    &&(BPC_dat[0][4]==BPC_dat[1][4])&&(BPC_dat[0][4]==BPC_dat[2][4])
  327.                    &&(BPC_dat[0][5]==BPC_dat[1][5])&&(BPC_dat[0][5]==BPC_dat[2][5])
  328.                    &&(BPC_dat[0][6]==BPC_dat[1][6])&&(BPC_dat[0][6]==BPC_dat[2][6])
  329.                    &&(BPC_dat[0][7]==BPC_dat[1][7])&&(BPC_dat[0][7]==BPC_dat[2][7])
  330.                    &&(BPC_dat[0][8]==BPC_dat[1][8])&&(BPC_dat[0][8]==BPC_dat[2][8])
  331.                    &&(BPC_dat[0][10]==BPC_dat[1][10])&&(BPC_dat[0][10]==BPC_dat[2][10])
  332.                    &&(BPC_dat[0][11]==BPC_dat[1][11])&&(BPC_dat[0][11]==BPC_dat[2][11])
  333.                    &&(BPC_dat[0][12]==BPC_dat[1][12])&&(BPC_dat[0][12]==BPC_dat[2][12])
  334.                    &&(BPC_dat[0][13]==BPC_dat[1][13])&&(BPC_dat[0][13]==BPC_dat[2][13])
  335.                    &&(BPC_dat[0][14]==BPC_dat[1][14])&&(BPC_dat[0][14]==BPC_dat[2][14])
  336.                    &&(BPC_dat[0][15]==BPC_dat[1][15])&&(BPC_dat[0][15]==BPC_dat[2][15])
  337.                    &&(BPC_dat[0][16]==BPC_dat[1][16])&&(BPC_dat[0][16]==BPC_dat[2][16])
  338.                    &&(BPC_dat[0][17]==BPC_dat[1][17])&&(BPC_dat[0][17]==BPC_dat[2][17])
  339.              )
  340.                          Get_time=1;
  341.              }
  342.            if(Get_time)         //收到3幀相同的數據后,對Times[]數據賦值授時
  343.              {
  344.                    Get_time=0;                                   //標志位清零
  345.                                    keysetflag = 1;                            //利用該標志位來暫停讀DS1302
  346.                                    Times[0]=((BPC_dat[0][2]*4)+(BPC_dat[0][3]));  //BPC”時“,4進制,第2、3位
  347.                    Times[1]=((BPC_dat[0][4]*16)+(BPC_dat[0][5]*4)+(BPC_dat[0][6])+1); //BPC”分“,4進制,第4,5,6位,3幀數據相同后,分的起始點為第2分鐘00秒,要加1補償                                                   
  348.                                    Times[2]=(BPC_dat[0][9]);   //判斷BPC第10位識別上/下午,0,1為上午,2,3為下午
  349.                                    if(Times[2]<2)                   //上下午判斷,如果小于2,為上午
  350.                                      {
  351.                                                  hour = (Times[0]/10*16)+(Times[0]%10);          //時轉換成BCD
  352.                                                 min = (Times[1]/10*16)+(Times[1]%10);          //分轉換成BCD
  353.                                          }
  354.                                         else                         //上下午判斷,如果大于1,為下午
  355.                                          {
  356.                                                  hour = ((Times[0]+12)/10*16)+((Times[0]+12)%10);  //BPC下午,Times[3]要加12變為24小時制并轉換為BCD
  357.                                                 min = (Times[1]/10*16)+(Times[1]%10);                  //分轉成BCD
  358.                                          }                                   
  359.                                            Ds1302Write(0x8E,0X00);          //關閉寫保護
  360.                                         Ds1302Write(0x84,hour);          //向時寄存器寫入小時值
  361.                                         Ds1302Write(0x82,min);    //向分寄存器寫入
  362.                                         Ds1302Write(0x80,0);      //向秒寄存器寫入0,一分鐘3幀相同信號,分加1后,秒歸0.無需判斷
  363.                                         Ds1302Write(0x8E,0x80);          //打開寫保護
  364.                                         keysetflag = 0;                          //恢復讀1302
  365.                                         BPC_ok = 0;                          //授時成功標志清零
  366.                                         BPC_EN = 1;               //接收成功后,關閉BPC
  367.                                         BPC_FailLED = 0;          //關閉授時失敗指示燈
  368.                                         keyBPCflag = 0;                          //取消強制對時標志位
  369.               }
  370. }
  371. /**************************************************
  372. * BPC自動接收函數  : BPC_openset()
  373. * 函數功能         : 設置BPC開啟授時時間

  374. *************************************************/
  375. void BPC_openset()
  376. {
  377.         uchar t;
  378.         t = (TIME[2]>>4)*10+(TIME[2]&0x0f)%10; //先讀出1302的小時值,轉換成十進制
  379.         if(t == 2)                                  //夜間2點,持續接收BPC。
  380.         {
  381.                 if(BPC_ok)                        //先判斷BPC授時成功標志位,授時成功一次,不再執行該程序
  382.                 {
  383.                         BPC_EN = 0;                       //打開BPC授時模塊
  384.                         BPC_FailLED = 1;           //打開授時失敗指示燈
  385.                  }
  386.         }
  387.         if(t == 3)                              //夜時3點,如未成功授時自動關閉BPC
  388.         {
  389.                 if(keyBPCflag == 0)                  //判斷按鍵強制對時按鍵標志位,如果有按鍵強制對時,不執行
  390.             {
  391.                    BPC_EN = 1;                  //1小時內授時不成功,關閉BPC模塊,不關指示燈用于提示授時失敗
  392.                    BPC_ok = 1;            // 開授時成功標志位,以便下一個2點能開啟BPC模塊
  393.              }
  394.         }        
  395. }

  396. /*******************************************************************************
  397. * 函 數 名       : main
  398. * 函數功能                 : 主函數

  399. *******************************************************************************/
  400. void main()
  401. {        
  402.         Ring = 0;                         // 整點報時初始值
  403.         BPC_EN = 1;                          //BPC使能初始
  404.         BPC_FailLED = 0;          //授時失敗指示燈初始

  405.         EA = 1;
  406.         TMOD = 0x01;                //T0
  407.         TH0 = (65536-2000)/256;           //LED刷新和定時讀DS1302
  408.         TL0 = (65536-2000)%256;
  409.         TR0 = 1;
  410.         ET0 = 1;

  411.         IT1=1;        //P33下降沿觸發
  412.     EX1=1;                  //開啟外部中斷
  413.     PX1=1;                  //外部中斷優先

  414.     //Ds1302Init(); //本程序無需初始化DS1302

  415.         while(1)
  416.         {
  417.                 Closealarm();       //整點報時關閉時段
  418.                 keyscan();                //按鍵
  419.                 AlarmRing();        //整點報時
  420.                 BPC_openset();            // BPC開啟函數
  421.                 recieveBPCtime();   //BPC接收轉換函數
  422.                
  423.                 if(flag200ms)                  //讀1302時間標志
  424.                 {
  425.                         flag200ms = 0;
  426.                         if(keysetflag == 0)         //有按鍵調整時,標志位置1,暫停讀1302
  427.                         {
  428.                           datapros();             //數據處理函數        
  429.                     }        
  430.         }
  431.         }        
  432. }               

  433. /*******************************************************************************
  434. * 函 數 名       : interruptimer()
  435. * 函數功能                 : 中斷,刷新數碼管,BPC時間記時判斷脈寬值

  436. *******************************************************************************/
  437. void interrutptimer() interrupt 1
  438. {
  439.         uchar i,ms;
  440.         TH0 = (65536-2000)/256;           //1ms
  441.         TL0 = (65536-2000)%256;
  442.         ms++;
  443.         if(ms>=200)
  444.         {
  445.                 ms = 0;
  446.                 flag200ms = 1;                 //讀1302間隔時間段
  447.         }
  448.         switch(i)
  449.         {
  450.                 case 0:        P1=0x3e;i++;P0=0x00;P0=DisplayData[5];break;         // 秒
  451.                 case 1:        P1=0x3d;i++;P0=0x00;P0=DisplayData[4];break;
  452.                 case 2:        P1=0x3b;i++;P0=0x00;P0=DisplayData[3];break;         //分
  453.                 case 3:        P1=0x37;i++;P0=0x00;P0=DisplayData[2];break;
  454.                 case 4:        P1=0x2f;i++;P0=0x00;P0=DisplayData[1];break;         //時
  455.                 case 5:        P1=0x1f;i=0;P0=0x00;P0=DisplayData[0];break;        
  456.                 default: break;
  457.         }
  458.         
  459.   Dat_add++;                     //外部中斷內對ADD清零,1500次內,有外部中斷,重新清零
  460.   if(Dat_add>1500)     //BPC啟始信號,每1MS對DAT_add加1,如在1500個周期內沒有進入外部中斷被清零,1.5S后標志找到超始信號,重新對Dat_num清零,以便重新對19個位賦值
  461.           Dat_num=0;               //對數組清零,說明已授收到超始脈沖

  462.   if(BPC_add)          //外部中斷標志為真
  463.     {
  464.       if(!BPC)                // 第1個脈沖負邊到來時
  465.                   BPC_temp++;           //用BPC_temp累加值來判斷脈寬
  466.      else
  467.         {
  468.           BPC_add=0;   //當第1個脈沖跳變為正邊時,對BPC_add標志位清零,等待下個脈沖的中斷
  469.           if((BPC_temp>50)&&(BPC_temp<150)) BPC_dat[Dat_su][Dat_num]=0;        //判斷脈寬值,賦值給二維數組的第[0][0]
  470.      else if((BPC_temp>150)&&(BPC_temp<250))BPC_dat[Dat_su][Dat_num]=1;
  471.      else if((BPC_temp>250)&&(BPC_temp<350))BPC_dat[Dat_su][Dat_num]=2;
  472.      else if((BPC_temp>350)&&(BPC_temp<450))BPC_dat[Dat_su][Dat_num]=3;
  473.      else Dat_num=0;    //如果以上有不正確的值,對Dat_num清零重來
  474.          
  475.           Dat_num++;      //對第二維的數據的值清零
  476.           if(Dat_num>18)
  477.             {
  478.               Dat_num=0;
  479.               As_time=1;    //正確接收19位數據標志位
  480.               Dat_su++;                //對第一維的數據增加,最終共3*19組數據
  481.                           if(Dat_su>2)
  482.                           Dat_su=0;
  483.             }
  484.            BPC_temp=0;            //脈沖累加值清零
  485.         }
  486.      }        
  487. }

  488. /***********************************************************************
  489. * 電波鐘中斷檢測函數    :Time_EX1()
  490. * 函數功能              : BPC當外部下降沿時產生中斷,標志置位,清零時間累加值

  491. ***************************************************************************/
  492. void Time_EX1(void)interrupt 2          //外部中斷,優先級為最高,防止漏檢
  493. {
  494.   BPC_add=1;                                          //外部中斷標志
  495.   Dat_add=0;                                          //1ms定時中斷內對變量加1,用來判斷1.5S的超始脈沖
  496. }

復制代碼
發貼不易,敬請評論指點,特別是在程序上,希望能學習時步。
全部資料51hei下載地址:
大笨鐘.zip (53.95 KB, 下載次數: 167)

評分

參與人數 1黑幣 +50 收起 理由
admin + 50 共享資料的黑幣獎勵!

查看全部評分

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏25 分享淘帖 頂1 踩
回復

使用道具 舉報

沙發
ID:744744 發表于 2020-6-20 17:03 | 只看該作者
安裝時需要注意,電波鐘模塊要離單片機遠些,天線也要遠離數碼管,之所以選這么大的盒子,就是為了解決空間物理距離問題。
回復

使用道具 舉報

板凳
ID:744744 發表于 2020-6-20 18:00 | 只看該作者
通過得這么快,管理員辛苦了
回復

使用道具 舉報

地板
ID:392521 發表于 2020-6-22 08:54 | 只看該作者
感謝分享,我也打算做一個玩,請問樓主有沒有原理圖?

回復

使用道具 舉報

5#
ID:744744 發表于 2020-6-22 20:17 | 只看該作者
sdqzlihui 發表于 2020-6-22 08:54
感謝分享,我也打算做一個玩,請問樓主有沒有原理圖?

原理圖沒畫,硬件都是現成的,對應連好就行,更改端口定義就行。需要注意的是BPC電波鐘信號要加一個NPN倒相輸入,它的供電要加一個3.3V的LDO, 單片機的BPC_EN控制腳,采用電阻為壓將這個IO口變為3V,其它的就是照常規連接就好。
在這幾天的不斷試驗中發現,采用STC1T的單片機,加上又采用了24MHZ的晶振,重復開關機,會使時間讀出錯誤碼,1302反應不過來,單片機太快,自己讀到自己的IO口電平了,讀出92點35分,所以建議采用8MHZ晶振,給1302足夠的反應時間。通過更改后就正常了。
回復

使用道具 舉報

6#
ID:143244 發表于 2020-6-23 21:07 | 只看該作者
動手做,記得住,不過用便宜點的開發板更好!
回復

使用道具 舉報

7#
ID:744744 發表于 2020-11-13 14:09 來自觸屏版 | 只看該作者
近幾天又重新做了個2.0版本來除了但留之前的功能外,還增加了夜間關閉led的功能,然后通過聲控喚醒10秒,一來省電,二來放臥室不會影響到睡覺,完全是個小夜燈。
回復

使用道具 舉報

8#
ID:744744 發表于 2020-11-13 14:10 來自觸屏版 | 只看該作者
增加了日期和星期,溫濕度等功能。

IMG_20201113_140607.jpg (1.63 MB, 下載次數: 190)

IMG_20201113_140607.jpg
回復

使用道具 舉報

9#
ID:846386 發表于 2020-12-2 23:51 | 只看該作者
樓主把最新的電路圖和代碼發上來學習,謝謝
回復

使用道具 舉報

10#
ID:383885 發表于 2020-12-3 10:33 | 只看該作者
太棒了,牛!
回復

使用道具 舉報

11#
ID:744744 發表于 2020-12-9 11:58 來自觸屏版 | 只看該作者
kiccleaf 發表于 2020-12-2 23:51
樓主把最新的電路圖和代碼發上來學習,謝謝

哪天有空用電腦上傳上來
回復

使用道具 舉報

12#
ID:744744 發表于 2022-4-17 07:31 來自觸屏版 | 只看該作者
利用一個爛石英鐘外殼,打印一張梅花圖裝飾,又做了個辦工桌小鬧鐘。十分具有年代感。

IMG_20220417_072832.jpg (349.12 KB, 下載次數: 150)

IMG_20220417_072832.jpg
回復

使用道具 舉報

13#
ID:430492 發表于 2022-4-17 13:30 | 只看該作者
樓上這張圖,想法不錯,很好看!!
回復

使用道具 舉報

14#
ID:744744 發表于 2022-4-17 14:07 來自觸屏版 | 只看該作者
cooleaf 發表于 2022-4-17 13:30
樓上這張圖,想法不錯,很好看!!

謝謝,業余時間,迷上了各種diy。做的東西挺多。純屬娛樂。
回復

使用道具 舉報

15#
ID:478849 發表于 2022-4-29 09:08 | 只看該作者
謝謝分享,學習了,原理圖是怎么接線的
回復

使用道具 舉報

16#
ID:146324 發表于 2022-5-5 11:11 | 只看該作者
樓主,能簡單的畫個電路圖嗎?不知道怎么接線。謝謝了
回復

使用道具 舉報

17#
ID:744744 發表于 2022-5-5 11:27 來自觸屏版 | 只看該作者
突然想學習 發表于 2022-5-5 11:11
樓主,能簡單的畫個電路圖嗎?不知道怎么接線。謝謝了

其它的按鍵,顯示等,根據自己的喜好使用,都是通用的。我畫了電波模塊的接線方法,可參考。

IMG_20220505_112454.jpg (552.53 KB, 下載次數: 188)

IMG_20220505_112454.jpg
回復

使用道具 舉報

18#
ID:1011444 發表于 2022-5-8 18:23 | 只看該作者
請教:程序編譯未通過,提示未發現設備,需要更新設備,這是什么原因?另外換用其他單片機(比如stc89c52rc)行嗎、
回復

使用道具 舉報

19#
ID:744744 發表于 2022-5-8 22:22 來自觸屏版 | 只看該作者
kz0018 發表于 2022-5-8 18:23
請教:程序編譯未通過,提示未發現設備,需要更新設備,這是什么原因?另外換用其他單片機(比如stc89c ...

至于是什么問題導致編輯不通過,從描述是很難找出原因的。單片機可以換,不影響。
回復

使用道具 舉報

20#
ID:383222 發表于 2022-5-18 12:33 | 只看該作者
可以通過編譯,謝謝,分享,
回復

使用道具 舉報

21#
ID:272411 發表于 2023-4-19 21:28 | 只看該作者
下載收藏,謝謝分享。可以通過編譯
回復

使用道具 舉報

22#
ID:138707 發表于 2023-8-6 17:01 | 只看該作者
樓上這張圖,想法不錯,很好看!!
回復

使用道具 舉報

23#
ID:1085441 發表于 2023-8-7 02:06 | 只看該作者
可以問一下電波鐘模塊的型號,價格多少?
回復

使用道具 舉報

24#
ID:88256 發表于 2023-8-7 09:59 | 只看該作者
電波鐘在很多地方的室內都不太好接收吧?樓主做的是實用性的東西,我覺得可以換個方案,現在的家里WIFI都是一直開著的,可以使用ESP-12F模塊作為主控以及網絡連接,用網絡對時,走時靠模塊,有糾結的話上RTC(不斷電不斷網其實真沒必要);顯示用TM1650系列,可以7級調節亮度(配合光敏電阻自動調節也行),電源、阻容不算,也就使用ESP-12F+TM1650+數碼管,極度簡潔。
回復

使用道具 舉報

25#
ID:195496 發表于 2023-8-11 08:56 | 只看該作者
kz0018 發表于 2022-5-8 18:23
請教:程序編譯未通過,提示未發現設備,需要更新設備,這是什么原因?另外換用其他單片機(比如stc89c ...

要更改頭文件
回復

使用道具 舉報

26#
ID:929517 發表于 2023-9-11 18:17 來自觸屏版 | 只看該作者
不是低電平才能點亮LED嗎,你這個怎么是高電平?另外,按鍵怎么沒有消抖?
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
韩国v欧美v日本v亚洲| 午夜精品久久久久久久爽| 制服丝袜在线第一页| 亚州精品一二三区| 波多野结衣50连登视频| 国产亚洲黄色片| 国产av熟女一区二区三区 | 中文精品电影| 日本不卡二三区| av中文一区| 成人在线免费观看91| 欧美日韩伦理| 婷婷综合网站| 好看的日韩av电影| 国产农村妇女毛片精品久久莱园子 | 57pao精品| 青青草原成人在线视频| 国产精品免费一区豆花| 成人啪啪免费看| 国产激情一区二区三区在线观看| 精品久久sese| 亚洲国产精品123| 女人床在线观看| 美女日批免费视频| 免费看污污网站| 国产精品无码自拍| av网在线播放| 久热这里只有精品在线| 中文字幕69页| 国产一区二区在线不卡| 色欲av伊人久久大香线蕉影院| 二区三区不卡不卡视频| 免费国产h视频在线观看86| 91抖音在线观看| 男生操女生视频网站| 国产污污在线观看| 91露出在线| 蜜桃在线视频| 视频一区日韩精品| 欧美中文字幕一区二区| 亚洲高清在线| 韩国一区二区在线观看| www欧美成人18+| 亚洲欧美另类在线| 欧美综合一区二区| 日韩av在线网页| 欧美激情喷水视频| 91九色蝌蚪国产| 日韩三级电影网站| 免费av网址在线| 国产高清成人久久| 久久久久99精品成人片毛片| 一区二区小视频| 久热中文字幕在线| 99热热99| 好操啊在线观看免费视频| av免费在线一区| 在线日韩网站| 亚洲自啪免费| 91美女精品福利| 一本久久综合亚洲鲁鲁五月天| 亚洲成avwww人| 欧美激情亚洲另类| 国产欧美日韩伦理| 国产九色porny| 国产一级片中文字幕| 2014亚洲天堂| 国产露脸国语对白在线| 国产成人免费视频app| 在线视频国产三级| 伊人久久国产| 精品国产一区一区二区三亚瑟| 亚洲欧美网站| 国产精品美女久久久久aⅴ国产馆 国产精品美女久久久久av爽李琼 国产精品美女久久久久高潮 | 精品福利樱桃av导航| 精品伦理精品一区| 26uuu亚洲伊人春色| 久久综合九色综合久99| 一级黄色香蕉视频| 三级av在线免费观看| 国产极品久久久| 先锋影院av| 中文字幕有码在线观看| 日韩av网站在线免费观看| 久久久久久久高潮| 亚洲免费观看高清| 日韩精品极品在线观看播放免费视频| 国产999精品| 警花观音坐莲激情销魂小说| 日韩av无码一区二区三区不卡| 91看片在线播放| 牛人国产偷窥女洗浴在线观看| 中日韩免费毛片| 免费一区二区三区四区| 亚洲高清av| 国产精品无圣光一区二区| 欧美不卡视频一区| 国产精品羞羞答答| 日韩欧美国产免费| 日本高清一二三区| 欧美日韩在线精品成人综合网| 色视频在线观看免费| 精品视频在线观看免费观看| 日本欧美久久久久免费播放网| 亚洲精品福利视频网站| 一个人看的www久久| 久久伊人一区二区| 中文字幕天堂网| 国产伦子伦对白视频| 国产一二三视频| 成人午夜sm精品久久久久久久| 亚洲国产欧美国产综合一区| 亚洲色图一区二区| www亚洲欧美| 亚洲欧洲一区二区| 永久免费观看片现看| 在线成人综合色一区| 国产h视频在线观看| 日韩高清在线免费观看| 99精品欧美一区| 亚洲精品第一国产综合精品| 国产精品乱码| 老司机午夜免费福利| 精品国产免费无码久久久| 最新版sss视频在线| 成人爽a毛片| av中文字幕在线不卡| 亚洲精品久久久久中文字幕欢迎你| 亚洲一区精品电影| 国产精久久久久| 国产综合在线播放| 搞黄视频在线观看| 99re66热这里只有精品8| 国产精品每日更新| 久久深夜福利免费观看| av动漫在线免费观看| 日本熟妇乱子伦xxxx| jizzjizzjizz美国| 国产亚洲高清在线观看| 粉嫩在线一区二区三区视频| 亚洲精品美女久久久久| 日本午夜一区二区三区| 一级在线观看视频| 91看片在线| 欧美极品在线| 成人激情视频网站| 国产午夜精品美女视频明星a级| 色播五月综合| 亚洲天堂精品一区| 好爽好深好紧好大| 日韩中文字幕| 国产亚洲欧美一级| 精品中文字幕乱| 欧美 激情 在线| av老司机久久| 国产最新在线| 久久精品91| 精品日韩99亚洲| 亚洲欧洲一区二区在线观看| 国产乡下妇女做爰视频| 偷偷要色偷偷| 欧美国产小视频| 欧美日韩激情视频8区| 成人免费福利在线| 亚洲成人网在线播放| 青青草免费观看完整版高清| 日韩精品一区国产| 国产日韩欧美电影| 欧美在线观看视频| 97精品人妻一区二区三区蜜桃| 韩国av在线播放| 自拍偷拍亚洲| 国产欧美精品在线观看| 91禁外国网站| 色婷婷成人在线| 久久久久久久久久久久网站| 吞精囗交69激情欧美| 国产99久久久久| 国产亚洲xxx| 无码精品国产一区二区三区免费| 97人妻人人澡人人爽人人精品| 永久免费在线观看视频| 三区在线视频| 午夜欧美理论片| 欧美日韩国产小视频在线观看| 懂色中文一区二区三区在线视频| 国产精品99久久久久久成人| 69中国xxxxxxxxx69| 久久在线视频免费观看| 色老汉av一区二区三区| 免费观看国产成人| 国产一级片播放| 色综合久久网女同蕾丝边| 国产亚洲电影| 欧美日韩在线观看视频| 久久国产精品 国产精品| 久久久国产成人| 久久精品色图| 老司机一区二区| 久久久国产在线视频| 亚洲综合123| 九色porny极品| 久久人体视频| 日韩美女一区二区三区| 欧美黄网在线观看| 天天操天天干天天插| 日韩久久一区| 亚洲综合久久av| 国产一区免费视频| 中文无码av一区二区三区| 久热中文字幕在线观看| gogo大尺度成人免费视频| 亚洲精品乱码久久久久久久久 | 国产一级做a爰片久久毛片男| 精品久久久久中文慕人妻| 免费日韩电影| 亚洲狠狠丁香婷婷综合久久久| yy111111少妇影院日韩夜片 | 精品久久中文| 欧美一卡二卡三卡四卡| 一女被多男玩喷潮视频| 午夜国产一级| 窝窝社区一区二区| 日韩午夜小视频| 成人在线观看黄| 国产精品自产拍在线网站| 久久99国产精一区二区三区| 欧美一级在线免费| 成人免费在线小视频| 91精品国自产在线| 丁香在线视频| caoporn国产精品| 91亚洲午夜在线| 波多野结衣在线观看视频| 午夜激情电影在线播放| 日韩精品视频中文字幕| 在线中文字幕不卡| 日韩国产欧美亚洲| 色九视频91| 国内精品福利| 欧美麻豆久久久久久中文 | 欧美高清性hdvideosex| 日韩av在线第一页| 嫩草影院入口一二三| 99精品国产在热久久婷婷| 欧美国产亚洲视频| 一区精品视频| 欧美乱大交xxxxxbbb| 中文字幕一区二区精品区| 久久久久久久久久电影| 国产一级精品aaaaa看| 成人av免费播放| 四虎884aa成人精品最新| 精品日产卡一卡二卡麻豆| 搡的我好爽在线观看免费视频| 成人c视频免费高清在线观看| 国产剧情一区二区三区| 91麻豆蜜桃| 亚洲精品视频91| 日本在线电影一区二区三区| 一个人看的www久久| 大吊一区二区三区| 蜜桃av.网站在线观看| 欧美日韩美女视频| 黄色片视频在线免费观看| jizzjizzjizzjizz日本| 精品一区二区三区免费视频| 91久久久久久久一区二区| 99精品免费观看| 青青草国产成人a∨下载安卓| 尤物tv国产一区| 黄色一级大片在线免费观看| 涩涩av在线| 91精品国产黑色紧身裤美女| 年下总裁被打光屁股sp| 91精品国产91久久久久游泳池 | 亚洲欧洲国产精品久久| 91在线国产剧情| 免费欧美在线视频| 91香蕉电影院| 亚洲免费网站观看视频| 欧美视频日韩| 成人午夜小视频| 天堂中文在线观看视频| 午夜久久美女| 国产精品一区二区在线| 国产成人精品白浆久久69| 国产一区二区三区91| 久久久久久久久久国产| 天堂网一区二区| jizz性欧美23| 国产精品嫩草影院av蜜臀| 在线视频91| 色一情一乱一伦一视频免费看| 一区二区三区精品视频在线观看| 91欧美日韩一区| 无码精品黑人一区二区三区| youjizzjizz亚洲| 亚洲一二在线观看| 欧美成欧美va| 一区二区视频| 亚洲人成网站999久久久综合| 日韩av片在线免费观看| 8av国产精品爽爽ⅴa在线观看 | 亚洲愉拍自拍另类高清精品| 成人av在线播放观看| 在线成人一区| 国产精品乱码人人做人人爱| 精品一区二区三区无码视频| 很黄很a的视频| 久久夜色精品一区| 一级特黄录像免费播放全99| 三级福利视频| 国产剧情在线| 欧美日韩一二区| av漫画在线观看| 黄色aa久久| 亚洲精品成人久久| 精品亚洲乱码一区二区| 欧美在线se| 亚洲天堂色网站| 成年免费在线观看| 久久不见久久见免费视频7| 日本高清不卡的在线| 色wwwwww| 国产麻豆一精品一av一免费| 亚洲精品9999| 亚洲四虎av| 亚洲欧美韩国综合色| 国产欧美一区二| av文字幕在线观看| 欧美日韩国产中文| 精品日韩在线视频| 国产精品极品国产中出| 欧美噜噜久久久xxx| www.蜜臀av| 日韩专区在线视频| 视频二区一区| 亚洲精品字幕在线观看| 久久黄色级2电影| 一区二区精品在线观看| 久久久久久天堂| 国产精品精品国产一区二区| 国产免费一区二区三区香蕉精| 欧美激情一级二级三级在线视频| 91视频一区二区三区| 国产人妻互换一区二区| 在线观看黄网| 51精品秘密在线观看| 免费看一级一片| 97精品国产福利一区二区三区| 亚洲自拍偷拍视频| 俺去啦最新地址| 亚洲午夜影视影院在线观看| 中文字幕在线观看的网站| 在线手机中文字幕| 久久久99免费视频| 九九热免费在线观看| 91精品论坛| 久久久久久亚洲| 97理论电影| 亚洲视频 欧洲视频| 熟女人妻在线视频| 视频精品二区| 91牛牛免费视频| 影音av资源| 一本大道久久精品懂色aⅴ| 老熟妇高潮一区二区三区| 日本a级不卡| 亚洲黄色有码视频| 国产又粗又猛又色又| 日韩av电影一区| 分分操这里只有精品| 女人黄色免费在线观看| 中文字幕日韩精品在线观看| 亚洲免费一级片| 国产成人亚洲综合a∨婷婷| www.com操| 久久久加勒比| 日本国产精品视频| 免费黄色小视频| 国产偷自视频区视频一区二区| 日本黄色片一级片| а√天堂中文在线资源8| 久99久在线视频| 亚洲人在线观看视频| 91香蕉视频黄| 99精品全国免费观看| 清纯唯美日韩| 精品日产一区2区三区黄免费| 高清美女视频一区| 日韩激情在线视频| 波多野结衣久久高清免费| 欧美国产97人人爽人人喊| 国产美女网站在线观看| 欧美激情不卡| 国产精品aaa| 导航艳情国产电影| 欧美影院一区二区| 亚洲视频在线观看一区二区|