STC89C52微控制器學習(一)----點亮LED
阿新 • • 發佈:2019-02-07
1.通過陣列實現led流水燈
使用if語句實現led燈的控制,i類似於標誌位控制進行迴圈轉移#include <reg52.h> int m; unsigned char code leds[8] = {0x7f, 0xbf, 0xdf, 0xef, 0xf7, 0xfb, 0xfd, 0xfe}; void delay(unsigned int i) { unsigned int j; unsigned char k; for(j=i; j>0; j--) for(k=125; k>0 ;k--); } int main() { while(1) { for(m = 0; m < 8; m++) { P1 = leds[m]; delay(500); } } return 0; }
i = 0;
while(1)
{
P1 = leds[i++];
delay(5000);
if(i == 8) i = 0;
}
2.通過獨立按鍵實現LED燈的閃爍流動
運用獨立按鍵需I/O埠,預先置高,表示作為輸入端#include <reg52.h> sbit k1 = P3^4; unsigned int m; unsigned char code leds[8] = {0x7f, 0xbf, 0xdf, 0xef, 0xf7, 0xfb, 0xfd, 0xfe}; void delay(unsigned int i) { unsigned int j; unsigned char k; for(j=i; j>0; j--) for(k=125; k>0; k--); } int main() { k1 = 1; while(1) { for(m = 0; m < 8; ) { P1 = leds[m]; delay(500); if(k1 == 0) { delay(80); if(k1 == 0) m++; } } } return 0; }
3.外部中斷1實現按鍵閃爍
1).實現部分在中斷函式裡
}#include <reg52.h> sbit p3_4 = P3^4; unsigned int m; unsigned char code leds[8] = {0x7f, 0xbf, 0xdf, 0xef, 0xf7, 0xfb, 0xfd, 0xfe}; void delay(unsigned int i) { unsigned int j; unsigned char k; for(j=i; j>0; j--) for(k=125; k>0; k--); } int main() { EA = 1; EX1 = 1; IT1 = 1; p3_4 = 0; P1 = leds[0]; while(1); return 0; } void led_key() interrupt 2 { if(m <= 7) { P1 = leds[m++]; delay(500); //m++; } else <pre name="code" class="cpp"><span style="white-space:pre"> </span>P1 = leds[0];<span style="font-family: Arial, Helvetica, sans-serif;"> </span>
2)實現部分在主函式中
bit flag; //標誌位
while(1)
{
for(m = 0; m < 8; )
{
P1 = leds[m];
delay(500);
if(flag == 1)
{
delay(80); //去抖 -----中斷
if(flag == 1)
m++;
}
}
}
void led() interrupt 0
{
flag = 1;
}