51单片机通过P3.0从蓝牙模块接受数据的C语言程序

51单片机通过P3.0从蓝牙模块接受数据的C语言程序,第1张

#include<reg52.h> //串口通信打印与数码管

#define uint unsigned int

#define uchar unsigned char

sbit dula=P2^6 //申明锁存器1

sbit wela=P2^7 //申明锁存器

uchar code table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71} //定义数码管段选

uchar flag //标志位

uchar a,b,e,f,g,h

void delay(uint x) //毫秒级延时

{

uint i,j

for(i=xi>0i--)

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

}

void display(uchar e,uchar f) //数码管显示函数

{

wela=1 //位选

P0=0xfe

wela=0

P0=0xff //消影

dula=1 //段选

P0=table[e]

dula=0

delay(1)

wela=1 //族禅位选

P0=0xfd

wela=0

P0=0xff //消影

dula=1 //段选

P0=table[f]

dula=0

delay(1)

}

void init()

{

TMOD=0X21 //T1定时器工作方式2 T0定时器工作方式1

TH0=(65536-50000)/256

TL0=(65536-50000)%256 //装初值

TH1=0XFD

TL1=0XFD //定波特率为9600

SCON=0X50

PCON=0X00

ET0=1

TR1=1

EA=1

ES=1

}

void main()

{

init()

while(1)

{

display(e,f)

if(flag==1)

{

ES=0 //关中断

SBUF=a

while(!TI)

TI=0

if(a==1)

{

TR0=1 //开中断旦数

}

if(a==2)

{

TR0=0

}

ES=1

flag=0

}

}

}

void T() interrupt 1

{

TH0=(65536-50000)/256 //兆迟尘重装初值

TL0=(65536-50000)%256

g++

if(g==20)

{

h++

b=h

SBUF=b

while(!TI)

TI=0

g=0

f=h%10

e=h/10

}

if(h==99)

h=0

}

void Th() interrupt 4

{

RI=0

a=SBUF

flag=1

}

计算机端配侍纳禅蓝牙适配器 十几块民币吧

单片机端配蓝牙串口模块 二十几块 淘宝找找

于计茄虚算机单片机都串口通信接口完全需其程序

(唯要注意市老尘面蓝牙模块基本都支持模式蓝牙模块没9位数据模式)

所^_^

您好,这样:

#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

}

}

}


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

原文地址: http://outofmemory.cn/yw/12497681.html

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

发表评论

登录后才能评论

评论列表(0条)

保存