我C语言写了一个C51单片机的流水灯定时一秒的程序,有如下问题,求助高手改错
程序:#include<reg51.h>inti,a;voidmain(){TMOD=0x01;TH0=0xd8;TL0=0xf0;EA=1;ET0=1;TR0=1;i=...
程序:
#include<reg51.h>
int i, a;
void main()
{ TMOD=0x01;
TH0=0xd8; TL0=0xf0;
EA=1; ET0=1; TR0=1;
i=0;a=0x01;
while(1);}
void time0_int(void) interrupt 1
{ TH0=0xd8; TL0=0xf0;
i++;
if(i==100)
{P1=a;a=a<<1;
if(a==0x00)
a=0x01;
i=0;
} }
在仿真软件上运行了有如下问题:
(1)刚开始运行时八个灯全都亮了,然后才是一个一的亮。
(2)每个灯亮的时间超过了一秒。
(3)灯全都亮一边后要等挺长时间才会进行第二遍。
PS:我是读大一,还没学单片机,想进学校实验室自学的,请帮我把问题讲清楚点,谢谢!谢谢!谢谢!
要采用中断与定时器和计数器的方法,谢谢! 展开
#include<reg51.h>
int i, a;
void main()
{ TMOD=0x01;
TH0=0xd8; TL0=0xf0;
EA=1; ET0=1; TR0=1;
i=0;a=0x01;
while(1);}
void time0_int(void) interrupt 1
{ TH0=0xd8; TL0=0xf0;
i++;
if(i==100)
{P1=a;a=a<<1;
if(a==0x00)
a=0x01;
i=0;
} }
在仿真软件上运行了有如下问题:
(1)刚开始运行时八个灯全都亮了,然后才是一个一的亮。
(2)每个灯亮的时间超过了一秒。
(3)灯全都亮一边后要等挺长时间才会进行第二遍。
PS:我是读大一,还没学单片机,想进学校实验室自学的,请帮我把问题讲清楚点,谢谢!谢谢!谢谢!
要采用中断与定时器和计数器的方法,谢谢! 展开
4个回答
展开全部
#include<reg51.h>
void delay(void)
{
unsigned char i,j;
for(i = 0;i < 255;i++) for(j = 0;j < 255;j++);
}
void main(void)
{
unsigned char j = 0x01;
while(1)
{
j = j << 1;
if(j == 0x00) j = 0x01;
P0 = j;
delay(225);//括号你们的数字随便你调吧!我以前用的时候好像250是1S钟,你自己调节一下吧
}
1;启动就全亮,是因为你没对P1口进行复位,默认的为高电平,所以会全亮
你在最前面加句P0=0X00;就可以解决了。
2建议你使用Delay函数比较好,这个延时自己可以调节的,就改变括号的数字就可以了。
好像有它的时间计算公式的,我忘记的,大致1S是250吧。
3你那个while语句用的我不太理解,怎么跑一死循环,但是里面又没给语句呢?也没看见
你有什么结束语句的。你还是好好看看while语句的用法吧!
void delay(void)
{
unsigned char i,j;
for(i = 0;i < 255;i++) for(j = 0;j < 255;j++);
}
void main(void)
{
unsigned char j = 0x01;
while(1)
{
j = j << 1;
if(j == 0x00) j = 0x01;
P0 = j;
delay(225);//括号你们的数字随便你调吧!我以前用的时候好像250是1S钟,你自己调节一下吧
}
1;启动就全亮,是因为你没对P1口进行复位,默认的为高电平,所以会全亮
你在最前面加句P0=0X00;就可以解决了。
2建议你使用Delay函数比较好,这个延时自己可以调节的,就改变括号的数字就可以了。
好像有它的时间计算公式的,我忘记的,大致1S是250吧。
3你那个while语句用的我不太理解,怎么跑一死循环,但是里面又没给语句呢?也没看见
你有什么结束语句的。你还是好好看看while语句的用法吧!
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
#include<reg51.h>
unsigned char i;
void main()
{ TMOD=0x01;
TH0=0xd8; TL0=0xf0;
EA=1; ET0=1; TR0=1;
i=0;P1=0x01;
while(1);}
void time0_int(void) interrupt 1
{ TH0=0xd8; TL0=0xf0;
i++;
if(i==100)
{P1=P1<<1;
if(P1==0x00)
P1=0x01;
i=0;
} }
帮你改了一下程序,你再看看吧
unsigned char i;
void main()
{ TMOD=0x01;
TH0=0xd8; TL0=0xf0;
EA=1; ET0=1; TR0=1;
i=0;P1=0x01;
while(1);}
void time0_int(void) interrupt 1
{ TH0=0xd8; TL0=0xf0;
i++;
if(i==100)
{P1=P1<<1;
if(P1==0x00)
P1=0x01;
i=0;
} }
帮你改了一下程序,你再看看吧
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
所谓的大人 你的3问题 亮了
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询