我想做一个单片机流水灯,大概思路是让单片机通过四个独立键盘控制四种形势的流水灯,向前辈求教程序
5个回答
展开全部
#include<reg51.h>
sbit S1=P1^4;
sbit S2=P1^5;
sbit S3=P1^6;
sbit S4=P1^7;
unsigned char keyval;
void led_delay(void)
{
unsigned char i,j;
for(i=0;i<250;i++)
for(j=0;j<250;j++)
;
}
void delay20ms(void)
{
unsigned char i,j;
for(i=0;i<100;i++)
for(j=0;j<60;j++)
;
}
/*正向流水点亮LED*/
void forward(void)
{
P3=0xfe;
led_delay();
P3=0xfd;
led_delay();
P3=0xfb;
led_delay();
P3=0xf7;
led_delay();
P3=0xef;
led_delay();
P3=0xdf;
led_delay();
P3=0xbf;
led_delay();
P3=0x7f;
led_delay();
P3=0xff;
P3=0xfe;
led_delay();
}
/*反向流水点亮LED*/
void backward(void)
{
P3=0x7f;
led_delay();
P3=0xbf;
led_delay();
P3=0xdf;
led_delay();
P3=0xef;
led_delay();
P3=0xf7;
led_delay();
P3=0xfb;
led_delay();
P3=0xfd;
led_delay();
P3=0xfe;
led_delay();
}
/*关闭所有LED*/
void stop(void)
{
P3=0xff; //关闭8个LED
}
/*闪烁点亮LED*/
void flash(void)
{
P3=0xff; //关闭8个LED
led_delay();
P3=0x00; //点亮8个LED
led_delay();
}
void main(void)
{
TMOD=0x01;
EA=1;
ET0=1;
TR0=1;
TH0=(65536-1000)/256;
TL0=(65536-1000)%256;
keyval=0;
while(1)
{
switch(keyval)
{
case 1:forward();
break;
case 2:backward();
break;
case 3:stop();
break;
case 4: flash();
break;
}
}
}
void Time0_serve(void) interrupt 1 using 1
{
if((P1&0xf0)!=0xf0)
{
delay20ms();
if(S1==0)
keyval=1;
if(S2==0)
keyval=2;
if(S3==0)
keyval=3;
if(S4==0)
keyval=4;
}
TH0=(65536-1000)/256;
TL0=(65536-1000)%256;
}
用 AT89C51
sbit S1=P1^4;
sbit S2=P1^5;
sbit S3=P1^6;
sbit S4=P1^7;
unsigned char keyval;
void led_delay(void)
{
unsigned char i,j;
for(i=0;i<250;i++)
for(j=0;j<250;j++)
;
}
void delay20ms(void)
{
unsigned char i,j;
for(i=0;i<100;i++)
for(j=0;j<60;j++)
;
}
/*正向流水点亮LED*/
void forward(void)
{
P3=0xfe;
led_delay();
P3=0xfd;
led_delay();
P3=0xfb;
led_delay();
P3=0xf7;
led_delay();
P3=0xef;
led_delay();
P3=0xdf;
led_delay();
P3=0xbf;
led_delay();
P3=0x7f;
led_delay();
P3=0xff;
P3=0xfe;
led_delay();
}
/*反向流水点亮LED*/
void backward(void)
{
P3=0x7f;
led_delay();
P3=0xbf;
led_delay();
P3=0xdf;
led_delay();
P3=0xef;
led_delay();
P3=0xf7;
led_delay();
P3=0xfb;
led_delay();
P3=0xfd;
led_delay();
P3=0xfe;
led_delay();
}
/*关闭所有LED*/
void stop(void)
{
P3=0xff; //关闭8个LED
}
/*闪烁点亮LED*/
void flash(void)
{
P3=0xff; //关闭8个LED
led_delay();
P3=0x00; //点亮8个LED
led_delay();
}
void main(void)
{
TMOD=0x01;
EA=1;
ET0=1;
TR0=1;
TH0=(65536-1000)/256;
TL0=(65536-1000)%256;
keyval=0;
while(1)
{
switch(keyval)
{
case 1:forward();
break;
case 2:backward();
break;
case 3:stop();
break;
case 4: flash();
break;
}
}
}
void Time0_serve(void) interrupt 1 using 1
{
if((P1&0xf0)!=0xf0)
{
delay20ms();
if(S1==0)
keyval=1;
if(S2==0)
keyval=2;
if(S3==0)
keyval=3;
if(S4==0)
keyval=4;
}
TH0=(65536-1000)/256;
TL0=(65536-1000)%256;
}
用 AT89C51
意法半导体(中国)投资有限公司
2021-01-14 广告
2021-01-14 广告
可以写对它写程序,让它听从你的安排,你让它实现什么功能它就能实现,比如电子钟、电子琴、打印机、手机、电梯控制,智能家具如:空调、冰箱、洗衣机等,如果这些家电没有它,什么都不能工作。单片机内部很复杂,你研究的越深你就会越爱上它,它可以帮你实现...
点击进入详情页
本回答由意法半导体(中国)投资有限公司提供
展开全部
个人认为,在每个流水灯子程序循环中,如检测到键盘变化,跳出,根据键值,再跳入对应子程序中。不知可否。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
问题补充:一个小程序,两个子函数分别为控制流水灯和让电机旋转,想让两个另外,通过你的程序可以看出,你没有延时函数,这将导致你的八个灯同时亮,
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
你是要汇编的还是C语言的啊
追问
C语言的最好
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
这个可是很简单,你自己先看看,遇到什么问题再问,这样提高快一些
追问
就像是分别做了四种花样的流水灯,但是要通过单片机上的四个独立键盘控制让四次试验能在一次试验中完成 主要是加入键盘操作这块不会弄
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询