用C51单片机控制12个LED流水灯的C语言程序怎么写?

#include "REG52.H"

//控制引脚定义

sbit LED1 = PX.X; //P0.0-P3.7任意引脚

.... .... .......

sbit LED12 = PX.X;

//宏定义灯亮灯灭

#define LED1_ON( ) LED1 =0 //阳极接电源

#define LED1_OFF( ) LED1 =1 //阳极接电源

....... ............. .............

#define LED12_ON( ) LED12 =0 //阳极接电源

#define LED12_OFF( ) LED12 =1 //阳极接电源

void Init_GPIO( )//端口引脚初始化,关闭所有指示灯

{

LED1_OFF( ) ;

..............

LED12_OFF( ) ;

}

void Delay_ms( u16 dat ) //延时函数

{

u16 i, j;

for(i = dat; i0; i--)

{

for (j=300; j0; j--);

}

}

int main( ) //主函数

{

Init_GPIO( );//引脚初始化

while(1) //大循环

{

LED1_ON( );//点亮第一个LED

LED2_OFF( );

.............

LED12_OFF( );

Delay_ms(1000);//延时 参数自己可以根据晶振频率自己调节

LED1_OFF( ); //点亮第二个LED

LED2_ON( );

LED3_OFF( );

.............

LED12_OFF( );

Delay_ms(1000);

............. //按照上面修改;

LED1_OFF( );//点亮第十二个LED

LED2_OFF );

LED3_OFF( );

.............

LED12_ON( );

Delay_ms(1000);

}

}

51单片机中如何用汇编语言编写流水灯

流水灯就是51单片机控制led灯依次点亮的控制方式。具体程序如下:

ORG 0000H;复位启动

AJMP START;

ORG 001BH;T1中断

AJMP T1INT;

;定义变量========================

YSJSEQU 30H;延时计数器

LEDEQU 31H;LED控制缓冲器

;主程序==========================

START:MOV LED,#0FEH;初始化数据

MOV YSJS,#0;

MOV TMOD,#10H;定时器1工作于方式1,16位定时器

MOV TL1,#0B0H;设置定时初值

MOV TH1,#3CH;定时时间=50mS

SETB ET1;使能定时器1中断

SETB TR1;启动定时器1

SETB EA;开总中断

MOV P1,LED;初始化流水灯

LOOP:JMP LOOP;循环等待中断

T1INT:PUSH PSW;定时器1中断程序

PUSH ACC;保护现场

MOV TH1,#3CH;定时时间=50mS

MOV TL1,#0B0H;

INC YSJS;

PUSH ACC;保护ACC

MOV A,YSJI;

CJNE A,#2,QT1;50mS*2=100mS

MOV P1,LED;

MOV A,LED;

RL A;累加器A的值循环左移1位

MOV LED,A;

MOV YSJS,#0;

QT1:POP ACC;恢复现场

POP PSW;

RETI;返回主程序

END;汇编程序结束

扩展资料:

实现流水灯的三个方法:

第一种,总线方法实现流水灯。这是一种比较笨但又最易理解的方法,采用顺序程序结构,用位指令控制P1口的每一个位输出高低电平,加上延时函数,即可控制每个LED灯的亮灭。

第二种,移位方法实现流水灯采用循环程序结构编程。首先在程序开始给P1.0口送一个低电平,其它位为高。然后延时一段时间再让低电平往高位移动,这样就实现“流水”的效果了。

第三种,库函数实现流水灯。利用左移函数进行。

单片机C语言编程:控制流水灯

T0 工作模式2 计时器中断,一次200us,1s流水灯左移或右移一次。

k3触发外部中断0,级别高于计时器中断,故暂停。

#include reg52.h

#include intrins.h 

#define uint unsigned int

#define uchar unsigned char

sbit k1=P1^0; //左循环按钮

sbit k2=P1^1; //右循环按钮

sbit k4=P1^2; //恢复暂停

sbit k3=P3^2;//暂停

void init();

void showLED();

void delay(uint xms);

uint delayTime;

uint goLeft=1;

uint goRight=0;

uint sFlag=0;

void main()

{

init();

while(1)

{

if(k1==0)

{

delay(10);

if(k1==0)

{

while(k1==0);

goLeft=1;

goRight=0;

}

}

if(k2==0)

{

delay(10);

if(k2==0)

{

while(k2==0);

goLeft=0;

goRight=1;

}

}

}

}

void delay(uint xms)

{

uint i,j;

for(i=xms;i0;i--)

for(j=112;j0;j--);

}

void init()

{

P0=0xfe;

TMOD=0x02; //T0 工作模式2 自动装填8位  200us

    TH0=0x38;

    TL0=0x38;

    EA=1;

ET0=1;

    TR0=1;

EX0=1;

IT0=1;

}

void showLED()

{

if(goLeft==1)

P0=_crol_(P0,1);

if(goRight==1)

P0=_cror_(P0,1);

}

void moveDelay() interrupt  1 //一次中断200us

{

if(delayTime==5000)

{

showLED();

delayTime=0;

}

else

delayTime++;

}

void stopLED() interrupt 0

{

while(1)

{

if(k4==0)

{

delay(10);

if(k4==0)

{

while(k4==0);

break;

}

}

}

}

单片机C语言如何实现8个LED流水灯来回流动?

1、可以通过左移函数_crol_()和右移函数_cror_()来实现LED等的来回流动。

2、具体实现方法可以参考如下程序:

拓展资料:

1、单片机(Microcontrollers)是一种集成电路芯片,是采用超大规模集成电路技术把具有数据处理能力的中央处理器CPU、随机存储器RAM、只读存储器ROM、多种I/O口和中断系统、定时器/计数器等功能(可能还包括显示驱动电路、脉宽调制电路、模拟多路转换器、A/D转换器等电路)集成到一块硅片上构成的一个小而完善的微型计算机系统,在工业控制领域广泛应用。从上世纪80年代,由当时的4位、8位单片机,发展到现在的300M的高速单片机。

2、单片机又称单片微控制器,它不是完成某一个逻辑功能的芯片,而是把一个计算机系统集成到一个芯片上。相当于一个微型的计算机,和计算机相比,单片机只缺少了I/O设备。概括的讲:一块芯片就成了一台计算机。它的体积小、质量轻、价格便宜、为学习、应用和开发提供了便利条件。同时,学习使用单片机是了解计算机原理与结构的最佳选择。

3、单片机的使用领域已十分广泛,如智能仪表、实时工控、通讯设备、导航系统、家用电器等。各种产品一旦用上了单片机,就能起到使产品升级换代的功效,常在产品名称前冠以形容词——“智能型”,如智能型洗衣机等。

参考资料:百度百科:单片机

单片机C语言编程:让8个LED流水灯以0.2s时间间隔从左到右依次点亮然后重复实现

#includereg52.h

#includeintrins.h

void delay(unsigned int z );

void main()

{

unsigned int a;

unsigned char b=0xfe;

for(a=0;a8;a++)

{

P1=b;//P1口接8个LED灯

delay(200);

b=_crol_ (b,1);

}

}

void delay(unsigned int z)

{

unsigned int i;

for(;z0;z--) //延迟时间自己算吧

for(i=110;i0;i--);

}

用汇编写这个容易点

main: mov a,#0feh

mov r0,#8

loop: mov p1,a

acall delay

rl a

djnz r0,loop

delay:mov r6,#0ffh

loop1: mov r7,#01h

djnz r7,$

djnz r6,loop1

ret

end

好像是这样,延迟时间可能不太准,也是P1口接8个LED灯

单片机流水灯程序

在任意位置建立一个专门用于存放单片机试验程序的文件夹,启动keil c51 集成开发环境。新建一个工程项目,点击project,new project放到我们上一步新建的文件夹中选取相应的单片机芯片,选取相应的CPU。本实验使用89c52芯片,在这里选取Atmel 公司的AT89C52新建一个文本,点击filenew或Ctrl+n或点击工具栏的空白文本,然后保存到我们的工程文件夹中,名字后缀改为c文件点击图一所示图标,修改一下配置,改为12mhz,选择生成hex文件,然后找到project窗口的source group右键选择add files to group找到我们新建的".c"文件

写入相应的程序,下面解释一下这个程序#include reg52.h       //此文件中定义了51的一些特殊功能寄存器#define uint unsigned int;  这是个延时的程序,运用两个镶嵌for语句以for(i=0;i500  ;i++)为例  i赋值为0,当判断i是否小于500,若是那就跳出for语句,否则运行for语句内为主函数 while() 为循环语句当 ()内的数为真时循环, 为假时跳出循环, 括号内非零为真,零为假 0xfe=二进制的1111 1110点击rebuild图标,提示没有检查出没有错误方可,若有错误就要修改启动proteus仿真软件,如图制作好,双击单片机,选择好我们制作好的hex的文件。点击开始就可以看到流水灯的效果啦把程序下载到开发板中就可以看到实际的流水灯效果。