标题: 通过蓝牙模块将温度数据传递给数码管显示程序咋写 [打印本页]

作者: zjt666    时间: 2023-4-9 09:16
标题: 通过蓝牙模块将温度数据传递给数码管显示程序咋写
求大佬

1681002946516..jpg (1.3 MB, 下载次数: 42)

1681002946516..jpg

作者: xmcolong    时间: 2023-4-15 03:19
#include "HT66F0185.h"
#include "LCD.h"
#include "ntc.h"

#define CLED _pa3
#define BEEP  _t1on

#define u8 unsigned char
#define u16 unsigned int

#define bps9600   12  //sys=8m
//#define bps9600   19  //sys=12m

volatile u8 recdata=0;
volatile u8 beeptime=0;

void delay_ms(u16 ms)
{
        while(ms--)
        {
                GCC_DELAY(2000);//编译器自带延时指定个周期,在主频8Mhz下,一个指令周期为0.5us       
                GCC_CLRWDT();
        }
}

void UART_SendChar(u8 data)
{
        if(_txif)                                                //判断发送数据寄存器为空
        {
                _txr_rxr=data;                                //写入TXR--------清标志位TXIF,TXIF=1标志TXR写入TSR,0标志禁止写入TXR中已有数据
                while(!_txif);                                //等待数据写入TSR
                while(!_tidle);                                //等待数据传输结束
        }
}

void pwminit()
{
        _pac7=0;
        _pa7=0;
        _t1cp=1;//设置端口为定时器端口       
        _tm1c0=0x20;//clk=sys/16
        _tm1c1=0xa8;//pwm模式 高电平有效  比较器P匹配清0
        _tm1rpl=125;//f=sys/16/125=4k
        _tm1rph=0;       
        _tm1al=62;//duty=62/125=49.6%
        _tm1ah=0;       
}

void main()
{
        u8 temp;
       
        u16 delaytime=0;
        _wdtc=0xa8;//关闭看门狗
        _csel=0;//
        _cos=1;//
        _acerl=0;//
        //uart init
        _pdc2=0;
        _pd2=1;
        _pdc1=1;
        _pdpu1=1;
        _ucr1=0x80;
        _ucr2=0xc4;
        _brg=bps9600;       
        _ure=1;                        //串口中断使能
        _emi=1;       
        ntcinit();
        lcdinit();
        pwminit();       
        _tbc=0xc4;//时基信号  tbc=fsys/4  溢出周期:t=2^12/tbc=2.048ms
        _tb0e=1;//允许时基中断
        _emi=1;//打开总中断       
        dispnum(0000);       
        while(1)
        {
                if(++delaytime>1000)
                {
                        delaytime=0;
                        temp=GetTemp();
                        dispnum(temp);//显示温度
                        UART_SendChar(temp/10%10+'0');
                        UART_SendChar(temp%10+'0');
                        UART_SendChar(0X0D);
                        UART_SendChar(0X0A);
                }
                if(beeptime>0)
                {
                        beeptime--;
                        BEEP=1;
                }
                else
                {
                        BEEP=0;       
                }               
                delay_ms(1);
        }
}

//时基中断  2.048ms
DEFINE_ISR(tb0,0x1c)
{
        LcdScan();
}

//中断标志位自动清除
DEFINE_ISR(UART_Int,0x2c)
{
        if(_rxif)//RXR寄存器中有数据                                       
        {
                recdata=_txr_rxr;
                if(recdata=='B')
                {
                        beeptime=100;       
                }
        }
}




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