蓝牙2.0是接收的无线信号,直接就发送到了单片机的串口,蓝牙2.0是自带驱动的,不需要写程序,但需要检测,用串口助手
注意变量的替换,段码,位码,初始化缓存要用不同的英文来表示
有缺陷的代码
#include<STC15F2K60S2.H>
#include"intrins.h"
#define uint unsigned int
#define uchar unsigned char
#define led_output P0
#define led_duan_and_wei P2 //共阳极数码管
unsigned char add;
unsigned char uart_index;
uchar code tabe[ ]={
0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90, //显示段选0-9
0x88,0x83,0xc6,0xa1,0x86,0x8e, //显示段选A-F
};
uchar code tabe1[ ]={
0x80,0x40,0x20,0x10,0x08,0x04,0x02,0x01
}; // 显示位选第一位到第八位
uchar tabe2[ ]={
0xc0,0xc0,0xc0,0xc0,0xc0,0xa3,0xab,0xc0
}; //初始化显示缓冲区
void init_timer_T1_function(void)
{
SCON=0X50;
TMOD=0X20;
TH1=0xFD;//设置波特率9600
TL1=0xFD;
ES=1;
TR1=1;
}
void main( )
{
init_timer_T1_function();
EA=1;
while(1)
{
led_output=tabe1[add];//选位选的位
led_duan_and_wei = 0xdf;//打开位选控制Y6,送数据
led_duan_and_wei = 0x1f;//关闭U8锁存器,锁存数据
led_output=tabe2[add];//取余选择亮的段选数据
led_duan_and_wei = 0xff;//打开段选控制Y7信号
led_duan_and_wei = 0x1f; //清零,关闭U7锁存器
add++;
add&=0x07;
}
}
void interrupt_ES_function() interrupt 4
{
if(RI)
{
RI=0;
if(SBUF=='O')
{
uart_index=1;
}
else if(SBUF=='N'&&uart_index==1)
{
uart_index=2;
}
else if(uart_index==2)
{
uart_index=0;
switch(SBUF)
{
case '1': break;
case '2': break;
case '3': break;
case '4': break;
case '5': break;
case '6': break;
case '7': break;
case '8': break;
case '9': break;
case 'A': break;
case 'B': break;
case 'C': break;
case 'D': break;
case 'E': break;
default:SBUF='0'; break;
}
tabe2[0]=tabe[SBUF%10];
}
}
if(TI)
{
TI=0;
}
}
纠正的代码
#include<STC15F2K60S2.H>
#include"intrins.h"
#include"string.h"
#define uint unsigned int
#define uchar unsigned char //预处理
#define led_output P0
#define led_duan_and_wei P2 //共阳极数码管
unsigned int uart_data1;
unsigned char led_add;
unsigned char uart_index;
uchar code led_line[ ]={
0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90, //显示段选0-9
0x88,0x83,0xc6,0xa1,0x86,0x8e, //显示段选A-F
};
uchar code led_column[ ]={0x80,0x40,0x20,0x10,0x08,0x04,0x02,0x01}; // 显示位选第八位到第一位
uchar led_cache[ ]={0xc0,0xa3,0xab,0xc0,0xc0,0xc0,0xc0,0xc0}; //初始化显示缓冲区
void init_timer_T1_function(void)//初始化
{
EA=1; //开总中断
ES=1; //开串口中断
PCON=0x00;
SCON=0X50;//串口工作方式1,并且启动串行接收
TMOD=0X20;//定时器1工作在方式2
TH1=0xFD;//设置波特率9600
TL1=0xFD;
TR1=1; //定时器1工作
}
void main( )
{
init_timer_T1_function();
EA=1;
while(1)
{
led_output=0;//消影
led_duan_and_wei=0xff;//
led_duan_and_wei=0x1f;
led_output=led_column[led_add];//选位选的位
led_duan_and_wei=0xdf;//打开位选控制Y6,送数据
led_duan_and_wei=0x1f;//关闭U8锁存器,锁存数据
led_output=led_cache[led_add];//取余选择亮的段选数据
led_duan_and_wei=0xff;//打开段选控制Y7信号
led_duan_and_wei=0x1f; //清零,关闭U7锁存器
led_add++;
led_add&=0x07;
}
}
void interrupt_ES_function() interrupt 4 //中断4:串口收发数据
{
EA=0;
if(RI)
{
RI=0;
uart_data1=SBUF;
if(uart_data1=='O')
{
uart_index=1;
}
else if(uart_data1=='N'&&uart_index==1)
{
uart_index=2;
}
else if(uart_index==2)
{
uart_index=0;
switch(uart_data1)
{
case '1': break;
case '2': break;
case '3': break;
case '4': break;
case '5': break;
case '6': break;
case '7': break;
case '8': break;
case '9': break;
case 'A': break;
case 'B': break;
case 'C': break;
case 'D': break;
case 'E': break;
default:uart_data1='F'; break;
}
if(uart_data1>='A')//ASCII转为十进制
{
uart_data1=uart_data1-55;
}
else if(uart_data1>='0')
{
uart_data1=uart_data1-48;//0
}
led_cache[0]=led_line[uart_data1%16];//16进制
}
}
if(TI)
{
TI=0;
}
EA=1;
}