单片机C语言编程:控制流水灯

单片机C语言编程:控制流水灯,第1张

T0 工作模式2 计时器中断,一次桐袜200us,1s流水灯左移或右移一次。

k3触发外部中断0,级别高于计时器局御激中断,故拆敬暂停。

#include <reg52.h>

#include <intrins.h> 

#define uint unsigned int

#define uchar unsigned char

sbit k1=P1^0 //左循环按钮

sbit k2=P1^1 //右循环按钮

sbit k4=P1^2 //恢复暂停

sbit k3=P3^2//暂停

void init()

void showLED()

void delay(uint xms)

uint delayTime

uint goLeft=1

uint goRight=0

uint sFlag=0

void main()

{

init()

while(1)

{

if(k1==0)

{

delay(10)

if(k1==0)

{

while(k1==0)

goLeft=1

goRight=0

}

}

if(k2==0)

{

delay(10)

if(k2==0)

{

while(k2==0)

goLeft=0

goRight=1

}

}

}

}

void delay(uint xms)

{

uint i,j

for(i=xmsi>0i--)

for(j=112j>0j--)

}

void init()

{

P0=0xfe

TMOD=0x02 //T0 工作模式2 自动装填8位  200us

    TH0=0x38

    TL0=0x38

    EA=1

ET0=1

    TR0=1

EX0=1

IT0=1

}

void showLED()

{

if(goLeft==1)

P0=_crol_(P0,1)

if(goRight==1)

P0=_cror_(P0,1)

}

void moveDelay() interrupt  1 //一次中断200us

{

if(delayTime==5000)

{

showLED()

delayTime=0

}

else

delayTime++

}

void stopLED() interrupt 0

{

while(1)

{

if(k4==0)

{

delay(10)

if(k4==0)

{

while(k4==0)

break

}

}

}

}

1灭)。编译器keil

c代码如下:

#include<reg51.h>

#include<intrins.h>

//包含循环左移函数

_cro_l头文件

unsigned

char

tmp

//中间变量

//////////////////////////////////////////////////////////////////////////////////////////////////

//

延时子程序

//////////////////////烂判/////////////////////////////////////////////////////////////饥胡改/////////////

void

delay(unsigned

int

cnt)

{

while(--cnt)

}

//////////////////////////////////////////////////////////////////////////////////////////////////

//

主函数做粗

////////////////////////////////////////////////////////////////////////////////////////////////

main()

{

while(1)

//外层循环

{

tmp

=

0xfe

p1

=

tmp

while(1)

//内层循环,执行1、3、5、7亮灯循环

{

delay(30000)

//延时以便能观察到灯亮移动,自己可以调整时间,由晶振和实参决定

tmp

=

_crol_(tmp,2)

p1

=

tmp

if(tmp

==

0xbf)

//判断是否已经点亮到第7灯。是,则退出进入2、4、6、8循环

{

break

}

}

tmp

=

0xfd

p1

=

tmp

while(1)

//内层循环,执行2、4、6、8亮灯循环

{

delay(30000)

//延时以便能观察到灯亮移动,自己可以调整时间,由晶振和实参决定

tmp

=

_crol_(tmp,2)

p1

=

tmp

if(tmp

==

0x7f)

//判断是否已经点亮到第8灯。是,则退出进入1、3、5、7循环

{

break

}

}

}

}


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/8283718.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-15
下一篇 2023-04-15

发表评论

登录后才能评论

评论列表(0条)

保存