📄 drop_02.c
字号:
/******************************************************************/
/* 医用输液加热系统 */
/* ~~~~~~~~~~~~~~~~ */
/*(1)CPU: stc89c52 */
/*(2)MAIN IC:DS1302,DS18B20,40106,74HC04,... */
/*(3)DATE:2006.04.07 */
/******************************************************************/
#include <reg52.h>
#define HIGH 1
#define LOW 0
#define FALSE 0
#define TRUE 1
#define PressDown 0
#define byte unsigned char
#define NoKeyDown 0
#define UpKeyDown 1
#define DownKeyDown 2
#define OKKeyDown 3
#define UpAndOKKeyDown 4
#define DQ1_H 0x40
#define DQ1_L 0xBF
#define DQ2_H 0x80
#define DQ2_L 0x7F
#define CH1_18B20 0x1
#define CH2_18B20 0x2
typedef unsigned int word;
//(1)Defined p0 port:
sbit KEY_OK=P0^0;
sbit KEY_UP=P0^1;
sbit KEY_DOWN=P0^2;
sbit LED_ERROR=P0^3;
sbit LED_CH1=P0^4;
sbit LED_CH2=P0^5;
sbit DQ_CH1=P0^6;
sbit DQ_CH2=P0^7;
//(2)Defined p1 port:
//Use to Data of LCM
//(3)Defined p2 port:
sbit OK_CH1=P2^0;
sbit OK_CH2=P2^1;
sbit SPEAKER=P2^2;
//sbit LED_ERROR=P2^3;
//sbit LED_CH1=P2^4;
sbit T_CLK=P2^5;
sbit T_IO=P2^6;
sbit T_RST=P2^7;
//(4)Defined p2 port:
sbit EN=P3^0;
sbit RW=P3^1;
/*sbit =P3^2;*/
sbit RS=P3^3;
sbit CH1_ON=P3^4;
sbit CH2_ON=P3^5;
/*sbit DATA_CH1=P3^6;
sbit DATA_CH2=P3^7;*/
//(5)Defined SFR register:
//(6)Defined bit of SFR:
sbit ACC0=ACC^0;
sbit ACC7=ACC^7;
unsigned char code * Menu[]= {
"输液加热系统界面", //0
"Version: Drop_02", //1
"1 启动", //2
"2 温度设置", //3
"3 时间设置", //4
"1 通道1启动或停止", //5
"2 通道2启动或停止", //6
"3 两通道同启同停", //7
"1 通道1温度设置", //8
"2 通道2温度设置", //9
"1 设置 年", //10
"2 设置 月", //11
"3 设置 日", //12
"4 设置 小时", //13
"5 设置 分" //14
};
data byte T2_counter=0;
data byte DateTime[8];
/*********************************************************/
/* Delay Subprogram */
/* ~~~~~~~~~~~~~~~~ */
/*********************************************************/
void Delay(void) /*延时 # */
{
;
}
void Wait5MS(void) /*延时5ms # */
{
register int i;
for(i=0;i<1462;i++)
;
}
void Wait30MS(void)
{
register byte j;
for (j=0;j<=5;j++)
{
Wait5MS();
}
}
void Wait1S(void) /*延时1s # */
{
register int j;
for(j=0;j<=200;j++)
{
Wait5MS();
}
}
/******************************************************************/
/* Key Subprogram */
/* ~~~~~~~~~~~~~~ */
/******************************************************************/
/*********************************************************/
/* 名称: void KeyInit */
/* 功能: Set port to input */
/* 说明: */
/* 调用: */
/* 输入: 无 */
/* 返回值: 无 */
/*********************************************************/
void KeyInit() /*键盘初始化 # */
{
KEY_UP=1;
KEY_DOWN=1;
KEY_OK=1;
}
/*********************************************************/
/* 名称: byte ReadKey */
/* 功能: Check What key is pressing down */
/* 说明: */
/* 调用: KeyInit() */
/* 输入: 无 */
/* 返回值: 0:no KeyDown 1:UpKey 2:DownKey 3:OkKey */
/*********************************************************/
byte ReadKey() /*读按键 # */
{
KeyInit();
if(KEY_UP==PressDown)
{
Wait30MS();
if(KEY_UP==PressDown)
{
if(KEY_OK==PressDown)
{
while(KEY_UP==PressDown|KEY_OK==PressDown);
Wait30MS();
return(UpAndOKKeyDown);
}
while(KEY_UP==PressDown);
Wait30MS();
return(UpKeyDown);
}
}
else if(KEY_DOWN==PressDown)
{
Wait30MS();
if(KEY_DOWN==PressDown)
{
while(KEY_DOWN==PressDown);
Wait30MS();
return(DownKeyDown);
}
}
else if(KEY_OK==PressDown)
{
Wait30MS();
if(KEY_OK==PressDown)
{
if(KEY_UP==PressDown)
{
while(KEY_UP==PressDown|KEY_OK==PressDown);
Wait30MS();
return(UpAndOKKeyDown);
}
while(KEY_OK==PressDown);
Wait30MS();
return(OKKeyDown);
}
}
else
return(NoKeyDown);
}
/******************************************************************/
/* LCM128645ZK Subprogram */
/* ~~~~~~~~~~~~~~~~~~~~~~ */
/******************************************************************/
/*********************************************************/
/* 名称: void LCDBusy */
/* 功能: Check lcd busy */
/* 说明: */
/* 调用: Delay() */
/* 输入: 无 */
/* 返回值: if busy then wait */
/*********************************************************/
void LCDBusy() /*读LCD忙标志 # */
{
RS=0;
RW=1;
EN=0;
do
{
Delay();
Delay();
EN=1;
ACC=P1;
EN=0;
}
while(ACC&0x80);
}
/*********************************************************/
/* 名称: WriteCommandToLCD */
/* 功能: Check lcd busy */
/* 说明: if anbusy=1 then wait */
/* 调用: LCDBusy() */
/* 输入: byte Comm,byte anbusy */
/* 返回值: void */
/*********************************************************/
void WriteCommandToLCD(byte Comm,byte anbusy) //write command
{
if (anbusy)
{
LCDBusy();
}
RS=0;
RW=0;
EN=0;
EN=1;
P1 = Comm;
EN=0;
}
/*********************************************************/
/* 名称: void SetLCMRAMAddress */
/* 功能: Set address of LCM RAM */
/* 说明: */
/* 调用: WriteCommandToLCD() */
/* 输入: */
/* 返回值: void */
/*********************************************************/
void SetLCMRAMAddress(byte address)
{
WriteCommandToLCD(address|0x80,1);
}
/*********************************************************/
/* 名称: void WriteDataToLCM */
/* 功能: Write a byte to LCM */
/* 说明: */
/* 调用: LCDBusy() */
/* 输入: */
/* 返回值: void */
/*********************************************************/
void WriteDataToLCM(byte disp_data)
{
LCDBusy();
RS=1;
RW=0;
EN=0;
EN=1;
P1=disp_data;
EN=0;
}
/*********************************************************/
/* 名称: void DisplayARowChar */
/* 功能: Write a byte to LCM */
/* 说明: row: 表示在那一行显示 */
/* 调用: WriteCommandToLCD() Wait5MS() */
/* SetLCMRAMAddress(0x80) LCDBusy() */
/* 输入: unsigned char m_n,unsigned char row */
/* 返回值: void */
/*********************************************************/
void DisplayARowChar(unsigned char m_n,unsigned char row) /*一行字符串显示 # */
{
unsigned char *pss;
byte i;
WriteCommandToLCD(0x01,1);
Wait5MS();
Wait5MS();
pss=Menu[m_n];
switch(row)
{
case 1:
SetLCMRAMAddress(0x80);
break;
case 2:
SetLCMRAMAddress(0x90);
break;
case 3:
SetLCMRAMAddress(0x88);
break;
case 4:
SetLCMRAMAddress(0x89);
break;
}
for (i=0;i<=15;i++)
{
if(* pss!='\0')
{
LCDBusy();
RS=1;
RW=0;
EN=0;
EN=1;
P1=*pss;
EN=0;
pss++;
}
else break;
}
}
/*********************************************************/
/* 名称: void LCDInit */
/* 功能: initial for LCM */
/* 说明: */
/* 调用: Wait5MS() WriteCommandToLCD() DisplayARowChar() */
/* 输入: */
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -