电路图:
实现功能:按下P20,流水灯向左方向,按下P21时,流水灯向右方向移动,按下P22时,流水灯停止运行,
源程序:C语言如下:
#include<reg52.h>
#include<intrins.h>
#define uchar unsigned char
#define uint unsigned int
sbit key1=P2^0;
sbit key2=P2^1;
sbit key3=P2^2;
void delay(uchar z);
//void time0(void);
uchar i="0",j,m=0;
void main(void)
{
uchar k="0xfe";
// time0();
while(1)
{
if(key3==0)
{
delay(10);
if(key3==0)
m=1;
}
if(key1==0)
{
m="0";
i="0";
delay(10);
if(key1==0)
i++;
if(i==2)
i=1;
while(key1==0);
}
if(key2==0)
{
m=0;
j="0";
delay(10);
if(key2==0)
j++;
i=2;
while(key2==0);
}
if(m==0)
{
if(i==0||i==1)
{
//if(i==2)
// i="1";
j="0";
P1=k;
delay(30);
k=_crol_(k,1);
}
if(j==1)
{
P1=k;
delay(30);
k=_cror_(k,1);
}
}
}
}
void delay(uchar z)
{
uchar x,y;
for(x=z;x>0;x--)
for(y=110;y>0;y--);
}
汇编语言如下:
KEY1 BIT P2.0; 当按下KEY1键时,流水灯左移
KEY2 BIT P2.1 ; 当按下KEY2键时,流水灯右移
KEY3 BIT P2.2 ; 当按下KEY3键时,流水灯暂停
ORG 0000H
MOV R1,#0FEH;R1内存放的是P1口的状态值
MOV R2,#0 ;R2内存放的是KEY1的状态
MOV R3,#0 ;R3内存放的是KEY2的状态
MOV R4,#0 ;R4内存放的是KEY3的状态
MAIN: JB KEY1,J2
LCALL DEL5MS
JNB KEY1,K1
J2: JB KEY2,J3
LCALL DEL5MS
JNB KEY2,K2
J3: JB KEY3,PAN
LCALL DEL5MS
JNB KEY3,K3
PAN: CJNE R2,#0,R32
LJMP K1
R32: CJNE R3,#1,R44
LJMP K2
R44: CJNE R4,#1,K1
LJMP K3
K1: JNB KEY1,K1
MOV P1,R1
MOV A,R1
RR A;
MOV R1,A
LCALL DEL10M
MOV R2,#0;
MOV R3,#0
MOV R4,#0
LJMP MAIN
K2: JNB KEY2,K2
MOV P1,R1
MOV A,R1
RL A;
MOV R1,A
LCALL DEL10M
MOV R2,#1;
MOV R3,#1
MOV R4,#0
LJMP MAIN
K3: JNB KEY3,K3
MOV R2,#1;
MOV R3,#0
MOV R4,#1
LJMP MAIN
DEL5MS: MOV R6,#30
DEL5: MOV R7,#125
DEL51: NOP
NOP
DJNZ R7,DEL51
DJNZ R6,DEL5;
RET
DEL10M: MOV R6,#100
DEL10: MOV R7,#125
DEL11: NOP
NOP
DJNZ R7,DEL11
DJNZ R6,DEL10
RET
END
作者:圣圣九,河南理工大学:希望能够认识一些喜爱单片机开发的朋友们,QQ;604901085:加我呀,我会一直整理单片机的资料,并不断上传,希望能够给朋友们提供帮助。
文章评论(0条评论)
登录后参与讨论