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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 3556|回復: 6
收起左側

單片機1.2寸數碼管時鐘程序 帶溫度 光控 含源碼電路原理圖

  [復制鏈接]
ID:378402 發表于 2023-6-30 18:34 | 顯示全部樓層 |閱讀模式
首先感謝論壇中提供”1寸數碼管時鐘+12C5A60S2單片機+自動亮度+時間溫度輪流顯示(實物+代碼)“作者,
本人在原作者基礎上,根據現有元器件,成功制作了1.2寸數碼管時鐘,由于首次使用嘉立創繪制原理圖和PCB,
由于使用雙面板制作PCB

線徑較細和過孔處理技術不行改為單面板制作,制作中DS1302不計時,后增加了C3和C4
濾波電容解決了問題。

制作出來的實物圖如下:
IMG_20230630_1.jpg IMG_20230630_2.jpg IMG_20230630_3.jpg

單片機源程序如下:
  1. /********************************************************************************
  2.            本人在原作者基礎上,根據現有元器件,成功制作了1.2寸數碼管時鐘,由于首次使用嘉立創繪制原理圖和PCB,
  3.            使用雙面板制作PCB,由于線徑較細和過孔處理技術不行改為單面板制作,制作中DS1302不計時,后增加了C3和C4
  4.            濾波電容解決了問題。

  5. 描述: 4位共陽數碼管時鐘,顯示88:88樣式,正常走時的時候,“:”1秒閃爍2次;調時間的的時候冒號熄滅
  6.        調時:按KEY1按鍵第1次小時位閃爍,再按KEY2一次小時加1,按KEY3一次小時減1,長按連加連減;
  7.                          按KEY1按鍵第2次分鐘位閃爍,再按KEY2一次分鐘加1,按KEY3一次分鐘減1,長按連加連減;
  8.                          按KEY1按鍵第3次,秒從零開始累加,時鐘回到正常走時;
  9.                          校時的時候先調好時、分,分鐘要比參考時間的分鐘加1分,
  10.                          再看參考時間的秒數到了59再按KEY1按鍵的第3次,這樣對時就比較準了。
  11.                          加備用電池,掉電走時
  12.                         
  13.                          KEY2鍵第2功能:非調時狀態,為光控開關;
  14.                          KEY3鍵第2功能:非調時狀態,為顯示切換開關;
  15.                          DS18B20做溫度檢測,實時時鐘與溫度輪流顯示;
  16.                          溫度顯示范圍: -9.9℃~99.9℃;
  17.                          增加數碼管調亮度功能,按鍵10級亮度P1.0接10K電阻上拉、光敏電阻下拉分壓;
  18.                          環境光線越亮,數碼管越亮,反之數碼管越暗。
  19. 實物通過.  
  20.                          12MHz晶振,STC15F2K60S2+DS1302時鐘芯片+DS18B20,
  21.                          P0口接段位,P2^4~P2^7接pnp三極管控制4個共陽極。
  22. **********************************************************************************/
  23. //#include <STC12C5A60S2.h>
  24. #include <STC15F2K60S2.h>
  25. #include <intrins.h>
  26. #define uchar unsigned char
  27. #define uint unsigned int


  28. sbit TSCLK = P2^2;//時鐘線
  29. sbit TIO   = P2^1;//數據線
  30. sbit TRST  = P2^0;//使能端

  31. sbit key1 = P3^4;   //設置鍵
  32. sbit key2 = P3^3;   //加 /光控開關鍵(校時的時候做加鍵,反之為光控開關)
  33. sbit key3 = P3^2;   // 減/顯示切換鍵
  34. sbit DQ = P2^3;                //DS18B20數據口

  35. sbit w1 = P2^4;          //設置位驅動口
  36. sbit w2 = P2^5;
  37. sbit w3 = P2^6;
  38. sbit w4 = P2^7;
  39. sbit w5 = P3^7;         //此位不顯示
  40. sbit dd = P1^4;         //蜂鳴器控制端        

  41. uchar xs=0; //顯示切換計數變量
  42. uchar tian=0;
  43. uchar knum,shan_cont;
  44. char shi,fen,miao;
  45. uchar ba=40;
  46. uint mh,mh_count,count;
  47. bit shan;           //校時閃爍標志位
  48. uchar s=0;                   //顯示負號
  49. uint temp;        //溫度值
  50. bit flag;                  //輪流顯示標志位
  51. bit flag_gk;          //光控標志位
  52. bit flag_js=0;          //自動校時標志
  53. bit flag_fm;          //蜂鳴器啟動標志
  54. uchar fm;                //蜂鳴器計時變量
  55. /***************************************定義轉換控制寄存器控制位*****************************************/
  56. #define ADC_POWER                   0X80            //電源控制位
  57. #define ADC_FLAG                    0X10            //轉換結束標志位
  58. #define ADC_START                   0X08            //轉換開始位
  59. /*********************************************定義AD轉換速度*********************************************/
  60. #define ADC_SPEEDLL_540         0X00           
  61. #define ADC_SPEEDLL_360                0X20
  62. #define ADC_SPEEDLL_180                0X40
  63. #define ADC_SPEEDLL_90                0X60
  64. /***********寫時分秒地址************/
  65. #define write_shi  0x84
  66. #define write_fen  0x82
  67. #define write_miao 0x80
  68. #define write_ram  0xc0
  69. /***********讀時分秒地址************/
  70. #define read_shi  0x85
  71. #define read_fen  0x83
  72. #define read_miao 0x81
  73. #define read_ram  0xc1
  74. uchar code table[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xff,0x46,0xbf};//共陽段碼 (0--9、黑屏、C、-)


  75. ...............程序已在2樓更新...........
復制代碼

下載: 程序和PDF格式原理圖.7z (96.29 KB, 下載次數: 44)

評分

參與人數 1黑幣 +50 收起 理由
admin + 50

查看全部評分

回復

使用道具 舉報

ID:378402 發表于 2023-7-2 18:05 | 顯示全部樓層

RE: 1.2寸數碼管時鐘_溫度_光控_含源碼_原理圖

首先感謝論壇中提供”1寸數碼管時鐘+12C5A60S2單片機+自動亮度+時間溫度輪流顯示(實物+代碼)“作者,
           本人在原作者基礎上,根據現有元器件,成功制作了1.2寸數碼管時鐘,由于首次使用嘉立創繪制原理圖和PCB,
           使用雙面板制作PCB,由于線徑較細和過孔處理技術不行改為單面板制作,制作中DS1302不計時,后增加了C3和C4
           濾波電容解決了問題。
  1. /*********************************************************************************
  2. 描述: 4位共陽數碼管時鐘,顯示88:88樣式,正常走時的時候,“:”1秒閃爍2次;調時間的的時候冒號熄滅
  3.        調時:按KEY1按鍵第1次小時位閃爍,再按KEY2一次小時加1,按KEY3一次小時減1,長按連加連減;
  4.                          按KEY1按鍵第2次分鐘位閃爍,再按KEY2一次分鐘加1,按KEY3一次分鐘減1,長按連加連減;
  5.                          按KEY1按鍵第3次,秒從零開始累加,時鐘回到正常走時;
  6.                          校時的時候先調好時、分,分鐘要比參考時間的分鐘加1分,
  7.                          再看參考時間的秒數到了59再按KEY1按鍵的第3次,這樣對時就比較準了。
  8.                          加備用電池,掉電走時
  9.                          
  10.                          KEY2鍵第2功能:非調時狀態,為光控開關;
  11.                          KEY3鍵第2功能:非調時狀態,為顯示切換開關;
  12.                          DS18B20做溫度檢測,實時時鐘與溫度輪流顯示;
  13.                          溫度顯示范圍: -9.9℃~99.9℃;
  14.                          增加數碼管調亮度功能,按鍵10級亮度P1.0接10K電阻上拉、光敏電阻下拉分壓;
  15.                          環境光線越亮,數碼管越亮,反之數碼管越暗。
  16. 實物通過.  
  17.                          12MHz晶振,STC15F2K60S2+DS1302時鐘芯片+DS18B20,
  18.                          P0口接段位,P2^4~P2^7接pnp三極管控制4個共陽極。
  19. **********************************************************************************/
  20. //#include <STC12C5A60S2.h>
  21. #include <STC15F2K60S2.h>
  22. #include <intrins.h>
  23. #define uchar unsigned char
  24. #define uint unsigned int


  25. sbit TSCLK = P2^2;//時鐘線
  26. sbit TIO   = P2^1;//數據線
  27. sbit TRST  = P2^0;//使能端

  28. sbit key1 = P3^4;   //設置鍵
  29. sbit key2 = P3^3;   //加 /光控開關鍵(校時的時候做加鍵,反之為光控開關)
  30. sbit key3 = P3^2;   // 減/顯示切換鍵
  31. sbit DQ = P2^3;                //DS18B20數據口

  32. sbit w1 = P2^4;          //設置位驅動口
  33. sbit w2 = P2^5;
  34. sbit w3 = P2^6;
  35. sbit w4 = P2^7;
  36. sbit w5 = P3^7;         //此位不顯示
  37. sbit dd = P1^4;         //蜂鳴器控制端       

  38. uchar xs=0; //顯示切換計數變量
  39. uchar tian=0;
  40. uchar knum,shan_cont;
  41. char shi,fen,miao;
  42. uchar ba=40;
  43. uint mh,mh_count,count;
  44. bit shan;           //校時閃爍標志位
  45. uchar s=0;                   //顯示負號
  46. uint temp;        //溫度值
  47. bit flag;                  //輪流顯示標志位
  48. bit flag_gk;          //光控標志位
  49. bit flag_js=0;          //自動校時標志
  50. bit flag_fm;          //蜂鳴器啟動標志
  51. uchar fm;                //蜂鳴器計時變量
  52. /***************************************定義轉換控制寄存器控制位*****************************************/
  53. #define ADC_POWER                   0X80            //電源控制位
  54. #define ADC_FLAG                    0X10            //轉換結束標志位
  55. #define ADC_START                   0X08            //轉換開始位
  56. /*********************************************定義AD轉換速度*********************************************/
  57. #define ADC_SPEEDLL_540         0X00           
  58. #define ADC_SPEEDLL_360                0X20
  59. #define ADC_SPEEDLL_180                0X40
  60. #define ADC_SPEEDLL_90                0X60
  61. /***********寫時分秒地址************/
  62. #define write_shi  0x84
  63. #define write_fen  0x82
  64. #define write_miao 0x80
  65. #define write_ram  0xc0
  66. /***********讀時分秒地址************/
  67. #define read_shi  0x85
  68. #define read_fen  0x83
  69. #define read_miao 0x81
  70. #define read_ram  0xc1
  71. uchar code table[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xff,0x46,0xbf};//共陽段碼 (0--9、黑屏、C、-)

  72. /*********************************************************************************************************
  73. ** 函數功能 :延時函數
  74. ** 函數說明 :利用軟件延時,占用CPU
  75. ** 入口參數 :time:需要延時的時間,
  76. ** 出口參數 :無
  77. *********************************************************************************************************/
  78. void Delay_ms(uint time)
  79. {
  80.         uint i,j;
  81.         for(i = 0;i < time;i ++)
  82.                 for(j = 0;j < 45;j ++);
  83. }

  84. /*********************************************************************************************************
  85. ** 函數功能 :延時函數
  86. ** 函數說明 :利用軟件延時,占用CPU,經調試最小單位大約為1us
  87. ** 入口參數 :time:需要延時的時間,單位us
  88. ** 出口參數 :無
  89. *********************************************************************************************************/
  90. void delay(uchar n)
  91. {
  92.     while (n--)
  93.     {
  94.         _nop_();
  95.         _nop_();
  96.     }
  97. }

  98. /*****************DS18B20******************/

  99. void Init_Ds18b20(void)     //DS18B20初始化send reset and initialization command
  100. {
  101.         DQ = 1;                     //DQ復位,不要也可行。
  102.         delay(1);                  //稍做延時
  103.         DQ = 0;                    //單片機拉低總線
  104.         //delay(250);                //精確延時,維持至少480us
  105.         EA=0;
  106.         delay(170);
  107.         EA=1;
  108.         DQ = 1;
  109.         EA=0;                    //釋放總線,即拉高了總線
  110.         delay(170);                //此處延時有足夠,確保能讓DS18B20發出存在脈沖。
  111.         EA=1;
  112. }

  113. uchar Read_One_Byte()       //讀取一個字節的數據read a byte date
  114.                             //讀數據時,數據以字節的最低有效位先從總線移出
  115. {
  116.         uchar i   = 0;
  117.         uchar dat = 0;
  118.         for(i=8;i>0;i--)
  119.         {
  120.            DQ = 0;                  //將總線拉低,要在1us之后釋放總線                       //單片機要在此下降沿后的15us內讀數據才會有效。
  121.            delay(1);                //至少維持了1us,表示讀時序開始
  122.            dat >>= 1;               //讓從總線上讀到的位數據,依次從高位移動到低位。
  123.            DQ = 1;                  //釋放總線,此后DS18B20會控制總線,把數據傳輸到總線上
  124.            delay(7);                //延時7us,此處參照推薦的讀時序圖,盡量把控制器采樣時間放到讀時序后的15us內的最后部分
  125.            if(DQ)                   //控制器進行采樣
  126.            {
  127.             dat |= 0x80;            //若總線為1,即DQ為1,那就把dat的最高位置1;若為0,則不進行處理,保持為0
  128.            }
  129.            EA=0;        
  130.            delay(40);              //此延時不能少,確保讀時序的長度60us。
  131.            EA=1;
  132.         }
  133.         return (dat);
  134. }

  135. void Write_One_Byte(uchar dat)
  136. {
  137.         uchar i = 0;
  138.         for(i=8;i>0;i--)
  139.         {
  140.            DQ = 0;                        //拉低總線
  141.            delay(1);                       //至少維持了1us,表示寫時序(包括寫0時序或寫1時序)開始
  142.            DQ = dat&0x01;                 //從字節的最低位開始傳輸
  143.                                          //指令dat的最低位賦予給總線,必須在拉低總線后的15us內,                              //因為15us后DS18B20會對總線采樣。
  144.            delay(60);                     //必須讓寫時序持續至少60us
  145.            DQ = 1;                        //寫完后,必須釋放總線,
  146.            dat >>= 1;
  147.            delay(1);
  148.         }
  149. }


  150. uint Get_Tmp()                   //獲取溫度get the temperature
  151. {
  152.         float tt;
  153.         uchar L,M;
  154. EA=0;
  155.         Init_Ds18b20();                //初始化
  156.         Write_One_Byte(0xcc);          //忽略ROM指令
  157.         Write_One_Byte(0x44);          //溫度轉換指令
  158.         Init_Ds18b20();                 //初始化
  159.         Write_One_Byte(0xcc);          //忽略ROM指令
  160.         Write_One_Byte(0xbe);          //讀暫存器指令
  161.         L = Read_One_Byte();           //讀取到的第一個字節為溫度LSB
  162.         M = Read_One_Byte();           //讀取到的第一個字節為溫度MSB
  163.         temp = M;                      //先把高八位有效數據賦于temp
  164.         temp <<= 8;                    //把以上8位數據從temp低八位移到高八位
  165.         temp = temp|L;                //兩字節合成一個整型變量
  166. EA=1;
  167.         if(M >= 0x08)        //判斷是否為負數
  168.         {
  169.                 temp = ~temp + 1;//負數是以補碼的形式存放的需要取反加1
  170.                 s = 0xbf;  //顯示負數符號
  171.         }
  172.         else s = 0;           //為正數則不顯示負數符號

  173.         tt = temp*0.0625;              //得到真實十進制溫度值
  174.                                         //因為DS18B20可以精確到0.0625度
  175.                                         //所以讀回數據的最低位代表的是0.0625度
  176.         temp = tt*10+0.5;               //放大十倍
  177.                                         //這樣做的目的將小數點后第一位也轉換為可顯示數字
  178.                                //同時進行一個四舍五入操作。
  179.         return temp;
  180. }


  181. /****************溫度顯示函數**************/

  182. void Display_tem(uint temp)   //顯示程序
  183. {
  184.         uchar A1,A2,A3;
  185.         A1 = temp/100;    //百位
  186.         A2 = temp%100/10;   //十位
  187.         A3 = temp%10;    //個位
  188.        
  189.         if(A1 > 0 && s == 0 )
  190.         {
  191.                 P0 = 0xff;
  192.                 w2 = 1; w3 = 1; w4 = 1;
  193.                 Delay_ms(50-ba);
  194.                 P0 = table[A1];    //顯示百位
  195.                 w1 = 0;
  196.                 Delay_ms(ba);
  197.         }
  198.         else
  199.         {
  200.                 if(A1 == 0 && s == 0)
  201.                 {
  202.                         P0 = 0xff;
  203.                         w2 = 1; w3 = 1; w4 = 1;
  204.                         Delay_ms(50-ba);
  205.                         P0 = table[10];    //百位為0不顯
  206.                         w1 = 0;
  207.                         Delay_ms(ba);
  208.                 }
  209.                 else
  210.                 if(s != 0)
  211.                 {
  212.                         P0 = 0xff;
  213.                         w2 = 1; w3 = 1; w4 = 1;
  214.                         Delay_ms(50-ba);
  215.                         P0 = s;    //百位為負數顯示-
  216.                         w1 = 0;
  217.                         Delay_ms(ba);
  218.                 }
  219.                  
  220.        
  221.         }
  222.        
  223.        
  224.         P0 = 0xff;
  225.         w1 = 1; w3 = 1; w4 = 1;
  226.         Delay_ms(50-ba);
  227.         P0 = table[A2]&0X7F;   //顯示十位,使用的是有小數點的數組(因為temp值擴大了10倍,雖然是十位,實際為個位)
  228.         w2 = 0;
  229.         Delay_ms(ba);
  230.        
  231.         P0 = 0xff;
  232.         w1 = 1; w2 = 1;  w4 = 1;
  233.         Delay_ms(50-ba);
  234.         P0 = table[A3];
  235.         w3 = 0;   
  236.         Delay_ms(ba);       
  237.          
  238.         P0 = 0xff;
  239.         w1 = 1; w2 = 1; w3 = 1;
  240.         Delay_ms(50-ba);
  241.         P0 = 0x46;   //顯示C字樣
  242.         w4 = 0;
  243.         Delay_ms(ba);
  244.        
  245.         P0 = 0xff;
  246.         w1 = 1; w2 = 1; w3 = 1;
  247.         Delay_ms(50-ba);
  248.         P0 = 0xff;   
  249.         w5 = 0;
  250.         P0 = 0xff;
  251.         Delay_ms(ba);       
  252. }



  253. void display( uchar shi,uchar fen)           //時間顯示函數
  254. {

  255. /*****正常顯示******/
  256.         if(knum == 0)
  257.         {
  258.                 if(shi/10 > 0)
  259.                 {
  260.                         w2 = 1; w3 = 1; w4 = 1;
  261.                         Delay_ms(50-ba);
  262.                         P0 = table[shi/10];    //顯示小時十位
  263.                         w1 = 0;
  264.                         Delay_ms(ba);
  265.                 }
  266.                 else
  267.                 {
  268.                         w2 = 1; w3 = 1; w4 = 1;
  269.                         Delay_ms(50-ba);
  270.                         P0 = table[10];    //小時十位為0不顯示
  271.                         w1 = 0;
  272.                         Delay_ms(ba);
  273.                
  274.                 }
  275.        
  276.                 P0 = 0xff;
  277.                 w1 = 1; w3 = 1; w4 = 1;
  278.                 Delay_ms(50-ba);
  279.                 if(mh_count>=50)
  280.                 P0 = table[shi%10]&0x7f;    //顯示小時個位
  281.                 else
  282.                 P0 = table[shi%10];
  283.                 w2 = 0;
  284.                 Delay_ms(ba);
  285.                  
  286.                 P0 = 0xff;
  287.                 w1 = 1; w2 = 1; w4 = 1;
  288.                 Delay_ms(50-ba);
  289.                 if(mh_count>=50)
  290.                 P0 = table[fen/10]&0x7f;    //顯示分鐘十位
  291.                 else
  292.                 P0 = table[fen/10];
  293.                 w3 = 0;
  294.                 Delay_ms(ba);
  295.        
  296.                 P0 = 0xff;
  297.                 w2 = 1; w3 = 1; w1 = 1;
  298.                 Delay_ms(50-ba);
  299.                 P0 = table[fen%10];    //顯示分鐘個位
  300.                 w4 = 0;
  301.                 Delay_ms(ba);
  302.        
  303.                 P0 = 0xff;
  304.                 w1 = 1; w2 = 1; w3 = 1;
  305.                 Delay_ms(50-ba);
  306.                 P0 = 0xff;   
  307.                 w5 = 0;                  //這里掃描一個空位,數碼管前4位亮度就均勻了,第4位與前3位亮度一致,不然第4位要比前3位亮
  308.                 P0 = 0xff;
  309.                 Delay_ms(ba);       
  310.         }

  311. /********校時小時位閃爍************/

  312.         if(knum==1)
  313.         {
  314.                  if( shan==0 )
  315.                 {
  316.                 w2 = 1; w3 = 1; w4 = 1;
  317.                 Delay_ms(50-ba);
  318.                 P0 = 0xff;    //顯示小時十位
  319.                 w1 = 0;
  320.                 Delay_ms(ba);

  321.                 P0 = 0xff;
  322.                 w1 = 1; w3 = 1; w4 = 1;
  323.                 Delay_ms(50-ba);
  324.                 P0 = 0xff;;
  325.                 w2 = 0;
  326.                 Delay_ms(ba);
  327.                 }
  328.        

  329.                 else
  330.                 {
  331.                         w2 = 1; w3 = 1; w4 = 1;
  332.                         Delay_ms(50-ba);
  333.                         P0 = table[shi/10];    //顯示小時十位
  334.                         w1 = 0;
  335.                         Delay_ms(ba);
  336.                  
  337.                         P0 = 0xff;
  338.                         w1 = 1; w3 = 1; w4 = 1;
  339.                         Delay_ms(50-ba);
  340.                         P0 = table[shi%10];
  341.                         w2 = 0;
  342.                         Delay_ms(ba);
  343.                 }         
  344.                 P0 = 0xff;
  345.                 w1 = 1; w2 = 1; w4 = 1;
  346.                 Delay_ms(50-ba);
  347.                 P0 = table[fen/10];
  348.                 w3 = 0;
  349.                 Delay_ms(ba);
  350.        
  351.                 P0 = 0xff;
  352.                 w2 = 1; w3 = 1; w1 = 1;
  353.                 Delay_ms(50-ba);
  354.                 P0 = table[fen%10];    //顯示分鐘個位
  355.                 w4 = 0;
  356.                 Delay_ms(ba);
  357.        
  358.                 P0 = 0xff;
  359.                 w1 = 1; w2 = 1; w3 = 1;
  360.                 Delay_ms(50-ba);
  361.                 P0 = 0xff;   
  362.                 w5 = 0;                  //這里掃描一個空位,數碼管前4位亮度就均勻了,第4位與前3位亮度一致,不然第4位要比前3位亮
  363.                 P0 = 0xff;
  364.                 Delay_ms(ba);
  365.         }       
  366. /*******校時分鐘位閃爍*******/

  367.         if(knum==2 )
  368.         {
  369.                 if(shan==0)
  370.                 {
  371.                 w2 = 1; w1 = 1; w4 = 1;
  372.                 Delay_ms(50-ba);
  373.                 P0 = 0xff;    //顯示小時十位
  374.                 w3 = 0;
  375.                 Delay_ms(ba);

  376.                 P0 = 0xff;
  377.                 w1 = 1; w3 = 1; w2 = 1;
  378.                 Delay_ms(50-ba);
  379.                 P0 = 0xff;;
  380.                 w4 = 0;
  381.                 Delay_ms(ba);
  382.                 }
  383.                 else
  384.                 {
  385.                         w2 = 1; w1 = 1; w4 = 1;
  386.                         Delay_ms(50-ba);
  387.                         P0 = table[fen/10];    //顯示小時十位
  388.                         w3 = 0;
  389.                         Delay_ms(ba);
  390.                  
  391.                         P0 = 0xff;
  392.                         w1 = 1; w3 = 1; w3 = 1;
  393.                         Delay_ms(50-ba);
  394.                         P0 = table[fen%10];
  395.                         w4 = 0;
  396.                         Delay_ms(ba);
  397.                 }         

  398.                 P0 = 0xff;
  399.                 w3 = 1; w2 = 1; w4 = 1;
  400.                 Delay_ms(50-ba);
  401.                 P0 = table[shi/10];
  402.                 w1 = 0;
  403.                 Delay_ms(ba);
  404.        
  405.                 P0 = 0xff;
  406.                 w4 = 1; w3 = 1; w1 = 1;
  407.                 Delay_ms(50-ba);
  408.                 P0 = table[shi%10];    //顯示分鐘個位
  409.                 w2 = 0;
  410.                 Delay_ms(ba);


  411.        
  412.                 P0 = 0xff;
  413.                 w1 = 1; w2 = 1; w3 = 1;
  414.                 Delay_ms(50-ba);
  415.                 P0 = 0xff;   
  416.                 w5 = 0;                  //這里掃描一個空位,數碼管前4位亮度就均勻了,第4位與前3位亮度一致,不然第4位要比前3位亮
  417.                 P0 = 0xff;
  418.                 Delay_ms(ba);
  419.         }               
  420.        
  421. }


  422. void t0_init()
  423. {
  424.         TMOD |= 0x01;  //定時器0,16位模式
  425.         TL0 = 0xF0;                //設置定時初值 10毫秒初值 @12MHz
  426.         TH0 = 0xD8;                //設置定時初值
  427.         EA=1;
  428.         ET0=1;
  429.         TR0 = 1;
  430. }





  431. /*********************************************************************************************************
  432. ** 函數功能 :內置ADC的初始化配置
  433. ** 函數說明 :使用內置ADC時需要先配置對應的P1口的管腳為模擬輸入
  434. ** 入口參數 :port:需要配置為模擬輸入的通道,使用或運算可以同時配置多個管腳
  435. **                          如:ADC_Init(ADC_PORT0 | ADC_PORT1 | ADC_PORT2)調用此函數后可以同時配置P1^0,P1^1,P1^2為模擬輸入
  436. ** 出口參數 :無
  437. *********************************************************************************************************/

  438. void ADC_Init()
  439. {
  440.         P1ASF=0x01;//設置AD轉換通道 P1.0
  441.         ADC_RES=0;//清空轉換結果
  442.         ADC_CONTR=ADC_POWER | ADC_SPEEDLL_540;//打開AD轉化器電源
  443.         _nop_();
  444.         _nop_();
  445.         _nop_();
  446.         _nop_();
  447. }
  448. /*********************************************************************************************************
  449. ** 函數功能 :獲取ADC對應通道的值,查詢法
  450. ** 函數說明 :每次只能獲取一個通道的值,不同通道需要分別調用該函數獲取
  451. ** 入口參數 :
  452. ** 出口參數 :
  453. *********************************************************************************************************/
  454. uchar GetADCResult()//讀取通道ch的電壓值
  455. {
  456.         ADC_CONTR = ADC_POWER | ADC_SPEEDLL_540 | ADC_START;//開始轉換,并設置測量通道為P1^0
  457.         _nop_();//需經過四個CPU時鐘延時,上述值才能保證被設進ADC_CONTR控制寄存器
  458.         _nop_();
  459.         _nop_();
  460.         _nop_();
  461.         while(!(ADC_CONTR & ADC_FLAG));//等待轉換結束
  462.         ADC_CONTR &= ~ADC_FLAG;//軟件清除中斷控制位
  463.         return         ADC_RES;
  464. }
  465. void timer0() interrupt 1

  466. {

  467.         TL0 = 0xF0;                //重裝定時初值 10毫秒初值 @12MHz
  468.         TH0 = 0xD8;                //重裝定時初值

  469.        
  470.         mh_count++;                  //冒號閃爍變量
  471.         if(mh_count==100) //1秒時間到
  472.         {
  473.                 mh_count=0;
  474.                 count++;
  475.                 if(count==5)
  476.                 {
  477.                         count=0;
  478.                         flag = !flag;
  479.                 }
  480.         }


  481.         if(knum != 0)  //調時間的時候,閃爍的位表示為調節的位
  482.     {
  483.                 shan_cont++;
  484.         if(shan_cont==30)  //設置時,300ms閃爍時間,可根據實際效果調整
  485.         {
  486.                 shan_cont=0;
  487.                 shan = !shan;
  488.         }
  489.     }

  490.         if(flag_fm)         //如果蜂鳴器啟動標志為1
  491.         {
  492.                 dd = 0;           //蜂鳴器響
  493.                 fm++;           //計時變量自加
  494.                 if(fm == 30) //到300ms,蜂鳴器停
  495.                 {
  496.                         fm = 0;         //計時變量清零
  497.                         dd = 1;        // 蜂鳴器停
  498.                         flag_fm = 0;//啟動標志清零
  499.                 }

  500.         }
  501. }  


  502. //寫DS1302數據
  503. void Write_DS1302_DAT(uchar cmd, uchar dat)
  504. {
  505. uchar i;
  506. /****************************************/               
  507.         TSCLK = 1;                         //把復位線拿高
  508.         for(i=0;i<8;i++)
  509.         {                                     //低位在前
  510.                 TRST = 0;                 //時鐘線拿低開始寫數據
  511.                 TIO = cmd & 0x01;           
  512.                 cmd >>= 1;                 //把地址右移一位
  513.                 TRST = 1;                 //時鐘線拿高
  514.         }       
  515.         for(i=0;i<8;i++)
  516.         {
  517.                 TRST = 0;                 //時鐘線拿低開始寫數據
  518.                 TIO = dat & 0x01;
  519.                 dat >>= 1;                 //把數據右移一位
  520.                 TRST = 1;                 //時鐘線拿高
  521.         }
  522.         TSCLK = 0;                         //復位線合低
  523.         TRST = 0;
  524.         TIO = 0;
  525. /**************************************/
  526. }
  527. //讀DS1302數據
  528. uchar Read_DS1302_DAT(uchar cmd)
  529. {
  530.         uchar i, dat;
  531. /*************************************************/

  532.         TSCLK = 1; //拉低數據總線
  533.         for(i = 0; i < 8; i++)//每次寫1位,寫8次
  534.         {
  535.                 TRST = 0;                 //拉低時鐘總線
  536.                 TIO = cmd & 0x01;//寫1位數據,從最低位開始寫
  537.                 cmd >>=1;                 //右移一位
  538.                 TRST = 1;                 //拉高時鐘總線,產生上升沿數據被DS1302讀走

  539.         }
  540.         for(i = 0; i < 8; i++)//每次讀1位,讀8次
  541.         {
  542.                 TRST = 0;                  //拉低時鐘總線,產生下降沿,DS1302把數據放到TIO上
  543.                 dat >>= 1;                  //右移一位
  544.                 if(TIO==1)        dat |= 0x80;//讀取數據,從最低位開始
  545.                 TRST = 1;                        //拉高時鐘總線,以備下一次產生下降沿
  546.         }
  547.         TSCLK=0;
  548.         TRST=0;
  549.         TIO=0;

  550.         return dat;        //返回讀出數據

  551. /************************************************/


  552. }


  553. //數據轉BCD碼
  554. uchar Dat_Chg_BCD(uchar dat)
  555. {
  556.         uchar dat1, dat2;
  557.         dat1 = dat / 10;
  558.         dat2 = dat % 10;
  559.         dat2 = dat2 + dat1 * 16;
  560.         return dat2;
  561. }       


  562. //BCD碼轉換為數據
  563. uchar BCD_Chg_Dat(uchar dat)
  564. {
  565.         uchar dat1, dat2;
  566.         dat1 = dat / 16;
  567.         dat2 = dat % 16;
  568.         dat2 = dat2 + dat1 * 10;
  569.         return dat2;
  570. }


  571. void init_1302()                //初始化函數 設置時間
  572. {                                                //加備用電池,掉電走時

  573.         if(Read_DS1302_DAT(read_ram) != 0xaa) //如果第00個RAM位置不等于0xaa,就初始化1302
  574.         {
  575.                 Write_DS1302_DAT(0x8e, 0);//清除寫保護
  576.         Write_DS1302_DAT(write_miao, Dat_Chg_BCD(Read_DS1302_DAT(0x81)));//調時鐘芯片秒(并且進行BCD碼轉換)
  577.                 Write_DS1302_DAT(write_fen, Dat_Chg_BCD(Read_DS1302_DAT(0x83)));//調時鐘芯片分
  578.                 Write_DS1302_DAT(write_shi, Dat_Chg_BCD(Read_DS1302_DAT(0x85)));//調時鐘芯片時
  579.                 Write_DS1302_DAT(write_ram,0xaa);//寫入初始化標志RAM(第00個RAM位置)
  580.                 Write_DS1302_DAT(0x8e, 0x80);//開寫保護
  581.         }
  582. }

  583. void read_sf()
  584. {

  585.         miao = BCD_Chg_Dat(Read_DS1302_DAT(0x81));//讀秒寄存器(并且進行BCD碼轉換)
  586.         fen        = BCD_Chg_Dat(Read_DS1302_DAT(0x83));//讀分寄存器
  587.         shi = BCD_Chg_Dat(Read_DS1302_DAT(0x85));//讀時寄存器
  588. }

  589. void keysan()
  590. {
  591.     static bit kf1=0, kf3=0,kf2=0;  //自鎖標志,這里一定要加static(或者用全局變量),否則按鍵不靈
  592.     static uint i=0,j=0,k=0,m=0,n=0;        //消抖延時變量
  593.                
  594.         if(key1==1)                //設置         //IO是高電平,說明按鍵沒有被按下,這時要及時清零一些標志位
  595.         {       
  596.         i=0;           //按鍵消抖計時變量清零
  597.         kf1=0;           //按鍵自鎖標志清零
  598.         }
  599.         else if(kf1 == 0)        //有按鍵按下,且是第一次被按下
  600.         {       
  601.         flag_fm = 1;         //啟動蜂鳴器
  602.                 ++i;
  603.         if(i>10)                   //i>10  ADC查詢方式用
  604.         {
  605.             i=0;
  606.             kf1=1;         //自鎖按鍵置位,避免一直觸發
  607.             knum++;
  608.                         if(knum==1)
  609.                         {
  610.                                 Write_DS1302_DAT(0x8e,0x00);                //寫保護取消
  611.                                 Write_DS1302_DAT(write_miao,0x80); //  寫秒80,時鐘停止走時;
  612.                        
  613.                         }
  614.             if(knum==3)
  615.                         {
  616.                                  knum = 0;

  617.                                 Write_DS1302_DAT(write_miao,0x00);
  618.                                 Write_DS1302_DAT(0x8e,0x80);                //保護啟動

  619.                         }
  620.         }        
  621.         }
  622. /************顯示和光控切換****************/
  623.         if(knum == 0)
  624.         {
  625.                 if(key3==1)                //設置         //IO是高電平,說明按鍵沒有被按下,這時要及時清零一些標志位
  626.                 {       
  627.                 m=0;           //按鍵消抖計時變量清零
  628.                 kf3=0;           //按鍵自鎖標志清零
  629.                 }
  630.                 else if(kf3 == 0)        //有按鍵按下,且是第一次被按下
  631.                 {        flag_fm = 1;         //啟動蜂鳴器
  632.                 ++m;
  633.                 if(m>10)                   //i>10  ADC查詢方式用
  634.                 {
  635.                     m=0;
  636.                     kf3=1;         //自鎖按鍵置位,避免一直觸發
  637.                     xs++;
  638.                    if(xs==3)
  639.                                 {
  640.                                          xs = 0;
  641.        
  642.                                 }
  643.                 }        
  644.                 }

  645.                 if(key2==1)                //設置         //IO是高電平,說明按鍵沒有被按下,這時要及時清零一些標志位
  646.                 {
  647.                 n=0;           //按鍵消抖計時變量清零
  648.                 kf2=0;           //按鍵自鎖標志清零
  649.                 }
  650.                 else if(kf2 == 0)        //有按鍵按下,且是第一次被按下
  651.                 {        flag_fm = 1;         //啟動蜂鳴器
  652.                 ++n;
  653.                 if(n>10)                   //i>10  ADC查詢方式用
  654.                 {
  655.                     n=0;
  656.                     kf2=1;         //自鎖按鍵置位,避免一直觸發
  657.                                 flag_gk = !flag_gk;
  658.                 }        
  659.                 }


  660.         }



  661. ///-------加--------///
  662.         if(knum != 0)
  663.         {
  664.                 if(key2==0)                //加
  665.             {  
  666.                        
  667.                 j++;
  668.         //        if(j >= 5000)           //長按連加 ADC中斷方式用
  669.                 if(j >= 100)           //長按連加 ADC查詢方式用
  670.        
  671.                 {   //flag_fm = 0;                                    
  672.                     if(knum==2)
  673.                     {
  674.                                 fen++;
  675.                                 fen=fen/10*16+fen%10;                //轉為16進制
  676.                                 if(fen==0x60)
  677.                                             fen=0x00;
  678.                                         Write_DS1302_DAT(write_fen,fen);
  679.                                 read_sf();                                        //讀出時間,然后顯示
  680.                     }
  681.        
  682.                     if(knum==1)
  683.                     {
  684.                                         shi++;
  685.                                         shi=shi/10*16+shi%10;                //轉為16進制
  686.                                         if(shi==0x24)
  687.                                                 shi=0x00;
  688.                                         Write_DS1302_DAT(write_shi,shi);
  689.                                         read_sf();
  690.                     }
  691.        
  692.                     j=90;           //這里j的值可以設置連加的快慢,j的值越大就越快
  693.                                                         //因為初值越大,加到100的時間就越短
  694.                                 flag_fm = 1;  //啟動蜂鳴器
  695.                         }                           
  696.             }        
  697.        
  698.             else
  699.             {
  700.                 if(j>10 && j<100) //短按
  701.                 {
  702.                     flag_fm = 1;         //啟動蜂鳴器   
  703.                     if(knum==2)
  704.                     {
  705.                                 fen++;
  706.                                 fen=fen/10*16+fen%10;                //轉為16進制
  707.                                 if(fen==0x60)
  708.                                     fen=0x00;
  709.                                         Write_DS1302_DAT(write_fen,fen);
  710.                                 read_sf();                                        //讀出時間,然后顯示
  711.                     }
  712.        
  713.                     if(knum==1)
  714.                     {
  715.                                         shi++;
  716.                                         shi=shi/10*16+shi%10;                //轉為16進制
  717.                                         if(shi==0x24)
  718.                                                 shi=0x00;
  719.                                        
  720.                                         Write_DS1302_DAT(write_shi,shi);
  721.                                         read_sf();
  722.                     }
  723.        
  724.                         j=0;
  725.                     }
  726.                 }        
  727.    
  728. //----------減-----------//   
  729.         if(key3==0)                //減
  730.     {           flag_fm = 1;         //啟動蜂鳴器
  731.             k++;
  732.             if(k >= 100)           //長按
  733.             {
  734.                     if(knum==2)
  735.                     {
  736.                                                 fen--;
  737.                                                 fen=fen/10*16+fen%10;                //轉為16進制
  738.                                                 if(fen==-1)
  739.                                                 fen=0x59;
  740.                                                 Write_DS1302_DAT(write_fen,fen);
  741.                                                 read_sf();
  742.                     }

  743.                     if(knum==1)
  744.                     {
  745.                                                 shi--;
  746.                                                 shi=shi/10*16+shi%10;                //轉為16進制
  747.                                                 if(shi==-1)
  748.                                                 shi=0x23;
  749.                                                 Write_DS1302_DAT(write_shi,shi);
  750.                                                 read_sf();
  751.                     }

  752.                     k=90;
  753.             }
  754.     }        

  755.     else
  756.     {
  757.             if(k>10 && k<100) //短按
  758.             {
  759.                     flag_fm = 1;         //啟動蜂鳴器        
  760.                     if(knum==2)
  761.                     {
  762.                                                 fen--;
  763.                                                 fen=fen/10*16+fen%10;                //轉為16進制
  764.                                                 if(fen==-1)
  765.                                                 fen=0x59;
  766.                                                 Write_DS1302_DAT(write_fen,fen);
  767.                                                 read_sf();
  768.                     }

  769.                     if(knum==1)
  770.                     {
  771.                                                 shi--;
  772.                                                 shi=shi/10*16+shi%10;                //轉為16進制
  773.                                                 if(shi==-1)
  774.                                                 shi=0x23;
  775.                                                 Write_DS1302_DAT(write_shi,shi);
  776.                                                 read_sf();
  777.                     }

  778.             }
  779.             k=0;        //消抖變量清零,為下次按鍵做準備        
  780.         }
  781.         }                
  782. }


  783. void main()
  784. {       
  785.         t0_init();
  786.         read_sf();
  787.         init_1302();
  788.         ADC_Init();
  789.         flag_fm = 1;         //啟動蜂鳴器
  790.         while(1)
  791.         {

  792.            read_sf();
  793.            switch(xs)
  794.            {
  795.                         case 0:if(flag==0 && knum == 0)         //時間、溫度輪流顯示,5秒切換一次
  796.                                            {Display_tem(Get_Tmp());}
  797.                                            else       
  798.                                            display( shi,fen);        break;
  799.                         case 1: display( shi,fen);  break;         //顯示時間
  800.                         case 2: Display_tem(Get_Tmp()); break;//顯示溫度
  801.                         default: break;
  802.            }
  803.            keysan();
  804.                 if(shi>=5 && shi<=21) ba=20;else ba=1;//5~21 亮度最大,22~4 亮度最小
  805.                 if(!flag_gk)                //如果光控標志為0,就為自動亮度        ;默認為自動亮度
  806.                 {
  807.                         if(GetADCResult()>5 && GetADCResult()<25) ba=40;
  808.                         if(GetADCResult()>25 && GetADCResult()<50) ba=39; //10級亮度,ba值越大,LED越亮
  809.                         if(GetADCResult()>50 && GetADCResult()<80) ba=35;
  810.                         if(GetADCResult()>80 && GetADCResult()<100) ba=30;
  811.                         if(GetADCResult()>100 && GetADCResult()<130) ba=25;
  812.                         if(GetADCResult()>130 && GetADCResult()<150) ba=20;
  813.                         if(GetADCResult()>150 && GetADCResult()<180) ba=15;
  814.                         if(GetADCResult()>180 && GetADCResult()<200) ba=10;
  815.                         if(GetADCResult()>200 && GetADCResult()<230) ba=5;
  816.                         if(GetADCResult()>230 && GetADCResult()<250) ba=1;
  817.                 }
  818.                 else ba = 40; // 否則為最大亮度
  819.                 if((shi>=5 && shi<=21) && fen ==0 && miao == 0) //整點報時
  820.                 {
  821.                         flag_fm = 1;
  822.                 }
  823.          
  824.         }
  825. }


  826. char shifen,baifen,ge,result;

  827. void adc_isr() interrupt 5 using 1
  828. {
  829.         unsigned int temp;
  830.         temp=ADC_RES;                         //AD取8位結果
  831.         result=temp*0.01953125*1000;   //ad結果換算成電壓值, 將5V分成256份,每份5v/256=0.01953125v        ,再擴大1000倍
  832.         ge=result/1000;
  833.         shifen=result%1000/100;
  834.         baifen=result%100/10;
  835.         
  836.        ADC_CONTR = 0xc8;//開啟轉換
  837. }
復制代碼



IMG_20230702_1.jpg
IMG_20230702_2.jpg
IMG_20230702_3.jpg

1.2寸數碼管時鐘_溫度_光控_雙面制版上傳20230702修改版.rar

611.95 KB, 下載次數: 23, 下載積分: 黑幣 -5

回復

使用道具 舉報

ID:378402 發表于 2023-7-2 18:52 | 顯示全部樓層
程序調整后,原理圖未調整,圖片發不了,只能文字敘述。USB的D+連接單片機的P3.1;USB的D-連接單片機的P3.2不變,調整SW2原連接P3.1改為連接P3.3;調整SW1原連接P3.0改為連接P3.4,主要解決下載程序問題。另一處需要調整的是:時鐘芯片的SCLK原連接P2.0改為連接P2.2;RST原連接P2.2改為連接P2.0。
回復

使用道具 舉報

ID:1131746 發表于 2024-12-13 11:33 | 顯示全部樓層
樓主,單片機需要加上晶振電路嗎?我按原理做出來,電源加有濾波,時間不走時,找不到問題了。
回復

使用道具 舉報

ID:1048675 發表于 2025-3-20 09:22 | 顯示全部樓層
wbc520 發表于 2024-12-13 11:33
樓主,テ枰由暇д竦緶仿穡課野叢磣齔隼矗繚醇佑新瞬ǎ奔洳蛔呤保也壞轎侍飭恕?/blockquote>

單片機一定要加上晶振電路,單片機沒有晶振電路單片機不工作的。
回復

使用道具 舉報

ID:1110477 發表于 2025-3-21 04:59 | 顯示全部樓層
泰興電子 發表于 2025-3-20 09:22
單片機一定要加上晶振電路,單片機沒有晶振電路單片機不工作的。

STC15系列的單片機內部有RC振蕩器,可以不加晶振
回復

使用道具 舉報

ID:1110477 發表于 2025-3-21 05:04 | 顯示全部樓層
剛一看還以為數碼管安裝反了,仔細一看確實反了,再一琢磨,啊哦是故意的
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
内衣办公室在线| 99精品电影| 97涩在线观看视频| 一区二区不卡视频在线观看| 在线观看亚洲免费视频| 亚洲a∨一区二区三区| 四虎www4hu永久免费| 路边理发店露脸熟妇泻火| 日本91av在线播放| 日韩美女一区二区三区| 国产精品免费视频一区| 久久久国产精品一区二区中文| 国产精品超碰| 91豆花视频在线播放| 男男做性免费视频网| 四虎成人免费| 中文字幕av久久爽| 亚洲免费999| 欧美一级精品大片| 亚洲欧美一区二区三区久本道91| 一区二区日韩免费看| 欧美激情15p| sis001欧美| caoporn国产精品免费视频| 福利av在线| 亚洲天堂视频在线观看免费| 91视频免费网址| 亚洲精品国产熟女久久久| 国产一线二线三线在线观看| 成人在线观看www| 国产成人精品福利一区二区三区| 国内揄拍国内精品少妇国语| 亚洲欧美国产精品va在线观看| 狠狠干狠狠久久| 最近免费中文字幕在线第一页 | 亚洲综合一区中| av黄色免费在线观看| 佐佐木明希电影| 99久久激情视频| 国产精品美女在线播放| 国产日韩二区| 亚洲欧洲韩国日本视频| 久久爱另类一区二区小说| 激情偷拍久久| 欧美疯狂party性派对| 精品影片在线观看的网站| 成人高清免费| 国产农村妇女毛片精品| 日本免费在线播放| 91社区视频在线观看| 少妇一级淫片免费放播放| 成人免费在线观看视频网站| 欧美三级一级片| 久久99久久99精品| 青青青在线观看视频| 中国人体摄影一区二区三区| 日韩欧美三级电影| 欧美成人一区二区在线| 精品一区二区三区国产| 国产精品日韩一区二区| 国产日韩欧美综合精品| 九九九九九九精品| 免费亚洲一区二区| 欧美日韩在线高清| 日本一区不卡| 一区二区精品免费视频| 国产一区一区三区| 成年女人18级毛片毛片免费 | 欧美第一页在线观看| 免费成人美女女在线观看| 欧美aaa级片| 我不卡一区二区| 亚洲无人区码一码二码三码的含义 | 国产又黄又猛又粗又爽| 精品无码黑人又粗又大又长| 精品人妻无码一区| 亚洲成人自拍偷拍| 亚洲精品va| 国产精品手机在线播放 | 精品综合在线| 九九九九九精品| 久久伊人一区二区| 色姑娘综合网| 性刺激综合网| 在线一区日本视频| 老司机午夜网站| 熟妇熟女乱妇乱女网站| 男人添女人下面高潮视频| 日本人妻伦在线中文字幕| 久久精品无码中文字幕| 久久久久久久久久久久久国产精品| 日韩一级性生活片| heyzo亚洲| 男女高潮又爽又黄又无遮挡| 在线观看国产一级片| 污污视频网站在线| 午夜视频在线观看国产| 一区二区三区四区免费| 久久精品无码人妻| 久久久久久av无码免费看大片| 国产又黄又爽视频| 性18欧美另类| 99久久99久久免费精品小说| www.老鸭窝.com| 免费一级大片| 色开心亚洲综合| 免费网站看v片在线a| 亚洲女同av| 精品一区二区三区四区五区| 波多野结衣一区| 激情欧美丁香| 毛片基地黄久久久久久天堂| 91免费观看视频在线| 国产精品久久三区| 91激情在线视频| 日韩欧美一级在线播放| 伦伦影院午夜日韩欧美限制| 国产精品一区二区三区久久久| 国产精品我不卡| 香蕉精品视频在线| 2022亚洲天堂| 欧美日韩一区二区三区四区五区六区| 亚洲国产精品一区二区第四页av| 国产一区二区视频播放| 亚洲美女高潮久久久| 日本高清一二三区| 一区二区三区精| 麻豆精品视频在线原创| 97在线资源| 黄色在线论坛| 成人爽a毛片| 伊人成人在线| 久久久久久久久久久99999| 色综合视频一区二区三区高清| 日韩精品在线一区| 欧美在线视频免费| 亚洲综合欧美日韩| www.555国产精品免费| 亚洲va在线观看| 精品麻豆视频| 成人综合影院| 91精品尤物| 日韩一区精品字幕| 亚洲午夜一区二区| 中文字幕日韩专区| 国内一区在线| 色婷婷激情视频| 久久草视频在线| 迷人的保姆韩国| 国产中文字幕在线| 精品精品精品| 久久久久久77777| 国产调教视频在线观看| 久久激情av| 天天看片中文字幕| 国产精品视频免费播放| 欧美韩日国产| 国自产拍在线网站网址视频| 66精品视频在线观看| 国产精品美女久久久免费| 日本在线一级片| 亚洲高清久久久| 亚洲专区一二三| 日韩av影视在线| 成人国产在线激情| 日韩精品视频久久| 久久久久无码国产精品| 欧美性xxxxx极品| 精品噜噜噜噜久久久久久久久试看| 91国产在线精品| 日韩视频免费观看高清在线视频| 久久久免费电影| 欧美在线播放一区| 亚洲女则毛耸耸bbw| 亚洲第一网站在线观看| 全部免费的黄色毛片| 国产桃色电影在线播放| 午夜激情久久| 国产精品你懂的| 综合网中文字幕| 麻豆传媒一区| 性の欲びの女javhd| 又粗又硬又爽国产视频| 91国内在线| 强行糟蹋人妻hd中文| 亚洲精品国产无码| 黄色毛片视频| 超碰国产精品一区二页| 久久激五月天综合精品| 69堂精品视频| 97国产超碰| 亚洲av成人片色在线观看高潮| 国产精品999视频| 麻豆亚洲av成人无码久久精品| 夜夜爽夜夜操| 亚洲av无码国产综合专区| 美乳中文字幕| 日韩成人午夜| 国产精品网站在线播放| 欧美成年人网站| 九色在线视频观看| 中文字幕欧美人妻精品| 一区二区三区性视频| 日韩理论电影| 欧美日韩国产一区中文午夜| 91精品国产自产在线| 亚洲午夜久久久久久久久| 性欧美videos白嫩| 日本欧美不卡| 成人app下载| 色噜噜亚洲精品中文字幕| 艳母动漫在线观看| 亚洲天堂男人av| 日本美女一级片| 一本色道久久综合熟妇| 在线免费观看你懂的| 精品久久影视| 一区二区三区波多野结衣在线观看| 88xx成人精品| 在线视频日韩欧美| 中文字幕2022永久在线| 99热播精品免费| 成人性生交大合| 蜜臀久久99精品久久久久久宅男| 国产免费999| 中文字幕有码热在线视频| 欧美日韩在线精品一区二区三区激情综合| 国产宾馆实践打屁股91| 欧美成人一区二区三区电影| www.色欧美| 久久久精品久久久久特色影视| 麻豆久久久久| 中文一区一区三区高中清不卡| 欧美综合在线观看| 免费看黄色aaaaaa 片| jizzjizzwww| 成人激情免费视频| 欧美精品黑人性xxxx| 成人手机视频在线| 97精品人妻一区二区三区| 日本色护士高潮视频在线观看| 美女视频黄免费的久久| 日韩中文字幕精品| 在线视频日韩欧美| www黄com| 亚洲精品国产偷自在线观看| 欧美一级午夜免费电影| 成人免费a级片| 熟妇高潮一区二区三区| 国产精品无码久久久久| 国产亚洲欧美日韩俺去了| 国产精品小说在线| 动漫性做爰视频| 国产精品麻豆一区二区三区| 蜜桃一区二区三区在线观看| 欧美乱大交xxxxx| 国产一卡二卡三卡四卡| **孕交吃奶水一级毛片| 黄页网站一区| 亚洲欧洲一区二区三区久久| 亚洲黄色av片| 777奇米888色狠狠俺也去| 免费av网页| 亚洲区欧美区| 最近2019中文免费高清视频观看www99| 九九热精品在线播放| 美女被c出白浆| 97精品国产| 日韩精品中文字幕有码专区| 久久久久久久久久一区| 天天色av.com| 亚洲欧美清纯在线制服| 蜜臀久久99精品久久久久久宅男| 黄色正能量网站| 伪装者在线观看完整版免费| 国产在线一区二区| 欧美一级爱爱| 日韩免费高清在线观看| 亚洲欧美va天堂人熟伦| 最近最新mv在线观看免费高清| 免费亚洲网站| 欧美日韩高清区| 丁香激情五月少妇| 成人午夜电影在线观看| 成人ar影院免费观看视频| 91探花福利精品国产自产在线| 在线永久看片免费的视频| 精品三区视频| 懂色av影视一区二区三区| 91免费黄视频| 日本边添边摸边做边爱的第三级| 欧美日本二区| 欧美人与性动交| 麻豆成人在线视频| 亚洲第一精品网站| 日韩中文字幕在线一区| 欧美日韩aaa| 国产高清视频网站| 国产美女在线播放| 不卡av电影在线播放| 成人欧美一区二区三区在线观看 | 国产麻豆综合视频在线观看| 91精品秘密在线观看| 日韩中文字幕免费看| 中文字幕欧美激情极品| 成人免费一区二区三区牛牛| 五月激情六月综合| 成年人黄色片视频| 久草一本av| 久久久久久亚洲综合| 亚洲精品永久www嫩草| 天堂在线视频播放| 三级欧美在线一区| 成人美女av在线直播| 亚洲国产精彩视频| 国产精品久久久久久久免费观看| 欧美大胆a视频| 日本一级片免费看| 中文字幕久久精品一区二区 | 国产福利视频在线播放| 黄色av观看| 99re66热这里只有精品3直播 | 懂色av中文字幕| 日韩在线影视| 久久亚洲精品一区二区| 国产性猛交╳xxx乱大交| 免费毛片观看| 免费欧美日韩| 国产成人精品日本亚洲11| 一本久久精品| 日本aⅴ精品一区二区三区| 国产精品对白一区二区三区| 欧美性xxxx极品hd欧美| 日韩av一区二| 精品午夜一区二区| 你懂的视频在线看| 波多野洁衣一区| 日韩a级黄色片| 最新中文字幕在线| 亚洲午夜在线观看视频在线| aaa一级黄色片| 性欧美1819sex性高清大胸| 欧美片网站yy| 亚洲精品国产精品乱码在线观看| 伊人色综合一区二区三区影院视频| 日韩欧美中文一区| 日本精品人妻无码77777| 成人h动漫免费观看网站| 久久久久北条麻妃免费看| 亚洲手机在线观看| 一区二区影院| 亚洲iv一区二区三区| 色啪啪.com| 国产区在线观看成人精品| 久久久久久久少妇| 手机电影在线观看| 欧美成人猛片aaaaaaa| 国产盗摄x88av| 国产一区不卡| 成人精品福利视频| 你懂的视频网| 国产精品入口麻豆九色| 色噜噜狠狠一区二区| a√中文在线观看| 精品视频在线播放免| 黄色污污网站在线观看| 欧美影视一区| 精品日产一区2区三区黄免费| 99re99| 亚洲v中文字幕| 国产精品无码永久免费不卡| 成人乱码手机视频| 97在线看免费观看视频在线观看| 久久一区二区免费播放| 暴力调教一区二区三区| 亚洲综合在线网站| 在线观看网站免费入口在线观看国内| 亚洲欧美激情一区| 国内精品久久久久久久久久久| 久久精品国产亚洲高清剧情介绍 | 色婷婷综合网| 高清视频一区| 男女小视频在线观看| 欧美日韩国产综合新一区| 亚洲欧美日韩第一页| av中字幕久久| 国产亚洲一区在线播放| 最新日本视频| 91高清在线观看| 久久久久久久福利| 狠狠综合久久| 亚洲一区美女| 日本韩国在线视频爽| 日韩经典中文字幕| 亚洲高清视频在线播放| 成人一区二区三区在线观看| 一区二区三区欧美精品| 国产日韩中文在线中文字幕| 国产精品视频公开费视频| 成人eeuss影院在线观看|