A. 51單片機做兩邊向中間的流水燈,我用的是兩個數分別左移右移後相與實現的,這兩個數我用ab來表示,
# include "reg51.h" // 包含頭文件 #define uchar unsigned char void delay02s(void) // 延時0.2s子程序 { unsigned char i,j,k; for ( i=2;i>0;i-- ) for (j=200;j>0;j-- ) for (k=250;k>0;k-- ); } void main (void) // 主函數 { uchar i,j; while (1) // 死循環 { j=0x01; // j初始化為0x01,左移初始值 for(i=0;i<8;i++) // for循環語句,完成8個循環 { P1= ~ j; // 對變數j 中的值按位取反後,從P1口輸出 delay02s( ); // 延時0.2s j= j<<1; // 左移1位 } j=0x80; // 設置右移初始值j為0x80 for (i=0;i>1; // 右移1位 } } }
B. 單片機流水燈從左到右再從右到左 但是一直顯示從左到右看下程序哪裡是死循環
你這句話的意思想要左移亮完八個等吧。最後一句,自減一。但是你又跳轉到 RIGHT.請注意。你的第一句是什麼。又把R1賦值為8了,那麼R1就一直是7,8,7,8。。了。你可以吧MOV R1 ,#08H移到RIGHT的前面。程序是一句句來的,單片機執行的RIGHT。所謂左移。你換一面看就變右移了
C. 關於單片機流水燈左移右移的問題
51單片機的左移右移,首先在開始要調用"intrins.h"的文件包,這個文件包含_cror_(右移),_crol_(左移);然後通過for語句來控制;
for(m=20;m>0;m--)
for(n=20;n>0;n--)
for(k=250;k>0;k--);
理解這三句,第一句是指:m=20;m>0然後m--是真就執行:
for(n=20;n>0;n--)
for(k=250;k>0;k--);
這兩句,m--一直減,減一次,裡面就執行一次,這里是20次。
流水燈的左右移,第一用"intrins.h"的文件包,第二要要會定義賦值變數,第三延時,這是關鍵。