
单片机求助,俺分不多了,各位大侠帮帮忙。用keilC语言编写一段程序,实现LED的一些功能,具体如下~?。
3.画出电路,编写一段程序,用P1口作为控制端口,连接8个LED,使8个LED每隔一秒轮流亮。4.画出电路,编写一段程序,用P1口作为控制端口,连接8个LED,使8个LE...
3. 画出电路,编写一段程序,用P1 口作为控制端口,连接8个LED,使8个LED 每隔一秒轮流亮。
4.画出电路,编写一段程序,用P1 口作为控制端口,连接8个LED,使8个LED 每隔一秒轮流亮。外部中断0连接一个按键,按下时LED循环点亮方向反向。
#include<reg51.h>
int m=0;
unsigned char i=10;
void delay()
{ int i,j;
for(i=1;i<1200;i++)
for(j=1;j<100;j++);
}
void timer0() interrupt 1
{
TH0=0x3C;
TL0=0xB0;
i--;
if (i<=0)
{
m++;
if(m>=8)
{
m=0;
}
i=10;
}
}
void main() //主函数
{
TMOD=0x01;//设置定时器0为工作方式1
TH0=0x3C;
TL0=0xB0;
EA=1;//开总中断
ET0=1;//开定时器0中断
TR0=1;//启动定时器0
while(1);//等待中断产生
{
switch(m)
{
case 0 : P1=0x01; delay();
case 1 : P1=0x02; delay();
case 2 : P1=0x04; delay();
case 3 : P1=0x08; delay();
case 4 : P1=0x10; delay();
case 5 : P1=0x20; delay();
case 6 : P1=0x40; delay();
case 7 : P1=0x80; delay();
}
}
}
各位,看看,这么写有什么问题?我的灯就干脆不循环。。。囧、、、 展开
4.画出电路,编写一段程序,用P1 口作为控制端口,连接8个LED,使8个LED 每隔一秒轮流亮。外部中断0连接一个按键,按下时LED循环点亮方向反向。
#include<reg51.h>
int m=0;
unsigned char i=10;
void delay()
{ int i,j;
for(i=1;i<1200;i++)
for(j=1;j<100;j++);
}
void timer0() interrupt 1
{
TH0=0x3C;
TL0=0xB0;
i--;
if (i<=0)
{
m++;
if(m>=8)
{
m=0;
}
i=10;
}
}
void main() //主函数
{
TMOD=0x01;//设置定时器0为工作方式1
TH0=0x3C;
TL0=0xB0;
EA=1;//开总中断
ET0=1;//开定时器0中断
TR0=1;//启动定时器0
while(1);//等待中断产生
{
switch(m)
{
case 0 : P1=0x01; delay();
case 1 : P1=0x02; delay();
case 2 : P1=0x04; delay();
case 3 : P1=0x08; delay();
case 4 : P1=0x10; delay();
case 5 : P1=0x20; delay();
case 6 : P1=0x40; delay();
case 7 : P1=0x80; delay();
}
}
}
各位,看看,这么写有什么问题?我的灯就干脆不循环。。。囧、、、 展开
4个回答
展开全部
到我的百度空间看看,程序和电路都有。
--------------------------
while(1);//等待中断产生--毛病出在这里!去掉分号“;”,就好了。
{
switch(m)
……
你写上了分号,while(1);就是一条死循环指令,下面的就永远不执行了。
--------------------------
while(1);//等待中断产生--毛病出在这里!去掉分号“;”,就好了。
{
switch(m)
……
你写上了分号,while(1);就是一条死循环指令,下面的就永远不执行了。
展开全部
#include<reg51.h>
int m=0;
unsigned char cnt=10;
void timer0() interrupt 1
{
TH0=0x3C;
TL0=0xB0;
cnt--;
if(cnt==0)
{
cnt=0;
m++;
m%=8;
}
}
void main() //主函数
{
TMOD=0x01;//设置定时器0为工作方式1
TH0=0x3C;
TL0=0xB0;
EA=1;//开总中断
ET0=1;//开定时器0中断
TR0=1;//启动定时器0
while(1);//等待中断产生
{
switch(m)
{
case 0 : P1=0x01; break;
case 1 : P1=0x02; break;
case 2 : P1=0x04; break;
case 3 : P1=0x08; break;
case 4 : P1=0x10; break;
case 5 : P1=0x20; break;
case 6 : P1=0x40; break;
case 7 : P1=0x80; break;
}
}
}
int m=0;
unsigned char cnt=10;
void timer0() interrupt 1
{
TH0=0x3C;
TL0=0xB0;
cnt--;
if(cnt==0)
{
cnt=0;
m++;
m%=8;
}
}
void main() //主函数
{
TMOD=0x01;//设置定时器0为工作方式1
TH0=0x3C;
TL0=0xB0;
EA=1;//开总中断
ET0=1;//开定时器0中断
TR0=1;//启动定时器0
while(1);//等待中断产生
{
switch(m)
{
case 0 : P1=0x01; break;
case 1 : P1=0x02; break;
case 2 : P1=0x04; break;
case 3 : P1=0x08; break;
case 4 : P1=0x10; break;
case 5 : P1=0x20; break;
case 6 : P1=0x40; break;
case 7 : P1=0x80; break;
}
}
}
本回答被网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
LED共阳极,电路图就不用了吧,连接LED的时候记得加限流电阻保护单片机。
头文件用你自己的单片机对应的。
main()
{
int a=0XFEH;
while(1)
{ p1=a;
a=a<<1;//循环左移命令
}
}
至于加中断的只是把移位复制操作放在中断程序中,中断中记得放标志位,不要中断中执行死循环,我写的只是个意思自己完善下。
头文件用你自己的单片机对应的。
main()
{
int a=0XFEH;
while(1)
{ p1=a;
a=a<<1;//循环左移命令
}
}
至于加中断的只是把移位复制操作放在中断程序中,中断中记得放标志位,不要中断中执行死循环,我写的只是个意思自己完善下。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
http://hi.baidu.com/qqjjqq123/blog/item/b95b5cc3ec10d0d2d10060b0.html
你慢慢看看吧。电路图已画好 你把邮箱发过来,我可以给你发过去。
你慢慢看看吧。电路图已画好 你把邮箱发过来,我可以给你发过去。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询
广告 您可能关注的内容 |