#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;
}
}
} |