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

📄 drop_02.c

📁 输液控制这是很好的资料如果你想学请不要错过
💻 C
📖 第 1 页 / 共 3 页
字号:
/* 返回值: void                                          */
/*********************************************************/
void LCDInit(void)                                            /*TM161A/B    液晶初始化 # */
{
     Wait5MS();
     Wait5MS();
     Wait5MS();
     Wait5MS();
     EN=0;
     WriteCommandToLCD(0x30,0);
     Wait5MS();
     WriteCommandToLCD(0x30,0);
     Wait5MS();
     WriteCommandToLCD(0x0C,0);
     Wait5MS();
     WriteCommandToLCD(0x01,1);
     Wait5MS();
     Wait5MS();
     WriteCommandToLCD(0x06,1);

     DisplayARowChar(0,1);
     Wait1S();
     Wait1S();
     DisplayARowChar(1,1);
     Wait1S();
     Wait1S();
}

/*********************************************************/
/* 名称: void SetupExpandMode                            */
/* 功能: expand command                                  */
/* 说明:                                                 */
/* 调用: WriteCommandToLCD()                             */
/* 输入:                                                 */
/* 返回值: void                                          */
/*********************************************************/
void SetupExpandMode()
{
     WriteCommandToLCD(0x34,1);
}

/*********************************************************/
/* 名称: void WriteAWordToGDRAM                          */
/* 功能: expand command                                  */
/* 说明:                                                 */
/* 调用: WriteDataToLCM() WriteCommandToLCD()            */
/*       SetLCMRAMAddress() SetupExpandMode()            */
/* 输入: byte adr_x,byte adr_y,byte data_h,byte data_l   */
/* 返回值: void                                          */
/*********************************************************/
void WriteAWordToGDRAM(byte adr_x,byte adr_y,byte data_h,byte data_l)
{
     SetupExpandMode();
     SetLCMRAMAddress(adr_y&0x3F);
     SetLCMRAMAddress(adr_x&0X0F);
     WriteDataToLCM(data_h);
     WriteDataToLCM(data_l);
     WriteCommandToLCD(0x36,1);
}

/*********************************************************/
/* 名称: ClearForGDRAM                                   */
/* 功能: Clear ram of CDRAM                              */
/* 说明:                                                 */
/* 调用: WriteCommandToLCD() SetLCMRAMAddress()          */
/*       WriteDataToLCM()                                */
/* 输入:                                                 */
/* 返回值: void                                          */
/*********************************************************/
void ClearForGDRAM()
{
     int i,j;
     WriteCommandToLCD(0x34,1);
     for(i=0;i<64;i++)
     {
         for(j=0;j<16;j++)
         {
            SetLCMRAMAddress(i);
            SetLCMRAMAddress(j);
            WriteDataToLCM(0);
            WriteDataToLCM(0);
         }
     }
     WriteCommandToLCD(0x36,1);
}

/*********************************************************/
/* 名称: void ClearForDDRAM                              */
/* 功能: Clear ram of CDRAM                              */
/* 说明:                                                 */
/* 调用: WriteCommandToLCD()                             */
/* 输入:                                                 */
/* 返回值: void                                          */
/*********************************************************/
void ClearForDDRAM()
{
     WriteCommandToLCD(0x30,1);
     WriteCommandToLCD(0x01,1);
     WriteCommandToLCD(0x36,1);
     WriteCommandToLCD(0x30,1);
}

/******************************************************************/
/*                     DS1302 Subprogram                          */
/*                     ~~~~~~~~~~~~~~~~~                          */
/******************************************************************/

/*********************************************************/
/* 名称: void WriteAByteToDS1302                         */
/* 说明:                                                 */
/* 功能: 从DS1302读取1Byte数据                           */
/* 调用:                                                 */
/* 输入:                                                 */
/* 返回值: ACC                                           */
/*********************************************************/
void WriteAByteToDS1302(byte ucDa)
{
    byte i;
    ACC = ucDa;
    for(i=0; i<8; i++)
    {
        T_IO = ACC0;                   //相当于汇编中的 RRC
        T_CLK = 1;
        T_CLK = 0;
        ACC = ACC >> 1;
    }
}
/*********************************************************/
/* 名称: byte ReadAByteFromDS1302                        */
/* 说明:                                                 */
/* 功能: 从DS1302读取1 Byte数据                          */
/* 调用:                                                 */
/* 输入:                                                 */
/* 返回值: ACC                                           */
/*********************************************************/
byte ReadAByteFromDS1302(void)
{
    byte i;
    for(i=0; i<8; i++)
    {
        ACC = ACC >>1;                      //相当于汇编中的 RRC
        ACC7 = T_IO;
        T_CLK = 1;
        T_CLK = 0;
    }
    return(ACC);
}

/*********************************************************/
/* 名称: WriteAddressAndDataToDS1302                     */
/* 说明: 先写地址,后写命令/数据                         */
/* 功能: 往DS1302写入数据                                */
/* 调用: WriteAByteToDS1302()                            */
/* 输入: ucAddr: DS1302地址, ucDa: 要写的数据            */
/* 返回值: 无                                            */
/*********************************************************/
void WriteAddressAndDataToDS1302(byte ucAddr, byte ucDa)
{
    T_RST = 0;
    T_CLK = 0;
    T_RST = 1;
    WriteAByteToDS1302(ucAddr);                    //地址,命令
    WriteAByteToDS1302(ucDa);                      //写1Byte数据
    T_CLK = 1;
    T_RST =0;
}
/*********************************************************/
/* 名称: WriteAddressAndReadDataFromDS1302               */
/* 说明: 先写地址,后读命令/数据                         */
/* 功能: 读取DS1302某地址的数据                          */
/* 调用: WriteAByteToDS1302() , ReadAByteFromDS1302()    */
/* 输入: ucAddr: DS1302地址                              */
/* 返回值: ucDa :读取的数据                              */
/*********************************************************/
byte WriteAddressAndReadDataFromDS1302(byte ucAddr)
{
    byte ucDa;
    T_RST = 0;
    T_CLK = 0;
    T_RST = 1;
    WriteAByteToDS1302(ucAddr);                    //地址,命令
    ucDa = ReadAByteFromDS1302();                  //读1Byte数据
    T_CLK = 1;
    T_RST =0;
    return(ucDa);
}
/*********************************************************/
/* 名称: WriteAddressAnd8ByteToDS1302                    */
/* 说明: 先写地址,后写数据(时钟多字节方式)              */
/* 功能: 往DS1302写入时钟数据(多字节方式)                */
/* 调用: WriteAByteToDS1302()                            */
/* 输入: pSecDa: 时钟数据地址                            */
/*               格式为: 秒 分 时 日 月 星期 年 控制     */
/* 8Byte (BCD码) 1B 1B 1B 1B 1B 1B 1B 1B                 */
/* 返回值: 无                                            */
/*********************************************************/
void WriteAddressAnd8ByteToDS1302(byte *pSecDa)
{
    byte i;
    WriteAddressAndDataToDS1302(0x8e,0x00);             //控制命令,WP=0,写操作?
    T_RST = 0;
    T_CLK = 0;
    T_RST = 1;
    WriteAByteToDS1302(0xbe);                           //0xbe:时钟多字节写命令
    for (i=0;i<8;i++)                                   //8Byte = 7Byte 时钟数据 + 1Byte 控制
    {
         WriteAByteToDS1302(*pSecDa);                   //写1Byte数据
         pSecDa++;
    }
    T_CLK = 1;
    T_RST =0;
}
/*********************************************************/
/* 名称: WriteAddressAndRead8ByteFromDS1302              */
/* 说明: 先写地址,后读命令/数据(时钟多字节方式)         */
/* 功能: 读取DS1302时钟数据                              */
/* 调用: WriteAByteToDS1302() , ReadAByteFromDS1302()    */
/* 输入: pSecDa: 时钟数据地址 格式为:                    */
/*       秒 分 时 日 月 星期 年 7Byte (BCD码)            */
/*                              1B 1B 1B 1B 1B 1B 1B     */
/* 返回值: ucDa :读取的数据                              */
/*********************************************************/
void WriteAddressAndRead8ByteFromDS1302(byte *pSecDa)
{
    byte i;
    T_RST = 0;
    T_CLK = 0;
    T_RST = 1;
    WriteAByteToDS1302(0xbf);                    //0xbf:时钟多字节读命令
    for (i=0; i<8; i++)
    {
         *pSecDa = ReadAByteFromDS1302();            //读1Byte数据
         pSecDa++;
    }
    T_CLK = 1;
    T_RST =0;
}
/*********************************************************/
/* 名称: WriteAddressAnd32ByteToDS1302                   */
/* 说明: 先写地址,后写数据(寄存器多字节方式)            */
/* 功能: 往DS1302寄存器数写入数据(多字节方式)            */
/* 调用: WriteAByteToDS1302()                            */
/* 输入: pReDa: 寄存器数据地址                           */
/* 返回值: 无                                            */
/*********************************************************/
void WriteAddressAnd32ByteToDS1302(byte *pReDa)
{
    byte i;
    WriteAddressAndDataToDS1302(0x8e,0x00);             //控制命令,WP=0,写操作?
    T_RST = 0;
    T_CLK = 0;
    T_RST = 1;
    WriteAByteToDS1302(0xfe);                           //0xbe:时钟多字节写命令
    for (i=0;i<32;i++)                                  //31Byte 寄存器数据
    {
         WriteAByteToDS1302(*pReDa);                    //写1Byte数据
         pReDa++;
    }
    T_CLK = 1;
    T_RST =0;
}
/*********************************************************/
/* 名称: WriteAddressAndRead32ByteFromDS1302             */
/* 说明: 先写地址,后读命令/数据(寄存器多字节方式)       */
/* 功能: 读取DS1302寄存器数据                            */
/* 调用: WriteAByteToDS1302() , ReadAByteFromDS1302()    */
/* 输入: pReDa: 寄存器数据地址                           */
/* 返回值: 无                                            */
/*********************************************************/
void WriteAddressAndRead32ByteFromDS1302(byte *pReDa)
{
    byte i;
    T_RST = 0;
    T_CLK = 0;
    T_RST = 1;
    WriteAByteToDS1302(0xff);                      //0xbf:时钟多字节读命令
    for (i=0; i<32; i++)                           //31Byte 寄存器数据
    {
        *pReDa = ReadAByteFromDS1302();            //读1Byte数据
        pReDa++;
    }
    T_CLK = 1;
    T_RST =0;
}
/*********************************************************/
/* 名称: SetInitialTimeForDS1302                         */
/* 说明:                                                 */
/* 功能: 设置初始时间                                    */
/* 调用: WriteAddressAndDataToDS1302()                   */
/* 输入: pSecDa: 初始时间地址。初始时间格式为:           */
/*       秒 分 时 日 月 星期 年                          */
/*               7Byte (BCD码) 1B 1B 1B 1B 1B 1B 1B      */
/* 返回值: 无                                            */
/*********************************************************/
void SetInitialTimeForDS1302(byte *pSecDa)
{
    byte i;
    byte ucAddr = 0x80;
    WriteAddressAndDataToDS1302(0x8e,0x00);                         //控制命令,WP=0,写操作?
    for(i =0;i<8;i++)
    {
         WriteAddressAndDataToDS1302(ucAddr,*pSecDa);               //秒 分 时 日 月 星期 年

         pSecDa++;
         ucAddr +=2;
    }
    WriteAddressAndDataToDS1302(0x8e,0x80);                         //控制命令,WP=1,写保护?
}
/*********************************************************/
/* 名称: TakeCurrentTimeFromDS1302                       */
/* 功能: 读取DS1302当前时间                              */
/* 说明:                                                 */
/* 调用: WriteAddressAndReadDataFromDS1302()             */
/* 输入: ucCurtime: 保存当前时间地址。当前时间格式为:    */
/*                  分 时 日 月 星期 年                  */
/*                  7Byte (BCD码) 1B 1B 1B 1B 1B 1B 1B   */
/* 返回值: 无                                            */
/*********************************************************/
void TakeCurrentTimeFromDS1302(byte ucCurtime[])
{
    byte i;
    byte ucAddr = 0x81;
    for (i=0;i<7;i++)
    {
        ucCurtime[i] = WriteAddressAndReadDataFromDS1302(ucAddr);        //格式为: 秒 分 时 日 月 星期 年
        ucAddr += 2;
    }
}

/******************************************************************/
/*                    DS18B20 Subprogram                          */
/*                    ~~~~~~~~~~~~~~~~~~                          */
/******************************************************************/

/*********************************************************/
/* 名称: void DelayN10us                                 */
/* 功能: 用 useconds 决定延时时间                        */
/* 说明: 可变延时子程: 延时 = useconds*10us              */
/* 调用:                                                 */
/* 输入: useconds                                        */
/* 返回值: 无                                            */
/*********************************************************/
void DelayN10us(word useconds)
{
  for(;useconds>0;useconds--);
}

/*********************************************************/
/* 名称: byte ResetOfDS18B20                             */
/* 功能: one wire device 复位                            */
/* 说明: 主机主动: ^^^|___|^^^ 后等 one wire device 回答 */
/* 调用:                                                 */
/* 输入: byte channel :选择通道                          */
/* 返回值:presence: 0 = 有器件, 1 = 无器件               */
/*********************************************************/
byte ResetOfDS18B20(byte channel)
{

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -