P0口聯接8個LED燈,P1^0~P1^7;
點亮一個LED
1 #include<reg52.h> //包含頭檔案,一般情況不需要改動, 2 //頭檔案包含特殊功能暫存器的定義 3 4 sbit LED=P1^0;// 用sbit 關鍵字 定義 LED到P1.0埠, 5 //LED是自己任意定義且容易記憶的符號 6 /*------------------------------------------------ 7 主函式 8 ------------------------------------------------*/ 9 void main (void) 10 { 11 //此方法使用bit位對單個埠賦值 12 LED=1; //將P1.0口賦值 1,對外輸出高電平 13 LED=0; //將P1.0口賦值 0,對外輸出低電平 14 15 while (1) //主回圈 16 { //主回圈中添加其他需要一直作業的程式 17 LED=0; 18 //將P1.0口賦值 0,對外輸出低電平 19 } 20 }點亮一個LED
點亮多個LED
#include<reg52.h> //包含頭檔案,一般情況不需要改動, //頭檔案包含特殊功能暫存器的定義 sbit LED0=P1^0;// 用sbit 關鍵字 定義 LED到P1.0埠, sbit LED1=P1^1;//LED是自己任意定義且容易記憶的符號 sbit LED2=P1^2; sbit LED3=P1^3; sbit LED4=P1^4; sbit LED5=P1^5; sbit LED6=P1^6; sbit LED7=P1^7; /*------------------------------------------------ 主函式 ------------------------------------------------*/ void main (void) { //此方法使用bit位對單個埠賦值 LED0=0; //將P1.0口賦值 0,對外輸出低電平 LED1=1; LED2=0; LED3=1; LED4=0; LED5=1; LED6=0; LED7=1; while (1) //主回圈 { //主回圈中添加其他需要一直作業的程式 } }點亮多個LED
如果像上面那樣一個個賦值就太累了,下面是簡單方法
//此方法使用1個位元組對單個埠賦值
P1 = 0xFF; //P1口全部為高電平,對應的LED燈全滅掉,
//ff換算成二進制是 1111 1111
P1 = 0xfe; //P1口的最低位點亮,可以更改數值是其他的燈點亮
//0xfe是16進制,0x開頭表示16進制數,
//fe換算成二進制是 1111 1110
P0口是開路漏極只能輸出低電平,不能正常輸出高電平,
全部取反,主函式中的代碼修改為
LED=~LED;
在一個時鐘周期內閃爍一次,這個時間太短,難以觀察,
這樣就引入延時需要,簡單方法就是執行一個回圈一段時間,
1 void main (void) 2 { 3 while (1) //主回圈 4 { //主回圈中添加其他需要一直作業的程式 5 LED=~LED; 6 //將P1.0口賦值 0,對外輸出低電平 7 delay(100);//執行100次 8 } 9 } 10 void delay(int time)//延時函式 11 { 12 int i=0; 13 while(time--) 14 { 15 i=4000; 16 while(i--); 17 } 18 }延時閃爍
1 void delay(int time)//延時函式 2 { 3 int i=0; 4 while(time--) 5 { 6 i=4000; 7 while(i--); 8 } 9 } 10 void main (void) 11 { 12 while (1) //主回圈 13 { //主回圈中添加其他需要一直作業的程式 14 15 unsigned char i; //定義一個無符號字符型區域變數 i 取值范圍 0~255 16 //P1=0xfe; //賦初始值 17 for(i=0;i<8;i++) //加入 for回圈,表明for回圈大括號中的程式回圈執行8次 18 { 19 P1<<=1; 20 delay(100);//執行100次 21 } 22 } 23 }延時左移
1 void delay(int time)//延時函式 2 { 3 int i=0; 4 while(time--) 5 { 6 i=4000; 7 while(i--); 8 } 9 } 10 void main (void) 11 { 12 13 unsigned char i; //定義一個無符號字符型區域變數 i 取值范圍 0~255 14 delay(100); 15 P1=0xfe; //賦初始值 16 while (1) //主回圈 17 { 18 for(i=0;i<8;i++) //加入 for回圈,表明for回圈大括號中的程式回圈執行8次 19 { 20 delay(100); 21 P1<<=1; 22 P1=P1|0x01; //左移后,最右端自動賦值0,所以需要該陳述句賦值1 23 } 24 P1=0xfe; //重新賦初始值 25 //主回圈中添加其他需要一直作業的程式 26 } 27 }回圈左移
1 sbit LED0=P1^0; 2 void delay(int i)//延時函式 3 { 4 while(i--); 5 } 6 void main (void) 7 { 8 9 unsigned int CYCLE=600,PWM_LOW=0;//定義周期并賦值 10 while (1) //主回圈 11 { 12 LED0=1; 13 delay(60000); //特意加延時,可以看到熄滅的程序 14 for(PWM_LOW=1;PWM_LOW<CYCLE;PWM_LOW++){ //PWM_LOW表示低 15 //電平時間,這個回圈中低電平時長從1累加到CYCLE(周期)的值,即600次 16 17 LED0=0; //點亮LED 18 delay(PWM_LOW);//延時長度,600次回圈中從1加至599 19 LED0=1; //熄滅LED 20 delay(CYCLE-PWM_LOW);//延時長度,600次回圈中從599減至1 21 22 } 23 LED0=0; 24 for(PWM_LOW=CYCLE-1;PWM_LOW>0;PWM_LOW--){ //與逐漸變亮相反的程序 25 26 LED0=0; 27 delay(PWM_LOW); 28 LED0=1; 29 delay(CYCLE-PWM_LOW); 30 } 31 //主回圈中添加其他需要一直作業的程式 32 } 33 }呼吸燈
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/254287.html
標籤:其他
下一篇:latex初試出現錯誤
