|
發布時間: 2022-3-30 21:53
正文摘要:想問一下各位前輩,這個呼吸燈的程序,需要怎么改一下能變成八個io口控制八個小燈,呼吸一下右移一下,呼吸一下右移一下,程序最好簡潔點 單片機源程序如下: #include<reg52.h> #define uchar unsigned cha ... |
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(); } } 你好 按照你的意思只增加少許, 這樣可以嗎. ![]() |
先弄個簡單的流水燈代碼
再把它們結合起來就可以了 |