/单片机,用定时中断实现每隔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灯闪烁周期的程序怎么写等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)