kscheang 发表于 2022-3-31 22:29 谢谢,施用FOR循环解决的uchar code table [8] = {0xFE,0xFD, 0xFB, 0xF7, 0xEF, 0xDF, 0xBF, for (i=0; i<8; i++) //.... { uint cycle=500, pwm=0; for(pwm=cycle-1;pwm>0;pwm--) { P1 = 0xff; delay(pwm); P1 = table; delay(cycle-pwm); } for(pwm=1;pwm<cycle;pwm++) { P1 = 0xff; //.... delay(pwm); P1 =table; delay(cycle-pwm); } |
lkc8210 发表于 2022-3-31 09:56 感谢 ![]() |
kscheang 发表于 2022-3-31 20:46 非常感谢 ,确实很简洁,在P1=LEDflow;这里是不是低加上【i】;开始运行不行一看编码我的是共阳的,再次感谢。 |
| 我想过用FOR 和<<移位, 但会和楼主的设计概念和程序更改相差较远, 用这个只加上数组作移位就可以 |
kscheang 发表于 2022-3-31 20:46 去仿真或下到实机看看就知到啊~ |
| 采用for循环和位移函数 |
|
/***** 呼吸灯流水程序 呼吸一下右移一下 *****/ #include<reg52.h> #define uchar unsigned char #define uint unsigned int uchar i = 0; uchar code LEDflow[8] = {0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80}; void delay(uint t) { while(--t); } void pwm_led() { for (i=0; i<8; i++) { uint cycle=500, pwm=0; for(pwm=cycle-1;pwm>0;pwm--) { P1 = 0x00; delay(pwm); P1 = LEDflow; delay(cycle-pwm); } for(pwm=1;pwm<cycle;pwm++) { P1 = 0x00; delay(pwm); P1 = LEDflow; delay(cycle-pwm); } } } void main() { while(1) { pwm_led(); } } 你好 按照你的意思只增加少许, 这样可以吗. ![]() |
先弄个简单的流水灯代码
再把它们结合起来就可以了 |