资源描述
#include<p18f452.h>
#include <delays.h>
#define RSPIN PORTBbits.RB5 //Data or Instrument Select
#define RWPIN PORTBbits.RB4 //Write or Read
#define EPIN PORTBbits.RB3 //6800 mode Enable single
#define INPUT PORTBbits.RB2
#define cold PORTBbits.RB6
#define warm PORTBbits.RB7
#define STS PORTAbits.RA0
#define CS PORTAbits.RA1
#define A0 PORTAbits.RA2
#define CE PORTAbits.RA3
#define RC PORTAbits.RA4
void InterruptHandlerHigh (void);
#define uchar unsigned char//宏定义
#define uint unsigned int
#define K_UP 0X20//定义键值
#define K_DOWN 0X21
#define K_CLEAR 0X24
#define K_OK 0X25
#define K_ONE 0X30
#define K_FOUR 0X31
#define K_SEVEN 0X32
#define K_POINT 0X33
#define K_TWO 0X34
#define K_FIVE 0X43
#define K_EIGHT 0X36
#define K_ZERO 0X37
#define K_THREE 0X38
#define K_SIX 0X40
#define K_NINE 0X41
#define K_SET 0X42
#include"key.h"
////////////////////全局变量/////////////////////////////
unsigned int Timeout;
float TEMP_NOW=0.0;
float TEMP_SET=21.0;
uint T_Count=0;
uint S_Count=0;
uint P_Count=0;
uint N_Count=0;
uint M_Count=1;
uchar Current_Temp_Display_Buffer[]={" NOW:-23.5 "};
uchar set_Temp_Display_Buffer[]= {" SET: 21.0 "};
int sel=0;
void Comparison();
//////////////////////定时///////////////////////////////
void timer0_init(void)
{
Timeout = 0;
INTCON = 0x20; //disable global and enable TMR0 interrupt
INTCON2 = 0x84; //TMR0 high priority
RCONbits.IPEN = 1; //enable priority levels
TMR0H = 0; //clear timer
TMR0L = 0; //clear timer
T0CON = 0x82; //set up timer0 - prescaler 1:8
INTCONbits.GIEH = 1; //enable interrupts
TRISD = 0; /* configure PORTD for output */
PORTD=0X00;
if (Timeout == 1)
{ //timeout?
Timeout = 0; //clear timeout indicor
Read_Temperature();
Display_Temperature() ;
N_Count=1;
}
}
// High priority interrupt vector
//PIC 中断标准服务程序
#pragma code InterruptVectorHigh = 0x08 //中断向量
void
InterruptVectorHigh (void)
{
_asm
goto InterruptHandlerHigh //jump to interrupt routine
_endasm
}
//----------------------------------------------------------------------------
// High priority interrupt routine
//中断服务程序
#pragma code
#pragma interrupt InterruptHandlerHigh
void
InterruptHandlerHigh ()
{
if (INTCONbits.TMR0IF)
{ //check for TMR0 overflow
INTCONbits.TMR0IF = 0; //clear interrupt flag
Timeout = 1; //indicate timeout
}
}
void Comparison()
{
if(N_Count&&M_Count)
{
if(TEMP_NOW<TEMP_SET)
{
warm=1;
cold=0;
}
if(TEMP_NOW>TEMP_SET)
{
cold=1;
warm=0;
}
if(TEMP_NOW==TEMP_SET)
{
cold=0;
warm=0;
}
}
}
uchar int_LM20();
void Read_Temperature();
void Display_Temperature();
void ad_convertor()
{
float temp;
OpenADC( ADC_FOSC_32 &
ADC_RIGHT_JUST &
ADC_8ANA_0REF,
ADC_RA0 &
ADC_INT_OFF );
// A/D 时钟源,晶振32分频率
// A/D 转换结果右对齐
// A/D 参考电压源,电源工作电压
// 通道选择
// 中断关闭,查询模式
Delay10TCYx( 5 ); // Delay for 50TCY
ConvertADC(); // Start conversion
while( BusyADC() ); // Wait for completion
temp = ReadADC(); // Read result
CloseADC(); // Disable A/D converter
Nop();
Temp_Value[0]=temp/256;
Temp_Value[1]=temp%256;
}
void Display_Temperature()
{
uchar t = 150, ng = 0;
if((Temp_Value[1]&0xf8)==0xf8)
{
Temp_Value[1] = ~Temp_Value[1];
Temp_Value[0] = ~Temp_Value[0]+1;
if(Temp_Value[0]==0x00)
Temp_Value[1]++;
ng = 1;
}
Display_Digit[0] = df_Table[Temp_Value[0]&0x0f];
CurrentT = ((Temp_Value[0]&0xf0)>>4) | ((Temp_Value[1]&0x07)<<4);
Display_Digit[3] = CurrentT/100;
Display_Digit[2] = CurrentT%100/10;
Display_Digit[1] = CurrentT%10;
Current_Temp_Display_Buffer[11] = Display_Digit[0] + '0';
Current_Temp_Display_Buffer[10] = '.';
Current_Temp_Display_Buffer[9] = Display_Digit[1] + '0';
Current_Temp_Display_Buffer[8] = Display_Digit[2] + '0';
Current_Temp_Display_Buffer[7] = Display_Digit[3] + '0';
TEMP_NOW=Display_Digit[2]*10+Display_Digit[1]+Display_Digit[0]*0.1 ;
if(Display_Digit[3] == 0)
Current_Temp_Display_Buffer[7] = ' ';
if(Display_Digit[2] == 0&&Display_Digit[3]==0)
Current_Temp_Display_Buffer[8] = ' ';
if(ng)
{
TEMP_NOW=-(Display_Digit[2]*10+Display_Digit[1]+Display_Digit[0]*0.1);
if(Current_Temp_Display_Buffer[8] == ' ')
Current_Temp_Display_Buffer[8] = '-';
else if(Current_Temp_Display_Buffer[7] == ' ')
Current_Temp_Display_Buffer[7] = '-';
else
Current_Temp_Display_Buffer[6] = '-';
}
}
unsigned char Keys_Scan();
void set_num();
void set();
void Delay_key();
uchar Keys_Scan();
uchar code KeyCodeTable[]=
{
0xEE,0xED,0xEB,0xE7,0xDE,0xDD,0xDB,0xD7,0xBE,0xBD,0xBB,0xB7,0x7E,0x7D,0x7B,0x77
};
void Delay_key()
{
uchar i;
for(i=0;i<200;i++);
}
uchar Keys_Scan()
{
uchar k,kCode;
TRISD=0B11110000;
PORTD=11111110;
kCode=PORTD;
if(kCode == KeyCodeTable[0]) return K_ONE;
else if(kCode == KeyCodeTable[1]) return K_TWO;
else if(kCode == KeyCodeTable[2]) return K_THREE;
else if(kCode == KeyCodeTable[3]) return K_FOUR;
else if(kCode == KeyCodeTable[4]) return K_FIVE;
else if(kCode == KeyCodeTable[5]) return K_SIX;
else if(kCode == KeyCodeTable[6]) return K_SEVEN;
else if(kCode == KeyCodeTable[7]) return K_EIGHT;
else if(kCode == KeyCodeTable[8]) return K_NINE;
else if(kCode == KeyCodeTable[9]) return K_UP;
else if(kCode == KeyCodeTable[10]) return K_DOWN;
else if(kCode == KeyCodeTable[11]) return K_CLEAR;
else if(kCode == KeyCodeTable[12]) return K_OK;
else if(kCode == KeyCodeTable[13]) return K_ZERO;
else if(kCode == KeyCodeTable[14]) return K_POINT;
else if(kCode == KeyCodeTable[15]) return K_SET;
PORTD=11111101;
kCode=PORTD;
if(kCode == KeyCodeTable[0]) return K_ONE;
else if(kCode == KeyCodeTable[1]) return K_TWO;
else if(kCode == KeyCodeTable[2]) return K_THREE;
else if(kCode == KeyCodeTable[3]) return K_FOUR;
else if(kCode == KeyCodeTable[4]) return K_FIVE;
else if(kCode == KeyCodeTable[5]) return K_SIX;
else if(kCode == KeyCodeTable[6]) return K_SEVEN;
else if(kCode == KeyCodeTable[7]) return K_EIGHT;
else if(kCode == KeyCodeTable[8]) return K_NINE;
else if(kCode == KeyCodeTable[9]) return K_UP;
else if(kCode == KeyCodeTable[10]) return K_DOWN;
else if(kCode == KeyCodeTable[11]) return K_CLEAR;
else if(kCode == KeyCodeTable[12]) return K_OK;
else if(kCode == KeyCodeTable[13]) return K_ZERO;
else if(kCode == KeyCodeTable[14]) return K_POINT;
else if(kCode == KeyCodeTable[15]) return K_SET;
PORTD=11111011;
kCode=PORTD;
if(kCode == KeyCodeTable[0]) return K_ONE;
else if(kCode == KeyCodeTable[1]) return K_TWO;
else if(kCode == KeyCodeTable[2]) return K_THREE;
else if(kCode == KeyCodeTable[3]) return K_FOUR;
else if(kCode == KeyCodeTable[4]) return K_FIVE;
else if(kCode == KeyCodeTable[5]) return K_SIX;
else if(kCode == KeyCodeTable[6]) return K_SEVEN;
else if(kCode == KeyCodeTable[7]) return K_EIGHT;
else if(kCode == KeyCodeTable[8]) return K_NINE;
else if(kCode == KeyCodeTable[9]) return K_UP;
else if(kCode == KeyCodeTable[10]) return K_DOWN;
else if(kCode == KeyCodeTable[11]) return K_CLEAR;
else if(kCode == KeyCodeTable[12]) return K_OK;
else if(kCode == KeyCodeTable[13]) return K_ZERO;
else if(kCode == KeyCodeTable[14]) return K_POINT;
else if(kCode == KeyCodeTable[15]) return K_SET;
PORTD=11110111;
kCode=PORTD;
if(kCode == KeyCodeTable[0]) return K_ONE;
else if(kCode == KeyCodeTable[1]) return K_TWO;
else if(kCode == KeyCodeTable[2]) return K_THREE;
else if(kCode == KeyCodeTable[3]) return K_FOUR;
else if(kCode == KeyCodeTable[4]) return K_FIVE;
else if(kCode == KeyCodeTable[5]) return K_SIX;
else if(kCode == KeyCodeTable[6]) return K_SEVEN;
else if(kCode == KeyCodeTable[7]) return K_EIGHT;
else if(kCode == KeyCodeTable[8]) return K_NINE;
else if(kCode == KeyCodeTable[9]) return K_UP;
else if(kCode == KeyCodeTable[10]) return K_DOWN;
else if(kCode == KeyCodeTable[11]) return K_CLEAR;
else if(kCode == KeyCodeTable[12]) return K_OK;
else if(kCode == KeyCodeTable[13]) return K_ZERO;
else if(kCode == KeyCodeTable[14]) return K_POINT;
else if(kCode == KeyCodeTable[15]) return K_SET;
return -1;
}
void set_num()
{
uchar key;
if(sel==0)
{
key = Keys_Scan();
if(K_CLEAR == key)
{
while(Keys_Scan() == K_CLEAR);
set_Temp_Display_Buffer[8] =' ';
set_Temp_Display_Buffer[9] =' ';
set_Temp_Display_Buffer[10]=' ';
set_Temp_Display_Buffer[11]=' ';
M_Count=0;
cold=0;
warm=0;
}
if(K_UP == key)
{
while(Keys_Scan() == K_UP);
if((set_Temp_Display_Buffer[11]>47)&&(set_Temp_Display_Buffer[11]<57))
{
set_Temp_Display_Buffer[11]+=1;
}
else if(set_Temp_Display_Buffer[11]==57)
{
set_Temp_Display_Buffer[11]=48;
if((set_Temp_Display_Buffer[9]>47)&&(set_Temp_Display_Buffer[9]<57))
{
set_Temp_Display_Buffer[9]+=1;
}
else if(set_Temp_Display_Buffer[9]==57)
{
set_Temp_Display_Buffer[9]=48;
if((set_Temp_Display_Buffer[8]>47)&&(set_Temp_Display_Buffer[8]<57))
{
set_Temp_Display_Buffer[8]+=1;
}
else if(set_Temp_Display_Buffer[8]==57)
{
set_Temp_Display_Buffer[8]=48;
}
}
}
}
if(K_DOWN == key)
{
while(Keys_Scan() == K_DOWN);
if((set_Temp_Display_Buffer[11]>48)&&(set_Temp_Display_Buffer[11]<58))
{
set_Temp_Display_Buffer[11]-=1;
}
else if(set_Temp_Display_Buffer[11]==48)
{
set_Temp_Display_Buffer[11]=57;
if((set_Temp_Display_Buffer[9]>48)&&(set_Temp_Display_Buffer[9]<58))
{
set_Temp_Display_Buffer[9]-=1;
}
else if(set_Temp_Display_Buffer[9]==48)
{
set_Temp_Display_Buffer[9]=57;
if((set_Temp_Display_Buffer[8]>48)&&(set_Temp_Display_Buffer[8]<58))
{
set_Temp_Display_Buffer[8]-=1;
}
else if(set_Temp_Display_Buffer[8]==48)
{
set_Temp_Display_Buffer[8]=57;
}
}
}
}
if(K_ONE == key)
{
while(Keys_Scan() == K_ONE);
set_Temp_Display_Buffer[11]='1';
sel++;
}
if(K_TWO == key)
{
while(Keys_Scan() == K_TWO);
set_Temp_Display_Buffer[11]='2';
sel++;
}
if(K_THREE == key)
{
while(Keys_Scan() == K_THREE);
set_Temp_Display_Buffer[11]='3';
sel++;
}
if(K_FOUR == key)
{
while(Keys_Scan() == K_FOUR);
set_Temp_Display_Buffer[11]='4';
sel++;
}
if(K_FIVE == key)
{
while(Keys_Scan() == K_FIVE);
set_Temp_Display_Buffer[11]='5';
sel++;
}
if(K_SIX == key)
{
while(Keys_Scan() == K_SIX);
set_Temp_Display_Buffer[11]='6';
sel++;
}
if(K_SEVEN == key)
{
while(Keys_Scan() == K_SEVEN);
set_Temp_Display_Buffer[11]='7';
sel++;
}
if(K_EIGHT == key)
{
while(Keys_Scan() == K_EIGHT);
set_Temp_Display_Buffer[11]='8';
sel++;
}
if(K_NINE == key)
{
while(Keys_Scan() == K_NINE);
set_Temp_Display_Buffer[11]='9';
sel++;
}
if(K_ZERO == key)
{
while(Keys_Scan() == K_ZERO);
set_Temp_Display_Buffer[11]='0';
sel++;
}
if(K_OK == key)
{
while(Keys_Scan() == K_OK);
TEMP_SET=(set_Temp_Display_Buffer[8]-48)*10+(set_Temp_Display_Buffer[9]-48)+(set_Temp_Display_Buffer[11]-48)*0.1;
sel=0;
M_Count=1;
}
}
if(sel==1)
{
key = Keys_Scan();
if(K_CLEAR == key)
{
while(Keys_Scan() == K_CLEAR);
set_Temp_Display_Buffer[8] =' ';
set_Temp_Display_Buffer[9] =' ';
set_Temp_Display_Buffer[10]=' ';
set_Temp_Display_Buffer[11]=' ';
M_Count=0;
cold=0;
warm=0;
sel=0;
}
if(K_ONE == key)
{
while(Keys_Scan() == K_ONE);
set_Temp_Display_Buffer[10]=set_Temp_Display_Buffer[11] ;
set_Temp_Display_Buffer[11]='1';
sel++;
}
if(K_TWO == key)
{
while(Keys_Scan() == K_TWO);
set_Temp_Display_Buffer[10]=set_Temp_Display_Buffer[11] ;
set_Temp_Display_Buffer[11]='2';
sel++;
}
if(K_THREE == key)
{
while(Keys_Scan() == K_THREE);
set_Temp_Display_Buffer[10]=set_Temp_Display_Buffer[11] ;
set_Temp_Display_Buffer[11]='3';
sel++;
}
if(K_FOUR == key)
{
while(Keys_Scan() == K_FOUR);
set_Temp_Display_Buffer[10]=set_Temp_Display_Buffer[11] ;
set_Temp_Display_Buffer[11]='4';
sel++;
}
if(K_FIVE == key)
{
while(Keys_Scan() == K_FIVE);
set_Temp_Display_Buffer[10]=set_Temp_Display_Buffer[11] ;
set_Temp_Display_Buffer[11]='5';
sel++;
}
if(K_SIX == key)
{
while(Keys_Scan() == K_SIX);
set_Temp_Display_Buffer[10]=set_Temp_Display_Buffer[11] ;
set_Temp_Display_Buffer[11]='6';
sel++;
}
if(K_SEVEN == key)
{
while(Keys_Scan() == K_SEVEN);
set_Temp_Display_Buffer[10]=set_Temp_Display_Buffer[11] ;
set_Temp_Display_Buffer[11]='7';
sel++;
}
if(K_EIGHT == key)
{
while(Keys_Scan() == K_EIGHT);
set_Temp_Display_Buffer[10]=set_Temp_Display_Buffer[11] ;
set_Temp_Display_Buffer[11]='8';
sel++;
}
if(K_NINE == key)
{
while(Keys_Scan() == K_NINE);
set_Temp_Display_Buffer[10]=set_Temp_Display_Buffer[11] ;
set_Temp_Display_Buffer[11]='9';
sel++;
}
if(K_ZERO == key)
{
while(Keys_Scan() == K_ZERO);
set_Temp_Display_Buffer[10]=set_Temp_Display_Buffer[11] ;
set_Temp_Display_Buffer[11]='0';
sel++;
}
}
if(sel==2)
{
key = Keys_Scan();
if(K_CLEAR == key)
{
while(Keys_Scan() == K_CLEAR);
set_Temp_Display_Buffer[8] =' ';
set_Temp_Display_Buffer[9] =' ';
set_Temp_Display_Buffer[10]=' ';
set_Temp_Display_Buffer[11]=' ';
M_Count=0;
cold=0;
warm=0;
sel=0;
}
if(K_POINT == key)
{
while(Keys_Scan() == K_POINT);
set_Temp_Display_Buffer[9]=set_Temp_Display_Buffer[10] ;
set_Temp_Display_Buffer[10]=set_Temp_Display_Buffer[11] ;
set_Temp_Display_Buffer[11]='.';
sel++;
}
}
if(sel==3)
{
key = Keys_Scan();
if(K_CLEAR == key)
{
while(Keys_Scan() == K_CLEAR);
set_Temp_Display_Buffer[8] =' ';
set_Temp_Display_Buffer[9] =' ';
set_Temp_Display_Buffer[10]=' ';
set_Temp_Display_Buffer[11]=' ';
M_Count=0;
cold=0;
warm=0;
展开阅读全文