*** 课题:NTC测温 *** *** 创建时间:2011年6月11日 *** ******************************************
/******************************************************************** 主函数部分
********************************************************************/ void main() {
uchar b=0,c,d; float e;
init(); //液晶初始化 xianshi(7,mima1,0x80); //显示密码字样 do{
du_key1(); //扫描键盘 du_key2(); if(adjust1==4&adjust4==3) { b=1; adjust1=0; adjust4=0; } }
while(b==0); Timer_start();
xianshi(16,deng1,0x80); //显示“please wait„„”字样 while(remember<=50); init();
xianshi(6,wendu1,0x80); while(1) {
du_key1(); du_key2(); chunshu(); lvbo(); if(adjust1==1) { flag=flag+1; if(flag==1) { init(); xianshi(8,look_shi,0x80); } write_command(0x80+9);
write_date(shu[adjust2]); } else if(adjust1==2) { flag=flag+1; if(flag==1) { init(); xianshi(7,look_ge,0x80); } c=adjust3/10; d=adjust3%10; write_command(0x80+8); write_date(shu[c]); write_command(0x80+9); write_date(shu[d]); } else if(adjust1==3) { flag=flag+1; if(flag==1) { init(); xianshi(9,look,0xc0); } Look_for(); deep_chuli(wendu); write_command(0xc0+10); write_date(AD_buffer[0]); write_command(0xc0+11); write_date(AD_buffer[1]); write_command(0xc0+12); write_date('.') ; write_command(0xc0+13); write_date(AD_buffer[2]); } else if(adjust1==4) { flag=flag+1; if(flag==1) { init();
xianshi(9,day_aver,0xc0); }
day_average(); deep_chuli(wendu); write_command(0xc0+10); write_date(AD_buffer[0]); write_command(0xc0+11); write_date(AD_buffer[1]); write_command(0xc0+12); write_date('.') ; write_command(0xc0+13); write_date(AD_buffer[2]); } else if(adjust1==5) { flag=flag+1; if(flag==1) { init(); xianshi(5,pwm_1,0xc0); } write_command(0xc0+5); write_date(shu[tiao/10]); write_command(0xc0+6); write_date(shu[tiao%10]); }
else if(adjust1==6) { flag=flag+1; if(flag==1) { init(); xianshi(5,pwm_2,0xc0); } write_command(0xc0+5); write_date(shu[tiao/10]); write_command(0xc0+6); write_date(shu[tiao%10]); } else if(adjust1==7) { flag=flag+1; if(flag==1) {
init(); xianshi(7,cha,0xc0); } e=max-min2; deep_chuli(e); write_command(0xc0+8); write_date(AD_buffer[0]); write_command(0xc0+9); write_date(AD_buffer[1]); write_command(0xc0+10); write_date('.') ; write_command(0xc0+11); write_date(AD_buffer[2]); } else { flag=flag+1; if(flag==1) { xianshi(6,wendu1,0x80); xianshi(4,max1,0xc0); xianshi(4,min1,0xc0+8); } line_processer(15,average); if(flag1==1) { min2=wendu; max=wendu; flag1=0; } if(wendu>max) { max=wendu; } else if(wenduwrite_date(AD_buffer[1]); write_command(0x80+8); write_date('.') ; write_command(0x80+9); write_date(AD_buffer[2]); deep_chuli(max); write_command(0xc0+4); write_date(AD_buffer[0]); write_command(0xc0+5); write_date(AD_buffer[1]); write_command(0xc0+6); write_date('.') ; write_command(0xc0+7); write_date(AD_buffer[2]); deep_chuli(min2); write_command(0xc0+12); write_date(AD_buffer[0]); write_command(0xc0+13); write_date(AD_buffer[1]); write_command(0xc0+14); write_date('.') ; write_command(0xc0+15); write_date(AD_buffer[2]); } } }/******************************************************************* 子程序部分
********************************************************************/
/******************************* AD采集
*******************************/ void AD_caiji(uchar x) {
csad=0;
WR1=0; //启动ad _nop_(); WR1=1; delay1();
AD_data=0xff; RD1=0;
AD_buffer[x]=AD_data; RD1=1;
WR1=0; }
void chunshu() //数据存储 {
uchar i;
for(i=0;i<16;i++) {
AD_caiji(i); } }
/******************************************** 滤波模块
数据滤波去掉最大,最小值后求均值
**********************************************/ void lvbo() { uchar x,y; uint buff;
for(x=15;x>0;x--) {
for(y=x;y>0;y--) { if(AD_buffer[y]>AD_buffer[y-1]) //大小排序(从大到小) { buff=AD_buffer[y-1]; AD_buffer[y-1]=AD_buffer[y]; AD_buffer[y]=buff; } } buff=AD_buffer[0]; AD_buffer[0]=AD_buffer[x]; AD_buffer[x]=buff; } buff=0; for(x=14;x>0;x--) { buff=buff+AD_buffer[x]; } average=buff/14; }
/************************************** 键盘查询
*************************************/ void delay1() { uchar g,h;
for(g=100;g>0;g--) for(h=100;h>0;h--); }
void du_key1() {
key1=1; if(key1==0) {
delay1(); if(key1==0) { flag=0; adjust1=adjust1+1; if(adjust1==8) { adjust1=0; } } while(key1==0); } }
void du_key2() {
key2=1; if(key2==0) {
delay1(); if(key2==0) { if(adjust1==1) { adjust2=adjust2+1; if(adjust2==5) // { adjust2=0; } } else if(adjust1==2) { adjust3=adjust3+1; 十位 // 个位
if(adjust3==10) {
adjust3=0; } }
else if(adjust1==4) {
adjust4=adjust4+1; }
else if(adjust1==5)
// 密码
{ // 调节pwm的占空比 增加 tiao=tiao+1; if(tiao==101) tiao=0; } else if(adjust1==6) // 调节pwm的占空比 减少 { tiao=tiao-1; if(tiao==0) { tiao=100; } } } while(key2==0); } }
/***************************************** 温度线性处理模块
***************************************/ void line_processer(uchar x,uchar f) {
uchar y,z=0; for(y=0;yif(f>=Fen_duan[y][0]&&fvoid deep_chuli(float y) {int x; x=y*10;
AD_buffer[0]=shu[x/100];
AD_buffer[1]=shu[(x-(x/100)*100)/10]; AD_buffer[2]=shu[x%10]; }
/*************************************** 一天的平均温度
***************************************/ void day_average() {
uchar x; float y=0;
for(x=0;x<48;x++) { average=Tem_buffer[x]; line_processer(15,average); y=y+wendu; }
wendu=y/48; }
/************************************* 报警模块
**************************************/ void baojin() {
if(wendu>=35||wendu<=10) {
beep=0; }
else if(wendu<=34||wendu>=11) { beep=1; } } 1.