-
#include
#include
#include
#define vk_esc 0x11b /* escape key */
定義定時器0x1c時鐘中斷的中斷編號
int timercounter=0;* 計時變數,每秒增加 18 次。 */
指向原始時鐘中斷處理程式條目的中斷處理程式指標(控制代碼)
void interrupt ( oldhandler)()
新的時鐘中斷處理程式 *
void interrupt newhandler( )
increase the global counter */
timercounter++;
call the old routine */
oldhandler();
設定新的時鐘中斷處理程式*
void settimer(void interrupt (*intproc)()
oldhandler=getvect(timer);
disable();設定新的時鐘中斷處理程式時,將禁用所有中斷
setvect(timer,intproc);
enable();開啟中斷
恢復到原始時鐘中斷處理*
void killtimer()
disable();
setvect(timer,oldhandler);
enable();
void main(void)
int key,time=0;
settimer(newhandler);修改時鐘中斷
for (;
if (bioskey(1))
key=bioskey(0);
if (key==vk esc) * 按 Esc 鍵提前退出程式*
printf("user cancel!");
break;
if (timercounter>18) * 每 1 秒一次 *
恢復時序變數 *
timercounter=0;
time++;
printf("%d",time);
if (time==10) * 在 10 秒內結束程式
printf("program terminated normally!");
break;
killtimer();恢復時鐘中斷
-
這裡有乙個想法。
讓我們從鍵盤掃瞄器開始。 採集是通過 A 按鈕還是 B 按鈕按下。 如果按下A鍵,LED1埠的輸出電平會很高,然後延時為1s,延時程式可以用延時大致延時,也可以用定時器準確延時; 延遲1s後,讓LED埠輸出低電平,然後延遲1s。
用 a while 或 for 語句迴圈此程式 5 次,這樣就可以得到啟動 led1 的動作(1s 閃爍一次,持續 10 秒);
然後在此語句之後啟動另乙個計時器,用於計時 20 秒。 您可以將此計時器排程為 50 毫秒,然後在迴圈變數中新增 400 次,即 20 秒的計時。
在此期間,如果再次按下A鍵,則判斷定時器是否迴圈超過400次,如果超過則表示A鍵已從之前的狀態按下20S以上,以這種方式重複啟動LED1的動作(1S閃爍一次, 持續10S),如果迴圈變數不超過400次,則表示在20S內再次按下了A鍵,這樣就執行了LED2(秒閃一次,持續20S)這個動作。
LED2(20s秒閃爍一次)的程式是LED2的IO口輸出高電平,然後延秒,然後LED2口輸出低電平,延秒。 之後,使用 while 或 for 語句迴圈此程式 10 次,即可完成 led2 的動作(秒閃一次,持續 20 秒)。
當然,在鍵盤掃瞄程式中,如果按B鍵,會直接讓LED2埠輸出高電平。 這樣,LED2 將保持亮起。
-
太奇怪了,居然用串列埠當io口。
bool f=0;
for(int i=1000;i>=1;我--)從最大的數字 1000 開始,然後嘗試使用較小的數字。 >>>More
總結。 這是乙個用 C** 編寫的簡單時鐘,它列印出當前時間(以小時、分鐘和秒為單位):include include int main() return 0; 此 ** 使用標頭檔案中的 time 函式和 localtime 函式,以及標頭檔案中的 printf 函式和 fflush 函式。 >>>More
最主要的是你使用命名空間 std 來放置這一行; 把它放在 main() 中,然後呼叫 cout 輸出它,所以你應該把它放在前面,或者直接新增到頭檔案中。 可以使用 h,也可以將其放在呼叫 iostream 的函式的前面。 如: >>>More