51单片机流水灯c语言编程循环移动(51单片机流水灯循环程序)
51单片机流水灯执行10次 全部闪烁一次 一直循环十次闪烁一次 c语言怎么写????
#includereg51.h
#define?uchar?unsigned?char
void?delay(uchar?a)
{
uchar?i;
whilie(a--)for(i=0;i110;i++);
}
main()
{
uchar?i,j;
for(i=0;i10;i++)
????P0=0xfe;
????for(j=0;j8;j++)
????????{
????????P0=_crol_(P0,1);
????????delay(200);
????????}
????}
????P0=0x00;
????delay(200);
????P0=0xff;
????delay(200);
????while(1);
}
很简的51单片机C语言流水灯程序
1、51单片机C语言实现循环8个流水灯左移三次,后右移三次。
例程:
#includereg51.h??//51单片机头文件
#include?intrins.h?//包含有左右循环移位子函数的库
#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;x0;x--)
????????for(y=110;y0;y--);????
}
void?main()????????????//主函数
{
????uchar?a,i,j;
????while(1)????????//大循环
????{
????????a=0xfe;?????//赋初值
????????for(j=0;j3;j++)?for(i=0;i8;i++)???//左移三次
????????{
????????????P1=a;???????//点亮小灯
????????????beep=0;?????//开启蜂鸣器
????????????delay(50);?//延时50毫秒
????????????beep=1;?????//关闭蜂鸣器
????????????delay(50);??//再延时50毫秒
????????????a=_crol_(a,1);?//将a变量循环左移一位
????????}
????????a=0x7f;
???????for(j=0;j3;j++)?for(i=0;i8;i++)??//右移三次
????????{
????????????P1=a;???????//点亮小灯
????????????beep=0;?????//开启蜂鸣器
????????????delay(50);?//延时50毫秒
????????????beep=1;?????//关闭蜂鸣器
????????????delay(50);???//再延时50毫秒
????????????a=_cror_(a,1);?//将a变量循环右移一位
????????}????????
????}
}
2、51单片机是对所有兼容Intel 8031指令系统的单片机的统称。该系列单片机的始祖是Intel的8031单片机,后来随着Flash rom技术的发展,8031单片机取得了长足的进展,成为应用最广泛的8位单片机之一,其代表型号是ATMEL公司的AT89系列,它广泛应用于工业测控系统之中。很多公司都有51系列的兼容机型推出,今后很长的一段时间内将占有大量市场。51单片机是基础入门的一个单片机,还是应用最广泛的一种。
51单片机16个灯流水循环,C语言
代码已修改,并仿真通过。
#includereg51.h?????//包含单片机寄存器的头文件
#include?"intrins.h"
#define?uchar?unsigned?char
#define?uint?unsigned?int
?sbit?CLK=P1^0;
?sbit?IN?=P1^1;
//uchar?code?a[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};
uint?code?w[]={0xfffe,0xfffd,0xfffb,0xfff7,0xffef,0xffdf,0xffbf,0xff7f,0xfeff,0xfdff,0xfbff,0xf7ff,0xefff,0xdfff,0xbfff,0x7fff};//【新建了一个流水表】
void?delay(uint?i)
{
????uint?j;
????uchar?k;
????for(j=i;j0;j--)
????????for(k=125;k0;k--);
}
//【发送1字节给74LS164】
void?send_byte(uchar?temp)
{
????uchar?i;
????for(i=0;i8;i++)
????{
????????if(temp??0x80)
????????{
????????????IN?=1;
????????}
????????else
????????{
???????????IN?=0;
????????}
????????CLK?=?0;
?????????_nop_();??//if?Keil,require?use?intrins.h
????????CLK?=?1;
????????
????????temp=temp1;//?temp左移1位
????}
}
//【发送2字节给74LS164】
void?send_word(uint?temp)
{
????
????send_byte((uchar)(temp8));//先发送高字节
????send_byte((uchar)(temp0x00FF));//再发送低字节
}
void?main(void)
{
????uint?i;
????
????while(1)
????{
????????for(i=0;i16;i++)
????????{
????????????//send_byte(a[i]);
????????????send_word(w[i]);//【发送2字节】
????????????delay(4000);
????????????
???????????
????????}
????}
}