- #include "reg52.h"
- #include "seg.h"
- #include "iic.h"
- #include "onewire.h"
- #include "key.h"
- #include "led.h"
- #define uchar unsigned char
- #define uint unsigned int
-
- //led
- uchar led_buf[]={0,0,0,0,0,0,0,0};
- //°´¼ü
- uchar key_sld;
- //ÊýÂë¹Ü
- uint seg_sld;
- uchar seg_pos;
- uchar seg_buf[]={10,10,10,10,10,10,10,10};
- uchar seg_point[]={0,0,0,0,0,0,0,0};
- //½çÃæ
- uchar show_mo=0;
- bit mode=0;
- uint temp;
- uchar set_temp=25;
- uint out_v;
- //º¯Êý
- void smg_reset()
- {
- uchar i;
- for(i=0;i<8;i++)
- {
- seg_buf[i]=10;
- seg_point[i]=0;
- }
- }
- void init()
- {
- P0=0x00;
- P2=P2&0x1f|0xa0;
- P2&=0x1f;
-
- P0=0xff;
- P2=P2&0x1f|0x80;
- P2&=0x1f;
- }
- void key_proc()
- {
- static uchar key_val,key_old,key_down,key_up;
- if(key_sld)
- return;
- key_sld=1;
-
- key_val=readkey();
- key_down=key_val&(key_val^key_old);
- key_up=~key_val&(key_val^key_old);
- key_old=key_val;
-
- if(key_down==4)
- show_mo=(++show_mo)%3;
- else if(show_mo==1 && key_down==6)
- set_temp=(++set_temp>99)?99:set_temp;
- else if(show_mo==1 && key_down==7)
- set_temp=(--set_temp==0)?0:set_temp;
- else if(key_down==5)
- mode=~mode;
-
- }
- void seg_proc()
- {
- uint temp_temp;
- if(seg_sld)
- return;
- seg_sld=1;
- temp_temp=(uint)ds18b20_read();
- temp=temp_temp;
-
- switch(show_mo)
- {
- case 0:
- smg_reset();
- seg_buf[0]=11;//c
- seg_buf[4]=temp/1000;
- seg_buf[5]=temp/100%10;
- seg_buf[6]=temp/10%10;
- seg_buf[7]=temp%10;
- seg_point[5]=1;
- break;
-
- case 1:
- smg_reset();
- seg_buf[0]=12;//p
- seg_buf[6]=set_temp/10;
- seg_buf[7]=set_temp%10;
- break;
-
- case 2:
- smg_reset();
- seg_buf[0]=13;//a
- if(mode)
- {
- if(temp_temp>set_temp)
- out_v=500;
- else
- out_v=0;
- seg_buf[5]=out_v/100;
- seg_buf[6]=out_v/10%10;
- seg_buf[7]=out_v%10;
- seg_point[5]=1;
- da_write(out_v*16);
- }
- else
- {
- if(temp_temp<=20)
- out_v=1;
- else if(temp_temp>=40)
- out_v=4;
- else
- out_v=temp_temp*3/20;
- seg_buf[5]=out_v/100;
- seg_buf[6]=out_v/10%10;
- seg_buf[7]=out_v%10;
- seg_point[5]=1;
- da_write(out_v*16);
- }
- break;
- }
- }
- void led_proc()
- {
- led_buf[0]=(mode==0);
- led_buf[1]=(show_mo==0);
- led_buf[2]=(show_mo==1);
- led_buf[3]=(show_mo==2);
- }
- void Timer0Init(void) //1??@12.000MHz
- {
- TMOD &= 0xF0; //???????
- TL0 = 0x18; //??????
- TH0 = 0xFC; //??????
- TF0 = 0; //??TF0??
- TR0 = 1; //???0????
- ET0 = 1;
- EA =1;
- }
- void timer() interrupt 1
- {
- if(++key_sld==10)
- key_sld=0;
- if(++seg_sld==1000)
- seg_sld=0;
- if(++seg_pos==8)
- seg_pos=0;
-
- segdis(seg_buf[seg_pos],seg_pos,seg_point[seg_pos]);
- led_disp(seg_pos,led_buf[seg_pos]);
- }
- void main()
- {
- Timer0Init();
- init();
- while(1)
- {
- key_proc();
- seg_proc();
- led_proc();
- }
- }
复制代码 |