⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 function.c

📁 51单片机C语言常用模块与综合系统设计实例精讲
💻 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 + -