作者kinkipikachu (提琴手的无弦之声)
看板ASM
标题[问题] 关於8051 LED的问题
时间Mon Jan 2 23:19:14 2012
小弟知道可以用矩阵解决,不过小弟用双for回圈写
但是在 /* ... */ 那个地方有问题,一直无法正确显示
请大大破解小弟不解之处,谢谢
硬体流程
p2.7 p2.6 p2.5 p2.4 p2.3 p2.2 p2.1 p2.0
灭 灭 灭 灭 灭 灭 灭 亮
灭 灭 灭 灭 灭 灭 亮 灭
...
亮 灭 灭 灭 灭 灭 灭 灭
亮 灭 灭 灭 灭 灭 灭 亮
亮 灭 灭 灭 灭 灭 亮 灭
....
一直到8颗LED全亮
程式
#include<reg51.h>
#define led P1
char code tab[]={0,1,2,4,8,16,32,64,128}; // 宣告要显示的值
void delay(unsigned char time);
void main(void)
{
int i,x,j,k=9,f=8,save=0;
// i做为跑7次回圈值(所以f=8),j做为跑阵列值的次数(k=9),
// x做为传给储存内容值的中介者,
// save当成储存值
led=0xff;
while(1)
{
for(i=0;i<f;i++)
{
for(j=0;j<k;j++)
{
led=~(save|tab[j]);
delay(1000);
x=save+tab[j];
}
k--;
save=x;
f--;
}
led=0xff;
/* f=8;
k=9;
save=0; */
}
}
void delay(unsigned char time)
{
int i,j;
for(i=0;i<time;i++)
for(j=0;j<120;j++);
}
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 122.117.242.12
1F:→ ksmrt0123:回圈可考虑 for(i=8;i>0;--i) for(j=0;j<i;++j)写法 01/03 18:31
2F:→ ksmrt0123:外层递减内层递增, 可减化你程式的逻辑 01/03 18:32
3F:→ ksmrt0123:这类程式用keil c的debug mode模拟很方便也很容易debug 01/03 18:35