51单片机按键控制花样灯

2019-06-17 16:23

51单片机按键控制花样灯

时间:2012-09-10 13:50:11 来源:51hei 作者:

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

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

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

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

* 当K3键按下时,LED灯从0xfe开始作流水灯形式运行一次,然后再流回来。 * * 当K4键按下时,LED灯先亮前四个,接着再转向亮后四个。 *

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

******************************************************/ ************************************************* 连接方法:P0接独立按键JP5;P2接LED灯接口JP1 * ***********************************************************/ #include //头文件,函数声明 #include

//定义按键所在位 sbit K1=P0^0; sbit K2=P0^1; sbit K3=P0^2; sbit K4=P0^3; sbit K5=P0^4; unsigned char led; unsigned char j;

void delayms(unsigned char ms) // 1ms标准延时 {

while(ms--) {

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

void main() { //P2=led; unsigned int i;

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-10 13:49:42 来源: 作者:

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

//--------------------------------------------- // <<电脑钟>>

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

//=======主函数================================== ORG 0000H LJMP MAIN ORG 000BH LJMP T00 // ORG 001BH // LJMP T11 ORG 0030H

//=======程序初始化============================= MAIN:

MOV TMOD,#11H MOV TH0,#3CH MOV TL0,#0B0H MOV TH1,#0F0H MOV TL1,#0B0H SETB EA SETB ET0 // SETB ET1 SETB TR0 // SETB TR1 CLR P3.4 MOV R7,#00H ;秒值 MOV 30H,#00H ;秒个位值 MOV 31H,#00H ;秒十位值 MOV 32H,#00H ;分个位 MOV 33H,#00H ;分十位 MOV 34H,#00H ;时个位 MOV 35H,#00H ;时十位 MOV 44H,#00H ;秒表毫秒十位 MOV 45H,#00H ;秒表秒毫秒百位 MOV 46H,#00H ;秒表秒个位 MOV 47H,#00H ;秒表秒十位 MOV 48H,#00H ;秒表分个位 MOV 49H,#00H ;秒表分十位 MOV P2,#0F0H ;P2口按键初始化


51单片机按键控制花样灯.doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:Spring技术内幕

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: