📄 function.c
字号:
#include <stdio.h>
#include <absacc.h>
#include <stdarg.h>
#include <./Atmel/at89x52.h>
#include "source.h"
/*设置串口的波特率为19.2k*/
void init_serial(void)
{
unsigned char ch;
SCON = 0x50;
ch=TMOD;
ch=ch&0x0f;
TMOD=ch|0x20;
PCON=0XF0; // DIV 16
TH1=251;
TH0=TH1; /**波特率为19.2k***/
TR1=1; // 使定时器1运行
ES=1;//使能串口中断
}
/*系统初始化*/
void init_system(void){
test_timer_len=TEST_TIME_LENGTH;
}
/*把字节变为BCD码*/
unsigned char chtobcd(unsigned char ch){
unsigned char tmp=0;
tmp=ch/10;
tmp <<=4;
tmp +=ch%10;
return tmp;
}
/*在固定位置(POS_TIMEX,POS_TIMEY)显示时间*/
void show_time(void){
if(updtime&UPD_YEAR){
draw_wordw16(POS_TIMEX+2,POS_TIMEY,33,number16x33[2]);//draw 200x year
draw_wordw16(POS_TIMEX+4,POS_TIMEY,33,number16x33[0]);
draw_wordw16(POS_TIMEX+6,POS_TIMEY,33,number16x33[rtc.hnumy]);
draw_wordw16(POS_TIMEX+8,POS_TIMEY,33,number16x33[rtc.lnumy]);
draw_wordw32(POS_TIMEX+10,POS_TIMEY,33,nian);
updtime &=~UPD_YEAR;
}
if(updtime&UPD_MONTH){
draw_wordw16(POS_TIMEX+0,POS_TIMEY+33,33,number16x33[rtc.hnummon]);
draw_wordw16(POS_TIMEX+2,POS_TIMEY+33,33,number16x33[rtc.lnummon]);
draw_wordw32(POS_TIMEX+4,POS_TIMEY+33,33,yue);
updtime &=~UPD_MONTH;
}
if(updtime&UPD_DAYOM){
draw_wordw16(POS_TIMEX+8,POS_TIMEY+33,33,number16x33[rtc.hnumdom]);
draw_wordw16(POS_TIMEX+10,POS_TIMEY+33,33,number16x33[rtc.lnumdom]);
draw_wordw32(POS_TIMEX+12,POS_TIMEY+33,33,ri);
updtime &=~UPD_DAYOM;
}
if(updtime&UPD_DAYOW){
updtime &=~UPD_DAYOW;
}
if(updtime&UPD_HOUR){
draw_wordw16(POS_TIMEX+0,POS_TIMEY+66,33,number16x33[rtc.hnumh]);
draw_wordw16(POS_TIMEX+2,POS_TIMEY+66,33,number16x33[rtc.lnumh]);
draw_wordw8(POS_TIMEX+4,POS_TIMEY+66,33,timeseperate);
updtime &=~UPD_HOUR;
}
if(updtime&UPD_MINUTE){
draw_wordw16(POS_TIMEX+5,POS_TIMEY+66,33,number16x33[rtc.hnummin]);
draw_wordw16(POS_TIMEX+7,POS_TIMEY+66,33,number16x33[rtc.lnummin]);
draw_wordw8(POS_TIMEX+9,POS_TIMEY+66,33,timeseperate);
updtime &=~UPD_MINUTE;
}
if(updtime&UPD_SECOND){
draw_wordw16(POS_TIMEX+10,POS_TIMEY+66,33,number16x33[rtc.hnums]);
draw_wordw16(POS_TIMEX+12,POS_TIMEY+66,33,number16x33[rtc.lnums]);
updtime &=~UPD_SECOND;
}
}
/*在固定位置(POS_SHOW_WDX,POS_SHOW_WDY)显示温度*/
void show_wd(unsigned char tempe){
unsigned char tmp;
tmp=tempe;
if(tmp&0x80){//如温度小于0,则显示0度
tmp=0;
}
if(tmp>=10){
draw_wordw24(POS_SHOW_WDX ,POS_SHOW_WDY,48,number24x48[tmp/10]);//centigrade
draw_wordw24(POS_SHOW_WDX+3 ,POS_SHOW_WDY,48,number24x48[tmp%10]);
draw_wordw32(POS_SHOW_WDX+6 ,POS_SHOW_WDY,48,centigrade32x48);
}
else{
clr_wordw24(POS_SHOW_WDX ,POS_SHOW_WDY,48);
clr_wordw24(POS_SHOW_WDX+3 ,POS_SHOW_WDY,48);
clr_wordw32(POS_SHOW_WDX+6 ,POS_SHOW_WDY,48);
draw_wordw24(POS_SHOW_WDX+0 ,POS_SHOW_WDY,48,number24x48[tmp%10]);
draw_wordw32(POS_SHOW_WDX+3 ,POS_SHOW_WDY,48,centigrade32x48);
}
}
/*把RTC的时间读到结构rtc中*/
void rtc_update(void){
SD2000_read_time(&rtc);
if(rtc.second!=rtc.presecond){
updtime |=UPD_SECOND;
rtc.presecond=rtc.second;
rtc.hnums=(rtc.second>>4)&0xf;
rtc.hnums %=10;
rtc.lnums=rtc.second&0xf;
rtc.lnums %=10;
}
if(rtc.minute!=rtc.preminute){
send_hbs_msg(MSG_HBS_UPD_TIME);
updtime |=UPD_MINUTE;
rtc.preminute=rtc.minute;
rtc.hnummin=(rtc.minute>>4)&0xf;
rtc.hnummin %=10;
rtc.lnummin=rtc.minute&0xf;
rtc.lnummin %=10;
}
if(rtc.hour!=rtc.prehour){
updtime |=UPD_HOUR;
rtc.prehour=rtc.hour;
rtc.hnumh=(rtc.hour>>4)&0xf;
rtc.hnumh %=10;
rtc.lnumh=rtc.hour&0xf;
rtc.lnumh %=10;
}
if(rtc.dayom!=rtc.predayom){
updtime |=UPD_DAYOM;
rtc.predayom=rtc.dayom;
rtc.hnumdom=(rtc.dayom>>4)&0xf;
rtc.hnumdom %=10;
rtc.lnumdom=rtc.dayom&0xf;
rtc.lnumdom %=10;
}
if(rtc.month!=rtc.premonth){
updtime |=UPD_MONTH;
rtc.premonth=rtc.month;
rtc.hnummon=(rtc.month>>4)&0xf;
rtc.hnummon %=10;
rtc.lnummon=rtc.month&0xf;
rtc.lnummon %=10;
}
if(rtc.year!=rtc.preyear){
updtime |=UPD_YEAR;
rtc.preyear=rtc.year;
rtc.hnumy=(rtc.year>>4)&0xf;
rtc.hnumy%=10;
rtc.lnumy=rtc.year&0xf;
rtc.lnumy%=10;
}
}
/*更新大的数字,为2位数字,如果高位为0则只显示个位数据*/
bit num_update(void){
if((scentry.storey[1]!=scentry.prestry[1])||(scentry.storey[0]!=scentry.prestry[0])){//ten digital of storey.
if(scentry.storey[1]!=0){
draw_storey(POS_STOREY_ORGX,POS_STOREY_ORGY,scentry.storey[1]);
draw_storey(POS_STOREY_ORGX+STOREY_WIDTH,POS_STOREY_ORGY,scentry.storey[0]);
}
else{//把数字显示在中间的位置.
draw_storey(POS_STOREY_ORGX+STOREY_WIDTH/2,POS_STOREY_ORGY,scentry.storey[0]);
}
scentry.prestry[1]=scentry.storey[1];
scentry.prestry[0]=scentry.storey[0];
return 1;
}
else{
return 0;
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -