例程:
#include<reg51h> //51单片机头文件#include <intrinsh> //包含有左右循环移位子函数的库
#define uint unsigned int //宏定义
#define uchar unsigned char //宏定义
sbit beep=P2^3;
void delay(uint z) //延时函数,z的取值为这个函数的延时ms数,如delay(200);大约延时200ms
{ //delay(500);大约延时500ms
uint x,y;
for(x=z;x>0;x--)
for(y=110;y>0;y--);
}
void main() //主函数
{
uchar a,i,j;
while(1) //大循环
{
a=0xfe; //赋初值
for(j=0;j<3;j++) for(i=0;i<8;i++) //左移三次
{
P1=a; //点亮小灯
beep=0; //开启蜂鸣器
delay(50); //延时50毫秒
beep=1; //关闭蜂鸣器
delay(50); //再延时50毫秒
a=_crol_(a,1); //将a变量循环左移一位
}
a=0x7f;
for(j=0;j<3;j++) for(i=0;i<8;i++) //右移三次
{
P1=a; //点亮小灯
beep=0; //开启蜂鸣器
delay(50); //延时50毫秒
beep=1; //关闭蜂鸣器
delay(50); //再延时50毫秒
a=_cror_(a,1); //将a变量循环右移一位
}
}
}
51单片机是对所有兼容Intel 8031指令系统的单片机的统称。该系列单片机的始祖是Intel的8031单片机,后来随着Flash rom技术的发展,8031单片机取得了长足的进展,成为应用最广泛的8位单片机之一,其代表型号是ATMEL公司的AT89系列,它广泛应用于工业测控系统之中。很多公司都有51系列的兼容机型推出,今后很长的一段时间内将占有大量市场。51单片机是基础入门的一个单片机,还是应用最广泛的一种。
#include<reg52h>
#include<intrinsh>
typedef unsigned int u16;
typedef unsigned char u8;
sbit led=P2;//这里填你LED连接的端口(引脚),不一定是P2,也有可能是P3、P0
void delay(u16 i)
{
while(i--);
}
void shan1()
{
u8 i;
led=0x01;//我默认led输入高电平1是亮,具体按照你实际情况,低电平亮就0xfe;
for(i=0;i<7;i++)//已经点亮一个了,所以剩7个。
{
led=_crol_(led,1);//左移1位
}
led=0x00;
}
void shan2()
{
u8 i;
led=0xc0;//我默认led输入高电平1是亮,具体按照你实际情况
for(i=0;i<6;i++)已经点亮两个个了,所以剩6个。
{
led=_cror_(led,1);//右移一位
delay(1000);
}
led=0x00;
}
void shan2()
{
u8 i;
led=0xc0;//我默认led输入高电平1是亮,具体按照你实际情况
for(i=0;i<6;i++)
{
led=_cror_(led,1);
delay(1000);
}
led=0x00;
}
void main()
{
while(1)
{
shan1();
delay(1000);
shan2();
}
}
main(){unsignedcharled[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};unsignedchara=0;while(1){for(a=0;a<8;a++){Pn(灯的IO)=led[a];}for(a=7;a<=0;a--){Pn(灯的IO)=led[a];}}}
这只是灯亮的初始状态不一样,如果temp=0x01为第一位先亮(先亮指初始状态,因为不知道你的是低电平还是高电平驱动),那么temp=0x7F就是第八位先亮,而且两个循环放方向不一样!一个向左,一个向右,说白了就是两段程序形成的状态是互补的形式。
#include<reg52h>
#include<intrinsh>
#define uchar unsigned char
#define uint unsigned int
/
名称 : Delay()
功能 : 延时,延时时间为 10ms del
输入 : del
输出 : 无
/
void Delay(uint del)
{
uint i,j;
for(i=0; i<del; i++)
for(j=0; j<1827; j++)
;
}
/
名称 : Main()
功能 : 实现灯的闪烁
输入 : 无
输出 : 无
说明 :也可以使用例1的的方法来关闭数码管
/
void Main(void)
{
uchar i;
while(1)
{
P1 = 0xfe;
for(i=0; i<7; i++)
{
P1 = _crol_(P0, 1); //用于循环左移
Delay(15);
}
}
}
这是一个51单片机的P1口小灯循环左移的例子,不懂的问我。应该能用
哥,您看看您的程序,if(P0 == 0x7f)满足也就是说左移循环完成了之后,你就让它右移一位,接下来,延时函数过后戒指break跳出了while循环,而且这个流水灯来回循环也不是这样写的,就算你不用break跳出,等下一次while循环来的时候又是先左移一位,然后又满足if判断,又右移,然后就这么一直左移,,右移
以上就是关于51单片机C语言如何实现8个流水灯左移三次,后右移三次;如此循环全部的内容,包括:51单片机C语言如何实现8个流水灯左移三次,后右移三次;如此循环、求你89C52单片机流水灯移动的程序 第一次一个LED左移8次,第二次二个LED、设计一个左移到头接着右移,右移到头再左移的花样流水灯程序,C语言等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)