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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

基于單片機的火災報警器設計參考文檔 附程序PCB文件

  [復制鏈接]
跳轉到指定樓層
樓主
隨著現代家庭用火、用電量的增加,家庭火災發生的頻率越來越高。火災報警器也隨之被廣泛應用于各種場合。
本課題所研究的無線多功能火災報警器采用STC89C51為核心控制器,利用氣體傳感器MQ-2、ADC0832模數轉換器、DS18B20溫度傳感器等實現基本功能。通過這些傳感器和芯片,當環境中可燃氣體濃度或溫度等發生變化時系統會發出相應的燈光報警信號和聲音報警信號,以此來實現火災報警,智能化提示。


目錄
摘要        0
Abstract        1
目錄        2
1 緒論        3
1.1 課題的研究背景        3
1.2 課題的研究目的與意義        4
1.3 火災報警器的發展與現狀        4
1.4課題的研究內容        5
2 火災報警器的總體方案設計        6
2.1系統的功能要求        6
2.2 系統的技術要求        6
2.3 系統的組成及方案設計        7
3 系統的硬件設計        8
3.1 主控電路        9
3.2 煙霧探測電路的設計        12
3.2.1 MQ-2介紹        12
3.2.2 ADC0832介紹        14
3.3 液晶顯示電路設計        15
3.4 聲光報警提示電路        18
3.4.1 燈光提示電路        18
3.4.2 聲音報警電路        19
3.5 溫度采集電路        20
3.5.1 DS18B20概述        20
3.5.2 DS18B20引腳介紹        21
3.5.3 DS18B20的內部結構        22
3.5.4 DS18B20的程序流程圖        22
3.6 按鍵電路        23
4 系統的軟件設計        24
4.1 軟件介紹        24
4.2 系統程序流程圖        27
5火災報警器的測試結果及結論        28
5.1 調試        28
5.2 結論        28
致謝        30
參考文獻        31
源程序        32

因為篇幅有限,更多資料,請在附件中下載,(包含,原理圖、pcb圖、程序源碼、文檔)
  1. #include <reg52.h> //包含頭文件,一般情況不需要改動,頭文件包含特殊功能寄存器的定義
  2. #include "intrins.h"                                                                                          

  3. #define     u8                          unsigned char
  4. #define     u16                   unsigned int
  5. #define     uchar                          unsigned char
  6. #define     uint                   unsigned int

  7. uchar yushe_wendu=50;                                //溫度預設值
  8. uchar yushe_yanwu=45;                                //煙霧預設值
  9. uint wendu;                                                                 //溫度值全局變量
  10. uchar yanwu;                                                                 //用于讀取ADC數據

  11. //運行模式  
  12. uchar Mode=0;                                                                 //=1是設置溫度閥值  =2是設置煙霧閥值        =0是正常監控模式
  13. //管腳聲明
  14. sbit Led_Reg                 =P2^2;                                 //紅燈
  15. sbit Led_Yellow  =P2^4;                                 //黃燈
  16. sbit Buzzer             =P2^0;                                 //蜂鳴器
  17. sbit Fan                      =P3^3;                                 //


  18. /********************************************************************
  19. * 名稱 : delay_1ms()
  20. * 功能 : 延時1ms函數
  21. * 輸入 : q
  22. * 輸出 : 無
  23. ***********************************************************************/
  24. void delay_ms(uint q)
  25. {
  26.         uint i,j;
  27.         for(i=0;i<q;i++)
  28.                 for(j=0;j<110;j++);
  29. }
  30. /***********************************************************************************************************
  31. LCD1602相關函數
  32. ***********************************************************************************************************/

  33. //LCD管腳聲明 (RW引腳實物直接接地,因為本設計只用到液晶的寫操作,RW引腳一直是低電平)
  34. sbit LCDRS = P2^7;
  35. sbit LCDEN = P2^6;
  36. sbit D0                 = P0^0;
  37. sbit D1                 = P0^1;
  38. sbit D2                 = P0^2;
  39. sbit D3                 = P0^3;
  40. sbit D4                 = P0^4;
  41. sbit D5                 = P0^5;
  42. sbit D6                 = P0^6;
  43. sbit D7                 = P0^7;



  44. //LCD延時
  45. void LCDdelay(uint z)                  //該延時大約100us(不精確,液晶操作的延時不要求很精確)
  46. {
  47.   uint x,y;
  48.   for(x=z;x>0;x--)
  49.     for(y=10;y>0;y--);
  50. }
  51. void LCD_WriteData(u8 dat)         
  52. {
  53.         if(dat&0x01)D0=1;else D0=0;
  54.         if(dat&0x02)D1=1;else D1=0;
  55.         if(dat&0x04)D2=1;else D2=0;
  56.         if(dat&0x08)D3=1;else D3=0;
  57.         if(dat&0x10)D4=1;else D4=0;
  58.         if(dat&0x20)D5=1;else D5=0;
  59.         if(dat&0x40)D6=1;else D6=0;
  60.         if(dat&0x80)D7=1;else D7=0;
  61. }
  62. //寫命令
  63. void write_com(uchar com)
  64. {
  65.   LCDRS=0;                                 
  66.         LCD_WriteData(com);
  67. //  DAT=com;
  68.   LCDdelay(5);
  69.   LCDEN=1;
  70.   LCDdelay(5);
  71.   LCDEN=0;
  72. }
  73. //寫數據
  74. void write_data(uchar date)
  75. {
  76.   LCDRS=1;
  77.         LCD_WriteData(date);
  78. //  DAT=date;
  79.   LCDdelay(5);
  80.   LCDEN=1;
  81.   LCDdelay(5);
  82.   LCDEN=0;
  83. }

  84. /*------------------------------------------------
  85.               選擇寫入位置
  86. ------------------------------------------------*/
  87. void SelectPosition(unsigned char x,unsigned char y)
  88. {     
  89.         if (x == 0)
  90.         {     
  91.                 write_com(0x80 + y);     //表示第一行
  92.         }
  93.         else
  94.         {      
  95.                 write_com(0xC0 + y);      //表示第二行
  96.         }        
  97. }
  98. /*------------------------------------------------
  99.               寫入字符串函數
  100. ------------------------------------------------*/
  101. void LCD_Write_String(unsigned char x,unsigned char y,unsigned char *s)
  102. {     
  103.         SelectPosition(x,y) ;
  104.         while (*s)
  105.         {     
  106.                 write_data( *s);     
  107.                 s ++;     
  108.         }
  109. }
  110. //========================================================================
  111. // 函數: void LCD_Write_Char(u8 x,u8 y,u16 s,u8 l)
  112. // 應用: LCD_Write_Char(0,1,366,4) ;
  113. // 描述: 在第0行第一個字節位置顯示366的后4位,顯示結果為 0366
  114. // 參數: x:行,y:列,s:要顯示的字,l:顯示的位數
  115. // 返回: none.
  116. // 版本: VER1.0
  117. // 日期: 2013-4-1
  118. // 備注: 最大顯示65535
  119. //========================================================================
  120. void LCD_Write_Char(u8 x,u8 y,u16 s,u8 l)
  121. {     
  122.         SelectPosition(x,y) ;

  123.         if(l>=5)
  124.                 write_data(0x30+s/10000%10);        //萬位
  125.         if(l>=4)
  126.                 write_data(0x30+s/1000%10);                //千位
  127.         if(l>=3)
  128.                 write_data(0x30+s/100%10);                //百位
  129.         if(l>=2)
  130.                 write_data(0x30+s/10%10);                        //十位
  131.         if(l>=1)
  132.                 write_data(0x30+s%10);                //個位

  133. }
  134. /*1602指令簡介
  135.   write_com(0x38);//屏幕初始化
  136.   write_com(0x0c);//打開顯示 無光標 無光標閃爍
  137.   write_com(0x0d);//打開顯示 陰影閃爍
  138.   write_com(0x0d);//打開顯示 陰影閃爍
  139. */
  140. //1602初始化
  141. void Init1602()
  142. {
  143.   uchar i=0;
  144.   write_com(0x38);//屏幕初始化
  145.   write_com(0x0c);//打開顯示 無光標 無光標閃爍
  146.   write_com(0x06);//當讀或寫一個字符是指針后一一位
  147.   write_com(0x01);//清屏
  148.       
  149. }

  150. void Display_1602(yushe_wendu,yushe_yanwu,c,temp)
  151. {
  152.         //顯示預設溫度
  153.         LCD_Write_Char(0,6,yushe_wendu,2) ;
  154.       
  155.         //顯示預設煙霧
  156.         LCD_Write_Char(0,13,yushe_yanwu,3) ;
  157.       
  158.         //時時溫度
  159.         LCD_Write_Char(1,6,c/10,2) ;
  160.         write_data('.');
  161.         LCD_Write_Char(1,9,c%10,1) ;
  162.       
  163.         //時時煙霧
  164.         LCD_Write_Char(1,13,temp,3) ;
  165. }



  166. /***********************************************************************************************************
  167. ADC0832相關函數
  168. ***********************************************************************************************************/
  169. sbit ADCS         =P1^5; //ADC0832 片選
  170. sbit ADCLK  =P1^2; //ADC0832 時鐘
  171. sbit ADDI         =P1^3; //ADC0832 數據輸入                /*因為單片機的管腳是雙向的,且ADC0832的數據輸入輸出不同時進行,
  172. sbit ADDO         =P1^3; //ADC0832 數據輸出                /*為節省單片機引腳,簡化電路所以輸入輸出連接在同一個引腳上



  173. //========================================================================
  174. // 函數: unsigned int Adc0832(unsigned char channel)
  175. // 應用:                 temp=Adc0832(0);
  176. // 描述: 讀取0通道的AD值
  177. // 參數: channel:通道0和通道1選擇
  178. // 返回: 選取通道的AD值
  179. // 版本: VER1.0
  180. // 日期: 2015-05-29
  181. // 備注:
  182. //========================================================================
  183. unsigned int Adc0832(unsigned char channel)
  184. {
  185.         uchar i=0;
  186.         uchar j;
  187.         uint dat=0;
  188.         uchar ndat=0;
  189.         uchar  Vot=0;

  190.         if(channel==0)channel=2;
  191.         if(channel==1)channel=3;
  192.         ADDI=1;
  193.         _nop_();
  194.         _nop_();
  195.         ADCS=0;//拉低CS端
  196.         _nop_();
  197.         _nop_();
  198.         ADCLK=1;//拉高CLK端
  199.         _nop_();
  200.         _nop_();
  201.         ADCLK=0;//拉低CLK端,形成下降沿1
  202.         _nop_();
  203.         _nop_();
  204.         ADCLK=1;//拉高CLK端
  205.         ADDI=channel&0x1;
  206.         _nop_();
  207.         _nop_();
  208.         ADCLK=0;//拉低CLK端,形成下降沿2
  209.         _nop_();
  210.         _nop_();
  211.         ADCLK=1;//拉高CLK端
  212.         ADDI=(channel>>1)&0x1;
  213.         _nop_();
  214.         _nop_();
  215.         ADCLK=0;//拉低CLK端,形成下降沿3
  216.         ADDI=1;//控制命令結束
  217.         _nop_();
  218.         _nop_();
  219.         dat=0;
  220.         for(i=0;i<8;i++)
  221.         {
  222.                 dat|=ADDO;//收數據
  223.                 ADCLK=1;
  224.                 _nop_();
  225.                 _nop_();
  226.                 ADCLK=0;//形成一次時鐘脈沖
  227.                 _nop_();
  228.                 _nop_();
  229.                 dat<<=1;
  230.                 if(i==7)dat|=ADDO;
  231.         }
  232.         for(i=0;i<8;i++)
  233.         {
  234.                 j=0;
  235.                 j=j|ADDO;//收數據
  236.                 ADCLK=1;
  237.                 _nop_();
  238.                 _nop_();
  239.                 ADCLK=0;//形成一次時鐘脈沖
  240.                 _nop_();
  241.                 _nop_();
  242.                 j=j<<7;
  243.                 ndat=ndat|j;
  244.                 if(i<7)ndat>>=1;
  245.         }
  246.         ADCS=1;//拉低CS端
  247.         ADCLK=0;//拉低CLK端
  248.         ADDO=1;//拉高數據端,回到初始狀態
  249.         dat<<=8;
  250.         dat|=ndat;

  251.         return(dat);            //return ad data
  252. }

  253. /***********************************************************************************************************
  254. DS18B20相關函數
  255. ***********************************************************************************************************/

  256. sbit DQ = P1^0;                                 //ds18b20的數據引腳



  257. /*****延時子程序:該延時主要用于ds18b20延時*****/
  258. void Delay_DS18B20(int num)
  259. {
  260.   while(num--) ;
  261. }
  262. /*****初始化DS18B20*****/
  263. void Init_DS18B20(void)
  264. {
  265.   unsigned char x=0;
  266.   DQ = 1;         //DQ復位
  267.   Delay_DS18B20(8);    //稍做延時
  268.   DQ = 0;         //單片機將DQ拉低
  269.   Delay_DS18B20(80);   //精確延時,大于480us
  270.   DQ = 1;         //拉高總線
  271.   Delay_DS18B20(14);
  272.   x = DQ;           //稍做延時后,如果x=0則初始化成功,x=1則初始化失敗
  273.   Delay_DS18B20(20);
  274. }
  275. /*****讀一個字節*****/
  276. unsigned char ReadOneChar(void)
  277. {
  278.   unsigned char i=0;
  279.   unsigned char dat = 0;
  280.   for (i=8;i>0;i--)
  281.   {
  282.     DQ = 0;     // 給脈沖信號
  283.     dat>>=1;
  284.     DQ = 1;     // 給脈沖信號
  285.     if(DQ)
  286.     dat|=0x80;
  287.     Delay_DS18B20(4);
  288.   }
  289.   return(dat);
  290. }
  291. /*****寫一個字節*****/
  292. void WriteOneChar(unsigned char dat)
  293. {
  294.   unsigned char i=0;
  295.   for (i=8; i>0; i--)
  296.   {
  297.     DQ = 0;
  298.     DQ = dat&0x01;
  299.     Delay_DS18B20(5);
  300.     DQ = 1;
  301.     dat>>=1;
  302.   }
  303. }
  304. /*****讀取溫度*****/
  305. unsigned int ReadTemperature(void)
  306. {
  307.   unsigned char a=0;
  308.   unsigned char b=0;
  309.   unsigned int t=0;
  310.   float tt=0;
  311.   Init_DS18B20();
  312.   WriteOneChar(0xCC);  //跳過讀序號列號的操作
  313.   WriteOneChar(0x44);  //啟動溫度轉換
  314.   Init_DS18B20();
  315.   WriteOneChar(0xCC);  //跳過讀序號列號的操作
  316.   WriteOneChar(0xBE);  //讀取溫度寄存器
  317.   a=ReadOneChar();     //讀低8位
  318.   b=ReadOneChar();    //讀高8位
  319.   t=b;
  320.   t<<=8;
  321.   t=t|a;
  322.   tt=t*0.0625;
  323.   t= tt*10+0.5;     //放大10倍輸出并四舍五入
  324.   return(t);
  325. }
  326. //=====================================================================================
  327. //=====================================================================================
  328. //=====================================================================================


  329. /*****校準溫度*****/
  330. u16 check_wendu(void)
  331. {
  332.         u16 c;
  333.         c=ReadTemperature()-5;                          //獲取溫度值并減去DS18B20的溫漂誤差
  334.         if(c<1) c=0;
  335.         if(c>=999) c=999;
  336.         return c;
  337. }

  338. /***********************************************************************************************************
  339. 按鍵檢測相關函數
  340. ***********************************************************************************************************/
  341. //按鍵
  342. sbit Key1=P1^6;                                 //設置鍵
  343. sbit Key2=P1^7;                                 //加按鍵
  344. sbit Key3=P3^2;                                 //減按鍵



  345. #define KEY_SET                 1                //設置
  346. #define KEY_ADD                        2                //加
  347. #define KEY_MINUS                3                //減


  348. //========================================================================
  349. // 函數: u8 Key_Scan()
  350. // 應用: temp=u8 Key_Scan();
  351. // 描述: 按鍵掃描并返回按下的鍵值
  352. // 參數: NONE
  353. // 返回: 按下的鍵值
  354. // 版本: VER1.0
  355. // 日期: 2015-05-29
  356. // 備注: 該函數帶松手檢測,按下鍵返回一次鍵值后返回0,直至第二次按鍵按下
  357. //========================================================================
  358. u8 Key_Scan()
  359. {         
  360.         static u8 key_up=1;//按鍵按松開標志
  361.         if(key_up&&(Key1==0||Key2==0||Key3==0))
  362.         {
  363.                 delay_ms(10);//去抖動
  364.                 key_up=0;
  365.                 if(Key1==0)                        return 1;
  366.                 else if(Key2==0)return 2;
  367.                 else if(Key3==0)return 3;
  368.         }
  369.         else if(Key1==1&&Key2==1&&Key3==1)
  370.                 key_up=1;            
  371.         return 0;// 無按鍵按下
  372. }



  373. void main (void)
  374. {
  375.         u8 key;
  376.         wendu=check_wendu();                  //初始化時調用溫度讀取函數 防止開機85°C
  377.         Init1602();                          //調用初始化顯示函數
  378.         LCD_Write_String(0,0,"SET T:00   E:000");  //開機界面
  379.         LCD_Write_String(1,0,"NOW T:00.0 E:000");  
  380.         delay_ms(1000);
  381.         wendu=check_wendu();                  //初始化時調用溫度讀取函數 防止開機85°C
  382.         while (1)                                                //主循環
  383.         {
  384.                 key=Key_Scan();                                        //按鍵掃描
  385.                 yanwu=Adc0832(0);                                //讀取煙霧值
  386.                 wendu=check_wendu();          //讀取溫度值
  387.                
  388.                 if(key==KEY_SET)
  389.                 {
  390.                         Mode++;
  391.                 }
  392.                
  393.                 switch(Mode)                                                //判斷模式的值
  394.                 {
  395.                         case 0:                                                                //監控模式
  396.                         {
  397.                                 Display_1602(yushe_wendu,yushe_yanwu,wendu,yanwu);  //顯示預設溫度,預設煙霧,溫度值,煙霧值
  398.                                 if(yanwu>=yushe_yanwu)          //煙霧值大于等于預設值時
  399.                                 {
  400.                                         Led_Reg=0;                                          //煙霧指示燈亮
  401.                                         Fan=0;
  402.                                         Buzzer=0;                                                  //蜂鳴器報警
  403.                                 }
  404.                                 else                                                                                  //煙霧值小于預設值時
  405.                                 {
  406.                                         Led_Reg=1;                                          //關掉報警燈
  407.                                         Fan=1;
  408.                                 }
  409.                                 if(wendu>=(yushe_wendu*10))          //溫度大于等于預設溫度值時(為什么是大于預設值*10:因為我們要顯示的溫度是有小數點后一位,是一個3位數,25.9°C時實際讀的數是259,所以判斷預設值時將預設值*10)
  410.                                 {
  411.                                         Buzzer=0;                                                  //打開蜂鳴器報警
  412.                                         Led_Yellow=0;                                          //打開溫度報警燈
  413.                                 }
  414.                                 else                                                                                  //溫度值小于預設值時
  415.                                 {
  416.                                         Led_Yellow=1;                                          //關閉報警燈
  417.                                 }
  418.                                 if((yanwu<yushe_yanwu)&&(wendu<(yushe_wendu*10)))          //當煙霧小于預設值并且溫度也小于預設值時 (&&:邏輯與,左右兩邊的表達式都成立(都為真,也就是1)時,該if語句才成立)
  419.                                 {
  420.                                         Buzzer=1;                                                  //停止報警
  421.                                 }
  422.                                 break;
  423.                         }
  424.                         case 1://預設溫度模式
  425.                         {
  426.                                 SelectPosition(0,5) ;                                        //指定位置
  427.                            write_com(0x0d);                                                        //陰影閃爍
  428.                                 if(key==KEY_ADD)                                                        //加鍵按下
  429.                                 {
  430.                                         yushe_wendu++;                                            //預設溫度值(閥值)加1
  431.                                         if(yushe_wendu>=99)                                         //當閥值加到大于等于99時
  432.                                         yushe_wendu=99;                                                         //閥值固定為99
  433.                                         LCD_Write_Char(0,6,yushe_wendu,2) ;//顯示預設溫度
  434.                                 }
  435.                                 if(key==KEY_MINUS)                                                 //減鍵按下
  436.                                 {
  437.                                         if(yushe_wendu<=1)                                        //當溫度上限值減小到1時
  438.                                         yushe_wendu=1;                          //固定為1
  439.                                         yushe_wendu--;                                                        //預設溫度值減一,最小為0
  440.                                         LCD_Write_Char(0,6,yushe_wendu,2) ;//顯示預設溫度
  441.                                 }
  442.                                 break;                                                                                          //執行后跳出switch
  443.                         }
  444.                         case 2:                                //預設煙霧模式
  445.                         {
  446.                                 SelectPosition(0,12) ;                                //指定位置      
  447.                            write_com(0x0d);                                                        //打開顯示 無光標 光標閃爍
  448.                                 if(key==KEY_ADD)                                                        //加鍵按下
  449.                                 {
  450.                                         if(yushe_yanwu>=255)        //當閥值加到大于等于255時
  451.                                         yushe_yanwu=254;            //閥值固定為254
  452.                                         yushe_yanwu++;                                            //預設煙霧值(閥值)加1,最大為255
  453.                                         LCD_Write_Char(0,13,yushe_yanwu,3) ;//顯示預設煙霧
  454.                                 }
  455.                                 if(key==KEY_MINUS)                                                //減鍵按下
  456.                                 {
  457.                                         if(yushe_yanwu<=1)                                        //當煙霧上限值減小到1時
  458.                                                 yushe_yanwu=1;                  //固定為1
  459.                                         yushe_yanwu--;                                                        //預設溫度值減一,最小為0         
  460.                                         LCD_Write_Char(0,13,yushe_yanwu,3) ;//顯示預設煙霧
  461.                                 }
  462.                                 break;
  463.                         }
  464.                         default        :      
  465.                         {
  466.                                 write_com(0x38);//屏幕初始化
  467.                                 write_com(0x0c);//打開顯示 無光標 無光標閃爍
  468.                                 Mode=0;                        //恢復正常模式
  469.                                 break;
  470.                         }
  471.                 }
  472.                
  473.         }

  474. }
復制代碼



全部資料51hei下載地址:
煙霧報警器資料.7z (463.98 KB, 下載次數: 277)
分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏8 分享淘帖 頂 踩
回復

使用道具 舉報

沙發
ID:694218 發表于 2020-2-18 11:45 | 只看該作者
調不出來啊
回復

使用道具 舉報

板凳
ID:694218 發表于 2020-2-18 12:28 | 只看該作者
圖和程序不對應吧,程序中引腳用的AT89C51吧?
回復

使用道具 舉報

地板
ID:737540 發表于 2020-4-26 11:38 | 只看該作者
源程序有錯誤吧
回復

使用道具 舉報

5#
ID:519059 發表于 2020-5-5 10:12 | 只看該作者
壓縮文件里怎么沒有文檔呀?
回復

使用道具 舉報

6#
ID:742435 發表于 2020-5-5 11:17 | 只看該作者
請問電源應該接哪幾個端口
回復

使用道具 舉報

7#
ID:758429 發表于 2020-5-22 16:00 | 只看該作者
為什么壓縮包調不出來
回復

使用道具 舉報

8#
ID:785091 發表于 2020-6-26 17:49 | 只看該作者
Fan是什么意思
回復

使用道具 舉報

9#
ID:790946 發表于 2020-6-27 14:34 | 只看該作者
猛呀
大神級的操作
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 成人二区三区 | 精品日韩一区二区三区av动图 | 欧美成年人网站 | 国产精品久久久久久久白浊 | 一区二区三区四区日韩 | 中文字幕av在线 | 国产97视频在线观看 | 天堂色区 | 精品久久香蕉国产线看观看亚洲 | 日韩福利视频 | 韩国主播午夜大尺度福利 | 午夜精品视频 | 成人毛片视频在线播放 | 91伊人| 亚洲电影免费 | 亚洲精品乱码 | 亚洲国产精品久久久久婷婷老年 | 毛片一区二区三区 | 一级毛片免费视频观看 | 亚洲a视频 | 自拍 亚洲 欧美 老师 丝袜 | 人人看人人草 | 中文字幕免费视频 | 成年人在线观看视频 | 国产精品免费一区二区三区四区 | 亚洲国产二区 | 日韩精品久久一区二区三区 | 在线视频一区二区三区 | 欧美v片 | 免费看的av | 欧美日韩看片 | 欧美激情国产日韩精品一区18 | 欧美精品日韩精品国产精品 | 午夜视频网 | 亚洲 91| 黄色在线| 国产精品视频一区二区三区 | 亚洲精品久久久久久久久久久 | 北条麻妃一区二区三区在线观看 | 欧美成人精品一区二区男人看 | 黄色片视频免费 |