A. C51單片機按下獨立按鍵切換流水燈或跑馬燈的流動速率
流水燈每變化一次,即流動一步,都要延時的,通常是調延時子程序,而且要帶一個延時的時間值,例如:
delay(5000);如果所帶參數是一個常數,那流水燈的速度就是固定不變的。如果改成一個變數,如:
delay(speed); 這速度就可以變化可調了。這樣,通過按鍵改變變數speed的值,就調速度了。
B. 51單片機 流水燈運行10後熄滅,同時流水燈的速度是500毫秒
我覺得應該把
if(pp==20)
{
pp=0;
miao--;
}
放到中斷函數裡面去。因為你的中斷是每50毫秒執行一次,而主函數的死循環一次時間很長,而且還有延時500毫秒的函數,因此在一次while(1)的循環里就有多次中斷函數被執行,pp就自增了不至一次,主函數裡面的if(pp==20)就檢測不了,也可以改為if(pp>20)。
這只是我的猜想,也沒有試過。
C. 為什麼51單片機的流水燈板子上執行速度慢,模擬的時候很快
你的外部晶振有沒小了,或者有內部晶振的,燒寫時選擇錯了
D. 我想用二個按鍵來控制51單片機流水燈速度,要求1一個加速一個減速,要求2下次通電時能記憶上次最後的速度.
還是用第一個,但電路需要修改,p3口需要接上拉電阻,4.7k-
10k
的上拉電阻,才能保證p3口的引腳在沒有按鍵時是高電平。
E. 我想用二個按鍵來控制51單片機流水燈速度,要求1一個加速一個減速,要求2下次通電時能記憶上次最後的速度.
可以利用if語句和I++、I--、功能調節變數的值,然後把這個變數聯繫到延時函數中去就差不多了,請試一試。
F. 51單片機按鍵控制流水燈速度
你可以簡單地認為單片機只能輸出5V或者0V的電壓
分別對應1和0,那麼LED燈的另一端接地或者接5V,如果你
的單片機輸出5V接到LED燈,LED燈另一端接地
,
那就產生電壓了,電路就導通了,燈就亮了
,反之也是這個道理。時間方面可以寫大致的延時,或者用定時器,這樣就比較精確了,你學會了這個就可以說入門了。
G. 51單片機控制流水燈編程求救啊!!!
#define<reg52.h>
sbit K1=P1^0;
sbit K2=P1^1;
sbit K3=P1^2;
unsigned int time=500;
unsigned char z[]={0xfe,0xfd,0xfb};
void delay(unsigned int c) //誤差 0us
{
unsigned char b;
for(c;c>0;c--)
for(b=125;b>0;b--);
}
main()
{
unsigned char i;
TMOD = 0x01; //50ms中斷 按鍵掃描
TH0 = 0x3C;
TL0 = 0x0B0;
EA = 1;
ET0 = 1;
TR0 = 1;
while(1)
{
for(i=0;i<3;i++)
{P0=z[i]; delay(time);}
}
}
void Timer0Interrupt(void) interrupt 1
{
TH0 = 0x3C;
TL0 = 0x0B0;
if(!K1) //K1鍵按下
{
delay(2);
if(!K1) time=200; //速度1 值越大越慢
}
if(!K2) //K2鍵按下
{
delay(2);
if(!K2) time=700; //速度2
}
if(!K3) //K2鍵按下
{
delay(2);
if(!K3) time=1500; //速度3
}
}
原創手打 望採納
H. 51單片機匯編怎麼用四個獨立按鍵來控制流水燈的速度
不用中斷一樣的實現,而且可以有多少個按鍵就可以有多少種流水燈方式。你使用的鍵盤函數直接調用流水燈函數就可以。比如使用獨立鍵盤,if(P1.1==0) light_water(); 然後:
void light_water()
{
num=1;
for(a=0;a<8;a++)
{
P1.1=num<<1;
delay(1000); //延時;
keyboard();//執行時又不停掃描鍵盤函數;
}
}
這樣就會有一個LED從右往左移動8次;那麼當第一次流水未完時,又調用第二個流水函數light_water1就能中斷當前執行的流水函數又去執行第二個流水燈函數了。
I. 51單片機裡面的,如何使流水燈流的越來越快
改變流轉時間不難
問題是還必須保持原來的亮度
因為燈點亮的時間太短的話,亮度會大打折扣
延時函數不方便調整速度
用定時器比較好
J. 51單片機中怎樣用一個按鍵控制三種模式的流水燈,如控制流水燈流水速率(每按一下加速,到三後返回和第一次
#include <reg51.h>
typedef unsigned char uint8;
typedef unsigned int uint16;
sbit anjian = P1^0; //按鍵位
void delay(uint16 h) //延時程序
{
while(h--);
}
main()
{ uint8 k = 0 , i = 0;
P0 = 0xff;
anjian = 1;
while(1)
{
P0 = ~(1<<k++);
if(anjian == 0)
{
delay(200);
if(anjina == 0) i++;
if(i == 3)
i = 0;
}
switch(i)
{
case 0: delay(10000);break;
case 1: delay(20000);break;
case 2: delay(20000); break;
}
if(k==8) k=0;
}
}
//頭一次回答問題,多多支持,全部知識都是自學的,但是我試驗過可以符合你的要求運行,謝謝