51單片機led燈控制
阿新 • • 發佈:2018-04-30
ID char 跑馬燈 .com ima code png img while
關於內容理解:
先讀懂51單片機的實驗原理圖,然後再著手編程。
由圖可知
1,led燈接的是單片機的P0口,意味著我們只能用P0口來編程。
2,led燈是共陽極,當給低電平時led燈才會亮,(單片機灌電流能力較強,輸出電流較弱,所以一般用共陽極)
3,led所在的P0口是讀io口,故使用時用一個變量來做中介
實驗效果
實現跑馬燈效果,P0^0->P0^7口依次亮且每次只亮一個燈,然後P0^7->P0^0。
實驗代碼
#include <reg52.h> //此文件中定義了51的一些特殊功能寄存器 #include <intrins.h> //--聲明全局函數--// voidDelay10ms(unsigned int c); //延時10ms void main() { unsigned char i; unsigned char LED; //--首先賦值LED--// LED = 0xFE; while (1) { //--LED往左閃爍--// for (i = 0 ;i < 7 ; i++) { //--將LED 的值賦給P2口--// P0 = LED; Delay10ms(50); //延時一下,為了讓燈有持續點亮的時間 LED = LED << 1; // 將LED裏面的值左移一位,然後重新賦給LED LED = LED | 0x01; // 移位後,前面的位為高電平 } //--LED向右顯示--// for (i = 0 ;i < 7 ; i++) { P0 = LED; Delay10ms(50); LED= LED >> 1; // 右移 LED = LED | 0x80; // 移位後,後面的位為高電平 } } } void Delay10ms(unsigned int c) //誤差 0us { unsigned char a, b; //--c已經在傳遞過來的時候已經賦值了,所以在for語句第一句就不用賦值了--// for (;c>0;c--) { for (b=38;b>0;b--) { for (a=130;a>0;a--); } } }
擴展:實現流水燈
一次點亮P0^0->P0^7
#include <reg52.h> //此文件中定義了51的一些特殊功能寄存器 #include <intrins.h> //--聲明全局函數--// void Delay10ms(unsigned int c); //延時10ms void main() { unsigned char i; unsigned char LED; //--首先賦值LED--// while (1) { LED = 0xFE; //--LED往左閃爍--// for (i = 0 ;i < 8 ; i++) { //--將LED 的值賦給P2口--// P0 = LED; Delay10ms(50); //延時一下,為了讓燈有持續點亮的時間 LED = LED << 1; // 將LED裏面的值左移一位,然後重新賦給LED // LED = LED | 0x01; // 移位後,前面的位為高電平 } //--LED向右顯示--// LED = 0x7F; for (i = 0 ;i < 8 ; i++) { P0 = LED; Delay10ms(50); LED = LED >> 1; // 右移 // LED = LED | 0x80; // 移位後,後面的位為高電平 } } } void Delay10ms(unsigned int c) //誤差 0us { unsigned char a, b; //--c已經在傳遞過來的時候已經賦值了,所以在for語句第一句就不用賦值了--// for (;c>0;c--) { for (b=38;b>0;b--) { for (a=130;a>0;a--); } } }
51單片機led燈控制