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"的文件包,第二要要会定义赋值变量,第三延时,这是关键。