焊接资讯

您现在的位置是:首页 > led灯 > 正文

led灯

51单片机蓝牙控制led灯实验报告,单片机控制led灯实验总结。

工品易达2022-10-07led灯14

本文目录一览:

手机通过蓝牙向单片机发送16进制数据控制LED灯

首先你需要一个蓝牙透传模块,其次就是单片机最小系统板或开发板,控制端要安卓手机一台(必须有蓝牙,苹果目前不行),软件为“蓝牙串口助手”(一定要有hex发送功能)之后按照你的程序连接好电路就可以实现蓝牙控制LED的状态了

单片机控制leD的基本方法?

闪烁LED灯

51单片机是较为简单的8位单片机,意思是一次能处理8位2进制数据。这一次闪烁LED灯就是让单片机的引脚定时输出1或0。

51单片机有4个IO端口,每一个端口分别由P0,P1,P2,P3,4个寄存器控制。我们假设输出0时LED灯点亮,我们用单片机驱动时就需要让端口的某一位置零。例如我们用P1口的第0位闪烁点亮,我们需要给P1口的第0位定时置零。

用单片机控制8个LED灯,8个LED灯从左到右依次点亮一次,再从右到左依次点亮一次

假设51单片机,P1口点亮,低电平点亮。

unsigned char x =0xfe,i=0;

for(i=0,i<8;i++)

{

x=_crol_(x,1);

P1=x;

delay500ms();

}

for(i=0,i<8;i++)

{

x=_cror_(x,1);

P1=x;

delay500ms();

}

要求用51单片机控制8个LED亮灭的原理图+程序+解说?

本来以为这个程序很简单的,没想到写了快三个小时。哎学艺不精啊。贴出来给你研究吧。我不想做过多的解释了,我是按我理解的你出的题目做的,可能和你的本意不是很一样,

1、依次亮,依次灭:从一个灯亮到全亮,再到全灭,每次改变一个灯亮灭

2、奇偶号灯间隔亮灭:隔一个灯亮一个灯亮灯时间为1s,没有灯全灭的时候

3、依次闪烁、切换时间为3秒,闪烁时间为2秒,我理解的是,没三秒钟有一个灯在闪烁,其中有一秒钟是灭灯状态

程序中使用了P1口与8个发光二极管相连,具体电路图你百度一下吧,还有使用了一个按键,该按键与P3.7相连,低电平为按下状态。

程序如下:

#include reg52.h

#include intrins.h

/*变量声明:

i、j、k都是记录计时器溢出次数的变量,

stat是记录当前显示状态的变量,由按键key控制

temp是状态2中保护P1口状态的变量*/

unsigned char i=0,j=0,k=0,stat=0,temp;

bit flag=1; //状态1处于灭灯还是亮灯状态的变量,1为依次亮灯,0为依次亮灯

sbit key=P3^7; //按键控制

void init(); //初始化函数

void delay(unsigned int N); //延时函数

void keyscan(); //键盘扫描函数

void main()

{

init();

while (1)

{

switch (stat)

{

case 0: //0方案

if(i==20flag)

{

i=0;

P1=P11; //依次亮灯

temp=P1;

if(temp==0)

{

flag=0;

}

}

if(i==20!flag)

{

i=0;

if(P1==0xff)

{

flag=1;

P1=0xfe;

}

if(!flag)

{

P1=P11; //依次灭灯

temp=P1;

P1=temp+1;

}

}

break;

case 1: //2方案

if(i==20)

{

i=0;

P1=~P1; //去反后亮灯状态为灭灯,P1初值取0x55或0xaa,奇偶交替亮灯

}

break;

case 2: //3方案

if(j==60)

{

P1=temp;

P1=_crol_(P1,1);

temp=P1; //保护P1口亮灯状态

k=0;

j=0;

}

//闪烁部分,应该可以优化

if(k5)

{

P1=0xff;

}

else if(k=5k10)

{

P1=temp;

}

else if(k=10k15)

{

P1=0xff;

}

else if(k=15k20)

{

P1=temp;

}

else if(k=20k25)

{

P1=0xff;

}

else if(k=30k35)

{

P1=temp;

}

else if(k=35k40)

{

P1=0xff;

}

//-----------------------------------

break;

}

keyscan();

}

}

void init()

{

TH0=0x3c; //定时器赋初值定时时间50ms

TL0=0xB0;

TMOD=0x01; //设置定时器工作方式为方式1

EA=1; //开总中断

ET0=1; //开中断允许位

TR0=1; //定时器计数

P1=0xfe; //这里假设led灯与P1口相连并且

//低电平有效

}

void delay(unsigned int N)

{

int i,j;

for (i=0;iN;i++);

for (j=0;j110;j++);

}

void keyscan()

{

if(!key)

{

delay(10); //消抖

if(!key); //确认有键按下

stat++;

if(stat==3)

{

stat=0;

}

//右键按下复位

i=0;

j=0;

k=0;

TH0=0x3c;

TL0=0xB0;

switch (stat)

{

case 0:

P1=0xfe;

flag=1;

stat=0;

break;

case 1:

P1=0x55;

break;

case 2:

P1=0xfe;

temp=P1;

break;

}

//-----------------------------------

while(!key) //此循环中的函数和主函数中的显示函数是同一个

//用于长按键的显示,可以去掉,去掉长按键不会正常显示,松开按键后正常

{

switch (stat)

{

case 0:

if(i==20flag)

{

i=0;

P1=P11;

temp=P1;

if(temp==0)

{

flag=0;

}

}

if(i==20!flag)

{

i=0;

if(P1==0xff)

{

flag=1;

P1=0xfe;

}

if(!flag)

{

P1=P11;

temp=P1;

P1=temp+1;

}

}

break;

case 1:

if(i==20)

{

i=0;

P1=~P1;

}

break;

case 2:

if(j==60)

{

P1=temp;

P1=_crol_(P1,1);

temp=P1;

k=0;

j=0;

}

if(k5)

{

P1=0xff;

}

else if(k=5k10)

{

P1=temp;

}

else if(k=10k15)

{

P1=0xff;

}

else if(k=15k20)

{

P1=temp;

}

else if(k=20k25)

{

P1=0xff;

}

else if(k=30k35)

{

P1=temp;

}

else if(k=35k40)

{

P1=0xff;

}

break;

}

}

}

}

void timer0() interrupt 1

{

TH0=0x3c;

TL0=0xB0; //溢出后重新赋初值

//定时器中断时间为50ms

i++; //20次中断时间为1s

j++; //40次中断时间为2s

k++; //60次中断时间为3s

}

有什么不懂的可以百度Hi我

怎么用手机蓝牙调试助手控制51单片机上的LED灯亮

#includereg52.h

typedef unsigned char unit8;

typedef unsigned short unit_16;

void Receive_Handle(unit8 Value)

{

switch(Value)//具体发送过来的是什么数据 需要自己自己通过串口调试助手查看

//改变这里面对应的数据即可

{

case 0x00:P2=0xff;break;

case 0x01:P2=0xfe;break;

case 0x02;P2=0xfd;break;

case 0x03:P2=0xfb;break;

case 0x04:P2=0xf7;break;

default:P2=0xff;break;

}

}

void main()

{

TMOD |= 0x20;//定时器1 工作方式2 8位自动重装模式

SCON = 0x50;//串口工作方式1 允许接收 8位数据位

TH1 = 0xfd; //波特率9600

TR1 = 1;

ES = 1;

EA = 1;

while(1);

}

void UART1_Rountine()interrupt 4

{

static unit8 Receive_Data=0;

ES = 0;

while(!RI);

RI=0;

Receive_Data = SBUF;

Receive_Handle(Receive_Data);

ES = 1;

}

/*---------------------------------------------------------------------------------------

如有问题可再咨询

----------------------------------------------------------------------------------------*/

关于51单片机蓝牙控制led灯实验报告和单片机控制led灯实验总结的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站。微信号:ymsc_2016

发表评论

评论列表

  • 这篇文章还没有收到评论,赶紧来抢沙发吧~