#include<reg51h>
unsigned char ledtab[]={0x7f,0xbf,0xdf,0xef,0xf7,0xfb,0xfd,0xfe}
void delay(unsigned char a)
{
unsigned char i,j;
for(i=0;i<a;i++)
for(j=0;j<120;j++);
}
main()
{
unsigned char i;
while(1)
{
for(i=0;i<8;i++){P0=ledtab[i];delay(100);}
for(i=0;i<8;i++){P0=ledtab[7-i];delay(100);}
}
}
也许很快就有其他人发出程序代码来告诉你哪里有问题了,我就不贴代码了,主要告诉你方法。
1、点击工具栏上面的“start/stop debug session”按钮,进入仿真页面。
2、点击Peripherals选项,在下拉菜单选择“IO-port”,继续选择Port 1。
3、点击关掉Disassembly窗口,这个是汇编的,就不看了。 __
4、在新出现的仿真工具栏里,有一个箭头跳过花括号的图标 {} ↓ ,点击它或者按F10,你就可以执行单步仿真了。
5、在左边还有个sec 寄存器,可以看到执行到当期指令时所花的时间。不过首先你要去project option里面把晶振频率设置成和你单片机一样的。
6、选择变量i,右键,点击add to watch 1。这里是看变量i的变化的。
7、一步一步执行下来,你可以知道单片机是怎么执行指令的,你的IO输出到底是什么个样子的。反正肯定不是你现在所理解的,执行一遍就不执行了,呵呵。
#include<reg51h>
#define uchar unsigned char
uchar times,cnt;
uchar led[]={0x00,0xff,0xfe,0xfc,0xf8,0xf0,0xe0,0xc0,0x80,0x00,0xff};
void t0isr() interrupt 1
{
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
times++;
if(times>=40)
{
times=0;
P0=led[cnt];
cnt++;
cnt%=11;
}
}
main()
{
TMOD=0x01;
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
TR0=1;
ET0=1;
EA=1;
while(1);
}
//程序很简单,你自己加注释和完成其他工作吧。
# include <reg52h>
#include <intrinsh>
#define uint unsigned int
#define uchar unsigned char
uchar temp;
void delay (uint);
void main ()
{
temp=0xfe;
while(1)
{
P1=temp;
temp=_crol_(temp,1);
delay (500);
}
}
void delay(uint z)
{
uint x,y;
for (x=z;x>0;x--)
for (y=110;y>0;y--);
}
不用while,不会 for你可以自己修改一下
以上就是关于51单片机C程序怎样把LED灯从左到右点亮然后又从右到左点亮然后循环全部的内容,包括:51单片机C程序怎样把LED灯从左到右点亮然后又从右到左点亮然后循环、我想实现LED灯循环左移,可是只循环了一次 ,就不循环了,求大神指教,程序如下:、8051单片机,用P0口控制8个LED实现循环彩灯.循环显示规律为:全亮,全灭,依次点亮全灭。 间隔时间1秒。等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)