亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? traffic.c

?? 這是《Keil Cx51 V7.0單片機(jī)高級語言編程與uVision2應(yīng)用實踐》教材各章中列出的全部程序例子。
?? C
字號:

/*****************************************************************************/
/*   TRAFFIC.C:  使用C51編譯器的交通信號燈控制器                            */
/*****************************************************************************/
code char menu[] = 
   "\n"
   "+***** TRAFFIC LIGHT CONTROLLER using C51 and RTX-51 tiny *****+\n"
   "| This program is a simple Traffic Light Controller.  Between  |\n"
   "| start time and end time the system controls a traffic light  |\n"
   "| with pedestrian self-service.  Outside of this time range    |\n"
   "| the yellow caution lamp is blinking.                         |\n"
   "+ command -+ syntax -----+ function ---------------------------+\n"
   "| Display  | D           | display times                       |\n"
   "| Time     | T hh:mm:ss  | set clock time                      |\n"
   "| Start    | S hh:mm:ss  | set start time                      |\n"
   "| End      | E hh:mm:ss  | set end time                        |\n"
   "+----------+-------------+-------------------------------------+\n";

#include <reg52.h>                    /* 8052單片機(jī)特殊功能寄存器定義 */
#include <rtx51tny.h>                 /* RTX-51 tiny 功能函數(shù)定義 */
#include <stdio.h>                    /* 標(biāo)準(zhǔn) I/O 頭文件 */
#include <ctype.h>                    /* 字符函數(shù)頭文件 */
#include <string.h>                   /* 字符串及存儲器函數(shù)頭文件 */

extern getline (char idata *, char);  /* 外部函數(shù): 行輸入 */
extern serial_init ();                /* 外部函數(shù): 串行口初始化 */

#define INIT      0                   /* 任務(wù)0:  初始化 */
#define COMMAND   1                   /* 任務(wù)1:  命令 */
#define CLOCK     2                   /* 任務(wù)2:  時鐘 */
#define BLINKING  3                   /* 任務(wù)3:  閃爍 */
#define LIGHTS    4                   /* 任務(wù)4:  信號 */
#define KEYREAD   5                   /* 任務(wù)5:  讀鍵 */
#define GET_ESC   6                   /* 任務(wù)6:  ESC鍵退出 */

struct time  {                        /* 定義時間紀(jì)錄結(jié)構(gòu) */
  unsigned char hour;                 /* 小時 */
  unsigned char min;                  /* 分 */
  unsigned char sec;                  /* 秒 */
};

struct time ctime = { 12,  0,  0 };   /* 存儲時鐘的時間值 */
struct time start = {  7, 30,  0 };   /* 存儲開始時間值 */
struct time end   = { 18, 30,  0 };   /* 存儲結(jié)束時間值 */

sbit  red    = P1^2;                  /* I/O 腳:  紅燈輸出  */
sbit  yellow = P1^1;                  /* I/O 腳:  黃燈輸出  */
sbit  green  = P1^0;                  /* I/O 腳:  綠燈輸出  */
sbit  stop   = P1^3;                  /* I/O 腳:  stop燈輸出  */
sbit  walk   = P1^4;                  /* I/O 腳:  walk燈輸出  */
sbit  key    = P1^5;                  /* I/O 腳:  自助按鍵輸入 */

idata    char inline[16];             /* 存儲輸入命令行 */

/*****************************************************************************/
/*        任務(wù)0:初始化                                                     */
/*****************************************************************************/
init () _task_ INIT  {                /* 程序從這里開始運行 */
  serial_init ();                     /* 初始化串行口 */
  os_create_task (CLOCK);             /* 啟動時鐘任務(wù) */
  os_create_task (COMMAND);           /* 啟動命令任務(wù) */
  os_create_task (LIGHTS);            /* 啟動信號任務(wù) */
  os_create_task (KEYREAD);           /* 啟動讀鍵任務(wù) */
  os_delete_task (INIT);              /* 停止初始化任務(wù) */
}

bit display_time = 0;                 /* 標(biāo)志:信號命令狀態(tài)顯示時間 */

/*****************************************************************************/
/*        任務(wù)2:時鐘                                                       */
/*****************************************************************************/
clock ()  _task_ CLOCK  {
  while (1)  {                        /* 時鐘為無限循環(huán) */
    if (++ctime.sec == 60)  {         /* 計算秒值 */
      ctime.sec = 0;
      if (++ctime.min == 60)  {       /* 計算分值 */
        ctime.min = 0;
        if (++ctime.hour == 24)  {    /* 計算小時值 */
          ctime.hour = 0;
        }
      }
    }
    if (display_time)  {              /* 如果命令狀態(tài)為延時 */
      os_send_signal (COMMAND);       /* 向任務(wù)1發(fā)送信號 */
    }
    os_wait (K_IVL, 100, 0);          /* 等待時間間隔:1秒 */
  }
}

struct time rtime;                    /* 暫存輸入時間 */

/*****************************************************************************/
/*        讀取時間: 將行輸入轉(zhuǎn)換為時間值并存儲                               */
/*****************************************************************************/
bit readtime (char idata *buffer)  {
  unsigned char args;                         

  rtime.sec = 0;                               /* 預(yù)置秒值為0 */
  args = sscanf (buffer, "%bd:%bd:%bd",        /* 掃描行輸入 */
                 &rtime.hour,                  /* 得到小時、分、秒值 */
                 &rtime.min,
                 &rtime.sec);
  
  if (rtime.hour > 23  ||  rtime.min > 59  ||  /* 檢查輸入值是否有效 */
      rtime.sec > 59   ||  args < 2        ||  args == EOF)  {
    printf ("\n*** ERROR: INVALID TIME FORMAT\n");
    return (0);
  }
  return (1);
}

#define ESC  0x1B                              /* 定義ESC 鍵代碼 */

bit   escape;                                  /* ESC 鍵輸入標(biāo)志 */

/*****************************************************************************/
/*        任務(wù) 6:檢查是否 ESC 鍵輸入                                        */
/*****************************************************************************/
get_escape () _task_ GET_ESC  {
  while (1)  {                                 /* 無限循環(huán)  */
    if (_getkey () == ESC)  escape = 1;        /* 如果ESC 鍵輸入,設(shè)置標(biāo)志 */
    if (escape)  {                             /* 如果有ESC 鍵標(biāo)志,發(fā)送信號 */
      os_send_signal (COMMAND);                /* 到任務(wù)1 */
    }
  }
}

/******************************************************************************/
/*        Task 1 :命令處理器
/******************************************************************************/
command () _task_ COMMAND  {
  unsigned char i;

  printf (menu);                               /* 顯示命令菜單 */
  while (1)  {                                 
    printf ("\nCommand: ");                    /* 顯示提示符 */
    getline (&inline, sizeof (inline));        /* 獲得命令行輸入 */

    for (i = 0; inline[i] != 0; i++)  {        /* 轉(zhuǎn)換為大寫 */
      inline[i] = toupper(inline[i]);
    }

    for (i = 0; inline[i] == ' '; i++);        /* 跳過空格 */

    switch (inline[i])  {                      /* 命令功能處理 */
      case 'D':                                /* 顯示時間命令 */
        printf ("Start Time: %02bd:%02bd:%02bd    "
                "End Time: %02bd:%02bd:%02bd\n",
                 start.hour, start.min, start.sec,
                 end.hour,   end.min,   end.sec);
        printf ("                        type ESC to abort\r");

        os_create_task (GET_ESC);              /* 在顯示循環(huán)中檢查ESC 鍵 */
        escape = 0;                            /* 清除 ESC 標(biāo)志 */
        display_time = 1;                      /* 置位顯示時間標(biāo)志 */
        os_clear_signal (COMMAND);             /* 清零懸掛標(biāo)志 */

        while (!escape)  {                     /*  當(dāng)無 ESC 鍵輸入時  */
          printf ("Clock Time: %02bd:%02bd:%02bd\r",      /* 顯示時間 */
                   ctime.hour, ctime.min, ctime.sec);
          os_wait (K_SIG, 0, 0);               /* 等待時間變化或 ESC 鍵輸入*/
        }

        os_delete_task (GET_ESC);              /* 不再檢查ESC 鍵 */
        display_time = 0;                      /* 清零顯示時間標(biāo)志 */
        printf ("\n\n");
        break;

      case 'T':                                /* 設(shè)置時間命令 */
        if (readtime (&inline[i+1]))  {        /* 讀取輸入時間 */
          ctime.hour = rtime.hour;             /* 并存儲于 ctime 中  */
          ctime.min  = rtime.min;
          ctime.sec  = rtime.sec;
        }
        break;

      case 'E':                                /* 設(shè)置結(jié)束時間命令 */
        if (readtime (&inline[i+1]))  {        /* 讀取輸入時間 */
          end.hour = rtime.hour;               /* 并存儲于end 中 */
          end.min  = rtime.min;
          end.sec  = rtime.sec;
        }
        break;

      case 'S':                                /* 設(shè)置開始時間命令 */
        if (readtime (&inline[i+1]))  {        /* 讀取輸入時間 */
          start.hour = rtime.hour;             /* 并存儲start中 */
          start.min  = rtime.min;
          start.sec  = rtime.sec;
        }
        break;

      default:                                 /* 錯誤處理 */
        printf (menu);                         /* 顯示命令菜單 */
        break;
    }   
  }
}

/*****************************************************************************/
/*        信號函數(shù): 檢查時鐘時間是否在start與end 之間                      */
/*****************************************************************************/
bit signalon ()   {
  if (memcmp (&start, &end, sizeof (struct time)) < 0)  {
    if (memcmp (&start, &ctime, sizeof (struct time)) < 0  &&
        memcmp (&ctime, &end,   sizeof (struct time)) < 0)  return (1);
  }
                                                
  else  { 
    if (memcmp (&end,   &ctime, sizeof (start)) > 0  &&
        memcmp (&ctime, &start, sizeof (start)) > 0)  return (1);
  }
  return (0);                                  /* 信號結(jié)束,開始閃爍 */
}

/*****************************************************************************/
/*        任務(wù) 3 閃爍: 如果當(dāng)前時間位于 start 和 end之外則啟動本任務(wù)        */
/*****************************************************************************/
blinking () _task_ BLINKING  {                 /* 閃爍黃燈 */
  red    = 0;                                  /* 熄滅所有燈 */
  yellow = 0;
  green  = 0;
  stop   = 0;
  walk   = 0;

  while (1)  {                                
    yellow = 1;                                /* 黃燈亮 */
    os_wait (K_TMO, 30, 0);                    /* 等待超時: 30個時鐘節(jié)拍 */
    yellow = 0;                                /* 黃燈滅 */
    os_wait (K_TMO, 30, 0);                    /* 等待超時: 30個時鐘節(jié)拍 */
    if (signalon ())  {                        /* 如果閃爍時間到 */
      os_create_task (LIGHTS);                 /* 啟動任務(wù)4:點亮燈 */
      os_delete_task (BLINKING);               /* 并停止任務(wù)3:停止閃爍 */
    }
  }
}

/*****************************************************************************/
/*      任務(wù) 4 信號: 如果當(dāng)前時間位于 start 和 end 之間則啟動本任務(wù)          */
/*****************************************************************************/
lights () _task_ LIGHTS  {                     
  red    = 1;                                  /* 點亮紅燈和 stop 燈 */
  yellow = 0;
  green  = 0;
  stop   = 1;
  walk   = 0;
  while (1)  {                              
    os_wait (K_TMO, 30, 0);                    /* 等待超時: 30個時鐘節(jié)拍 */
    if (!signalon ())  {                       /* 如果信號時間到 */
      os_create_task (BLINKING);               /* 啟動任務(wù)3:開始閃爍 */
      os_delete_task (LIGHTS);                 /* 停止任務(wù)4:停止亮燈 */
    }
    yellow = 1;
    os_wait (K_TMO, 30, 0);                    /* 等待超時: 30個時鐘節(jié)拍 */
    red    = 0;                                /* 為汽車點亮綠燈 */
    yellow = 0; 
    green  = 1;
    os_clear_signal (LIGHTS);
    os_wait (K_TMO, 30, 0);                    /* 等待超時: 30個時鐘節(jié)拍 */
    os_wait (K_TMO + K_SIG, 250, 0);           /* 等待超時和信號 */
    yellow = 1;
    green  = 0;
    os_wait (K_TMO, 30, 0);                    /* 等待超時: 30個時鐘節(jié)拍 */
    red    = 1;                                /* 為汽車點亮紅燈 */
    yellow = 0;
    os_wait (K_TMO, 30, 0);                    /* 等待超時: 30個時鐘節(jié)拍 */
    stop   = 0;                                /* 為行人點亮綠燈 */    
    walk   = 1;
    os_wait (K_TMO, 100, 0);                   /* 等待超時: 100個時鐘節(jié)拍 */
    stop   = 1;                                /* 為行人點亮紅燈 */        
    walk   = 0;
  }
}

/*****************************************************************************/
/*        任務(wù) 5 按鍵輸入: 處理行人按鍵輸入                                  */
/*****************************************************************************/
keyread () _task_ KEYREAD  {
  while (1)  {                                 
    if (key)  {                                /* 若有鍵按下 */
      os_send_signal (LIGHTS);                 /* 向任務(wù)4發(fā)送信號 */
    }
    os_wait (K_TMO, 2, 0);                     /* 等待超時: 2個時鐘節(jié)拍 */
  }
}

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
...中文天堂在线一区| 欧美狂野另类xxxxoooo| 久久久亚洲午夜电影| 久国产精品韩国三级视频| 欧美精品一区二区三区蜜桃| 国产麻豆91精品| 国产精品毛片久久久久久久| 99久久精品情趣| 亚洲成人三级小说| 欧美一卡2卡三卡4卡5免费| 激情综合色播激情啊| 中文字幕乱码日本亚洲一区二区| 99久久精品免费| 亚洲国产欧美日韩另类综合| 日韩一区二区电影在线| 国产成a人亚洲精品| 亚洲摸摸操操av| 欧美精品一二三四| 国产白丝网站精品污在线入口| 亚洲三级免费观看| 欧美一区二区三区在线视频 | 成人精品gif动图一区| 亚洲青青青在线视频| 欧美精品xxxxbbbb| 国产成人av一区| 亚洲成人精品在线观看| 久久久亚洲午夜电影| 91久久精品一区二区| 久久精品国产免费| 亚洲人成影院在线观看| 日韩精品一区二区三区视频在线观看| 国产成人免费网站| 爽爽淫人综合网网站| 国产精品嫩草99a| 91精品国产综合久久久蜜臀图片| 成人app网站| 久久99蜜桃精品| 亚洲一区二区欧美| 亚洲国产精华液网站w| 日韩一二三区不卡| 色婷婷精品大在线视频| 国产盗摄女厕一区二区三区| 五月天亚洲婷婷| 亚洲天天做日日做天天谢日日欢| 日韩欧美亚洲国产精品字幕久久久| thepron国产精品| 国内成+人亚洲+欧美+综合在线| 亚洲综合一区二区| 国产精品天天摸av网| 日韩久久久久久| 欧美日韩亚洲综合| 99精品久久免费看蜜臀剧情介绍| 伦理电影国产精品| 亚洲超碰精品一区二区| 亚洲欧美日韩国产手机在线| 国产人成亚洲第一网站在线播放| 欧美一区二区三区视频| 欧美日韩视频在线一区二区| 99精品视频在线观看| 国产成人免费高清| 国产精品中文欧美| 久久99久久99精品免视看婷婷| 亚洲福利一二三区| 亚洲激情图片一区| 亚洲乱码国产乱码精品精可以看| 国产日韩欧美电影| 久久亚洲欧美国产精品乐播| 欧美tickle裸体挠脚心vk| 在线综合视频播放| 欧美日韩dvd在线观看| 欧美视频完全免费看| 在线这里只有精品| 日本久久精品电影| 在线观看日韩电影| 色偷偷88欧美精品久久久| 99国产精品一区| 日本精品一区二区三区高清 | 一区二区在线观看视频在线观看| 国产精品久久久久三级| 国产精品午夜电影| 国产精品国产馆在线真实露脸| 亚洲国产精品传媒在线观看| 国产精品欧美极品| 国产精品进线69影院| 国产精品日韩成人| 国内精品久久久久影院薰衣草| 狠狠色丁香婷综合久久| 精品一区二区三区在线观看| 国产一区二区三区蝌蚪| 成人一区在线观看| 91麻豆国产在线观看| 91国产成人在线| 91精品国产综合久久国产大片| 欧美一级精品大片| 国产日韩欧美精品电影三级在线| 国产精品亲子伦对白| 尤物av一区二区| 日韩不卡手机在线v区| 精品系列免费在线观看| 成人在线视频一区二区| 91久久人澡人人添人人爽欧美| 欧美三区免费完整视频在线观看| 3atv在线一区二区三区| 久久丝袜美腿综合| 亚洲视频在线一区观看| 日韩专区一卡二卡| 国产电影一区二区三区| 色94色欧美sute亚洲线路二| 日韩一区二区三区视频在线 | 岛国一区二区在线观看| 一道本成人在线| 日韩欧美美女一区二区三区| 国产视频一区不卡| 亚洲自拍偷拍图区| 国产一区二区三区免费在线观看| 91一区二区在线观看| 91精品在线一区二区| 中文一区二区完整视频在线观看| 亚洲一区视频在线观看视频| 国精品**一区二区三区在线蜜桃| 99在线精品观看| 日韩视频不卡中文| 亚洲免费观看在线视频| 久久福利视频一区二区| 91在线一区二区三区| 欧美一二三四区在线| 亚洲婷婷在线视频| 国产一区视频导航| 欧美日韩国产大片| 国产精品女主播av| 捆绑调教一区二区三区| 色域天天综合网| 国产欧美精品一区二区色综合 | 亚洲一区免费在线观看| 国产乱子伦一区二区三区国色天香 | 亚洲精品在线观看视频| 一区二区三国产精华液| 国产不卡在线一区| 日韩视频中午一区| 亚洲福利一区二区三区| 91小视频在线| 国产精品久久久久久亚洲毛片| 极品少妇一区二区三区精品视频 | 粉嫩嫩av羞羞动漫久久久| 91精品国产乱| 亚洲va中文字幕| 在线观看日韩电影| 亚洲久草在线视频| jlzzjlzz欧美大全| 欧美高清在线一区二区| 国产一区二区三区精品视频| 日韩西西人体444www| 日韩专区欧美专区| 9191久久久久久久久久久| 亚洲激情图片小说视频| 91日韩精品一区| 最新久久zyz资源站| k8久久久一区二区三区| 国产精品无人区| 成人午夜电影小说| 日本一区二区三区电影| 国产成人aaa| 久久品道一品道久久精品| 国模一区二区三区白浆| 精品不卡在线视频| 国模套图日韩精品一区二区| 精品国产人成亚洲区| 激情综合色播激情啊| 久久久久久久免费视频了| 国产高清精品在线| 久久天天做天天爱综合色| 国产精品69久久久久水密桃| 国产日产精品一区| 成人妖精视频yjsp地址| 亚洲国产电影在线观看| 99精品视频一区| 亚洲一区在线看| 91精品国产91久久久久久最新毛片 | 午夜a成v人精品| 欧美一区二区三区四区高清| 美女在线视频一区| 久久久久久久久久久久久女国产乱 | 色国产精品一区在线观看| 亚洲大尺度视频在线观看| 91精品国产91热久久久做人人 | 欧美自拍偷拍一区| 亚洲不卡av一区二区三区| 日韩一区和二区| 国产成人在线视频网站| 亚洲少妇最新在线视频| 欧美另类久久久品| 国产一区二区视频在线播放| 国产精品理论在线观看| 欧美少妇性性性| 韩日精品视频一区| 亚洲视频网在线直播| 7777精品伊人久久久大香线蕉的| 久久99国产精品久久99果冻传媒| 国产精品久久久久久久久免费丝袜| 色视频成人在线观看免|