單晶片魔法車01-電子走馬燈
第一個實驗我們要練習的是如何用C語言控制89C2051的輸出功能:實驗一:電子走馬燈
使用材料:科學魔法車*1、89C2051*1、LED*3、石英振盪晶體*1、電容(20pf*2、100uf*1)、電阻(300*3、10K*1)、導線*6
電路照片:
以下是程式範例共有兩個,第一個比較容易看懂,第二種寫法則需要具備一些程式語言的基礎喔:
/*實驗一:走馬燈*/
#include <AT89x051.h>
void delay(unsigned char tmp); //延時函數
void main(void) //程式開始
{
while(1){ //無限循環
P1_0=0; //P2第一腳輸出"0"(用共陽極接法,所以用"0"驅動LED)
delay(100); //呼叫延時函數,讓第一個LED亮一段時間,可改變參數來設定時間長短
P1_0=1; //第一個LED熄滅
P1_1=0; //第二個LED點亮
delay(100); //延遲一段時間
P1_1=1; //第二個LED熄滅
P1_2=0; //第三個LED點亮
delay(100); //延遲一段時間
P1_2=1; //第三個LED熄滅
P1_1=0; //回到第二個LED點亮
delay(100); //延遲一段時間
P1_1=1; //第二個LED熄滅
}
}
void delay(unsigned char tmp) //延時函數內容,改變參數大小,可調整時間
{
unsigned char i,j; //宣告使用到的變數
i=tmp; //把呼叫程式式中的參數100指定給變數i
while(i) //只要i不為0,
{ //就執行{...}中的指令
i--; //把i值減1
j=255; // <-+
while(j) // |
{ // 用j值讓程式執行256次的迴圈,到延時效果
j--; // |
} // <-+
}
}
編譯完成的檔案,可下載直接燒錄
/*實驗一:走馬燈 進階版*/
#include <reg51.h>
void delay(unsigned char tmp); //延時函數
code unsigned char tmpled={0X01,0X02,0X04,0X02};
//定義發光二極體的輸出資料的常數。前面加"code"表示比此資料
//只在程式代碼中存放,不會占用到晶片中占記憶體空間
// 0x01: 00000001 =>2第一個bit為1
// 0x02: 00000010 =>2第二個bit為1
// 0x04: 00000100 =>2第三個bit為1
void main(void) //程式開始
{
unsigned char i; //定義變數
while(1){ //無限循環
for(i=0;i<4;i++){ //連續輸出4個資料
P1=~tmpled; //"~"這個符號是反相,因發光二極體採用共陽極,所以將資料反相再輸出
delay(100); //調用延時函數,改變參數大小,調整變化的速度
}
}
}
void delay(unsigned char tmp) //延時函數內容,改變參數大小,可調整時間
{
unsigned char i,j; //宣告使用到的變數
i=tmp; //把呼叫程式式中的參數100指定給變數i
while(i) //只要i不為0,
{ //就執行{...}中的指令
i--; //把i值減1
j=255; // <-+
while(j) // |
{ // 用j值讓程式執行256次的迴圈,到延時效果
j--; // |
} // <-+
}
}
進階版編譯完成的檔案
周老師 真是棒, 太感謝你了, 我將會在我的網頁上做一個標明單晶片學習的
聯結到你這裡. 希望能幫助更多的人學習單晶片(微控制器)
建議您將每一個程式取一個不同的名稱, 谢谢周老师!
頁:
[1]