#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) //判斷發(fā)送數(shù)據(jù)寄存器為空
{
_txr_rxr=data; //寫入TXR--------清標志位TXIF,TXIF=1標志TXR寫入TSR,0標志禁止寫入TXR中已有數(shù)據(jù)
while(!_txif); //等待數(shù)據(jù)寫入TSR
while(!_tidle); //等待數(shù)據(jù)傳輸結束
}
}
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寄存器中有數(shù)據(jù)
{
recdata=_txr_rxr;
if(recdata=='B')
{
beeptime=100;
}
}
} |