Ⅰ 51單片機1按鍵切換3種不同狀態的c程序
主程序大致是這樣的
flag=0;//記錄按鍵次數
While(1)
{
if(key==0){delayms(20);if(key==0)flag++;}//按鍵檢測
if(flag==3)flag=0;
if(flag==0){正向流水}
else if(flag==1){反向流水}
else {間隔流水}
}存在問題,由於流水燈執行時間較長,因此對按鍵響應緩慢,可以在流水燈之間加入按鍵檢測語句,當檢測到按鍵按下時,用break語句退出當前循環
Ⅱ 51單片機兩程序獨立按鍵切換連接程序怎麼寫
兩段程序還是要合並成一個主程序的,只是分開成兩段而已。
sbit ins1=獨立按鍵所在I/O腳;
bit keyab=0; //區分執行A,B程序的標志位,=0,執行A段,=1執行B段
main()
{
...........
while(1) //while前的程序照常寫
{
if(ins1==0)
{
keyab=!keyab;
while(ins1==0);
}
if(keyab==1)
{
A段程序寫在這里
}
else
{
B段程序寫在這里
}
}
}
這樣寫後,原來A、B程度中的while(1)就不能再寫了。而是將while(1)以下程序寫到這里。
Ⅲ C51單片機如何通過按鈕進行切換,例如一開始點陣上顯示心形,按一下按鈕變為星型,用程序應當如何實現
方法很簡單,
sbit k=P1^0;//選取一個I/O埠連接一個按鍵
unsigned char r;//設置一個計數變數
void delay(uchar p)//12MHz@p微秒延時函數
{
unsigned char i,j;
for(i=0;i<p;i++){
for(j=0;j<50;j++)
{;}}
}
void key()//按鍵函數
{
if (k==0)//查詢按鍵是否按下
{
delay(20); //等待按鍵連接穩定
if(k==0) //如果按鍵仍然是連接狀態
{
r++;//標志+1
if(r>1){r=0;}//可以任意多種選擇,這里只設定0、1兩種狀態
while(!k);//等待按鍵抬起
}
}
}
void set_out()//設置輸出方式函數
{
key();//查詢按鍵值
if(r==0){***心形顯示***}
if(r==1){***星形顯示***}
//if(r==?){***?形顯示***}
}
Ⅳ 關於單片機的問題,如果程序中要要到三組工作寄存器Rn,如何切換SP的初值是否要修改若要,如何修改
以下是個示範,依次切換到工作區0到3
ORG 0000H
SJMP MAIN
ORG 0030H
MAIN:
MOV SP,#5FH ;將SP設置到60H以後的RAM區
MOV A,#0
LCALL SETRN
LCALL DELAY
MOV A,#1
LCALL SETRN
LCALL DELAY
MOV A,#2
LCALL SETRN
LCALL DELAY
MOV A,#3
LCALL SETRN
LCALL DELAY
SJMP $
SETRN:
JNZ SETRN1 ;A=0工作區0
CLR RS0
CLR RS1
RET
SETRN1:
JNZ SETRN2 ;A=1工作區1
SETB RS0
CLR RS1
RET
SETRN2:
JNZ SETRN3 ;A=2工作區2
CLR RS0
SETB RS1
RET
SETRN3:
JNZ SETRN1 ;A=3工作區3
SETB RS0
SETB RS1
RET
DELAY:
MOV R0,#10
DELAY1:
MOV R1,#100
DJNZ R1,$
DJNZ R0,DELAY1
RET
Ⅳ 如何通過單片機配置進入或切換到某種工作模式
首先,要看你用的單片機有沒有模式選擇,沒有那我也沒辦法!有的話,看一下資料,看它是什麼觸發方式的!然後在編寫程序設置觸發腳!然後寫一個觸發子程序(通常為WAKEUP:......)看你的資料而定!如果還不明白,可以把資料發到我的郵箱:[email protected] 我看看能不能幫你一下!
Ⅵ 單片機中如何用按鍵進行模式切換
參考如下:
假設按鍵按下為低電平;
if(key1==0)
{
while(key1==0);//彈起後執行
{
按鍵1需要執行的功能;
}
}
if(key2==0)
{
while(key2==0);//彈起後執行
{
按鍵2需要執行的功能;
}
}
Ⅶ stm32單片機如何實現一個按鍵切換兩個程序
定義一個標志位
bit
flag=0;
主各序結構:
while(1)
{
if(flag==0)
{.......
.程序1
}
if(flag==1)
{.......
程序2
}
}
按鍵檢測可用中斷,中斷程序中改變flag的值
Ⅷ 單片機C語言編程問題。怎麼實現按鍵切換兩個子程序啊。。(時鍾和溫度)
應該用一個標志位,如果你這種是普通的按鍵,即按下時是低電平,松開時是高電平的,大概這樣寫,在main聲明一個變數,作為標志位.
char Flag;
然後按鍵按下時,直到彈起按鍵才改變Flag的狀態。
if(!Key)
{
while(!Key);
Flag=~Flag;
}
if(Flag)
{
time = hour*100 + min;
ShowTest(time);
delay();
}
else
{
gettempts();
display(t);
}
把這個放在while(1)中,就可以了。
希望我的回答對你有幫助,有什麼問題歡迎一起探討。
Ⅸ 單片機如何實現一個按鍵切換兩個程序
#include<reg51.h>
sbitkey=P1^0;
bitflag=0;
voidA(void)
{
.....
}
voidB(void)
{
......
}
main()
{
while(1)
{
if(key==0)
{
while(key==0);
flag=~flag;
}
if(flag)B();
elseA();
}
}
Ⅹ c51單片機里 怎麼讓程序在進行一個循環程序是由一個按鍵可以隨時切換到另外一個循環程序中
單片機程序 一般結構應該是 一個主循環、及多中斷處理程序,在主循環中 包含需要處理的 各種功能的子程序,子程序不應該以循環形式存在,中斷 及 子程序 能簡短要短小精悍,按鍵可以隨時切換 某種功能 只要 按鍵時改變 標志位就可以了(標志位可以自己定義),如標志位為 1 調用一個功能的子程序、為 0 調用另一個功能的子程序,方法很多很多。盡量不要用 循環延時程序,中斷程序中更不能調用延時程序,不然可能會出現意想不到的麻煩。