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

📄 drop_02.c

📁 输液控制这是很好的资料如果你想学请不要错过
💻 C
📖 第 1 页 / 共 3 页
字号:
    byte presence;

    if (channel==1) DQ_CH1=0;                           // DQ 低电平
    else DQ_CH2=0;
    DelayN10us(29);                                     // 480us

    if (channel==1) DQ_CH1=1;                           // DQ 高电平
    else DQ_CH2=1;
    DelayN10us(3);

    if (channel==1) presence = DQ_CH1;                  // presence 信号
    else presence = DQ_CH2;                             // presence 信号
    DelayN10us(25);

    return(presence);
}                                                       // 0=presence, 1 = no part

/*********************************************************/
/* 名称: byte ReadAByteFromDS18B20                       */
/* 说明:                                                 */
/* 功能: 从 1-wire 总线上读取一个字节                    */
/* 调用: DelayN10us()                                    */
/* 输入: byte channel                                    */
/* 返回值: 接受的数据:value                             */
/*********************************************************/
byte ReadAByteFromDS18B20(byte channel)
{
    byte i;
    byte value = 0;

    for (i=8;i>0;i--)
    {
        value>>=1;

        if (channel==1) DQ_CH1=0;                         // DQ 低电平
        else DQ_CH2=0;
        if (channel==1) DQ_CH1=1;                         // DQ_CH1 高电平
        else DQ_CH2=1;

        DelayN10us(1);

        if(channel==1)
        {
            if(DQ_CH1) value|=0x80;
        }
        else
        {
            if(DQ_CH2) value|=0x80;
        }

        DelayN10us(6);
    }
    return(value);
}

/*********************************************************/
/* 名称: void WriteAByteToDS18B20                        */
/* 功能: 向 1-WIRE 总线上写一个字节                      */
/* 说明:                                                 */
/* 调用: DelayN10us()                                    */
/* 输入: 写入数据:char val , byte channel               */
/* 返回值: 无                                            */
/*********************************************************/
void WriteAByteToDS18B20(char val,byte channel)
{
    byte i;
    for (i=8; i>0; i--)                                 // 一次写一字节
    {
        if (channel==1) DQ_CH1=0;                       // DQ 低电平
        else DQ_CH2=0;

        if(channel==1) DQ_CH1 = val&0x01;
        else DQ_CH2 = val&0x01;
        DelayN10us(5);

        if (channel==1) DQ_CH1=1;                       // DQ_CH1 高电平
        else DQ_CH2=1;

        val=val/2;
    }
    DelayN10us(5);
}

/*********************************************************/
/* 名称: char ReadTemperatureAndRunDS18B20               */
/* 功能: 读取温度,并启动一次温度测试                    */
/* 说明:                                                 */
/* 调用: ResetOfDS18B20() WriteAByteToDS18B20()          */
/*       ReadAByteFromDS18B20()                          */
/* 输入: 无                                              */
/* 返回值: char temp.x/2                                 */
/*********************************************************/
char ReadTemperatureAndRunDS18B20(byte channel)
{
    union
    {
        byte c[2];
        int x;
    }temp;

    ResetOfDS18B20(channel);
    WriteAByteToDS18B20(0xCC,channel);          // 跳过 ROM
    WriteAByteToDS18B20(0xBE,channel);          // 读
    temp.c[1]=ReadAByteFromDS18B20(channel);
    temp.c[0]=ReadAByteFromDS18B20(channel);
    ResetOfDS18B20(channel);
    WriteAByteToDS18B20(0xCC,channel);
    WriteAByteToDS18B20(0x44,channel);           // 开始
    return temp.x/2;
}

/*********************************************************/
/* 名称: void ConversionTemperatureWithDS18B20           */
/* 功能: 启动一次温度测试                                */
/* 说明:                                                 */
/* 调用: ResetOfDS18B20() WriteAByteToDS18B20()          */
/*       DelayN10us()                                    */
/* 输入: byte channel                                    */
/* 返回值: char temp.x/2                                 */
/*********************************************************/
void ConversionTemperatureWithDS18B20(byte channel)
{
    ResetOfDS18B20(channel);
    DelayN10us(5);
    WriteAByteToDS18B20(0xCC,channel);
    WriteAByteToDS18B20(0x44,channel);           // 开始
}


/******************************************************************/
/*                    Function Subprogram                         */
/*                    ~~~~~~~~~~~~~~~~~~~                         */
/******************************************************************/
void Channel1Run()
{

}

void Channel2Run()
{

}

void ChannelAllRun()
{

}

void SetTemperatureOfChannel1()
{

}

void SetTemperatureOfChannel2()
{

}

void SetYear()
{

}

void SetMonth()
{

}

void SetDay()
{

}

void SetHour()
{

}

void SetMinute()
{

}

void UpdateTimeDate()
{

}

/*********************************************************/
/* 名称: void T2OfSTC89C52Init                           */
/* 功能: Initial time2 of STC89C52                       */
/* 说明:                                                 */
/* 调用:                                                 */
/* 输入: 无                                              */
/* 返回值: 无                                            */
/*********************************************************/
void T2OfSTC89C52Init()
{
    RCAP2H=0xc4;
    RCAP2L=0x00;
    T2CON =0x00;
    EA=1;
    ET2=1;
    TR2=1;
}

/*********************************************************/
/* 名称: void DS1302Init                                 */
/* 功能: Initial DS1302                                  */
/* 说明:                                                 */
/* 调用:                                                 */
/* 输入: 无                                              */
/* 返回值: 无                                            */
/*********************************************************/
void DS1302Init()
{

}

/*********************************************************/
/* 名称: void Timer2OfSTC89C52                           */
/* 功能: time2 of STC89C52 interrupt program             */
/* 说明:                                                 */
/* 调用:                                                 */
/* 输入: 无                                              */
/* 返回值: 无                                            */
/*********************************************************/
void Timer2OfSTC89C52() interrupt 5
{
    TF2=0;

    T2_counter++;

}

/*********************************************************/
/* 名称: void Main                                       */
/* 功能: Main program start                              */
/* 说明:                                                 */
/* 调用:                                                 */
/* 输入: 无                                              */
/* 返回值: 无                                            */
/*********************************************************/
void Main()
{
     unsigned char data menu_number;
     unsigned char data KeyValue;

//****

//****
     KeyInit();
     DS1302();
     LCDInit();
     T2OfSTC89C52Init();

     Wait5MS();
     menu_number=2;
     DisplayARowChar(menu_number,1);                 /*显示主菜单并等待按键*/

     while(1)
     {
         KeyValue=ReadKey();
         if(KeyValue==DownKeyDown)
         {
             if(menu_number!=4||menu_number!=7||menu_number!=9||menu_number!=14)
             {
                 menu_number++;
                 DisplayARowChar(menu_number,1);
             }
         }
         else if(KeyValue==UpKeyDown)
         {
             if(menu_number!=2||menu_number!=5||menu_number!=8||menu_number!=10)
             {
                 menu_number--;
                 DisplayARowChar(menu_number,1);
             }
         }
         else if(KeyValue==UpAndOKKeyDown)
         {
             if(5<=menu_number||menu_number<=7)
             {
                 menu_number=2;
                 DisplayARowChar(menu_number,1);
             }
             else if(menu_number==8||menu_number==9)
             {
                 menu_number=3;
                 DisplayARowChar(menu_number,1);
             }
             else if(10<=menu_number||menu_number<=14)
             {
                 menu_number=4;
                 DisplayARowChar(menu_number,1);
             }
         }
         else if(KeyValue==OKKeyDown)
         {
             switch(menu_number)
             {
                 case 2:
                     menu_number=5;
                     DisplayARowChar(menu_number,1);
                     break;
                 case 3:
                     menu_number=8;
                     DisplayARowChar(menu_number,1);
                     break;
                 case 4:
                     menu_number=10;
                     DisplayARowChar(menu_number,1);
                     break;
                 case 5:
                     Channel1Run();
                     break;
                 case 6:
                     Channel2Run();
                     break;
                 case 7:
                     ChannelAllRun();
                     break;
                 case 8:
                     SetTemperatureOfChannel1();
                     break;
                 case 9:
                     SetTemperatureOfChannel2();
                     break;
                 case 10:
                     SetYear();
                     break;
                 case 11:
                     SetMonth();
                     break;
                 case 12:
                     SetDay();
                     break;
                 case 13:
                     SetHour();
                     break;
                 case 14:
                     SetMinute();
                     break;
             }
         }
         else if(KeyValue==NoKeyDown)
         {
             if(T2_counter>=100)            //每秒更新时间一次
             {
                 T2_counter=0;
                 UpdateTimeDate();
             }
         }
     }
}

⌨️ 快捷键说明

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