![]() |
謝謝各位指點。 |
#include <reg52.h> #include<intrins.h> unsigned int j,temp,temp1; void delay(t) { while(t--); } void main() { temp=0xfe; temp1=0x7f; while(1) { for(j=0;j<8;j++) { P1=temp; delay(10000); temp=_crol_(temp,1); //左移 } for(j=0;j<16;j++) //循環(huán)右移點亮16次,即兩輪,改次數(shù)即可改輪數(shù) { P1=temp1; temp1=_cror_(temp1,1); //右移 delay(10000); } } } |
左右往復,一般這么寫: #include <reg52.h> #include <INTRINS.H> bit way; void main() { unsigned int i; P2 = 0xfe; while(1) { if(P2 == 0xfe) way = 1; //在右端,進入左移模式 if(P2 == 0x7f) way = 0; //在左端,進入右移模式 if(way) P2 = _crol_(P2,1); //左移 else P2 = _cror_(P2,1); //右移 for(i=0;i<30000;i++); 延時 } } |
本帖最后由 188610329 于 2022-5-28 18:21 編輯 ccczzzyy 發(fā)表于 2022-5-28 17:43 左右往復,一般這么寫: #include <reg52.h> #include <INTRINS.H> bit way; void main() { unsigned int i; P2 = 0xfe; while(1) { if(P2 == 0xfe) way = 1; //在右端,進入左移模式 if(P2 == 0x7f) way = 0;//在左端,進入右移模式 if(way) P2 = _crol_(P2,1); //左移 else P2 = _cror_(P2,1); //右移 for(i=0;i<30000;i++); 延時 } } |
188610329 發(fā)表于 2022-5-28 11:52 謝謝您的幫助,也驗證了程序。用庫函數(shù)很簡潔,我想將他改成從右移到左,然后從左往右移動,但總是解決不了,要么不動,要么就一個方向移動。應該如何寫。謝謝。 |
流水燈,一般這么寫: #include <reg52.h> #include <INTRINS.H> void main() { unsigned int i; P2 = 0xfe; while(1) { P2 = _crol_(P2,1); //左移 // P2 = _cror_(P2,1); //右移 for(i=0;i<30000;i++); 延時 } } |
<< 左移 高位丟棄,低位補0 >> 右移低位丟棄。對正數(shù)左補0,負數(shù)左補1 兩個符號定義是不一樣,不能換一符號就能達到你想要的效果 還是用“_crol_” 與“_cror_”實現(xiàn)左右循環(huán)吧 |
左和右是相對于你板子上的LED排列而言的,默認是從左到右依次P20~P27 |
謝謝各位的指點,也謝謝版主對主題的編輯,“關于單片機流水燈程序的流動方向修改”,使其更有可讀性,目的更明確。 |
這個么其實也不用改的只需改變板的方位上下左右移不就變了嘛,又不是顯示文字數(shù)字區(qū)別明顯 |
P2口的排列順序是反著的,與其它的三個口不一樣 |
你這兩個程序寫的不錯,關鍵就在第 26 行語句,要想實現(xiàn)你的想法只要將這條語句相互交換一下即可實現(xiàn)你的想法了。再或是把兩段程序里的第 26 條語句里的【 << 和 >> 】相互交換也可以! |
Powered by 單片機教程網(wǎng)