[問題] 關於8051 LED的問題

看板ASM (組合語言)作者 (提琴手的無弦之聲)時間13年前 (2012/01/02 23:19), 編輯推噓0(003)
留言3則, 1人參與, 最新討論串1/2 (看更多)
小弟知道可以用矩陣解決,不過小弟用雙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

01/03 18:31, , 1F
迴圈可考慮 for(i=8;i>0;--i) for(j=0;j<i;++j)寫法
01/03 18:31, 1F

01/03 18:32, , 2F
外層遞減內層遞增, 可減化你程式的邏輯
01/03 18:32, 2F

01/03 18:35, , 3F
這類程式用keil c的debug mode模擬很方便也很容易debug
01/03 18:35, 3F
文章代碼(AID): #1F0ShrP8 (ASM)
討論串 (同標題文章)
文章代碼(AID): #1F0ShrP8 (ASM)