📄 tem_ctrl.c
字号:
/*****************************************/
/* Copyright (c) 2009, 电子信息工程学院 */
/* All rights reserved. */
/* 作 者:王明兴 */
/*****************************************/
#include "main.h"
#include "DS18B20.h"
#include "MAX7219.h"
extern uint data Disp_Count ;
extern uint data Temp_Count ;
extern uint data Temp_Read;
extern uchar data Read_flag;
extern uchar data Key_Start_flag ;
extern uchar data Key_Setup_flag ;
extern uchar data Key_Up_flag ;
extern uchar data Key_Down_flag ;
extern uchar data Key_Enter_flag ;
extern uchar tplsb,tpmsb; // 温度值低位、高位字节
extern uchar data Buffer0[4];
extern uchar data Buffer1[4];
extern char data Cur_Temp;
extern uchar DisBuffer[8]; // 显示缓存区
void Da_Trans(void) //温度传感器数据处理
{
uchar n = 0;
if(tpmsb & 0x80)
{
n = 1;
tpmsb = ~tpmsb;
tplsb = ~tplsb + 1;
}
Cur_Temp = (tpmsb << 4) | (tplsb >> 4);
Buffer0[3] = ((tplsb & 0x0f) * 625 + 500) / 1000;
Buffer0[2] = Cur_Temp % 10 | 0x80;
Buffer0[1] = (Cur_Temp % 100) / 10;
Buffer0[0] = Cur_Temp / 100;
if(n)
{
if(Buffer0[1])
Buffer0[0] = 0x0a;
else
{
Buffer0[0] = 0x0f;
Buffer0[1] = 0x0a;
}
}
else
if(Buffer0[0] == 0)
{
Buffer0[0] = 0x0f;
if(Buffer0[1] == 0)
Buffer0[1] = 0x0f;
}
}
void Display(uchar *addr) //显示
{
uchar i;
for(i = 0;i < 4;i ++)
DisBuffer[i]= *addr ++;
WriteWord (Digit0,DisBuffer[0]);
WriteWord (Digit1,DisBuffer[1]);
WriteWord (Digit2,DisBuffer[2]);
WriteWord (Digit3,DisBuffer[3]);
}
void Da_Tran(uchar temp) //设置模式数据处理
{
Buffer1[3] = 0x00;
Buffer1[2] = (temp % 10) | 0x80;
Buffer1[1] = (temp % 100) / 10;
Buffer1[0] = temp / 100;
if(Buffer1[0] == 0)
{
Buffer1[0] = 0x0f;
if(Buffer1[1] == 0)
Buffer1[1] = 0x0f;
}
}
void Key_Process() //键盘处理
{
uchar Current_Key_Value,Last_Key_Value;
if((P1 >> 3) != 0x1f)
{
Last_Key_Value = P1 >> 3;
delay(100);
Current_Key_Value = P1 >> 3;
if(Current_Key_Value == Last_Key_Value)
{
switch(Current_Key_Value)
{
case 0x1e :
Key_Start_flag = !Key_Start_flag;
if(Key_Start_flag == 0)
{
Key_Setup_flag = 0;
LED_NORMAL = 1;
LED_WARING = 1;
TEMP_CTRL = 1;
}
break;
case 0x1d :
Key_Setup_flag = 1;
break;
case 0x1b :
Key_Up_flag = 1;
break;
case 0x17 :
Key_Down_flag = 1;
break;
case 0x0f :
Key_Enter_flag = 1;
break;
}
}
}
}
void T0_ISR() interrupt 1 using 1 //T0中断服务程序
{
static uint counter = 0;
TH0 = 0xf0;
TL0 = 0xd8;
counter ++;
if(counter == 200)
{
counter = 0;
LED_STATE = !LED_STATE;
}
}
void T1_ISR() interrupt 3 using 2 //T1中断服务程序
{
TH1 = 0xf0;
TL1 = 0xd8;
Disp_Count ++;
Temp_Count ++;
if(Read_flag)
Temp_Read ++;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -