❶ 單片機 匯編語言如果要實現按鍵按下後連加或連減的效果,程序該怎麼編寫
匯編很久沒用過了,提供一下思路,供參考!
可採用計時的方式,檢測按鍵按下狀態超過2秒後,數據開始增大遞加遞減的步距(之前是每次加減1,增大後,每次加減10),松開按鍵後,計時器清零!
採用計次的方式也可以實現,按鍵後,數據遞加或遞減一次,延時300毫秒,再次檢測按鍵,未松開,繼續遞加,加滿5次後,開始增發遞加或遞減步距,松開按鍵後,計次清零!
❷ 單片機一個按鍵控制一個程序
你把幾種方式寫成幾個子程序,然後主程序調用按鍵檢測,根據檢測到的鍵值調用對應的子函數即可
❸ 怎麼讓單片機按一下按鍵執行一個程序,再按一下馬上執行另一個程序
call key
jmp loop
key:
jnb p3.0,rel
ret
rel:
call delay20MS
jnb p3.0,rel
第一次這里標志位為0,則執行,第一次按下功能。
❹ 在單片機中可否實現此種:程序有5步,當我按下按鍵程序開始執行,當我松開按鍵則程序立即停止
當然可以,例如
#include "reg52.h"
sbit key=p1^0;
void main()
{
while(key);//程序開始停留此處,等待按鍵按下
while(!key)//鍵按下沒有松開期間,執行下面代碼,按鍵鬆口後,循環結束,程序結束
{
//執行代碼加在這里
}
}
❺ 單片機按鍵按下後後續程序才執行
在某個地方,使用無限循環
while(P1.1==0){
;/// 什麼都不做。
}
後面的語句
❻ 單片機按一下加一,加到20的程序
假設P0 P1口各接一個數碼管,p2.0接按鍵,程序如下:
#include<reg52.h>
#define uchar unsigned char
#define uint unsigned int
sbit key=P2^0;
uchar num=0;
//共陰數碼管七段碼
uchar code table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d, 0x07,0x7f,0x6f,0x77};
void Delay1ms(uint i) //1ms延時程序
{
uint j;
for(;i>0;i--)
{
for(j=0;j<164;j++)
{;}
}
}
void main(void )//主程序
{
while(1)
{
if(key==0)//判斷按鍵是否按下
{
Delay1ms(10);//延時消抖
if(key==0)
{
while(key==0);;//等待按鍵抬起
num++;
if(num==20)num=0;
}
}
P0=table[num%10];
P1=table[num/10];
}
}
❼ 怎麼讓單片機按一下按鍵執行一個程序,再按一下執行另一個程序
loop:
call key
jmp loop
key:
jnb p3.0,rel
ret
rel:
call delay20MS
jnb p3.0,rel
第一次這里標志位為0,則執行,第一次按下功能。
第二次按下時,這里標志位為1,則跳過下邊的程序,執行另一個程序了。執行完將這個標志位清零。
CLR FLAG.0
RET
第一次按下,會到這里,執行下功能
置起一個標志位。
如SETB FLAG.0
RET
這樣就這實現了一鍵兩功能,如果要更多,就設置一個寄存器,每次加1,對比。是那個執行那個程序,最多一個按鍵可以做到255種功能。當然你肯定用不了這么多。
滿意給我加分吧,只能給你思路,給你完整程序是害你的。
❽ 51單片機 按鍵按下去 計數一次 程序應該怎麼寫
在按鍵按下後,用循環語句,等待抬起計數
if(按鍵按下)
{
延時;
if(按鍵按下)
{
while(按鍵沒有松開);//如果按鍵沒有松開,程序會停在這里
count++;//按鍵松開後,程序會運行到這里,計數值加1
}
}
❾ 求關於單片機按鍵的程序
void _Key(void)
{
if(!Key) //有按鍵按下
{
Delay(500); 延時
if(!Key) //還是按下狀態,即長擊
{
Disp("2");
}
else //否則就是短擊
{
Disp("1");
}
}
else //沒有按鍵按下
{
Disp("3");
}
}
大概思路是這樣,延遲函數自己掌握,一般還要加消抖(也就是較短的延時後再判斷一次按鍵狀態)
❿ 單片機中如何下程序
單片機中的程序是燒進去的,有的帶內部程序存儲器,有的不帶,都可固化在外部程序存儲器中。