Ⅰ 51單片機控制LED閃爍頻率
暫時想到兩種解決方案:
1.最簡方案——利用延時函數:進入主函數後,初始化LED,設置一個延時初始值,然後進入while循環,里邊只做四件事,打開LED,利用鍵盤返回值作延時函數參數,關閉LED,利用鍵盤返回值作延時函數參數。
2.精確解決方案——定時器:初始化定時器,打開中斷等,然後進入while等待中斷,在中斷函數里先定義一個變數,然後將鍵盤返回值賦值給此變數,再將此變數去重裝定時器初值,接下來就是為LED取反。
有不懂的隨時回復我。
希望我的回答能幫助到你。
Ⅱ 51單片機一鍵控制一個LED,每按一下按鍵LED閃爍一種頻率,共閃爍三種頻率.有好的答案加
#include<reg51.h>
unsigned char n = 0;
sbit key = P3^4;
sbit led = P1^0;
void delay()
{
unsigned int i, j;
for(i = 0; i < 100; i++) for(j = 0; j < 500; j++);
}
void readkey(void)
{
unsigned char i, j;
if(!key) {
for(i = 0; i < 10; i++)
for(j = 0; j < 120; j++); //延時消抖
if(!key) {
while(!key); //等待按鍵釋放
n++;
n %= 4; //n = 0~3
}
}
}
main()
{
while(1) {
switch(n) {
case 0: led = 1; readkey(); break; //熄滅
case 1: delay(); readkey(); //慢速閃爍
case 2: delay(); readkey(); //中速閃爍
case 3: delay(); readkey(); led = ~led; //快速閃爍
}
}
}
Ⅲ 51單片機矩陣鍵盤輸入的值保存到一個數組了里並顯示出來最後再控制LED燈閃爍對應數值的次數
例如按下1、2、3,我可以令result=num[0]*100+num[1]*10+num[2],得到123。--每次怎麼可能按下 1、2、3 ?每次,只能按下一個。你把值保存到數組num[i]的一個元素中,再 i++。 i == 3,可令result=num[0]*100+num[1]*10+num[2],得到123。然後可以讀這些數進行計算。
Ⅳ 在52單片機上實現:點亮任意一個LED,先以1HZ的頻率閃爍5秒,再以100HZ的頻率閃爍5秒,以此循環.
大體思路:設P0^0控制LED的亮滅,當P0.0=0時燈點亮。有兩種閃爍方式,可以讓1HZ的在main()函數里閃爍。然後開個定時器,讓100HZ的在定時器中斷里閃爍,就行了。
1HZ就是1S亮一次,100HZ是10ms亮一次
#include<reg52.h>
void delay(int x)
{
時間是5ms;
}
void timer1()interrupt 1 定時器0中斷
{
static unsigned int a;
unsigned int b;
if(++a==5) 看是否到了5S
{
TR0=0;先把定時器關了,防止在送段運行時再次進入中斷。
a=0;
for(b=1000;b>0;--b)
{
P0.0=0; 讓燈亮滅的間隔為5MS。一共閃5S
delay(1);
p0.0=~p0.0;
delay(1);
}
}
TH0=XX; 再次 設置好定時器,讓它每隔1S進一次中斷;
TL0=XX;
TR0=1;
}
void main()
{
TH0=XX; 設置好定時器,讓它每隔1S進一次中斷;
TL0=XX;
TR0=1;
while(1)
{
P0.0=0; 燈開始以500ms為間隔開始亮滅。
delay(100);
p0.0=~p0.0;
delay(100);
}
}