2008年5月18日 星期日

Class2 I/O 、掃秒技巧、七段顯示、keyboard (ch4)

delay的問題


//********************** 4_1.c *******************

//動作:令P10反相輸出指定時間的方波,送到喇叭發出聲音

//***********************************************

#include

void delay_1m(unsigned int dly); //宣告延時1m秒函數

main()

{

P0 = 0x04;

loop:

P1=P1^0x01; //P101xor會反相,令喇叭發出聲音

delay_1m(1); //呼叫延時函數1ms,自行調整延時時間

goto loop;

}

void delay_1m(unsigned int dly) //自訂1ms延時函數

{

int count;

while(dly>0)

{

count=120; //延時1ms的空轉次數

while (count>0) count--; //延時1ms

dly--; //dly遞減

}

}

//********** 4_2.c *****************************

//動作:令P10輸出方波到喇叭發出聲音,P3決定延時時間

//**********************************************

//#include

#include "reg51.h"

unsigned int dly;

void delay (void); //宣告自定延時函數

main()

{

while(1) //不斷循環執行

{

// P1_0=!P1_0; //P10反相,令喇叭發出聲音

P1 = ~P1;

delay(); //呼叫延時函數

}

}

void delay(void) //自訂延時函數

{

dly= P3*100; //P1輸入決定延時時間

while (dly>0) //dly>0 則再遞減

dly--; //dly遞減

}



//********** 4_3.c *****************************

//動作:令P10輸出嗶嗶聲

//**********************************************

#include

void delay(int dly); //宣告自定延時函數

void beep(char i);

main()

{

while(1)

{

beep(1); //嗶一聲

delay(30000); //間隔時間

beep(2); //嗶一聲

delay(30000); //間隔時間

beep(3); //嗶一聲

delay(30000); //間隔時間

}

}

void beep(char i)

{

int j;

while(i>0) //嗶聲次數

{

for(j=0;j<400;j++) //令輸出反相400

{

P1_0=!P1_0; //P10反相,令喇叭發出聲音

delay(10); /呼叫延時函數

}

delay(10000); //嗶聲的間隔時間

i--;

}

}

void delay(int dly) //自訂延時函數

{

while (dly>0) //dly>0 則再遞減

dly--; //dly遞減

}



未解碼七段顯示器範例實習

l程式7seg.c

l修改程式使七段顯示器顯示0~9

l讓七段顯示器顯示0~9,在顯示9~0

l配合作業1的版子,用兩個PORT的輸出控制兩個七段顯示器動作做00~99的計數(SEG4.c

作業

設計一程式,使用一個七段顯示器及一顆按鈕,設計亂數程式,按下按鈕後使七段顯示器亂數顯示1~6的其中一個數字。(參考3-823_45.c使用rand()函式)




沒有留言: