求用C语言编程实现51单片机的LED灯移动

求用C语言编程实现51单片机的LED灯移动,第1张

#include<reg51.h>

#define uchar unsigned char

sbit c10=P1^0

sbit c11=P1^1

sbit c12=P1^2

sbit c13=P1^3

uchar led1,led3

void delay(uchar a)

{

uchar i,j

for(i=0i<ai++)

for(j=0j<120j++)

}

main()

{

uchar keyval=0xff

led1=0xfe

led3=0xf8

while(1)

{

if(c10==0)

{

delay(10)

if(c10==0)

{

while(c10==0)

keyval=0

}

}

if(c11==0)

{

delay(10)

if(c11==0)

{

while(c11==0)

keyval=1

}

}

if(c12==0)

{

delay(10)

if(c12==0)

{

while(c12==0)

keyval=2

}

}

if(c13==0)

{

delay(10)

if(c13==0)

{

while(c13==0)

keyval=3

}

}

switch(keyval)

{

case 0:

P0=led1

led1=(led1<<1)|0x01

if(led1==0xff)led1=0xfe

delay(100)

case 1:

P0=led1

led1=(led1>>1)|0x80

if(led1==0xff)led1=0x7f

delay(100)

case 2:

P0=led3

led3=(led3<<1)|0x01

if((led3&0xf0)==0x30)led3=0x3e

if((led3&0xf0)==0x70)led3=0x7c

if((led3&0xf0)==0xf0)led3=0xf8

break

case 3:

P0=led3

led3=(led3>>1)|0x80

if((led3&0x0f)==0x0c)led3=0x7c

if((led3&0x0f)==0x0e)led3=0x3e

if((led3&0x0f)==0x0f)led3=0x1f

break

default:break

}

}

}

也许很快就有其他人发出程序代码来告诉你哪里有问题了,我就不贴代码了,主要告诉你方法。

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输出到底是缺散什么个样子的。反正肯定不是你现在所理解的,执行一遍就不执行了,呵呵。

LED灯右移到最右边后向左移时是这样的:右移一位→第二个延时程序→第埋族一个延时程序→右移右移一位→第二个延时程序→第一个延时程序戚液迟,这样不断循环,循环到最左边,就开始了右移的程序。

这样左移的延迟大高李一点的!


欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/yw/8256975.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-04-14
下一篇2023-04-14

发表评论

登录后才能评论

评论列表(0条)

    保存