功能如下:
1、通过按键调节灯的亮度(1-10档位);
2、通过蓝牙远程控制灯的亮度和开关;
3、感应,根据附近是否有人自动进行开关灯。
部分程序:
#include
#include
#include 'sys_define.h'
#include 'pwm.h'
#include 'uart.h'
uchar Lamp_OnOff = 1; //台灯开关标志位
uchar Reaction_OnOff = 0; //人体感应开关标志位
sbit Key2 = P2^6;
sbit Key4 = P2^5;
sbit Key5 = P2^4;
sbit Key6 = P2^3;
sbit Reaction = P2^7;
void delay_ms(uint z)
{
uint x,y;
for(x = z; x > 0; x--)
for(y = 114; y > 0 ; y--);
}
uchar Key_Scan()
{
static uchar Key_up = 1;
uchar i;
if(Key_up && ( Key5 == 0 ||Key4 == 0 ))
{
Key_up = 0;
// delay_ms(10);
// if(Key6 == 0) i = 6;
if(Key5 == 0) i = 5;
if(Key4 == 0) i = 4;
// if(Key2 == 0) i = 2;
Uart_SendByte(i+'0');
return i;
}
else if( Key5 == 1 && Key4 == 1)
{
Key_up = 1;
}
}
/* Key2 亮度加
* Key4 亮度减
* Key5 开启自动感应功能
* Key6 台灯开关 */
void Function()
{
uchar Key = 0;
Key = Key_Scan();
if(Key)
{
// if(Key == 6)
// {
// if(Lamp_OnOff)
// {
// Lamp_Off();
// Lamp_OnOff = 0;
// }
// else
// {
// Lamp_On();
// Lamp_OnOff = 1;
// }
// }
// if(Lamp_OnOff)
// {
if(Key == 4)
PWM++;
if(Key == 5)
PWM--;
if(PWM > 10)
PWM = 10;
else if(PWM < 1)
PWM = 1;
Uart_SendByte(PWM+'0');
// if(Key == 5)
// Reaction_OnOff = ~Reaction_OnOff;
// }
}
关键字:51单片机 人体感应开关
引用地址:
基于51单片机的蓝牙台灯设计
推荐阅读最新更新时间:2024-11-02 10:18
51单片机之IO口扩展——74HC595芯片串行转并行实验
我们都知道通信从大的方面有两种:串行和并行。串行的最大优点是占用总线少,但是传输速率低;并行恰恰相反,占用总线多,传输速率高。市面上有很多这样的芯片,有串入并出的(通俗讲就是 一个一个进,最后一块出来),有并入串出的(相对前者而言)。具体用哪种类型要根据我们得实际情况。比如利用单片机显示数码管单纯的显示一个数码管如果仅仅是为了显示 那么动用单片机一个端口(如P0或P1/P2/P3)那没有什么,当然这里我说的数码管是8段的(如果利用BCD类型 16进制数码管那么只需四个即可)就拿51类型的单片机来说,总共32个I/O口,一般如果不是做太大的工程是完全够用的,但有些时候你会恨单片机怎么不多长几条“腿”,怎么省还是不够用。这个时候就需要
[单片机]
51单片机C语言学习 3
第三课 生成HEX文件和最小化系统 在开始C语言的主要内容时,我们先来看看如何用KEIL uVISION2来编译生成用于烧写芯片的HEX文件。HEX文件格式是Intel公司提出的按地址排列的数据信息,数据宽度为字节,所有数据使用16进制数字表示, 常用来保存单片机或其他处理器的目标程序代码。它保存物理程序存储区中的目标代码映象。一般的编程器都支持这种格式。我们先来打开第一课做的第一项目,打开它的所在目录,找到test.Uv2的文件就可以打开先前的项目了。然后右击图3-1中的1项目文件夹,弹出项目功能菜单,选Options for Target'Target1',弹出项目选项设置
[单片机]
51单片机控制sim900a,接收到短信点亮LED
已经经过测试,直接上程序,不懂@me #include reg52.h #include string.h #define uchar unsigned char #define uint unsigned int //以下是板子上LED的配置,把Px_x改成自己对应的脚。 #define LED1_ON P3_2 = 1 #define LED1_OFF P3_2 = 0 #define LED2_ON P3_3 = 1 #define LED2_OFF P3_3 = 0 #define LED3_ON P3_4 = 1 #define LED3_OFF P3_4 = 0 #define LED4_ON P3_5 = 1 #
[单片机]
51单片机学习笔记2 -- 单灯控制及流水灯
1.LED仿真电路绘制 LED就不展开介绍了,二极管单向导通电能转换光能,直接上原理图,可以看到LED灯D1连接在51单片机P1.0引脚 在Protues元器件查找输入关键词LED,在详细列表下拉找到几个颜色的LED,分别是蓝、绿、红、黄,随便找一个颜色的LED即可 单个LED的接线按照原理图如下进行仿真电路绘制,注意LED的朝向(LED阳极接限流电阻R2,阴极接芯片引脚P1.0) 2.Keil 51工程创建 打开Keil软件,先关掉当前打开的工程,菜单栏 Project - Close Project 新建一个文件夹以存放工程文件,Keil新建工程 选择新建的文件夹存放工程,并给工程命名 选择工程对应的处
[单片机]
如何正确的使用C51单片机中的位域
定义这样的结构: typedef struct { uchar DC0_ALA:1; //电源0告警 uchar DC1_ALA:1; //电源1告警 uchar AC_ALA:1; //停电告警 uchar UN_H_ALA:1; //同频信道机失锁告警 uchar UN_L_ALA:1; //异频信道机失锁告警 uchar FAR_ALA:1; //远端通讯故障告警 uchar OPEN_ALA:1; //门襟告警 uchar x:1; }ALARM;//系统告警结构定义 定义变量并初始化: idata ALARM old_alarm={0,0,0,0,0,0,0,0}; 在main()函数中这样应用位域: if(ol
[单片机]
MCS51单片机专用功能寄存器
MCS-51单片机内的锁存器、定时器、串行口数据缓冲器以及各种控制寄存器和状态寄存器都是以专用功能寄存器(或称特殊功能寄存器)的形式出现的,它们分散地分布在内部RAM地址空间范围(80H~FFH)内,表 2-5列出了这些专用功能寄存器(SFR)的助记标识符、名称及地址。
其中,凡字节地址可以被8整除的专用功能寄存器都可以位寻址。其位地址见表2-6。
大部分寄存器的应用将在后面有关章节中评述,这里仅作简单介绍。
·累加器ACC
累加器是一个最常用的专用寄存器。大部分单操作数指令的操作取自累加器。很多双操作数指令的一个操作数取自累加器。加、减、乘、除算术运算指令的运算结果都存放在累加器A或AB寄存器对中。指令系
[单片机]
51单片机汇编语言带进位加法指令
带进位加法 指令 (4条) 这4条指令除与 功能相同外,在进行加法运算时还需考虑进位问题。 ADDC A,data ;(A)+(data)+(C) (A) 累加器A中的内容与直接地址单元的内容连同进位位相加,结果存在A中 ADDC A,#data ;(A)+#data +(C) (A) 累加器A中的内容与立即数连同进位位相加,结果存在A中 ADDC A,Rn ;(A)+Rn+(C) (A) 累加器A中的内容与工作寄存器Rn中的内容、连同进位位相加,结果存在A中 ADDC A,@Ri ;(A)+((Ri))+(C) (A) 累加器A中的内容与工作寄存器Ri指向地址单元中的内容、连同进位位相加,结果存在A中用途:将A中的值和其后
[单片机]
AT89C51单片机应用于数控车床切削力测量
本文就介绍了应用AT89C51单片机测量数控车床切削力的新方法,重点阐述了单片机实现连续自动采样、A/D转换、标度变换及数据处理的方法。 1 问题的提出 在数控车床的加工中,切削力的测量甚为重要。通过对切削力的测量可以分析与研究数控车床各零部件、机构或结构的受力情况和工作状态,验证设计和计算结果的正确性,确定整机工作过程中的负载谱和某些物理现象的机理。因此,他对发展设计理论、保证数控机床安全可靠地运行以及实现数控机床自动加工、自动检测、自动控制和切削力过载报警等都具有十分重要的作用和适用价值。 2 系统硬件接口电路的设计 系统硬件原理框图如图1所示。系统以AT89C51单片机为控制核心,外围电路针对单片
[测试测量]