51单片机按键控制花样灯.docx

上传人:b****8 文档编号:30348920 上传时间:2023-08-13 格式:DOCX 页数:22 大小:17.93KB
下载 相关 举报
51单片机按键控制花样灯.docx_第1页
第1页 / 共22页
51单片机按键控制花样灯.docx_第2页
第2页 / 共22页
51单片机按键控制花样灯.docx_第3页
第3页 / 共22页
51单片机按键控制花样灯.docx_第4页
第4页 / 共22页
51单片机按键控制花样灯.docx_第5页
第5页 / 共22页
点击查看更多>>
下载资源
资源描述

51单片机按键控制花样灯.docx

《51单片机按键控制花样灯.docx》由会员分享,可在线阅读,更多相关《51单片机按键控制花样灯.docx(22页珍藏版)》请在冰豆网上搜索。

51单片机按键控制花样灯.docx

51单片机按键控制花样灯

51单片机按键控制花样灯

时间:

2012-09-1013:

50:

11来源:

51hei作者:

/****************************************************

*本程序实现用按键控制花样灯。

*

*当K1按下时,灯从0xfe向左跑一遍;*

*当K2按下时,LED灯从0x7f向右跑一遍到了0xfe右跑回到起始位置;*

*当K3键按下时,LED灯从0xfe开始作流水灯形式运行一次,然后再流回来。

*

*当K4键按下时,LED灯先亮前四个,接着再转向亮后四个。

*

*当K5键按下时,结束任意正在进行的程序,使LED灯全部熄灭。

*

******************************************************/

*************************************************

连接方法:

P0接独立按键JP5;P2接LED灯接口JP1*

***********************************************************/

#include//头文件,函数声明

#include

//定义按键所在位

sbitK1=P0^0;

sbitK2=P0^1;

sbitK3=P0^2;

sbitK4=P0^3;

sbitK5=P0^4;

unsignedcharled;

unsignedcharj;

voiddelayms(unsignedcharms)//1ms标准延时

{

while(ms--)

{

for(j=0;j<110;j++);//还是无法设置比较标准的延时,如1S等;所以应该用定时器延时才最准确

}

}

voidmain()

{//P2=led;

unsignedinti;

while

(1)

{

/*********************************************

*当K1按下时,灯从0xfe向左跑一遍;*

*********************************************/

if(K1==0)

delayms(10);//消除键盘抖动

if(K1==0)

{

led=0xfe;

for(i=0;i<7;i++)//i可以去8的倍数,表示本电路执行多少次

{

//led=0x7f;//P端口的初定义要在循环外面,不然会使效果错乱

P2=led;//由于这里已经初设一个灯,所以for里面要加上这一个

delayms(100);//起初这里设置500MS,使按键每按一下灯彩走一个,不能达到要求。

led=_crol_(led,1);

P2=led;

delayms(100);

}

while(!

K1);//这里强调松开就没再次执行程序

P2=led;//说明执行完上面的程序的最后状态

}//P2=led;//如果把本行放在这里,虽然在开头中没有说明程序烧写好之后就先显示一个灯,但由于本行在if外面,所有最后还是会显示

/***********************************************************

*当K2按下时,LED灯从0x7f向右跑一遍到了0xfe右跑回到起始位置*

***********************************************************/

if(K2==0)

delayms(10);

if(K2==0)

{

led=0x7f;

for(i=0;i<7;i++)

{

P2=led;

delayms(100);

led=_cror_(led,1);

P2=led;

delayms(100);

}

while(!

K1);

P2=led;

delayms(100);

for(i=0;i<7;i++)

{

led=_crol_(led,1);

P2=led;

delayms(100);//跑回去怎么就那么快呀?

}//此时led=0x7f

}

/*****************************************************

*当K3键按下时,LED灯从0xfe开始作流水灯形式运行一次,然后再流回来。

*

*************************************************/

if(K3==0)

delayms(10);//消除抖动

if(K3==0)

{

led=0xfe;

delayms(200);

for(i=0;i<7;i++)

{

P2=led;

delayms(200);

led=led<<1;//备注led=_crol_(led,1)等于led<<1||led>>7;

P2=led;

delayms(200);

if(led==0x00)

break;//这里一定要有个break,跳出循环,然后别忘了此时的状态是00,而不是7f

}

while(!

K1);

led=0x7f;

P2=led;

delayms(200);

for(i=0;i<7;i++)

{

led=led>>1;

P2=led;

delayms(200);

}

}

/****************************************************

*当K4键按下时,LED灯先亮前四个,接着再转向亮后四个。

*

****************************************************/

if(K4==0)

delayms(10);//消除抖动

if(K4==0)

{

for(i=0;i<4;i++)//执行四次

{led=0xf0;

P2=led;

delayms(500);

led=0x0f;

P2=led;

delayms(500);

}

}

/********************************************************

*当K5键按下时,结束任意正在进行的程序,使LED灯全部熄灭。

*

********************************************************/

if(K5==0)

delayms(10);

if(K5==0)

P2=0xff;

}

}

/*****/

时钟+秒表+流水灯的单片机汇编程序

时间:

2012-09-1013:

49:

42来源:

作者:

//HJSMSY-V1.0单片机开发板测试程序

//---------------------------------------------

//<<电脑钟>>

//---------------------------------------------

//=======主函数==================================

ORG0000H

LJMPMAIN

ORG000BH

LJMPT00

//ORG001BH

//LJMPT11

ORG0030H

//=======程序初始化=============================

MAIN:

MOVTMOD,#11H

MOVTH0,#3CH

MOVTL0,#0B0H

MOVTH1,#0F0H

MOVTL1,#0B0H

SETBEA

SETBET0

//SETBET1

SETBTR0

//SETBTR1

CLRP3.4

MOVR7,#00H;秒值

MOV30H,#00H;秒个位值

MOV31H,#00H;秒十位值

MOV32H,#00H;分个位

MOV33H,#00H;分十位

MOV34H,#00H;时个位

MOV35H,#00H;时十位

MOV44H,#00H;秒表毫秒十位

MOV45H,#00H;秒表秒毫秒百位

MOV46H,#00H;秒表秒个位

MOV47H,#00H;秒表秒十位

MOV48H,#00H;秒表分个位

MOV49H,#00H;秒表分十位

MOVP2,#0F0H;P2口按键初始化

MOV40H,#01H;数码管休眠值/流水灯/秒表开关数

MOV41H,#08H;流水灯循环值

MOV42H,#00H;秒表暂停

//ACALLT11

//-----------------------------------------------

MAIN1:

MOVP0,#0FFH

MOVP1,#0FFH

MOVR0,40H

CJNER0,#01H,ACL1

ACALLMAIN2;时钟显示

ACL1:

CJNER0,#02H,ACL2

ACALLMAIN3;秒表

ACL2:

CJNER0,#03H,ACL3

ACALLLED;流水灯

ACL3:

ACALLKEY;按键扫描

//ACALLBAO;定时报警

LJMPMAIN1

//=======报警子程序============================

BAO:

MOVR4,33H

CJNER4,#03H,YY1

CLRP3.2

ACALLKEY

LJMPYY2

YY1:

CJNER4,#05H,YY2

SETBP3.2

ACALLKEY

YY2:

RET

//======时钟扫描子程序=======================

MAIN2:

MOVA,30H

MOVDPTR,#TAB

MOVCA,@A+DPTR

MOVP0,A

CLRP1.0

ACALLDELAY

MOVA,31H

MOVDPTR,#TAB

MOVCA,@A+DPTR

MOVP0,A

CLRP1.1

SETBP1.0

ACALLDELAY

MOVA,32H

MOVDPTR,#TAB

MOVCA,@A+DPTR

MOVP0,A

CLRP1.2

SETBP1.1

ACALLDELAY

MOVA,33H

MOVDPTR,#TAB

MOVCA,@A+DPTR

MOVP0,A

CLRP1.3

SETBP1.2

ACALLDELAY

MOVA,34H

MOVDPTR,#TAB

MOVCA,@A+DPTR

MOVP0,A

CLRP1.4

SETBP1.3

ACALLDELAY

MOVA,35H

MOVDPTR,#TAB

MOVCA,@A+DPTR

MOVP0,A

CLRP1.5

SETBP1.4

ACALLDELAY

MOVP0,#7FH

MOVP1,#0EBH

ACALLDELAY

MOVP1,#0FFH

RET

//========秒表扫描子程序=========================

MAIN3:

MOVA,44H

MOVDPTR,#TAB

MOVCA,@A+DPTR

MOVP0,A

CLRP1.0

ACALLDELAY

MOVA,45H

MOVDPTR,#TAB

MOVCA,@A+DPTR

MOVP0,A

CLRP1.1

SETBP1.0

ACALLDELAY

MOVA,46H

MOVDPTR,#TAB

MOVCA,@A+DPTR

MOVP0,A

CLRP1.2

SETBP1.1

ACALLDELAY

MOVA,47H

MOVDPTR,#TAB

MOVCA,@A+DPTR

MOVP0,A

CLRP1.3

SETBP1.2

ACALLDELAY

MOVA,48H

MOVDPTR,#TAB

MOVCA,@A+DPTR

MOVP0,A

CLRP1.4

SETBP1.3

ACALLDELAY

MOVA,49H

MOVDPTR,#TAB

MOVCA,@A+DPTR

MOVP0,A

CLRP1.5

SETBP1.4

ACALLDELAY

MOVP0,#7FH

MOVP1,#0EBH

ACALLDELAY

MOVP1,#0FFH

RET

//=======定时器T0中断服务========================

T00:

MOVTH0,#0D8H

MOVTL0,#0F0H

INCR7

CJNER7,#64H,AA

MOVR7,#00H

//-------时钟跑值--------------------------------

TK1:

INC30H;每秒钟秒个位增一

MOVR6,30H

CJNER6,#0AH,AA

MOV30H,#00H

TK2:

INC31H

MOVR6,31H

CJNER6,#06H,AA

MOV31H,#00H

TK3:

INC32H

MOVR6,32H

CJNER6,#0AH,AA

MOV32H,#00H

TK4:

INC33H

MOVR6,33H

CJNER6,#06H,AA

MOV33H,#00H

TK5:

INC34H

MOVR5,34H

MOVR6,35H

CJNER5,#04H,TK6

CJNER6,#02H,TK6

MOV34H,#00H

MOV35H,#00H

TK6:

CJNER5,#0AH,AA

MOV34H,#00H

INC35H

//-------秒表跑值----------------------

AA:

MOVR5,42H

CJNER5,#01H,TK7

INC44H

TK7:

MOVR5,44H

CJNER5,#0AH,AA1

MOV44H,#00H

INC45H

MOVR5,45H

CJNER5,#0AH,AA1

MOV45H,#00H

INC46H

MOVR5,46H

CJNER5,#0AH,AA1

MOV46H,#00H

INC47H

MOVR5,47H

CJNER5,#06H,AA1

MOV47H,#00H

INC48H

MOVR5,48H

CJNER5,#0AH,AA1

MOV48H,#00H

INC49H

MOVR5,49H

CJNER5,#06H,AA1

MOV49H,#00H

AA1:

RETI

//====定时器T1中断服务子程序====================

//T11:

MOVTH1,#0F0H

//MOVTL1,#0B0H

//RETI

//******定时时间调整子程序*************************//

TBAO:

MOV50H,#00H

MOV51H,#00H

MOV52H,#00H

MOV53H,#00H

MOV54H,#00H

MOV55H,#00H

MOVR3,50H

DJNZ30H,RET1

RET1:

RET

//======键盘扫描子程序==========================

KEY:

MOVP2,#0F0H

MOVR3,P2

CJNER3,#0F0H,KE0

LJMPKK13

KE0:

CJNER3,#0E0H,KE1;P2.4行

MOVP2,#0EFH

JBP2.3,KK1//用作调定时时间;K13秒个位增一

ACALLDELAY1

ACALLTK1

KK1:

JBP2.2,KK2;K14秒十增一

ACALLDELAY1

ACALLTK2

KK2:

JBP2.1,KK3;K15分个位增一

ACALLDELAY1

ACALLTK3

KK3:

JBP2.0,KE1;K16分十位增一

ACALLDELAY1

ACALLTK4

KE1:

MOVP2,#0DFH;P2.5行

JBP2.3,KK4;K9时个位增一

ACALLDELAY1

ACALLTK5

KK4:

JBP2.2,KK5;K10时十位增一

ACALLDELAY1

INC35H

MOVR3,35H

CJNER3,#03H,HH0

MOV35H,#00H

LJMPKK5

HH0:

CJNER3,#02H,HH1

LJMPKK5

HH1:

CJNER3,#01H,HH2

LJMPKK5

HH2:

MOV35H,#00H

KK5:

JBP2.1,KK6

ACALLDELAY1;K11开/关蜂鸣器

CPLP3.2

KK6:

JBP2.0,KE2;K12秒表暂停

MOV42H,#00H

KE2:

MOVP2,#0BFH;P.6行

JBP2.3,KK7;K5时钟暂停/取消暂停

ACALLDELAY1

CPLET0

KK7:

JBP2.2,KK8;K6显示/休眠/流水灯

ACALLDELAY2

INC40H

MOVR3,40H

CJNER3,#04H,KK8

MOV40H,#01H

KK8:

JBP2.1,KK9

//ACALLDELAY3;K7秒表清0

MOV44H,#00H

MOV45H,#00H

MOV46H,#00H

MOV47H,#00H

MOV48H,#00H

MOV49H,#00H

KK9:

JBP2.0,KE3;K8秒表开始跑

MOV42H,#01H

KE3:

MOVP2,#7FH;P2.7行

JBP2.3,KK10;K1秒十位减一

ACALLDELAY1

MOVR3,31H

CJNER3,#00H,JA1

LJMPKK10

JA1:

DEC31H

KK10:

JBP2.2,KK11;K2分个位减一

ACALLDELAY1

MOVR3,32H

CJNER3,#00H,JA2

LJMPKK11

JA2:

DEC32H

KK11:

JBP2.1,KK12;K3分十位减一

ACALLDELAY1

MOVR3,33H

CJNER3,#00H,JA3

LJMPKK12

JA3:

DEC33H

KK12:

JBP2.0,KK13;K4时个位减一

ACALLDELAY1

MOVR3,34H

CJNER3,#00H,JA4

LJMPKK13

JA4:

DEC34H

KK13:

RET

//=====流水灯子程序===========================

LED:

MOVA,#0feH

MOV41H,#08H

MOVP0,#0FFH

LED1:

MOVP1,A

MOVR3,#100

D0:

ACALLDELAY

DJNZR3,D0

MOVR3,41H

DJNZR3,AAA

LJMPBB

AAA:

RLA

MOV41H,R3

ACALLKEY

LJMPLED1

BB:

MOV41H,#07H

CC:

MOVP1,A

MOVR3,#30

D1:

ACALLDELAY

DJNZR3,D1

MOVR3,41H

DJNZR3,DD

LJMPLED0

DD:

RRA

MOV41H,R3

ACALLKEY

LJMPCC

LED0:

RET

//=====延时子程序==============================

DELAY:

MOVR1,#250

DEL1:

NOP

NOP

NOP

NOP

DJNZR1,DEL1

RET

//====调用时钟显示作延时========================

DELAY1:

MOVR2,#20

DELA3:

ACALLMAIN2

DJNZR2,DELA3

RET

//====调用秒表显示作延时========================

DELAY3:

MOVR2,#20

DELA5:

ACALLMAIN3

DJNZR2,DELA5

RET

//====调用延时子程序作延时======================

DELAY2:

MOVR2,#100

DELA4:

ACALLDELAY

DJNZR2,DELA4

RET

//======共阳数码管段码表=================================

TAB:

DB0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H,87H

END

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 成人教育 > 自考

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1