标题: ATmega16单片机蓝牙串口控制程序 [打印本页]

作者: HI-XM    时间: 2019-1-30 11:27
标题: ATmega16单片机蓝牙串口控制程序
/*
          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;
                }
        }
}



作者: huangcanjie    时间: 2020-3-6 17:18
可以给原图吗




欢迎光临 (http://www.51hei.com/bbs/) Powered by Discuz! X3.1