Keil C51學習 2 點亮LED燈

P0口聯接8個LED燈,P1^0~P1^7;ide

 

點亮一個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

點亮多個LEDspa

#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

若是像上面那樣一個個賦值就太累了,下面是簡單方法3d

//此方法使用1個字節對單個端口賦值
P1 = 0xFF; //P1口所有爲高電平,對應的LED燈全滅掉,
//ff換算成二進制是 1111 1111code

P1 = 0xfe; //P1口的最低位點亮,能夠更改數值是其餘的燈點亮
//0xfe是16進制,0x開頭表示16進制數,
//fe換算成二進制是 1111 1110 blog

 

P0口是開路漏極只能輸出低電平,不能正常輸出高電平。it

所有取反,主函數中的代碼修改成for循環

 LED=~LED;      class

在一個時鐘週期內閃爍一次,這個時間過短,難以觀察。變量

這樣就引入延時須要,簡單方法就是執行一個循環一段時間。

 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 }
呼吸燈
相關文章
相關標籤/搜索