单片机八个流水灯左右依次点亮

单片机八个流水灯左右依次点亮,第1张

01

首先,打开proteus,可以看到界面上方有"库",点开,在库里选择做实验需要的元件。

02

如图所示,我们做流水灯实验所需要的元件,就是红色方框里面的元件,一定都要添加进来,要不然实验就做不成功。

03

接着,我们按照电路原理图,排布好元件,连好线,最后的电路如图所示。

04

我们把实验代码插入单片机,然后点击界面左下角的开始按钮,就可以运行电路。

05

如图所示,八个流水灯依次点亮。

一、#include<reg51h>

void delay(unsigned char Xms)//延时Xms

{

int i,j;

for(X = i; X>0; X--)

for(j=110;j>0;j--);

}

void main()

{

P0 = 0x00; //P00~P07分别接八个发光二极管,刚开始全灭

while(1)

{

delay(1000);

P0 = 0xc0;//点亮前两个发光二极管P00和P01;

delay(1000);//延时1秒

P0 = 0x30;//点亮第三个和第四个LED

delay(1000);

P0 = 0x0c;

delay(1000);

P0 = 0x03;

}

}

二、

#include <reg52h>

#include <intrinsh>

#define uchar unsigned char

#define uint unsigned int

uchar temp, t0, t1;

bit t2;

sbit P10 = P1^0;

void main()

{

P10 = 1;

temp = 0xfe;

P0 = temp;

P2 = 0xff;

TMOD = 0x01;

TH0 = (65536 - 50000) / 256;

TL0 = (65536 - 50000) % 256;

ET0 = 1;

EA = 1;

TR0 = 1;

while(1);

}

void timer0() interrupt 1

{

TH0 = (65536 - 50000) / 256;

TL0 = (65536 - 50000) % 256;

t0++;

if(t0 == 10) {

t0 = 0;

t1++;

if(t1 == 8) {t1 = 0; t2 = ~t2; P10 = t2;}

temp = _crol_(temp, 1);

if(t2) {P0 = temp; P2 = 255;}

else {P2 = temp; P0 = 255;}

}

}

扩展资料:

例如:a = 3,b = 5,现交换a,b的值,这个问题就好像交换两个杯子里面的水,这当然要用到第三个杯子,假如第三个杯子是c,那么正确的程序为:c = a; a = b; b = c;执行结果是a = 5,b = c = 3如果改变其顺序,写成:a = b; c = a; b =c;则执行结果就变成a = b = c = 5,不能达到预期的目的,初学者最容易犯这种错误。

顺序结构可以独立使用构成一个简单的完整程序,常见的输入、计算、输出三步曲的程序就是顺序结构,例如计算圆的面积,其程序的语句顺序就是输入圆的半径r,计算s = 314159rr,输出圆的面积s。

参考资料来源:百度百科-c语言

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

ORG 0000H ;复位启动

AJMP START ;

ORG 001BH ;T1中断

AJMP T1INT ;

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

YSJS EQU 30H;延时计数器

LED EQU 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 ;50mS2=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灯的亮灭。

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

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

假如说,第一个灯肯定比第二个灯亮的话,可以直接把8个LED灯的限流电阻弄成不同阻值的。就像楼上说的那样。

但如果想随便变换不同的灯都能有不同的亮度话,硬件电路可以不变,限流电阻都一样。可以在程序里这样写:

首先,例如你要最亮的灯先点亮,隔几十微秒后点亮第二个灯,再相隔同样时间点亮第三个灯……依次类推间隔一定时间点亮八个灯。但间隔时间不要太大,超过十几毫秒就不行了。

然后再间隔相同的时间一次性把灯全关了,再间隔几十微秒回到上面的状态依次点亮灯。……一直这样循环。

这样的话因为人的视力有一定的滞回效果,只要间隔时间不大,你就能看到八个灯不是闪的,而是同时亮,但亮度又不一样。

这是单片机设计中,PWM控制的思路。

以上就是关于单片机八个流水灯左右依次点亮全部的内容,包括:单片机八个流水灯左右依次点亮、用五一单片机c语言编程,p1口控制八个发光二极管,实现每隔一秒,两两点亮,并循环。、51单片机中如何用汇编语言编写流水灯等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/zz/9479157.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-04-28
下一篇2023-04-28

发表评论

登录后才能评论

评论列表(0条)

    保存