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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

proteus 51單片機電子琴仿真圖加程序

[復制鏈接]
跳轉到指定樓層
樓主

  1. #include <reg52.h>

  2. #define SONG 4                                                                // 歌曲的數量
  3. #define LED_PORT        P3
  4. #define uchar unsigned char                // 以后unsigned char就可以用uchar代替
  5. #define uint  unsigned int                // 以后unsigned int 就可以用uint 代替
  6. #define ulong unsigned long                // 以后unsigned long就可以用ulong代替

  7. sbit Key1_P  = P1^0;                                // 彈奏鍵1的管腳
  8. sbit Key2_P  = P1^1;                                // 彈奏鍵2的管腳
  9. sbit Key3_P  = P1^2;                                // 彈奏鍵3的管腳
  10. sbit Key4_P  = P1^3;                                // 彈奏鍵4的管腳
  11. sbit Key5_P  = P1^4;                                // 彈奏鍵5的管腳
  12. sbit Key6_P  = P1^5;                                // 彈奏鍵6的管腳
  13. sbit Key7_P  = P1^6;                                // 彈奏鍵7的管腳
  14. //sbit Key8_P  = P1^7;                                // 彈奏鍵8的管腳
  15. sbit Key9_P  = P2^0;                                // 播放內置歌曲的按鍵管腳
  16. sbit Key10_P = P2^1;                                // 開始/停止錄制
  17. sbit Key11_P = P2^2;                                // 播放錄制的歌曲
  18. sbit Beep_P  = P2^4;                                // 揚聲器管腳           
  19. sbit Led_P   = P2^7;                                // 錄歌指示燈        
  20. sbit Key_Set1  = P2^3;            //設置音區按鍵1
  21. sbit Key_Set2  = P2^5;            //設置音區按鍵2
  22. sbit Key_Set3  = P2^6;            //設置音區按鍵3

  23. uchar gTone=0;                                                        // gTone代表當前要播放的音調
  24. uchar gPlayStatus;                                        // gPlayStatus代表當前的播放狀態,0是停止,1是播放
  25. uchar gSong;                                                    // gSong代表當前播放到第幾首歌
  26. uchar ledflag=0;            //流水燈的標志位
  27. uchar yinquflag=1;          //音區選擇  1:第一組  2:第二組  3:第三組  默認第一組

  28. /*  定時器初值          低1  低2  低3  低4  低5  低6  低7  中1  中2  中3  中4  中5  中6  中7  高1  高2  高3  高4  高5  高6  高7 */
  29. uchar code  ArrTL0[]={ 0X8B,0X5B,0X14,0X66,0X03,0X8F,0X0B,0X43,0XAB,0X08,0X33,0X81,0XC7,0X05,0X21,0X55,0X84,0X99,0XC0,0XE3,0X02};
  30. uchar code  ArrTH0[]={ 0XF8,0XF9,0XFA,0XFA,0XFB,0XFB,0XFC,0XFC,0XFC,0XFD,0XFD,0XFD,0XFD,0XFE,0XFE,0XFE,0XFE,0XFE,0XFE,0XFE,0XFF};
  31. //                      0    1    2    3     4   5    6     7           8   9          10   11   12   13   14   15   16   17   18   19   20
  32.         
  33. /*  數碼管的顯示值       1    2    3    4    5     6   7 */
  34. uchar code  ArrDig[]={ 0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8};


  35. /*  《水手》的樂譜  */
  36. uchar code Music1[]={
  37.         5,4,  9,2,  8,2,  9,4, 8,2,  9,2,      
  38.         10,3, 11,1, 10,2, 8,2, 9,8,  9,1,     
  39.         10,2, 10,1, 9,1,  8,2, 7,1,  7,1,  8,2,  7,1, 7,1, 8,2, 9,2,
  40.         7,2,  6,2,  5,2,  7,2, 6,8,      
  41.         5,4,  9,2,  8,2,  9,4, 8,2,  9,2,        
  42.         10,2, 10,1, 11,1, 9,2, 8,2,  9,8,
  43.         10,3, 9,1,  8,2,  7,2, 8,2,  8,1,  7,1,  8,2, 8,1, 9,1,  
  44.         6,2,  6,2,  5,2,  4,2, 5,8,  
  45.         8,3,  8,1,  8,2,  8,2, 10,2, 10,1, 9,1,  8,2, 7,1, 7,1,
  46.         9,3,  8,1,  7,2,  8,1, 7,1,  5,8,      
  47.         8,3,  8,1,  8,2,  8,2, 8,2,  8,1,  8,1,  8,2, 7,1, 8,1,         
  48.         9,2,  9,2,  9,1,  8,1, 7,1,  8,1,  9,8,
  49.         8,3,  8,1,  8,2,  8,2, 10,2, 9,2,  8,2,  8,2,      
  50.         9,2,  8,2,  7,2,  8,1, 7,1,  5,7,  5,1,         
  51.         8,3,  8,1,  8,2,  8,1, 8,1,  8,2,  8,2,  7,2, 8,2,
  52.         9,2,  9,2,  8,2,  7,2, 9,4,  9,2,  11,2,
  53.         12,4, 11,4, 9,4,  8,2, 7,2,
  54.         8,2,  9,1,  8,1,  7,2, 6,2,  5,4,  5,2,  6,2,
  55.         7,4,  7,2,  9,2,  8,4, 6,1,  5,1,  4,2,
  56.         5,3,  5,1,  7,2,  8,2, 9,4,  9,2,  11,2,
  57.         12,4, 11,4, 9,4,  8,2, 7,2,
  58.         8,2,  9,1,  8,1,  7,2, 6,2,  5,4,  5,2,  6,2,
  59.         7,4,  7,2,  9,2,  8,4, 7,2,  6,2,  5,12
  60.         };

  61. /*  《揮著翅膀的女孩》的樂譜  */
  62. uchar code Music2[]={
  63.         9,4,  9,2,  10,2, 11,4, 7,2,  8,2,      
  64.         9,2,  9,2,  9,2,  10,2, 11,4, 8,2,  9,2,   
  65.         10,4, 10,2, 9,2,  7,4,  10,2, 9,2,
  66.         10,4, 5,2,  7,2,  8,4,  7,2,  8,2,      
  67.         9,4,  9,2,  10,2, 11,4, 12,2, 13,2,        
  68.         14,2, 14,2, 9,2,  10,2, 11,4, 8,2,  9,2,
  69.         10,2, 9,2,  10,2, 14,2, 14,4, 8,2,  9,2,  
  70.         10,2, 9,2,  10,2, 15,2, 15,4, 14,2, 13,2,  
  71.         14,6, 15,2, 16,2, 15,2, 14,2, 13,2,
  72.         14,6, 14,2, 13,2, 11,2, 11,2, 7,2,      
  73.         12,6, 12,2, 11,2, 7,2,  7,2,  9,2,         
  74.         8,6,  9,1,  10,1, 10,2, 11,2, 14,2, 13,2,
  75.         14,6, 15,2, 16,2, 15,2, 14,2, 13,2,      
  76.         14,6, 14,2, 13,2, 11,2, 11,2, 7,2,         
  77.         12,6, 12,2, 11,2, 11,2, 14,2, 13,2,
  78.         14,16
  79.         };

  80. /*  《茉莉花》的樂譜  */                                                         
  81. uchar code Music3[]={
  82.         9,4,  9,2,  11,2, 12,2, 14,2, 14,2, 12,2,  
  83.         11,4, 11,2, 12,2, 11,8,                 
  84.         9,4,  9,2,  11,2, 12,2, 14,2, 14,2, 12,2,
  85.         11,4, 11,2, 12,2, 11,8,                    
  86.         11,4, 11,4, 11,4, 9,2,  11,2,           
  87.         12,4, 12,4, 11,8,
  88.         9,4,  8,2,  9,2,  11,4, 9,2,  8,2,         
  89.         7,4,  7,2,  8,2,  7,8,                  
  90.         9,2,  8,2,  7,2,  9,2,  8,6,  9,2,
  91.         11,4, 12,2, 14,2, 11,8,                    
  92.         8,4,  9,2,  11,2, 8,2,  9,2,  7,2,  5,2,  
  93.         4,8,  5,4,  7,4,  
  94.         8,6,  9,2,  7,2,  8,2,  7,2,  5,2,         
  95.         4,12
  96.         };

  97. /*  《歡樂頌》的樂譜  */
  98. uchar code Music4[]={  
  99.         9,2,  9,2,  10,2, 11,2,   
  100.         11,2, 10,2, 9,2,  8,2,         
  101.         7,2,  7,2,  8,2,  9,2,        
  102.         9,3,  8,1,  8,4,
  103.         9,2,  9,2,  10,2, 11,2,   
  104.         11,2, 10,2, 9,2,  8,2,         
  105.         7,2,  7,2,  8,2,  9,2,        
  106.         8,3,  7,1,  7,4,
  107.         8,2,  8,2,  9,2,  7,2,   
  108.         8,2,  9,1,  10,1, 9,2,  7,2,   
  109.         8,2,  9,1,  10,1, 9,2,         8,2,   
  110.         7,2,  8,2,  4,2,  9,2,
  111.         9,2,  9,2,  10,2, 11,2,   
  112.         11,2, 10,2, 9,2,  10,1, 8,1,   
  113.         7,2,  7,2,  8,2,  9,2,        
  114.         8,3,  7,1,  7,4
  115.         } ;




  116. /*********************************************************/
  117. // 毫秒級的延時函數,time是要延時的毫秒數
  118. /*********************************************************/
  119. void DelayMs(uint time)
  120. {
  121.         uint i,j;
  122.         for(i=0;i<time;i++)
  123.                 for(j=0;j<112;j++);
  124. }



  125. /*********************************************************/
  126. // 發出指定音調及其節拍的聲音,tone代表音調,beat代表節拍
  127. /*********************************************************/                 
  128. void PlayTone(uchar tone,float beat)
  129. {
  130.         int i;
  131.         P0=ArrDig[tone%7];                        // 數碼管顯示當前音調值
  132.         gTone=tone;                                                        // 將音調值賦給全局變量gTone
  133.         TH0 = ArrTH0[tone];                        // 裝入定時器TH0的初值
  134.         TL0 = ArrTL0[tone];                        // 裝入定時器TL0的初值
  135.         TR0=1;                                                                        // 啟動定時器
  136.         for(i=0;i<beat;i++)               
  137.         {
  138.                 DelayMs(200);         
  139.         }
  140.         TR0=0;                                                                        // 停止定時器
  141.         P0=0xff;                                   // 關閉數碼管顯示        
  142.         Beep_P=1;        
  143. }



  144. /*********************************************************/
  145. // 播放內置的音樂
  146. // arr[]是要播放的樂譜數組,num是數組里面的元素個數
  147. /*********************************************************/
  148. void PlayMusic(uchar music[],uint num)
  149. {
  150.         uint i=0;
  151.         while(i<num)                        
  152.         {   
  153.                 if(gPlayStatus==1)                                                          // 判斷播放狀態是否為播放還是暫停
  154.                 {   
  155.                         PlayTone(music[i],music[i+1]);        // 開始演奏一個節拍
  156.                         i+=2;                                                                                                                // 進入下一個節拍,因為每2個數為1組,所以每次要加2
  157.                         if(i==num)                                                                                        // 判斷歌曲是否播放完了
  158.                         {
  159.                                 gPlayStatus=0;                                                                // 播放完了的話,則把播放狀態改為暫停,否則會循環播放
  160.                         }
  161.                 }
  162.                
  163.                 if(Key9_P==0)                                                                                         // 下一曲
  164.                 {
  165.                         DelayMs(10);                                                                                // 消除按鍵按下的抖動
  166.                         while(!Key9_P);                                                                    // 等待按鍵釋放
  167.                         DelayMs(10);                                                                                // 消除按鍵松開的抖動
  168.                         gSong++;                                                                                                // 把當前播放到第幾首歌的變量gSong加1,即切到下一曲
  169.                         if(gSong>SONG)                                                                        // 如果gSong為SONG,說明到后面的盡頭了,則轉為第一首
  170.                                 gSong=1;
  171.                         break;        
  172.                 }                                
  173.         }
  174. }
  175. /*********************************************************/

  176. /*********************************************************************
  177.      : FlashLed1

  178. *********************************************************************/
  179. void FlashLed1(void)
  180. {
  181.          LED_PORT = 0x55;                        //
  182.          DelayMs(200);
  183.          
  184.          LED_PORT = 0xaa;                        //
  185. DelayMs(200);

  186. }

  187. /*********************************************************************
  188.       : FlashLed2
  189. *********************************************************************/
  190. void FlashLed2(void)
  191. {
  192.         unsigned char i = 0;

  193.         for (i=0; i<7; i++)
  194.         {
  195.                 LED_PORT  = (0xff & ~(1<<i));
  196.                 DelayMs(200);
  197.         }
  198. }
  199. /*********************************************************************
  200.       : FlashLed3
  201. *********************************************************************/
  202. void FlashLed3(void)
  203. {
  204.                  LED_PORT = 0xff;                        //
  205.          DelayMs(200);
  206.          
  207.          LED_PORT = 0x00;                        //
  208. DelayMs(200);
  209. }
  210. /*********************************************************************
  211.       : FlashLed4
  212. *********************************************************************/
  213. void FlashLed4(void)
  214. {
  215.         unsigned char i = 0;

  216.         for (i=0; i<7; i++)
  217.         {
  218.                 LED_PORT  =i;
  219.                 DelayMs(200);
  220.         }
  221. }
  222. /*********************************************************************
  223.       : FlashLed5
  224. *********************************************************************/
  225. void FlashLed5(void)
  226. {
  227.         unsigned char i = 0;

  228.         for (i=0; i<7; i++)
  229.         {
  230.                 LED_PORT  = (0xff & (1<<i));
  231.                 DelayMs(200);
  232.         }
  233. }
  234. /*********************************************************************
  235.       : FlashLed6
  236. *********************************************************************/
  237. void FlashLed6(void)
  238. {
  239.         unsigned char i = 0;

  240.         for (i=0; i<7; i++)
  241.         {
  242.                 LED_PORT  = (0xff & ~(1<<6-i));
  243.                 DelayMs(200);
  244.         }
  245. }
  246. /*********************************************************************
  247.       : FlashLed7
  248. *********************************************************************/
  249. void FlashLed7(void)
  250. {
  251.         LED_PORT = 0x0f;                        //
  252.          DelayMs(200);
  253.          
  254.          LED_PORT = 0xf0;                        //
  255. DelayMs(200);
  256. }
  257. void LED_PLAY(uchar num)
  258. {
  259.         switch(num)
  260.         {
  261.           case(0x01):FlashLed1();break;
  262.                 case(0x02):FlashLed2();break;
  263.                 case(0x03):FlashLed3();break;
  264.                 case(0x04):FlashLed4();break;
  265.                 case(0x05):FlashLed5();break;
  266.                 case(0x06):FlashLed6();break;
  267.                 case(0x07):FlashLed7();break;
  268.         }
  269. }

  270. /*********************************************************/
  271. // 定時器初始化函數
  272. /*********************************************************/
  273. void TimerInit()
  274. {
  275.         TMOD=1;                        // 定時器0,工作方式1
  276.         TH0=0;                        // 裝定時器TH0的初值
  277.         TL0=0;                        // 裝定時器TL0的初值
  278.         ET0=1;                        // 開啟定時器0中斷                  
  279.         EA=1;                                // 開啟總中斷
  280. }



  281. /*********************************************************/
  282. // 彈奏鍵掃描函數
  283. /*********************************************************/
  284. uchar KeyScanf()
  285. {
  286.         if(Key_Set1==0)          // 按鍵被按下  P2^3
  287.           yinquflag=1;    //音區1
  288.         if(Key_Set2==0)          // 按鍵被按下  P2^5
  289.           yinquflag=2;    //音區2
  290.         if(Key_Set3==0)          // 按鍵被按下  P2^6
  291.           yinquflag=3;    //音區3
  292.         if(Key1_P==0)                // 按鍵1被按下,返回1
  293.                 return 1;
  294.         if(Key2_P==0)                // 按鍵2被按下,返回2
  295.                 return 2;
  296.         if(Key3_P==0)         // 按鍵3被按下,返回3
  297.                 return 3;
  298.         if(Key4_P==0)         // 按鍵4被按下,返回4
  299.                 return 4;
  300.         if(Key5_P==0)         // 按鍵5被按下,返回5
  301.                 return 5;
  302.         if(Key6_P==0)                // 按鍵6被按下,返回6
  303.                 return 6;
  304.         if(Key7_P==0)                // 按鍵7被按下,返回7
  305.                 return 7;
  306.         // if(Key8_P==0)          // 按鍵8被按下,返回8
  307.         //         return 8;
  308.                
  309.         return 0;                          // 8個按鍵都沒被按下,返回0
  310. }



  311. /*********************************************************/
  312. // 主函數,程序從這里開始執行
  313. /*********************************************************/        
  314. void main()
  315. {  
  316.         uchar i;                                                                // 循環變量
  317.         uchar ret;                                                        // 用于保存音調鍵函數的返回值
  318.         uchar count;                                                // 用于記錄當前錄制了多少個音調
  319.         uchar record[99]={0};                // 存儲錄制歌曲的數組

  320.         TimerInit();
  321.         gSong=0;                                                                // 上電默認第一首歌
  322.         gPlayStatus=0;                                        // 上電默認是0停止狀態(1為播放狀態)

  323.         while(1)
  324.         {
  325.                 if(gPlayStatus==1)                // 如果處于播放狀態,則判斷是哪一首歌曲需要播放
  326.                 {
  327.                         switch(gSong)                 
  328.                         {
  329.                                 case 1 : PlayMusic(Music1,sizeof(Music1)); break;
  330.                                 case 2 : PlayMusic(Music2,sizeof(Music2)); break;
  331.                                 case 3 : PlayMusic(Music3,sizeof(Music3)); break;
  332.                                 case 4 : PlayMusic(Music4,sizeof(Music4)); break;
  333.                                 default:                                               break;        
  334.                         }        
  335.                 }
  336.                
  337.                 /*播放內置的音樂*/
  338.                 if(Key9_P==0)                                        // 開始播放
  339.                 {
  340.                         DelayMs(10);                                // 消除按鍵按下的抖動
  341.                         while(!Key9_P);                        // 等待按鍵釋放
  342.                         DelayMs(10);                                // 消除按鍵松開的抖動
  343.                         gSong++;                                                // 把當前播放到第幾首歌的變量gSong加1,即切到下一曲
  344.                         if(gSong>SONG)                        // 如果gSong為SONG,說明到后面的盡頭了,則轉為第一首
  345.                                 gSong=1;
  346.                         gPlayStatus=1;                        // 播放狀態改為1,即播放
  347.                         
  348.                 }
  349.                
  350.                 /*開始/停止 錄制按鍵的處理*/
  351.                 if(Key10_P==0)
  352.                 {
  353.                         Led_P=~Led_P;                                                        // 錄歌指示燈狀態切換
  354.                         if(Led_P==0)                                                        // 如果是切換為錄歌狀態
  355.                         {
  356.                                 count=0;                                                           // 清零記錄按鍵值計數,從新開始計數
  357.                         }        
  358.                         DelayMs(10);                                                        // 消除按鍵按下的抖動
  359.                         while(!Key10_P);                                        // 等待按鍵釋放
  360.                         DelayMs(10);                                                        // 消除按鍵松開的抖動
  361.                 }
  362.                
  363.                 /*播放錄制的音樂*/
  364.                 if(Key11_P==0)                                                
  365.                 {
  366.                         for(i=0;i<count;i++)
  367.                         {
  368.                                 PlayTone(record[i],2);        // 播放該音調
  369.                                 DelayMs(50);                                                // 每播放一個音調,停頓50毫秒
  370.                         }
  371.                         DelayMs(10);                                                        // 消除按鍵按下的抖動
  372.                         while(!Key11_P);                                        // 等待按鍵釋放
  373.                         DelayMs(10);                                                        // 消除按鍵松開的抖動
  374.                 }
  375.                
  376.                 /* 8個彈奏按鍵的掃描 */                        
  377.                 ret=KeyScanf();                                                        // 獲取8個按鍵的掃描結果

  378.                 if(ret!=0)                                                                        // 如果有按鍵按下去了
  379.                 {
  380.                         ledflag=ret;              //給流水燈賦值
  381.                         P3=(0xff)^ledflag;
  382.                         P0=ArrDig[(ret-1)%7];                        // 數碼管顯示當前音調值
  383.                         TH0 = ArrTH0[ret];                        // 裝入定時器TH0的初值
  384.                         TL0 = ArrTL0[ret];                        // 裝入定時器TL0的初值
  385.                         gTone=ret;
  386.                         if(Led_P==0)                                                  // 如果是錄音狀態,則把彈奏值記錄下來
  387.                         {
  388.                                 record[count]=gTone;                // 記錄當前彈奏的按鍵值
  389.                                 count++;                                                                // 準備記錄下一個
  390.                         }
  391.                         TR0=1;                                                                                // 啟動定時器,播放彈奏的音符
  392.                         DelayMs(20);                                                        // 去除按鍵按下的抖動
  393.                         while(KeyScanf());                                // 等待按鍵釋放
  394.                         DelayMs(70);                                                        // 按鍵釋放之后,再播放70毫秒,達到余音的效果
  395.                         TR0=0;                                                                                // 停止定時器
  396.                         P0=0xff;                                           // 關閉數碼管顯示
  397.                         P3=0xff;                                           // 關閉led
  398.                         Beep_P=1;                                                                        // 關閉定時器,停止彈奏音符的播放
  399.                 }        
  400.                 // LED_PLAY(ledflag);
  401.         }
  402. }

  403.         

  404. /*********************************************************/
  405. // 功能:定時器0中斷處理函數
  406. /*********************************************************/                  
  407. void time0() interrupt 1
  408. {
  409.         Beep_P=!Beep_P;                                // 將控制揚聲器的管腳取反
  410.         if(yinquflag ==1)
  411.         {
  412.                         TH0=ArrTH0[gTone];                // 重裝定時器TH0的初值
  413.             TL0=ArrTL0[gTone];                // 重裝定時器TL0的初值        
  414.   }
  415.         else if(yinquflag ==2)
  416.         {
  417.                         TH0=ArrTH0[gTone+5];                // 重裝定時器TH0的初值
  418.             TL0=ArrTL0[gTone+5];                // 重裝定時器TL0的初值        
  419.   }
  420.         else if(yinquflag ==3)
  421.         {
  422.                 TH0=ArrTH0[gTone+10];                // 重裝定時器TH0的初值
  423.           TL0=ArrTL0[gTone+10];                // 重裝定時器TL0的初值        
  424.   }
  425. }
復制代碼

全部資料51hei下載地址:
電子琴終結版.rar (108.31 KB, 下載次數: 72)

評分

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

查看全部評分

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

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 精品国产91亚洲一区二区三区www | 欧美成人综合 | 欧美日韩毛片 | 欧一区| 在线欧美日韩 | 一区二区三区高清 | 国产精品明星裸体写真集 | 国产精品久久久久久久久久东京 | 欧美性久久久 | 一区二区三区在线免费观看 | 91人人看| 久久久免费精品 | 欧美一区视频 | 国产高清在线精品一区二区三区 | 老外几下就让我高潮了 | 亚洲免费视频一区二区 | www.日本精品 | 日韩av在线一区 | 国产欧美精品在线观看 | 少妇一级淫片免费放播放 | 亚洲视频一区二区三区 | 一级高清 | 欧美一区二区三区 | 日韩久久久久久 | 狠狠干网站 | 91综合网 | 日韩精品av | 欧美成年人 | 亚洲男人的天堂网站 | 国产91观看 | 国产美女一区二区 | 99re6在线视频精品免费 | 欧美一级在线 | 国产婷婷精品av在线 | 精精国产视频 | 国产在线观看不卡一区二区三区 | 日日夜夜精品视频 | 免费一级大片 | 一级免费毛片 | 欧美在线一区二区三区四区 | 欧美视频三区 |