C51单片机按下独立按键怎样实现能够切换流水灯或者是跑马灯的流动方向

C51单片机按下独立按键怎样实现能够切换流水灯或者是跑马灯的流动方向,第1张

/单片机,用定时中断实现每隔02秒让接在P1口的8个小灯从左往右循环点亮。/

#include<reg52h>

#include <intrinsh>

#define uchar unsigned char

uchar a,b;

uchar b=1;

uchar a=0xfe;

void main()

{

EA=1;IT1=1;ET0=1;

TH0=-5000/256;

TL0=-5000%256;

TMOD=0x01;

TR0=1;

while(1)

{;}

}

void timer0(void) interrupt 1 using 1

{

TH0=-5000/256;

TL0=-5000%256;

b=b+1;

if(b==40)

{

b=0;

P1=a;

a=_crol_(a,1);

P1=a;

}

}

/单片机,用定时中断实现每隔02秒让接在p1口的8个小灯从左往右循环点亮。/

#include

#include

#define

uchar

unsigned

char

uchar

a,b;

uchar

b=1;

uchar

a=0xfe;

void

main()

{

ea=1;it1=1;et0=1;

th0=-5000/256;

tl0=-5000%256;

tmod=0x01;

tr0=1;

while(1)

{;}

}

void

timer0(void)

interrupt

1

using

1

{

th0=-5000/256;

tl0=-5000%256;

b=b+1;

if(b==40)

{

b=0;

p1=a;

a=_crol_(a,1);

p1=a;

}

}

你用的什么单片机?

看你说的应该是跑马灯,给你一个最常见的,51单片机,跑马灯C程序。

若有需要可以给你更多,本人硬件开发工程师。

望采纳。

例,这是一个51单片机的跑马灯C程序,已经在PROTEUS软件上仿真通过

#include<reg51h>

void delay(int);

void main()

{

int i;

P0=0x01;

delay(500);

while(1)

{

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

{

P0<<=1;

delay(500);

}

P0=0x01;

delay(500);

}

}

void delay(intx)

{

int i,j;

for(i=x;i>0l;i--)

for(j=110;j>0;j--);

}

#include<reg51h>

void delay(int);

void main()

{

int i;

P0=0x01;

delay(500);

while(1)

{

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

{

P0<<=1;

delay(500);

}

P0=0x01;

delay(500);

}

}

void delay(intx)

{

int i,j;

for(i=x;i>0l;i--)

for(j=110;j>0;j--);

}

试验成功的程序:

  ORG   0000H

  MOV   30H, #0

  MOV   31H, #0

M_LOOP:

  MOV   R2, #8

DISP1:

  CALL  DL

  CALL  SHIFT2

  DJNZ  R2, DISP1

  MOV   R2, #8

DISP2:

  CALL  DL

  CALL  SHIFT1

  DJNZ  R2, DISP2

  SJMP  M_LOOP

;-----------------------

SHIFT1:

  CLR   C

  MOV   A, 30H

  RLC   A

  MOV   30H, A

  CLR   C

  MOV   A, 31H

  RRC   A

  MOV   31H, A

  RET

;-----------------------

SHIFT2:

  SETB  C

  MOV   A, 31H

  RLC   A

  MOV   31H, A

  SETB  C

  MOV   A, 30H

  RRC   A

  MOV   30H, A

  RET

;-----------------------

DL:

  CLR   TI

  MOV   SBUF, 30H

  JNB   TI, $

  CLR   TI

  MOV   SBUF, 31H

  DJNZ  R7, $

  DJNZ  R7, $

  DJNZ  R6, $ - 4

  RET

;-----------------------

END

电路:

参考:

>

一个开关,比如导通了1秒一个模式,3秒一个模式,5秒一个模式。

要么在一定时间内,检测开关导通的次数

我觉得应该弄的直观点,从51上接4个led做指示用,一个灯表示待运行,还有3个灯,亮一个表示模式1,亮两个表示模式2,亮3个表示模式3

开机的时候,待运行灯亮,等待设定模式,这时候开始按按键设定模式,同时待运行灯灭。模式灯随按键 *** 作变化。

模式设定好了,停止按键 *** 作,两秒后待运行灯亮,表示模式设定完毕。这时候长按按键,开始跑马灯。短按按键则返回模式设定。

当开始运行跑马灯的时候,可以设定运行一遍返回,也可以中断返回。

个人想法,不知行不行

哈哈 这不难啊!!!!…………单片机的跑马灯程序主要用到了延时子程序,clr,lcall,ajmp 指令, 通过轮流点亮p10 …P17 实现效果。你可以通过此程序的学习, 进一步掌握单片机的IO端口 *** 作。

汇编语言参考程序:

org 0000h ;开始

ajmp loop

org 0080h ;到0030h处避开00-30的敏感地址

loop:

mov p1,#0ffh ;关闭所有灯

clr p10 ;点亮灯p10

lcall delay ;延时一段时间

clr p11 ;点亮灯p11

lcall delay

clr p12 ;点亮灯p12

lcall delay

clr p13 ;点亮灯p13

lcall delay

clr p14 ;点亮灯p14

lcall delay

clr p15 ;点亮灯p15

lcall delay

clr p16 ;点亮灯p16

lcall delay

clr p17 ;点亮灯p17

lcall delay

AJMP LOOP ;到最开始loop处重新运行

delay: mov r5,#20 ;延时。

d1: mov r6,#40

d2: mov r7,#248

djnz r7,$

djnz r6,d2

djnz r5,d1

ret

end

 

c语言参考程序:

#include<reg51h> //头文件

#define uchar unsigned char //宏定义,为方便编程

#define uint unsigned int

#define LED P1 //宏定义,将P1口定义为LED

uchar led_value[]={0x7f,0xbf,0xdf,0xef,0xf7,0xfb,0xfd,0xfe,0x00}; //定义一数组,内存放跑马灯数据

uchar p=led_value; //定义指针,指向跑马灯数组首地址

void delay() //延迟函数,与跑马灯跳动频率有关

{

uchar ii,jj;

for(ii=0;ii<200;ii++)

for(jj=0;jj<200;jj++);

}

void run_led() //跑马灯运行函数

{

while(p!=0x00)

{

LED=p; //将数组中数据取出赋给P1口

p++; //预取下一数据

delay(); //延迟

}

p=led_value;

}

char code SST516[3] _at_ 0x003b; //仿真器保留

main() //主函数

{

while(1)

run_led(); //上电即运行跑马灯程序

}

哈哈 !!!哈哈哈!!!!打字 打得手都是痛的 …………希望对你有所帮助……

以上就是关于C51单片机按下独立按键怎样实现能够切换流水灯或者是跑马灯的流动方向全部的内容,包括:C51单片机按下独立按键怎样实现能够切换流水灯或者是跑马灯的流动方向、如何用51系列单片机做控制LED跑马灯实验、求教通过按键控制单片机LED灯闪烁周期的程序怎么写等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

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

原文地址: http://outofmemory.cn/zz/9408382.html

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

发表评论

登录后才能评论

评论列表(0条)

保存