如何用单片机设计一个8路的跑马灯?本人急用!!在此表示重谢!
用单片机控制8个LED依次发光,但有一个开关控制,只要按一下开关,就有一个发亮,再按一下,那么下一个LED发亮,依次循环下去。再次表示感谢!用的是51的单片...
用单片机控制8个LED依次发光,但有一个开关控制,只要按一下开关,就有一个发亮,再按一下,那么下一个LED发亮,依次循环下去。再次表示感谢!
用的是51的单片 展开
用的是51的单片 展开
2个回答
展开全部
我也是刚学单片机的,交流下。我没加延时去抖动什么的,用8952。源程序很菜,呵呵。如尺坦果实际使用,在每次检测开关动作前加上0.5S的延时就好游应该可以了友困销
org 0000h
ajmp one
org 0030h
one:mov p0,#0ffh
mov p1,#0ffh
key1:jnb p0.0,next1
ajmp key1
next1:clr p1.0
key2:jnb p0.0,next1
ajmp key2
next2:setb p1.0
clr p1.1
key3:jnb p0.0,next2
ajmp key3
next3:setb p1.1
clr p1.2
key4:jnb p0.0,next3
ajmp key4
next4:setb p1.2
clr p1.3
key5:jnb p0.0,next4
ajmp key5
next5:setb p1.3
clr p1.4
key6:jnb p0.0,next5
ajmp key6
next6:setb p1.4
clr p1.5
key7:jnb p0.0,next6
ajmp key7
next7:setb p1.5
clr p1.6
key8:jnb p0.0,next7
ajmp key8
next8:setb p1.6
clr p1.7
key9:jnb p0.0,next8
ajmp key9
next9:setb p1.7
clr p1.8
ajmp one
end
org 0000h
ajmp one
org 0030h
one:mov p0,#0ffh
mov p1,#0ffh
key1:jnb p0.0,next1
ajmp key1
next1:clr p1.0
key2:jnb p0.0,next1
ajmp key2
next2:setb p1.0
clr p1.1
key3:jnb p0.0,next2
ajmp key3
next3:setb p1.1
clr p1.2
key4:jnb p0.0,next3
ajmp key4
next4:setb p1.2
clr p1.3
key5:jnb p0.0,next4
ajmp key5
next5:setb p1.3
clr p1.4
key6:jnb p0.0,next5
ajmp key6
next6:setb p1.4
clr p1.5
key7:jnb p0.0,next6
ajmp key7
next7:setb p1.5
clr p1.6
key8:jnb p0.0,next7
ajmp key8
next8:setb p1.6
clr p1.7
key9:jnb p0.0,next8
ajmp key9
next9:setb p1.7
clr p1.8
ajmp one
end
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
#include <reg51.h>
#include <intrins.h>
unsigned char scan_key();
void proc_key(unsigned char key_v);
void delayms(unsigned char ms);
sbit K1 = P3^4;
sbit K2 = P3^5;
char code SST516[3] _at_ 0x003b;
main()
{
unsigned char key_s,key_v;
key_v = 0x03;
P1 = 0xfe;
while(1)
{
key_s = scan_key();
if(key_s != key_v)
{
delayms(10);
key_s = scan_key();
if(key_s != key_v)
{
key_v = key_s;
proc_key(key_v);
}
}
}
}
unsigned char scan_key()
{
unsigned char key_s;
key_s = 0x00;
key_s |= K2;
key_s <<= 1;
key_s |= K1;
return key_s;
}
void proc_key(unsigned char key_v)
{
if((key_v & 0x01) == 0)
{
P1 = _cror_(P1,1);
}
else if((key_v & 0x02) == 0)
{
P1 = _crol_(P1, 1);
}
}
void delayms(unsigned char ms)
{
unsigned char i;
while(ms--)
{
for(i = 0; i < 120; i++);
}
}
P1接8路跑灯,P3.4接按键,为搭歼薯右移,P3.5可以接另一改哗个按键,为左移知者,你试试,不一定对。
#include <intrins.h>
unsigned char scan_key();
void proc_key(unsigned char key_v);
void delayms(unsigned char ms);
sbit K1 = P3^4;
sbit K2 = P3^5;
char code SST516[3] _at_ 0x003b;
main()
{
unsigned char key_s,key_v;
key_v = 0x03;
P1 = 0xfe;
while(1)
{
key_s = scan_key();
if(key_s != key_v)
{
delayms(10);
key_s = scan_key();
if(key_s != key_v)
{
key_v = key_s;
proc_key(key_v);
}
}
}
}
unsigned char scan_key()
{
unsigned char key_s;
key_s = 0x00;
key_s |= K2;
key_s <<= 1;
key_s |= K1;
return key_s;
}
void proc_key(unsigned char key_v)
{
if((key_v & 0x01) == 0)
{
P1 = _cror_(P1,1);
}
else if((key_v & 0x02) == 0)
{
P1 = _crol_(P1, 1);
}
}
void delayms(unsigned char ms)
{
unsigned char i;
while(ms--)
{
for(i = 0; i < 120; i++);
}
}
P1接8路跑灯,P3.4接按键,为搭歼薯右移,P3.5可以接另一改哗个按键,为左移知者,你试试,不一定对。
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询