单片机论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 655|回复: 0
收起左侧

ATmega16单片机蓝牙串口控制程序

[复制链接]
HI-XM 发表于 2019-1-30 11:27 | 显示全部楼层 |阅读模式
/*
          HC-06蓝牙模块      ATmega16单片机
        
        VCC----------------VCC
        GND----------------GND
        TXD----------------RXD(PD0端口,设置输入)
        RXD----------------TXD(PD1端口,设置输出)
        
*/

/*ICCAVR7.2编程软件*/
/*使用内部8M晶振*/
/*手机搜索下载<蓝牙串口SPP>*/

/*头文件*/
#include <iom16v.h>
#include <macros.h>
/*宏定义*/
#define uchar unsigned char
#define uint unsigned int
/*全局变量*/
uchar rdata;
uchar flag=0;
/*端口初始化*/
void IO_init(void)
{         
         DDRA = 0XFF;
         DDRB = 0XF0;
         DDRC = 0XFF;
         //DDRD = 0XFF;
        PORTA = 0X00;
        PORTB = 0X00;
        PORTC = 0XFF;
        //PORTD = 0XFF;
}
/*延时函数*/
void delayms(uint i)
{
    while(i--)
    {                          
            uint j;               
        for(j=1;j<=1332;j++);      
    }
}
/*串口初始化,波特率设置*/
void uart_init()
{
         /*控制寄存器清零*/
        UCSRB=0x00;
        UCSRA=0x00;
        /*异步模式,禁止奇偶校验,停止位为1位,数据位为8位*/
        UCSRC=(1<<URSEL)|(0<<UPM0)|(3<<UCSZ0);
        /*9600bps @8.0000MHZ 不倍数*/
        UBRRH=(unsigned char)(0x33>>8);
        UBRRL=(unsigned char)0x33;
        /*接收、发送使能,接收中断使能*/
        UCSRB=(1<<TXEN)|(1<<RXEN)|(1<<RXCIE);
        /*开全局中断*/
        SREG=BIT(7);
        /*配置TX为输出*/
        DDRD|=0x02;
}
/*数据发送*/
void uart_senddata(uchar data)
{
         /*第五位UDRE为高,数据寄存器空*/
        while(!(UCSRA&(BIT(UDRE))));
        /*发数据至UDR*/
        UDR=data;
        /*第六位TXC高, 发送结束*/
        while(!(UCSRA&(BIT(TXC))));
        /*置位TXC*/
        UCSRA|=BIT(TXC);
}
/*数据接收中断服务*/
#pragma interrupt_handler uart_recdata:12
void uart_recdata(void)
{
         UCSRB&=~BIT(RXCIE);
        rdata=UDR;
        flag=1;
        UCSRB|=BIT(RXCIE);
}
/*主函数*/
void main(void)
{
        /*端口初始化*/
        IO_init();
        /*串口初始化*/
        uart_init();
        /*大循环*/
        while(1)
        {
                /*接收到蓝牙数据后发送*/
                if(flag)
                {
                         uart_senddata(rdata);
                        flag=0;
                }
                /*LED灯控制*/
                switch(rdata)
                {
                          case 0xFF:
                                            PORTC=0xFE;
                                           delayms(2000);
                                           PORTC=0XFF;
                                           break;
                        case 0xFE:
                                            PORTC=0xFD;
                                           delayms(2000);
                                           PORTC=0XFF;
                                           break;
                        case 0xFD:
                                            PORTC=0Xfb;
                                           delayms(2000);
                                           PORTC=0XFF;
                                           break;
                        case 0xFB:
                                            PORTC=0xF7;
                                           delayms(2000);
                                           PORTC=0XFF;
                                           break;
                }
        }
}


回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|手机版|小黑屋|单片机论坛 |51黑电子论坛单片机 联系QQ:125739409;技术交流QQ群582644647

Powered by 单片机教程网

快速回复 返回顶部 返回列表