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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

MiniARM2300電腦自動打鈴器設計與實現ucos操作系統

[復制鏈接]
跳轉到指定樓層
樓主
采用ucos,有詳細的說明,經典的ucos操作系統實例詳解


單片機源程序如下:
  1. /****************************************Copyright (c)****************************************************
  2. **                            Guangzhou ZHIYUAN electronics Co.,LTD.
  3. **                                      
  4. **
  5. **--------------File Info---------------------------------------------------------------------------------
  6. ** File name:           main.c
  7. ** Last modified Date:  2007-09-01
  8. ** Last Version:        1.0
  9. ** Descriptions:        The main() function example template
  10. **
  11. **--------------------------------------------------------------------------------------------------------
  12. ** Created by:          Zhenghongtao
  13. ** Created date:        2007-09-01
  14. ** Version:             1.0
  15. ** Descriptions:        The original version
  16. **
  17. **--------------------------------------------------------------------------------------------------------
  18. ** Modified by:
  19. ** Modified date:
  20. ** Version:
  21. ** Descriptions:
  22. **
  23. *********************************************************************************************************/
  24. #include "config.h"                                                     /*  系統頭文件                  */
  25. #include "i2c.h"

  26. #define TASKKEY_ID              12                                      /*  定義鍵盤任務的ID            */
  27. #define TASKKEY_PRIO            TASKKEY_ID                              /*  定義鍵盤任務的優先級        */
  28. #define TASKKEY_STACK_SIZE      512                                     /*  定義鍵盤任務堆棧大小        */

  29. #define TASKDISP_ID             13                                      /*  定義顯示任務的ID            */
  30. #define TASKDISP_PRIO           TASKDISP_ID                             /*  定義顯示任務的優先級        */
  31. #define TASKDISP_STACK_SIZE     512                                     /*  定義顯示任務堆棧大小        */

  32. #define TASKCTRL_ID             6                                       /*  定義控制任務的ID            */
  33. #define TASKCTRL_PRIO           TASKCTRL_ID                             /*  定義控制任務的優先級        */
  34. #define TASKCTRL_STACK_SIZE     512                                     /*  定義控制任務堆棧大小        */

  35. OS_STK        TaskKeyStk[TASKKEY_STACK_SIZE];                                 /*  定義鍵盤任務的堆棧          */
  36. OS_STK        TaskDispStk[TASKDISP_STACK_SIZE];                               /*  定義顯示任務的堆棧          */
  37. OS_STK        TaskCtrlStk[TASKCTRL_STACK_SIZE];                               /*  定義控制任務的堆棧          */


  38. void TaskKey(void *pdata);                                              /*  TaskKey  鍵盤任務           */
  39. void TaskDisp(void *pdata);                                             /*  TaskDisp 顯示任務           */
  40. void TaskCtrl(void *pdata);                                             /*  TaskCtrl 控制任務           */

  41. void ToDispBuf(void);
  42. void FromDispBuf(void);
  43. void GetTime(void);
  44. void SetTime(void);
  45. void RTC_Exception(void);

  46. OS_EVENT       *GmboxRingCtrl;

  47. unsigned int    GuiMode   = 0;                                          /*  模式                        */
  48. unsigned int    GuiCursor = 8;                                          /*  光標                        */
  49. unsigned int    GuiIndex  = 0;                                          /*  索引                        */
  50. unsigned int    GuiItem   = 0;                                          /*  條目                        */

  51. /*********************************************************************************************************
  52.   時鐘結構定義
  53. *********************************************************************************************************/
  54. struct time {
  55.     unsigned char       ucHour;                                         /*  時                          */
  56.     unsigned char       ucMin;                                          /*  分                          */
  57.     unsigned char       ucSec;                                          /*  秒                          */
  58.     unsigned char       ucWeek;                                         /*  星期                        */
  59.     unsigned short      usYear;                                         /*  年                          */
  60.     unsigned char       ucMon;                                          /*  月                          */
  61.     unsigned char       ucDay;                                          /*  日                          */
  62. };
  63. typedef struct time     TIME;
  64. typedef TIME           *PTIME;
  65. /*********************************************************************************************************
  66.   鬧鐘結構定義
  67. *********************************************************************************************************/
  68. struct alarm {
  69.     unsigned char       ucHour;                                         /*  時                          */
  70.     unsigned char       ucMin;                                          /*  分                          */
  71.     unsigned char       ucSec;                                          /*  秒                          */
  72.     unsigned char       ucEnable;                                       /*  鬧鐘使能控制                */
  73.     struct {
  74.         unsigned short  usLevel;                                        /*  輸出電平控制                */
  75.         unsigned short  usTime;                                         /*  輸出時間控制                */
  76.     } c[4];                                                             /*  4路輸出控制                 */
  77. };
  78. typedef struct alarm    ALARM;
  79. typedef ALARM          *PALARM;

  80. #define MAX_ALARM 4                                                     /*  最大鬧鐘個數                */

  81. unsigned char       GucTimeDispBuf[2][8];                               /*  時鐘顯示緩沖區              */
  82. unsigned char       GucAlarmDispBuf[MAX_ALARM][6][8];                   /*  鬧鐘顯示緩沖區              */

  83. TIME                GtimeCurrentTime;                                   /*  當前時間                    */
  84. ALARM               GalarmRingTime[MAX_ALARM];                          /*  鬧鐘時間                    */

  85. #define LED0    (1u<<18)
  86. #define LED1    (1u<<19)
  87. #define LED2    (1u<<20)
  88. #define LED3    (1u<<21)

  89. /*********************************************************************************************************
  90.   時鐘模式下,下一個光標索引表
  91. *********************************************************************************************************/
  92. const unsigned char GucTimeNextCursor[2][9] = {
  93.     {7,0,1,2,3,4,7,5,7},
  94.     {5,0,1,2,3,4,5,5,5}
  95. };
  96. /*********************************************************************************************************
  97.   時鐘模式下,上一個光標索引表
  98. *********************************************************************************************************/
  99. const unsigned char GucTimePreCursor[2][9] = {
  100.     {1,2,3,4,5,7,7,0,7},
  101.     {1,2,3,4,5,0,5,5,5}
  102. };
  103. /*********************************************************************************************************
  104.   時鐘模式下,最大值限定表
  105. *********************************************************************************************************/
  106. const unsigned char GucTimeMaxTable[2][8] = {
  107.     {0x09,0x05,0x09,0x05,0x09,0x02,0x1f,0x06},
  108.     {0x09,0x03,0x09,0x01,0x09,0x09,0x1f,0x1f}
  109. };
  110. /*********************************************************************************************************
  111.   鬧鐘模式下,下一個光標索引表
  112. *********************************************************************************************************/
  113. const unsigned char GucAlarmNextCursor[6][9] = {
  114.     {5,0,1,2,3,4,5,5,5},
  115.     {7,0,1,2,3,4,5,6,7},
  116.     {4,0,1,2,3,4,4,4,4},
  117.     {4,0,1,2,3,4,4,4,4},
  118.     {4,0,1,2,3,4,4,4,4},
  119.     {4,0,1,2,3,4,4,4,4}
  120. };
  121. /*********************************************************************************************************
  122.   鬧鐘模式下,上一個光標索引表
  123. *********************************************************************************************************/
  124. const unsigned char GucAlarmPreCursor[6][9] = {
  125.     {1,2,3,4,5,0,5,5,5},
  126.     {1,2,3,4,5,6,7,0,7},
  127.     {1,2,3,4,0,4,4,4,4},
  128.     {1,2,3,4,0,4,4,4,4},
  129.     {1,2,3,4,0,4,4,4,4},
  130.     {1,2,3,4,0,4,4,4,4}
  131. };
  132. /*********************************************************************************************************
  133.   鬧鐘模式下,最大值限定表
  134. *********************************************************************************************************/
  135. const unsigned char GucAlarmMaxTable[6][8] = {
  136.     {0x09,0x05,0x09,0x05,0x09,0x02,0x1f,0x1f},
  137.     {0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01},
  138.     {0x09,0x09,0x09,0x09,0x01,0x1f,0x1f,0x1f},
  139.     {0x09,0x09,0x09,0x09,0x01,0x1f,0x1f,0x1f},
  140.     {0x09,0x09,0x09,0x09,0x01,0x1f,0x1f,0x1f},
  141.     {0x09,0x09,0x09,0x09,0x01,0x1f,0x1f,0x1f}
  142. };

  143. /*********************************************************************************************************
  144. ** Function name:           main
  145. **
  146. ** Descriptions:            主函數
  147. **
  148. ** input parameters:
  149. ** output parameters:
  150. **
  151. ** Returned value           
  152. **
  153. **
  154. ** Created by:
  155. ** Created Date:
  156. **--------------------------------------------------------------------------------------------------------
  157. ** Modified by:
  158. ** Modified date:
  159. **--------------------------------------------------------------------------------------------------------
  160. *********************************************************************************************************/
  161. int main(void)
  162. {
  163.     OSInit();                                                           /*  初始化uC/OS-II              */
  164.     OSTaskCreateExt(TaskKey,
  165.                     (void *)0,
  166.                     &TaskKeyStk[TASKKEY_STACK_SIZE - 1],
  167.                     TASKKEY_PRIO,
  168.                     TASKKEY_ID,
  169.                     &TaskKeyStk[0],
  170.                     TASKKEY_STACK_SIZE,
  171.                     (void *)0,
  172.                     OS_TASK_OPT_STK_CHK | OS_TASK_OPT_STK_CLR);
  173.                                                                         /*  創建鍵盤任務                */
  174.     OSStart();                                                          /*  啟動多任務操作系統          */
  175.     return  (0);
  176. }
  177. /*********************************************************************************************************
  178. ** Function name:           ZLG7290GetKey
  179. **
  180. ** Descriptions:            zlg7290讀取鍵值
  181. **
  182. ** input parameters:
  183. ** output parameters:
  184. **
  185. ** Returned value           
  186. **
  187. **
  188. ** Created by:
  189. ** Created Date:
  190. **--------------------------------------------------------------------------------------------------------
  191. ** Modified by:
  192. ** Modified date:
  193. **--------------------------------------------------------------------------------------------------------
  194. *********************************************************************************************************/
  195. uint16 ZLG7290GetKey(void)
  196. {
  197.     uint8 temp[2];
  198.    
  199.     i2cRead( 0,                                                         /*  I2C0                        */
  200.              0x70,                                                      /*  器件地址                    */
  201.              temp,                                                      /*  接收數據的緩沖區            */
  202.              1,                                                         /*  器件子地址                  */
  203.              1,                                                         /*  器件子地址類型為單字節型    */
  204.              2);                                                        /*  讀取數據的長度              */
  205.     while (i2cGetFlag(0) == I2C_BUSY);                                  /*  等待I2C操作完畢             */
  206.     return (uint16)(temp[0] + (temp[1] * 256));
  207. }
  208. /*********************************************************************************************************
  209. ** Function name:           ZLG7290ShowChar
  210. **
  211. ** Descriptions:            zlg7290顯示數值
  212. **
  213. ** input parameters:
  214. ** output parameters:
  215. **
  216. ** Returned value           
  217. **
  218. **
  219. ** Created by:
  220. ** Created Date:
  221. **--------------------------------------------------------------------------------------------------------
  222. ** Modified by:
  223. ** Modified date:
  224. **--------------------------------------------------------------------------------------------------------
  225. *********************************************************************************************************/
  226. void ZLG7290ShowChar(uint8 index, uint8 data)
  227. {
  228.     uint8 buf[2];
  229.    
  230.     buf[0] = (uint8)(0x60 | (index & 0x0f));
  231.     buf[1] = data;
  232.     i2cWrite(0,                                                         /*  I2C0                        */
  233.              0x70,                                                      /*  器件地址                    */
  234.              buf,                                                       /*  要寫入數據的緩沖區          */
  235.              0x07,                                                      /*  器件子地址                  */
  236.              1,                                                         /*  器件子地址類型為單字節型    */
  237.              2);                                                        /*  寫入的數量                  */
  238.     while (i2cGetFlag(0) == I2C_BUSY);                                  /*  等待I2C操作完畢             */
  239. }
  240. /*********************************************************************************************************
  241. ** Function name:           rtcInit
  242. **
  243. ** Descriptions:            RTC初始化
  244. **
  245. ** input parameters:
  246. ** output parameters:
  247. **
  248. ** Returned value           
  249. **
  250. **
  251. ** Created by:
  252. ** Created Date:
  253. **--------------------------------------------------------------------------------------------------------
  254. ** Modified by:
  255. ** Modified date:
  256. **--------------------------------------------------------------------------------------------------------
  257. *********************************************************************************************************/
  258. void rtcInit(void)
  259. {
  260.     if(ALYEAR != 2007) {                                                /*  初始化一次                  */
  261.         CCR     = 0x00;                                                 /*  禁止時間計數器              */
  262.         PREINT  = Fpclk/32768-1;                                        /*  設置基準時鐘分頻器          */
  263.         PREFRAC = Fpclk%32768;
  264.         CISS    = 0;                                                    /*  禁止次秒級中斷              */
  265.         AMR     = 0xFF;                                                 /*  禁止報警中斷                */
  266.         CIIR    = 0x01;                                                 /*  使能秒增量中斷              */
  267.         ILR     = 0x07;                                                 /*  清除RTC中斷標志             */
  268.         ALYEAR  = 2007;                                                 /*  初始化標志                  */
  269.         
  270.         YEAR    = 2007;                                                 /*  初始化時間寄存器            */
  271.         MONTH   = 11;
  272.         DOM     = 5;
  273.         DOW     = 0;
  274.         HOUR    = 12;
  275.         MIN     = 0;
  276.         SEC     = 0;
  277.         CCR     = 0x11;
  278.     }
  279.     GetTime();                                                          /*  更新當前時間                */
  280. }
  281. /*********************************************************************************************************
  282. ** Function name:           TaskKey
  283. **
  284. ** Descriptions:            鍵盤任務
  285. **
  286. ** input parameters:
  287. ** output parameters:
  288. **
  289. ** Returned value           
  290. **
  291. **
  292. ** Created by:
  293. ** Created Date:
  294. **--------------------------------------------------------------------------------------------------------
  295. ** Modified by:
  296. ** Modified date:
  297. **--------------------------------------------------------------------------------------------------------
  298. *********************************************************************************************************/
  299. void TaskKey(void *pdata)
  300. {
  301.     unsigned char   ucKey;
  302.     unsigned char   ucKey0;
  303.     unsigned char   ucFlag = 0;                                         /*  修改狀態標志                */
  304.    
  305.     pdata = pdata;                                                      /*  防止編譯器警告              */
  306.    
  307.     TargetInit();
  308.     OSTimeDly(OS_TICKS_PER_SEC/10);                                     /*  上電延時,等待zlg7290復位   */
  309.    
  310.     PINSEL1 = (PINSEL1 & ~(0xff << 22))|(  0x05 << 22 );                /*  設置I2C管腳功能             */
  311.     i2cInit(0, "Speed=30000", NULL);                                    /*  初始化I2C0                  */
  312.     SetVICIRQ(9, 2, (int)i2c0IRQ);                                      /*  設置了IRQ中斷               */
  313.    
  314.     GmboxRingCtrl = OSMboxCreate((void *)0);                            /*  創建消息郵箱                */
  315.     rtcInit();
  316.     SetVICIRQ(13, 3, (int)RTC_Exception);
  317.    
  318.     OSTaskCreateExt (TaskDisp,
  319.                      (void *)0,
  320.                      &TaskDispStk[TASKDISP_STACK_SIZE - 1],
  321.                      TASKDISP_PRIO,
  322.                      TASKDISP_ID,
  323.                      &TaskDispStk[0],
  324.                      TASKDISP_STACK_SIZE,
  325.                      (void *)0,
  326.                      OS_TASK_OPT_STK_CHK | OS_TASK_OPT_STK_CLR);

  327.                                                                         /*  創建顯示任務                */
  328.                                                                         
  329.     OSTaskCreateExt (TaskCtrl,
  330.                      (void *)0,
  331.                      &TaskCtrlStk[TASKCTRL_STACK_SIZE - 1],
  332.                      TASKCTRL_PRIO,
  333.                      TASKCTRL_ID,
  334.                      &TaskCtrlStk[0],
  335.                      TASKCTRL_STACK_SIZE,
  336.                      (void *)0,
  337.                      OS_TASK_OPT_STK_CHK | OS_TASK_OPT_STK_CLR);

  338.                                                                         /*  創建輸出控制任務            */
  339.    
  340.     while (1) {
  341.         OSTimeDly(4);                                                   /*  延時                        */
  342.         ucKey = (uint8)ZLG7290GetKey();                                 /*  獲取鍵值                    */
  343.         if ((ucKey == 0) || (ucKey > 16)) {                             /*  沒有按鍵                    */
  344.                 continue;
  345.         }
  346.         if (ucKey<11) {                                                 /*  數字鍵                      */
  347.                 ucKey0 = 0;
  348.         }
  349.         else {                                                          /*  功能鍵                      */
  350.                 ucKey0 = (uint8)(ucKey % 10);
  351.         }
  352.            
  353.             /*
  354.              *  鍵值處理
  355.              */
  356.             OS_ENTER_CRITICAL();                                            /*  進入臨界區,原子操作        */
  357.         switch (ucKey0) {
  358.         
  359.         case 0:                                                         /*  數字鍵                      */
  360.             if (ucFlag) {                                               /*  數字鍵只有在修改狀態下有效  */
  361.                 ucKey %= 10;
  362.                 switch (GuiMode) {
  363.                
  364.                 case 0:                                                 /*  時鐘模式                    */
  365.                     if (ucKey <= GucTimeMaxTable[GuiItem][GuiCursor]) {
  366.                         GucTimeDispBuf[GuiItem][GuiCursor] = ucKey;
  367.                         GuiCursor = GucTimeNextCursor[GuiItem][GuiCursor];
  368.                         FromDispBuf();
  369.                         SetTime();
  370.                     }
  371.                     break;
  372.                 case 1:                                                 /*  鬧鐘模式                    */
  373.                     if (ucKey <= GucAlarmMaxTable[GuiItem][GuiCursor]) {
  374.                         GucAlarmDispBuf[GuiIndex][GuiItem][GuiCursor] = ucKey;
  375.                         GuiCursor = GucAlarmNextCursor[GuiItem][GuiCursor];
  376.                         FromDispBuf();
  377.                     }
  378.                     break;
  379.                 default:
  380.                     break;
  381.                 }
  382.                     
  383.             }
  384.             break;
  385.         case 1:                                                         /*  左移動鍵                    */
  386.             if (ucFlag) {
  387.                 switch (GuiMode) {
  388.                
  389.                 case 0:
  390.                     GuiCursor = GucTimePreCursor[GuiItem][GuiCursor];
  391.                     break;
  392.                 case 1:
  393.                     GuiCursor = GucAlarmPreCursor[GuiItem][GuiCursor];
  394.                     break;
  395.                 default:
  396.                     break;
  397.                 }
  398.             }
  399.             else {
  400.                 switch (GuiMode) {
  401.                
  402.                 case 0:
  403.                     if (GuiItem > 0) {
  404.                         GuiItem--;
  405.                     }
  406.                     else {
  407.                         GuiItem = 1;
  408.                     }
  409.                     break;
  410.                 case 1:
  411.                     if (GuiItem > 0) {
  412.                         GuiItem--;
  413.                     }
  414.                     else {
  415.                         GuiItem = 5;
  416.                     }
  417.                     break;
  418.                 default:
  419.                     break;
  420.                 }
  421.             }
  422.             break;
  423.         case 2:                                                         /*  右移動鍵                    */
  424.             if (ucFlag) {
  425.                 switch (GuiMode) {
  426.                
  427.                 case 0:
  428.                     GuiCursor = GucTimeNextCursor[GuiItem][GuiCursor];
  429.                     break;
  430.                 case 1:
  431.                     GuiCursor = GucAlarmNextCursor[GuiItem][GuiCursor];
  432.                     break;
  433.                 default:
  434.                     break;
  435.                 }
  436.             }
  437.             else {
  438.                 switch (GuiMode) {
  439.                
  440.                 case 0:
  441.                     GuiItem = (GuiItem+1)%2;
  442.                     break;
  443.                 case 1:
  444.                     GuiItem = (GuiItem+1)%6;
  445.                     break;
  446.                 default:
  447.                     break;
  448.                 }
  449.             }
  450.             break;
  451.         case 3:                                                         /*  上移動鍵                    */
  452.             if (ucFlag) {
  453.                 switch (GuiMode) {
  454.                
  455.                 case 0:
  456.                     break;
  457.                 case 1:
  458.                     break;
  459.                 default:
  460.                     break;
  461.                 }
  462.             }
  463.             else {
  464.                 switch (GuiMode) {
  465.                
  466.                 case 0:
  467.                     break;
  468.                 case 1:
  469.                     if(GuiIndex > 0 ) {
  470.                         GuiIndex--;
  471.                     }
  472.                     else {
  473.                         GuiIndex = MAX_ALARM-1;
  474.                     }
  475.                     GuiItem = 0;
  476.                     break;
  477.                 default:
  478.                     break;
  479.                 }
  480.             }
  481.             break;
  482.         case 4:                                                         /*  下移動鍵                    */
  483.             if (ucFlag) {
  484.                 switch (GuiMode) {
  485.                
  486.                 case 0:
  487.                     break;
  488.                 case 1:
  489.                     break;
  490.                 default:
  491.                     break;
  492.                 }
  493.             }
  494.             else {
  495.                 switch (GuiMode) {
  496.                 case 0:
  497.                     break;
  498.                 case 1:
  499.                     GuiIndex = (GuiIndex+1)%MAX_ALARM;
  500.                     GuiItem = 0;
  501.                     break;
  502.                 }
  503.             }
  504.             break;
  505.         case 5:                                                         /*  模式切換鍵                  */
  506.             if (!ucFlag) {
  507.                 GuiMode = (GuiMode+1)%2;
  508.                 GuiIndex = 0;
  509.                 GuiItem = 0;
  510.             }
  511.             break;
  512.         case 6:                                                         /*  確定鍵                      */
  513.             ucFlag = (uint8)(!ucFlag);
  514.             if (ucFlag) {
  515.                 switch (GuiMode) {
  516.                
  517.                 case 0:
  518.                     GuiCursor = GucTimeNextCursor[GuiItem][GuiCursor];
  519.                     break;
  520.                 case 1:
  521.                     GuiCursor = GucAlarmNextCursor[GuiItem][GuiCursor];
  522.                     break;
  523.                 default:
  524.                     break;
  525.                 }
  526.             }
  527.             else {
  528.                 GuiCursor = 8;
  529.             }
  530.             break;
  531.         default:
  532.             break;
  533.         }
  534.         OS_EXIT_CRITICAL();                                             /*  退出臨界區                  */
  535.         
  536.         while (1) {                                                     /*  等待按鍵釋放                */
  537.             OSTimeDly(4);                                               /*  延時                        */
  538.             ucKey = (uint8)ZLG7290GetKey();                             /*  獲取鍵值                    */
  539.             if ((ucKey == 0) || (ucKey > 16)) {                         /*  按鍵釋放                    */
  540.                 break;
  541.             }
  542.         }
  543.     }
  544. }
  545.    
  546. /*********************************************************************************************************
  547. ** Function name:           TaskDisp
  548. **
  549. ** Descriptions:            顯示任務
  550. **
  551. ** input parameters:
  552. ** output parameters:
  553. **
  554. ** Returned value           
  555. **
  556. **
  557. ** Created by:
  558. ** Created Date:
  559. **--------------------------------------------------------------------------------------------------------
  560. ** Modified by:
  561. ** Modified date:
  562. **--------------------------------------------------------------------------------------------------------
  563. *********************************************************************************************************/
  564. void TaskDisp(void *pdata)
  565. {
  566.     uint8 i;
  567.    
  568.     pdata = pdata;
  569.    
  570.     while (1) {
  571. /*顯示任務周期性的輸出全局變量的信息(時鐘和鬧鐘),100ms是一個經驗值,
  572. 用戶會覺得比較舒服,不會產生“系統死機”的感覺。  */  
  573.         OSTimeDly(20);                                                  /*  延時                        */
  574.         
  575.         OS_ENTER_CRITICAL();
  576.         ToDispBuf();                                                    /*  刷新顯示緩沖區              */
  577.         OS_EXIT_CRITICAL();
  578.         
  579.         switch (GuiMode) {                                              /*  顯示信息                    */
  580.         
  581.         case 0:                                                         /*  時鐘模式                    */
  582.             for (i=0; i<8; i++) {
  583.                 ZLG7290ShowChar(i, (uint8)(((i==GuiCursor) ?
  584.                                 0x40 : 0x00) | GucTimeDispBuf[GuiItem][i]));
  585.                 OSTimeDly(1);
  586.             }
  587.             break;
  588.         case 1:                                                         /*  鬧鐘模式                    */
  589.             for (i=0; i<8; i++) {
  590.                 ZLG7290ShowChar(i, (uint8)(((i==GuiCursor) ?
  591.                                 0x40 : 0x00) | GucAlarmDispBuf[GuiIndex][GuiItem][i]));
  592.                 OSTimeDly(1);
  593.             }
  594.             break;
  595.         default:
  596.             break;
  597.         }
  598.     }
  599. }

  600. /*********************************************************************************************************
  601. ** Function name:           TaskCtrl
  602. **
  603. ** Descriptions:            輸出控制任務
  604. **
  605. ** input parameters:
  606. ** output parameters:
  607. **
  608. ** Returned value           
  609. **
  610. **
  611. ** Created by:
  612. ** Created Date:
  613. **--------------------------------------------------------------------------------------------------------
  614. ** Modified by:
  615. ** Modified date:
  616. **--------------------------------------------------------------------------------------------------------
  617. *********************************************************************************************************/
  618. void TaskCtrl(void *pdata)
  619. {
  620.     INT8U   ucErr;
  621.     unsigned short  usLevel[4];                                         /*  4路輸出電平控制             */
  622.     unsigned short  usTime[4];                                          /*  4路輸出時間控制             */
  623.     unsigned short *pusMsg;
  624.     OS_MBOX_DATA mboxdataMsg;                                           /*  查詢消息的結構體            */
  625.     int   i;
  626.    
  627.     pdata = pdata;
  628.     IO1DIR |=  (LED0 | LED1 | LED2 | LED3);                             /*  設置IO方向                  */
  629.     IO1SET = (LED0 | LED1 | LED2 |LED3);                                /*  設置IO初值                  */
  630.    
  631.     while (1) {
  632.         pusMsg = (unsigned short *)OSMboxPend(GmboxRingCtrl, 0, &ucErr);/*  獲取消息                    */
  633.         for (i=0; i<4; i++) {                                           /*  解釋消息                    */
  634.             usLevel[i] = pusMsg[2*i];
  635.             usTime[i]  = pusMsg[2*i+1];
  636.         }
  637.         if (usLevel[0]==0) {                                            /*  設置輸出電平                */
  638.             IO1CLR = LED0;
  639.         }
  640.         if (usLevel[1]==0) {
  641.             IO1CLR = LED1;
  642.         }
  643.         if (usLevel[2]==0) {
  644.             IO1CLR = LED2;
  645.         }
  646.         if (usLevel[3]==0) {
  647.             IO1CLR = LED3;
  648.         }
  649.         while (1) {                                                     /*  輸出時間循環                */
  650.             OSTimeDly(OS_TICKS_PER_SEC);
  651.             if (usTime[0] != 0) {                                       /*  0路時間                     */
  652.                 if (--usTime[0] == 0) {
  653.                     IO1SET = LED0;
  654.                 }
  655.             }
  656.             if (usTime[1] != 0) {                                       /*  1路時間                     */
  657.                 if (--usTime[1] == 0) {
  658.                     IO1SET = LED1;
  659.                 }
  660.             }
  661.             if (usTime[2] != 0) {                                       /*  2路時間                     */
  662.                 if (--usTime[2] == 0) {
  663.                     IO1SET = LED2;
  664.                 }
  665.             }
  666.             if (usTime[3] != 0) {                                       /*  3路時間                     */
  667.                 if (--usTime[3] == 0) {
  668.                     IO1SET = LED3;
  669.                 }
  670.             }
  671.             if ((usTime[0] == 0) && (usTime[1] == 0) && (usTime[2] == 0) && (usTime[3] == 0)) {
  672.                 break;
  673.             }
  674.             OSMboxQuery(GmboxRingCtrl, &mboxdataMsg);                   /*  查詢是否有新的消息          */
  675.             if (mboxdataMsg.OSMsg != (void *)0) {
  676.                 break;
  677.             }
  678.         }
  679.     }
  680. }

  681. /*********************************************************************************************************
  682. ** Function name:           GetTime
  683. **
  684. ** Descriptions:            獲取當前時間
  685. **
  686. ** input parameters:
  687. ** output parameters:
  688. **
  689. ** Returned value           
  690. **
  691. **
  692. ** Created by:
  693. ** Created Date:
  694. **--------------------------------------------------------------------------------------------------------
  695. ** Modified by:
  696. ** Modified date:
  697. **--------------------------------------------------------------------------------------------------------
  698. *********************************************************************************************************/
  699. void GetTime(void)
  700. {
  701.     GtimeCurrentTime.ucHour = (uint8)HOUR;
  702.     GtimeCurrentTime.ucMin  = (uint8)MIN;
  703.     GtimeCurrentTime.ucSec  = (uint8)SEC;
  704.     GtimeCurrentTime.usYear = (uint16)YEAR;
  705.     GtimeCurrentTime.ucMon  = (uint8)MONTH;
  706.     GtimeCurrentTime.ucDay  = (uint8)DOM;
  707.     GtimeCurrentTime.ucWeek = (uint8)DOW;
  708. }

  709. /*********************************************************************************************************
  710. ** Function name:           ToDispBuf
  711. **
  712. ** Descriptions:            更新顯示緩沖區
  713. **
  714. ** input parameters:
  715. ** output parameters:
  716. **
  717. ** Returned value           
  718. **
  719. **
  720. ** Created by:
  721. ** Created Date:
  722. **--------------------------------------------------------------------------------------------------------
  723. ** Modified by:
  724. ** Modified date:
  725. **--------------------------------------------------------------------------------------------------------
  726. *********************************************************************************************************/
  727. void ToDispBuf(void)
  728. {
  729.     int i, j;
  730.    
  731.     GucTimeDispBuf[0][0] = (uint8)(GtimeCurrentTime.ucSec % 10);        /*  星期,時分秒                */
  732.     GucTimeDispBuf[0][1] = (uint8)(GtimeCurrentTime.ucSec / 10);
  733.     GucTimeDispBuf[0][2] = (uint8)(GtimeCurrentTime.ucMin % 10);
  734.     GucTimeDispBuf[0][3] = (uint8)(GtimeCurrentTime.ucMin / 10);
  735.     GucTimeDispBuf[0][4] = (uint8)(GtimeCurrentTime.ucHour % 10);
  736.     GucTimeDispBuf[0][5] = (uint8)(GtimeCurrentTime.ucHour / 10);
  737.     GucTimeDispBuf[0][6] = 0x1f;
  738.     GucTimeDispBuf[0][7] = GtimeCurrentTime.ucWeek;
  739.    
  740.     GucTimeDispBuf[1][0] = (uint8)(GtimeCurrentTime.ucDay % 10);        /*  年月日                      */
  741.     GucTimeDispBuf[1][1] = (uint8)(GtimeCurrentTime.ucDay / 10);
  742.     GucTimeDispBuf[1][2] = (uint8)(GtimeCurrentTime.ucMon % 10);
  743.     GucTimeDispBuf[1][3] = (uint8)(GtimeCurrentTime.ucMon / 10);
  744.     GucTimeDispBuf[1][4] = (uint8)(GtimeCurrentTime.usYear % 10);
  745.     GucTimeDispBuf[1][5] = (uint8)(GtimeCurrentTime.usYear % 100 / 10);
  746.     GucTimeDispBuf[1][6] = (uint8)(GtimeCurrentTime.usYear % 1000 / 100);
  747.     GucTimeDispBuf[1][7] = (uint8)(GtimeCurrentTime.usYear / 1000);
  748.    
  749.     for (i=0; i<MAX_ALARM; i++) {
  750.         GucAlarmDispBuf[i][0][0] = (uint8)(GalarmRingTime[i].ucSec % 10);
  751.         GucAlarmDispBuf[i][0][1] = (uint8)(GalarmRingTime[i].ucSec % 100 / 10);
  752.         GucAlarmDispBuf[i][0][2] = (uint8)(GalarmRingTime[i].ucMin % 10);
  753.         GucAlarmDispBuf[i][0][3] = (uint8)(GalarmRingTime[i].ucMin % 100 / 10);
  754.         GucAlarmDispBuf[i][0][4] = (uint8)(GalarmRingTime[i].ucHour % 10);
  755.         GucAlarmDispBuf[i][0][5] = (uint8)(GalarmRingTime[i].ucHour % 100 / 10);
  756.         GucAlarmDispBuf[i][0][6] = (uint8)i;
  757.         GucAlarmDispBuf[i][0][7] = 0x0a;
  758.         
  759.         for (j=0; j<8; j++) {
  760.             GucAlarmDispBuf[i][1][j] = (uint8)((GalarmRingTime[i].ucEnable&(1<<j)) ? 0x0e : 0x0d);
  761.         }
  762.         
  763.         for (j=0; j<4; j++) {
  764.             GucAlarmDispBuf[i][j+2][0] = (uint8)(GalarmRingTime[i].c[j].usTime % 10);
  765.             GucAlarmDispBuf[i][j+2][1] = (uint8)(GalarmRingTime[i].c[j].usTime % 100 / 10);
  766.             GucAlarmDispBuf[i][j+2][2] = (uint8)(GalarmRingTime[i].c[j].usTime % 1000 / 100);
  767.             GucAlarmDispBuf[i][j+2][3] = (uint8)(GalarmRingTime[i].c[j].usTime % 10000 / 1000);
  768.             GucAlarmDispBuf[i][j+2][4] = (uint8)(GalarmRingTime[i].c[j].usLevel ? 0x11 : 0x14);
  769.             GucAlarmDispBuf[i][j+2][5] = 0x1f;
  770.             GucAlarmDispBuf[i][j+2][6] = (uint8)j;
  771.             GucAlarmDispBuf[i][j+2][7] = 0x0c;
  772.         }
  773.     }
  774. }

  775. /*********************************************************************************************************
  776. ** Function name:           FromDispBuf
  777. **
  778. ** Descriptions:            更新當前時間
  779. **
  780. ** input parameters:
  781. ** output parameters:
  782. **
  783. ** Returned value           
  784. **
  785. **
  786. ** Created by:
  787. ** Created Date:
  788. **--------------------------------------------------------------------------------------------------------
  789. ** Modified by:
  790. ** Modified date:
  791. **--------------------------------------------------------------------------------------------------------
  792. *********************************************************************************************************/
  793. void FromDispBuf(void)
  794. {
  795.     int i, j;
  796.    
  797.     GtimeCurrentTime.ucSec  = (uint8)(GucTimeDispBuf[0][1]*10 + GucTimeDispBuf[0][0]);
  798.     GtimeCurrentTime.ucMin  = (uint8)(GucTimeDispBuf[0][3]*10 + GucTimeDispBuf[0][2]);
  799.     GtimeCurrentTime.ucHour = (uint8)(GucTimeDispBuf[0][5]*10 + GucTimeDispBuf[0][4]);
  800.     GtimeCurrentTime.ucWeek = GucTimeDispBuf[0][7];
  801.    
  802.     GtimeCurrentTime.ucDay  = (uint8)(GucTimeDispBuf[1][1]*10 + GucTimeDispBuf[1][0]);
  803.     GtimeCurrentTime.ucMon  = (uint8)(GucTimeDispBuf[1][3]*10 + GucTimeDispBuf[1][2]);
  804.     GtimeCurrentTime.usYear = (uint16)(GucTimeDispBuf[1][7]*1000 + GucTimeDispBuf[1][6]*100
  805.                             + GucTimeDispBuf[1][5]*10 + GucTimeDispBuf[1][4]);
  806.    
  807.     for (i=0; i<MAX_ALARM; i++) {
  808.         GalarmRingTime[i].ucSec = (uint8)(GucAlarmDispBuf[i][0][1]*10 + GucAlarmDispBuf[i][0][0]);
  809.         if (GalarmRingTime[i].ucSec > 59) {
  810.             GalarmRingTime[i].ucSec = 59;
  811.         }
  812.         GalarmRingTime[i].ucMin = (uint8)(GucAlarmDispBuf[i][0][3]*10 + GucAlarmDispBuf[i][0][2]);
  813.         if (GalarmRingTime[i].ucMin > 59) {
  814.             GalarmRingTime[i].ucMin = 59;
  815.         }
  816.         GalarmRingTime[i].ucHour = (uint8)(GucAlarmDispBuf[i][0][5]*10 + GucAlarmDispBuf[i][0][4]);
  817.         if (GalarmRingTime[i].ucHour > 23) {
  818.             GalarmRingTime[i].ucHour = 23;
  819.         }
  820.         
  821.         for (j=0; j<8; j++) {
  822.             if (GucAlarmDispBuf[i][1][j] == 1) {
  823.                 GalarmRingTime[i].ucEnable = (uint8)(GalarmRingTime[i].ucEnable | (1<<j));
  824.             }
  825.             else if (GucAlarmDispBuf[i][1][j] == 0) {
  826.                GalarmRingTime[i].ucEnable = (uint8)(GalarmRingTime[i].ucEnable & (~(1<<j)));
  827.             }
  828.         }
  829.         
  830.         for (j=0; j<4; j++) {
  831.             GalarmRingTime[i].c[j].usTime = (uint16)(GucAlarmDispBuf[i][j+2][3]*1000
  832.                                           + GucAlarmDispBuf[i][j+2][2]*100
  833.                                           + GucAlarmDispBuf[i][j+2][1]*10
  834.                                           + GucAlarmDispBuf[i][j+2][0]);
  835.             if (GucAlarmDispBuf[i][j+2][4] == 1) {
  836.                 GalarmRingTime[i].c[j].usLevel = 1;
  837.             }
  838.             else if (GucAlarmDispBuf[i][j+2][4] == 0) {
  839.                 GalarmRingTime[i].c[j].usLevel = 0;
  840.             }
  841.         }
  842.     }
  843. }

  844. /*********************************************************************************************************
  845. ** Function name:           SetTime
  846. **
  847. ** Descriptions:            設置當前時間
  848. **
  849. ** input parameters:
  850. ** output parameters:
  851. **
  852. ** Returned value           
  853. **
  854. **
  855. ** Created by:
  856. ……………………

  857. …………限于本文篇幅 余下代碼請從51黑下載附件…………
復制代碼

所有資料51hei提供下載:
第四章 電腦自動打鈴器設計與實現.rar (305.84 KB, 下載次數: 20)




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

使用道具 舉報

無效樓層,該帖已經被刪除
您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
精品人伦一区二区| 国偷自拍第113页| 成人有码在线视频| 精品国产乱码久久久久久老虎 | 日韩av成人高清| 日本一区二区三区中文字幕| 欧美色视频免费| 国产在线www| 91丨porny丨在线中文 | 国产精品国产三级国产普通话三级| 亚洲第一在线| 老牛精品亚洲成av人片| 丁香花在线电影| 亚洲成人精品一区二区三区| 91九色网站| 国产黄色一级大片| 久久久久噜噜噜亚洲熟女综合| 亚洲国产成人va在线观看麻豆| 欧美另类视频在线| 国产精品久久久| 久久视频免费观看| 亚洲福利在线视频| 在线一区二区三区四区五区| 亚洲欧洲在线观看av| 国产一区二区看久久| 亚洲乱码久久| 欧美熟乱15p| 免费一区二区三区在线视频| 欧美a级在线观看| 你懂的免费在线观看视频网站| 黄瓜视频污app| 精品国内一区二区三区免费视频| 成人激情四射网| 九九热最新视频| 国产一级大片在线观看| 中文字幕网站在线观看| 国产无套精品一区二区三区| 一区二区三区国产免费| 天堂…中文在线最新版在线| 青少年xxxxx性开放hg| 久久久久久久久久久久久9999| 国产日韩在线观看av| 全球成人中文在线| 欧美精品激情在线观看| 99久久夜色精品国产网站| 久久精品导航| 999在线观看精品免费不卡网站| 久久人人88| 国产精品一区二区av交换| 亚洲性视频在线| 色综合一区二区日本韩国亚洲 | 久久天天做天天爱综合色| 国产揄拍国内精品对白| 蜜臀av国产精品久久久久 | 免费一级欧美在线大片| 97成人超碰| 最新欧美色图| 爱情电影社保片一区| 成人在线黄色电影| 韩国精品一区| 香蕉成人av| 欧美三区四区| 亚洲第一会所001| 成人影院网站| 日本一道高清亚洲日美韩| 暖暖成人免费视频| 国产精品成人国产| 一区二区三区无毛| 精品视频在线一区| 国产区精品视频在线观看豆花| 成人三级av在线| 成人在线视频你懂的| 欧亚精品一区| 欧美日韩国产高清电影| 亚洲澳门在线| 国产精品久久久免费| 久久久久91| 精品制服美女丁香| 99这里只有精品| 国产性做久久久久久| 国产精品你懂的| 尤物在线观看一区| 国产精品日韩久久久| eeuss草民免费| 亚洲图片在线观看| 亚洲成av人片在线| 亚洲不卡一区二区三区| 欧美色视频日本版| 在线成人午夜影院| 亚洲欧美精品一区| 久久影视免费观看 | 老司机午夜av| 亚洲在线观看网站| 成人免费视频a| 成人欧美一区二区三区视频| 日本一区视频在线观看| 99视频精品全部免费看| 国产91在线视频观看| 中文字幕色网站| 人妻aⅴ无码一区二区三区| 无码黑人精品一区二区| 在线永久看片免费的视频| 亚洲a视频在线| 国内精品久久久久久影院8f| 免费黄色av网站| 四虎影院在线域名免费观看| 色帝国亚洲欧美在线| 欧美高清xxx| 欧美三级美国一级| 日日摸夜夜添夜夜添亚洲女人| 成人午夜视频免费看| 亚洲精品成a人| 日韩视频免费观看高清完整版| 日韩中文在线中文网在线观看| 国产高清在线不卡| 日本不卡一区二区三区在线观看| 成人观看免费完整观看| free性中国hd国语露脸| 欧美a视频在线观看| 成人影院午夜久久影院| 秋霞在线观看av| √天堂8在线网| 一区二区在线视频观看| 自产国语精品视频| 成人黄色综合网站| 欧美色另类天堂2015| 亚洲一区第一页| 国产欧美日韩丝袜精品一区| 一级黄色免费在线观看| 日本wwww色| 国产对白videos麻豆高潮| 天天干天天操av| 男人捅女人免费视频| 伊人在我在线看导航| 国产香蕉精品| 日本欧美在线观看| 樱花草国产18久久久久| 日韩精品中文字幕有码专区| 国产精自产拍久久久久久蜜| 米仓穗香在线观看| 久久精品国产亚洲av麻豆| 乱子伦一区二区三区| 国产aⅴ超薄肉色丝袜交足| 九色国产在线观看| 97久久亚洲| 久久精品国产久精国产| 亚洲国产精品久久人人爱| 亚洲视频国产视频| 国产精品国产亚洲精品看不卡15| 欧美xxxxx在线视频| 国产97免费视频| 四虎免费视频| 成人亚洲综合天堂| 老牛国内精品亚洲成av人片| 国产福利一区二区三区视频| 欧美性大战xxxxx久久久| 欧美精品videos另类日本| 中文精品一区二区三区| 尤物视频最新网址| 日本免费网站在线观看| 在线视频尤物| aiai久久| 成人免费高清视频在线观看| 欧美丰满美乳xxx高潮www| 亚洲视频一二区| 亚洲精品第一国产综合精品| 国产欧美日韩亚洲精品| 欧美精品aaaa| 成人一级免费视频| av在线天天| 久久久91麻豆精品国产一区| 国产一区二区导航在线播放| 欧美日韩国产综合一区二区三区 | 蜜桃视频在线观看免费视频网站www| 美国成人xxx| 成人教育av在线| 精品国产乱码久久久久久1区2区| 91久久精品一区二区别| 亚洲一区二区三区四区精品| 99久久国产热无码精品免费| 最新中文字幕在线观看| 国产成人澳门| 久久亚洲综合色一区二区三区| 精品亚洲一区二区三区| 精品一区日韩成人| 成人午夜剧场视频网站| 亚洲天堂久久久| 三级资源在线| 一区二区福利| 欧美性受xxxx黑人xyx| 91精品久久久久久久久久久| 在线播放av中文字幕| 国产精品高潮呻吟av| 九一国产在线| 欧美1区免费| 黄色精品一区二区| 国产精品久久久久av免费| 日韩av一卡二卡三卡| 亚洲第一视频在线播放| 婷婷在线视频观看| 亚洲国产片色| 91精品国产综合久久久蜜臀粉嫩 | 中文亚洲av片在线观看| 操操操综合网| 日韩欧美一区二区三区免费看| 亚洲欧美日韩久久精品| 欧美在线视频在线播放完整版免费观看 | 亚洲第一色在线| 欧洲一区二区在线| 69av.com| 一级毛片aaaaaa免费看| 欧美日韩高清| 日韩欧美999| 国产高清在线精品一区二区三区| 手机看片福利视频| 天天草天天爽| 经典一区二区| 欧美午夜电影在线| 99理论电影网| 国产av 一区二区三区| 蜜桃视频免费网站| 国产精品国产一区| 欧美丝袜第三区| 欧美剧情片在线观看| 粉嫩高清一区二区三区精品视频 | 136国产福利精品导航| 青草热久免费精品视频| 国产精品入口麻豆| 日夜操在线视频| 亚洲婷婷伊人| 欧美小视频在线| 蜜桃999成人看片在线观看| 国产精品成人久久| 少妇性bbb搡bbb爽爽爽欧美| 亚洲免费精品| 亚洲精品资源美女情侣酒店 | 国产精品欧美激情在线播放| 五月天综合视频| 好男人社区在线视频| 欧美黄色免费| 精品国产乱子伦一区| 高清无码视频直接看| 亚洲av少妇一区二区在线观看| 日韩电影免费看| 国产欧美日本一区二区三区| 国产精品偷伦免费视频观看的| 午夜黄色福利视频| 偷拍自拍在线| 精品亚洲国产成人av制服丝袜 | 一本色道久久综合亚洲91| 欧美亚洲国产免费| 一本色道久久综合无码人妻| 欧美人动性xxxxz0oz| 91丝袜呻吟高潮美腿白嫩在线观看| 91产国在线观看动作片喷水| 欧美激情视频二区| 深夜福利视频在线免费观看| 免费黄网站欧美| 欧美激情xxxxx| 成人免费网站黄| 爽爽视频在线观看| 国产中文一区二区三区| 91国产精品视频在线| 国产又色又爽又高潮免费| 欧美视频综合| 国产激情91久久精品导航| 欧亚精品中文字幕| 欧美交换国产一区内射| 成人在线免费看黄| 中文字幕欧美日本乱码一线二线 | 日韩三级成人av网| 少妇精品一区二区| 亚洲男人网站| 国产精品1024| 国产美女直播视频一区| 亚洲乱码国产乱码精品| 成人开心激情| 欧美中文字幕一区二区三区| 欧美极品欧美精品欧美| 免费看大片爽| 久久成人免费| 热门国产精品亚洲第一区在线| 欧美日韩一区二区三区免费| 一本色道久久综合熟妇| 国产在线视频欧美一区| 欧美影视一区二区三区| 亚洲精品乱码久久久久久自慰| 黄色网页大全| 日韩和欧美一区二区三区| 555www成人网| 一级片在线观看免费| 欧美黄色a视频| 欧美日韩国产另类一区| 在线观看av网页| 好吊妞这里只有精品| 国产精品一区在线| 成人av资源| 天天色综合av| 91精品一区二区三区综合在线爱| 色偷偷9999www| 国产一二三四区在线| 国精产品一区一区三区mba下载| 亚洲综合在线视频| 欧美又粗又长又爽做受| 毛片av免费观看| 国产一区二区按摩在线观看| 超碰97在线播放| 婷婷色在线视频| 欧美激情在线| 欧美综合激情网| 在线视频 中文字幕| 免费看久久久| 日韩在线免费av| 国产午夜福利一区二区| 欧美黄页在线免费观看| 欧美成人免费网站| 三上悠亚影音先锋| 校园春色亚洲| 欧美一区二区三区免费观看视频| 91精品国产三级| 2017亚洲天堂1024| 亚洲无人区一区| 亚洲一级免费在线观看| 国产福利小视频在线| 亚洲综合清纯丝袜自拍| 91最新在线观看| 国产区av在线| 姬川优奈aav一区二区| 亚洲精品www.| 国产传媒在线播放| 在线欧美一区二区| 成人手机在线免费视频| 欧美24videosex性欧美| 欧美日韩一级视频| 久久国产精品无码一级毛片 | 一级全黄肉体裸体全过程| 免费黄色影片在线| 成人在线视频一区| 天天干天天色天天爽| 黄a免费视频| 国产精品理论片| 日韩视频在线免费看| h视频在线观看免费| 色偷偷久久一区二区三区| 国产麻豆剧传媒精品国产av| 一二三四视频在线中文| 亚洲成人精品视频在线观看| 劲爆欧美第一页| 日韩精品免费一区二区夜夜嗨| 欧美激情亚洲另类| 丰满人妻一区二区三区无码av| 夜夜嗨网站十八久久| 久久av一区二区三区亚洲| 老女人av在线| 亚洲黄色免费电影| 日韩女优在线视频| 国产精品高清乱码在线观看 | 精品久久久噜噜噜噜久久图片| 福利在线午夜| 精品视频999| 国产wwwwxxxx| 可以直接看的av网址站| 国产欧美一区二区精品性色超碰| 凹凸国产熟女精品视频| 成人在线app| 日韩精品免费在线| 黄色大全在线观看| 1024成人| 日韩一本精品| 小草在线视频在线免费视频| 在线看日韩精品电影| 欧美视频一区二区在线| 免费看日本一区二区| 成人黄色午夜影院| eeuss影影院www在线播放| 国产精品精品国产色婷婷| 日韩精品――色哟哟| 亚洲一区二区av| 热99精品里视频精品| fpee性欧美| 最新欧美精品一区二区三区| 色婷婷免费视频| 91综合久久爱com| 国产精品电影在线观看| 人人草人人干| 一区二区三区日韩在线观看| 久久精品一区二区免费播放| 成人午夜大片| 成人欧美一区二区三区在线| 天天激情综合| 色综合久久综合网欧美综合网| 永久看片925tv| 欧美大片专区| 伊人久久大香线蕉午夜av| 日本美女高清在线观看免费| 亚洲欧美日韩精品久久亚洲区 | 久久av红桃一区二区小说| 亚洲天堂在线视频观看| 久久久精品天堂| 特级西西人体wwwww|