關於內容理解:編程
先讀懂51單片機的實驗原理圖,而後再着手編程。函數
由圖可知spa
1,led燈接的是單片機的P0口,意味着咱們只能用P0口來編程。code
2,led燈是共陽極,當給低電平時led燈纔會亮,(單片機灌電流能力較強,輸出電流較弱,因此通常用共陽極)blog
3,led所在的P0口是讀io口,故使用時用一個變量來作中介io
實驗效果class
實現跑馬燈效果,P0^0->P0^7口依次亮且每次只亮一個燈,而後P0^7->P0^0。變量
實驗代碼原理
#include <reg52.h> //此文件中定義了51的一些特殊功能寄存器 #include <intrins.h> //--聲明全局函數--// void Delay10ms(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--); } } }