#include <stdlib.h>
#define uint unsigned int //宏定义,为了后面定义变量书写简便
#define uchar unsigned char
code unsigned char LED[] ={~0x3F,~0x06,~0x5B,~0x4F,~0x66,~0x6D,~0x7D,~0x07,~0x7F,~0x6F,~0x77,~0x7C,~0x39,~0x5E,~0x79,~0x71}
void main (void)
{
SCON= 0x50 // SCON: 模式1, 8-bit UART, 使能接收
TMOD|= 0x20
TH1=0xfd //波特率9600 初值
TL1=0xfd
TR1=1
EA=1//打开总中断
ES=1//打开串口中断
while(1) //主循环不做任何动作
{
}
}
/******************************************************************/
/* 串口中断程序*/
/******************************************************************/
void UART_SER () interrupt 4
{
ucharn //定义临时变量
if(RI) //判断是接收中断产生
{
RI=0 /袜锋/标志位清零
n=SBUF//读入缓冲区的值
switch(n)
{
case'0':P2=~LED[0]break
case'1':P2=~LED[1]break
case'2':P2=~LED[2]break
case'3':P2=~LED[3]break
case'4'盯好岩:P2=~LED[4]break
case'5':P2=~LED[5]break
case'6':P2=~LED[6]break
case'7':P2=~LED[7]break
case'8':P2=~LED[8]break
case'9':P2=~LED[9]break
case'A':P2=~LED[10]break
case'B'凯御:P2=~LED[11]break
case'C':P2=~LED[12]break
case'D':P2=~LED[13]break
case'E':P2=~LED[14]break
case'F':P2=~LED[15]break
default: P2=~LED[0]
}
TI=1
SBUF=n//把接收到的值再发回
}
if(TI) //如果是发送标志位,清零
TI=0
}
您好,这样:#include <iom16v.h>
#include <macros.h>
#define uchar unsigned char
#define uint unsigned int
//#define BIT(n) (1<<n)
#pragma interrupt_handler uart_recdata:12
#define mcuclk 8000000
uchar rdata
uchar flag=0
void delay(uint n)//10ms延时
{
uint i,j
for(i=0i<含肆ni++)
for(j=0j<1543j++)
}
void uart_init(uint baud)//串扒如口控制状态寄存器初始化,波特率设置
{
UCSRB=0x00
UCSRA=0x00 //控制寄存器清零
UCSRC=(1<<URSEL)|(0<<UPM0)|(3<<UCSZ0) //选择UCSRC,异步模式,禁止
// 校验,1位停止谈此轿位,8位数据位
baud=mcuclk/16/baud-1 //波特率
UBRRL=baud
UBRRH=baud>>8 //设置波特率
UCSRB=(1<<TXEN)|(1<<RXEN)|(1<<RXCIE) //接收、发送使能,接收中断使能
SREG=BIT(7) //全局中断开放
DDRD|=0x02//配置TX为输出(很重要)
}
void uart_senddata(uchar data)
{
while(!(UCSRA&(BIT(UDRE))))//第五位UDRE为高,数据寄存器空,发数据至UDR
UDR=data
while(!(UCSRA&(BIT(TXC)))) //第六位TXC高, 发送结束
UCSRA|=BIT(TXC) //置位TXC
}
void uart_recdata()
{
UCSRB&=~BIT(RXCIE)
rdata=UDR
flag=1
UCSRB|=BIT(RXCIE)
}
void main()
{
// uchar i='A'
// uchar j=4
uart_init(19200)
while(1)
{
if(flag)
{
uart_senddata(rdata)
flag=0
}
}
}
现如今,每个人的手机都配有蓝牙功能,我们可以用蓝牙传输数据,连接耳机以及控制一些自带蓝牙功能的电子设备。我们也可以使用蓝牙模块配上单片机就可以轻松实现手机控制LED灯,电机,智能皮姿小车,机器人等各种设备。让我们的创作实现无线控制。
下面我们就来介绍一种性价比极高的蓝牙模块:HC-06从机蓝牙模块。
BLE蓝牙的角色有以下几种:广播者(Advertise)、扫描者(Scanner)、从设备(Slave)、主设备(Master)、发起者(Initiator),其中主设备是由发起者、扫描者转化而来,从设备则是由广播者转化而来;蓝牙模块通信是指两个蓝牙模块或蓝牙设备之间进行通信,进行数据通信的双方一个是主机,一个是从机。
主模式与从模式的区别:主机是指能够搜索别人并主动建立连接的一方,从机则不能主动建立连接,只能等别人连接自己。
HC-05是主从一体化的蓝牙串口模块,主从可指令切换,指令丰富齐全。
HC-06是主从一体化的蓝牙串口模块,主从可指令切换,指令少于HC-05,使用简单。
这次使用的是蓝牙HC-06是从模块,也就是从机模块,我们的手机就是主模块。主机可以与从机配对,从机不能和从机配对。如果要两个单片机通信,那就至少一个是有主机功能的,要是两个都是从机是通信不了的。
引脚定义:
重要提示:
下面我们就用一台手机控制一个点阵屏的亮暗和不同图案显示。
硬件设备:
接线图:
将点阵模块的DIN、CS、CLK分别连到Arduino10/11/12数字引脚上,连接电源和接地线;蓝牙模块的TXD:连接ArduinoRXD接收端;RXD连接ArduinoTXD发送端,连接电源和接地线。
下面是实物图;图中Arduino模块增加了扩展板,方便接线。
程序:
手机蓝牙通讯app:
在进行控制之前,我们需要在手机端安装蓝牙调试工具。在手机应用商店里搜索“蓝牙调试器”。我选择的是这款工具,体积小, *** 作简单,功能强大。
效果展示:
安装APP后,蓝牙连接HC-06模块;
我们选择按钮控橡姿制模式;将其中四个按键名词改为:关闭,打开, ,笑脸;并将按下按键的发送代码分别改为:0,1,2,3。
现在大功告成,分别按下:关闭、打开、 、笑脸,点阵屏就会按照对应的方式显示:
只要我们在加上不同的执行器,就可燃如绝以用手机蓝牙控制步进电机,舵机,灯等等,实现各种功能了。一起来试试吧。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)