⑴ 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语言的冒泡法排序,第二个用中断,读,输出就可以