⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 drop_02.c

📁 输液控制这是很好的资料如果你想学请不要错过
💻 C
📖 第 1 页 / 共 3 页
字号:
/******************************************************************/
/*                        医用输液加热系统                        */
/*                        ~~~~~~~~~~~~~~~~                        */
/*(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 + -