⑴ 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語句退出當前循環
⑵ 鍗曠墖鏈哄垽鏂 1.宸ヤ綔瀵勫瓨鍣ㄧ粍鏄閫氳繃浣嶇疆PSW涓鐨凴S0鍜孯S1鏉ュ垏鎹 2.涓庤繍綆楀彲浠ュ皢涓涓瀛楄妭涓鐨
1銆佸
2銆佸
3銆侀敊
4銆侀敊
鍗曠墖鏈虹▼搴忓垎鏋愰
1銆佸凡鐭A=40H錛孯O=50H,(40H錛=30H 錛50H錛=10H 璇鋒寚鍑烘瘡鏉℃寚浠ゆ墽琛屽悗鐩稿簲錛屽崟鍏冨唴瀹圭殑鍙樺寲
1.MOVA錛#40H A=40H
2.MOVA 40H A=30H
3.MOVA, RO A=50H
4.MOV A,@RO A=30H
5.SWAP A A=03H
2錛屼慨鏀逛簡涓涓嬬▼搴
MOV R3 #4
K3:MOV R2,#250
K2:MOV R1,#250
K1:NOP
NOP
DJNZ R1,K1
DJNZ R2,K2
DJNZ R3, k3
寤舵椂鏃墮棿=4*250*250*4+3*250*4+3*4=1003012寰縐掞紝綰︾瓑浜1縐掋
緙栫▼棰橈細
1錛
MOV A,#0A4H
ADD A,#0E7H
MOV 40H,A
MOV A,12H
ADDC A,#0FH
MOV 41H,A
2:
CJNE A,#100,CMA
RET
CMA:
JC CMA1
MOV P1,#0
RET
CMA1:
MOV P1,#0FFH
RET
3:
MOV A,4FH
ADD A,#80H
MOV 30H,A
MOV A,23H
ADDC A,#0EH
MOV 31H,A
RET
4:
LSD:
MOV A,#0FEH
LSD1:
MOV P1,A
LCALL DELAY
SJMP LSD1
DELAY:
MOV R2,#100
DELAY1:
MOV R3,#250
DJNZ R3,$
DJNZ R2,DELAY1
RET
⑶ 單片機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)中,就可以了。
希望我的回答對你有幫助,有什麼問題歡迎一起探討。
⑷ 關於單片機的問題,如果程序中要要到三組工作寄存器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
⑸ 鍗曠墖鏈哄備綍鐢ㄤ腑鏂鍒囨崲紼嬪簭錛屽氨鏄鎴戠幇鍦ㄧ敤鍗曠墖鏈哄疄鐜板姛鑳紸鍜孊錛岀敤涓鏂浣滀負AB紼嬪簭鐨勫垏鎹錛岀敤C璇璦瑕佹
棣栧厛瀹氫箟鍏ㄥ矓鍙橀噺int_num=0;
灝嗕互涓嬩唬鐮佹斁鍏ヤ腑鏂鏈嶅姟鍑芥暟錛
void INT_X(void) interrupt X
{
switch(int_num) //鍒ゆ柇浠誨姟浠g爜
{
case 0;//浠誨姟A
//榪欓噷濉浠誨姟A紼嬪簭孌
break;
case 1;//浠誨姟B
//榪欓噷濉浠誨姟A紼嬪簭孌
break;
default:
break;
}
int_num++;
if(int_num>1)int_num=0;
}
⑹ 單片機C語言程序設計題
這是兩個題啊。哈哈好做,第一個有C語言的冒泡法排序,第二個用中斷,讀,輸出就可以