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

📄 key.c

📁 这是一个AVR的单片机程式。能实现对一个中断端口进行计数、显示。有比较全面的按键功能。
💻 C
📖 第 1 页 / 共 2 页
字号:
                    Dot_Key_In = 0;
                    Int_Key_In = 0;
                    clear_area(1,7,8);
                    Lcd_write_hanzi_string_GH(1,0,"常数:");
                    num = 1; //num=1表示'仪表常数'键已经按过一次
                    flag = 1;
                    len = 0;
                   //sprintf(Disp_Buff,"%   3.3f",Key_In);
                   //Lcd_write_string(1,6,(unsigned char*)&Disp_Buff);
                    clear_area(1,6,9);
                    Print_Disp(1,6,Key_In,3);

            }
           break;

          case 15:          //设置抽油数量
            if((machine_status & 0x189) != 0)
            {
               if(num==0)
               {
                   machine_status = MACHINE_SET_OIL;
                   Key_Len = KEY_LEN_CON ;
                   key_status = KEY_NO;
                   Key_Len = KEY_LEN_OIL;
                   Key_Dot = 0;
                   Key_In = 0.0;
                   Dot_Count = 1.0;
                   clear_prog();//清显示RAM
                   Lcd_write_hanzi_string_GH(0,4,"欢迎光临");//欢迎光临
                   Lcd_write_hanzi_string_GH(1,0,"数量:");//数量:
                   Lcd_write_hanzi_string_GH(3,0,"设置数量");//数量:
                   num +=1; //
                   flag = 1;
                   flag1 = 0;
                   Lcd_write_string(1,7,array);
                   //sprintf(Disp_Buff,"%6.1f",Key_In);
                   //Lcd_write_string(1,6,(unsigned char*)&Disp_Buff);
                   clear_area(1,6,9);
                   Print_Disp(1,6,Key_In,1);
                   Int_Key_Len = Int_LEN_OIL;
                   Int_Key_In = 0;
               }
               else             //
               {
                    clear_area(3,0,16);
                    Lcd_write_hanzi_string_GH(3,0,"数量为:");//抽酒:
                    //Lcd_write_string(3,7,array);
                    machine_status = MACHINE_SET_OIL_OK;
                    Key_Len = KEY_LEN_OIL ;
                    if(Key_In == 0.0)
                        want_to_draw = 100000.0;
                    else
                        want_to_draw = Key_In ;
                    Want_To_Draw = want_to_draw;
                    AmountToPulse(want_to_draw);
                    num = 0;
                    len = 0;
                    flag = 0;
                    flag1 = 0;
                    //sprintf(Disp_Buff,"%6.1f",want_to_draw);
                    //Lcd_write_string(3,8,(unsigned char*)&Disp_Buff);
                    clear_area(3,7,8);
                    Print_Disp(3,7,want_to_draw,1);
               }
            }
              break;

          case 12:          //抽酒/暂停:按开始键开始抽酒,置PD1,PD7为高,PD3为低(酒泵,电磁阀开;流量计低电平)
            if((machine_status != MACHINE_SET_OIL) || (machine_status != MACHINE_SET_CON ) || (machine_status != MACHINE_STOP ))
            {
               if(machine_status == MACHINE_SET_OIL_OK)
                    {
                       Lcd_write_hanzi_string_GH(1,0,"数量:");//数量:
                       meter = METER;
                       if(meter == 0.0)
                            meter = 107.512;
                       want_to_draw = Want_To_Draw;
                       if(want_to_draw == 0.0)
                            want_to_draw = 100000.0;
                       //sprintf(Disp_Buff,"%6.1f",want_to_draw);
                       //Lcd_write_string(1,6,(unsigned char*)&Disp_Buff);
                       clear_area(1,6,9);
                       Print_Disp(1,6,want_to_draw,1);
                       clear_area(3,0,16);
                       Lcd_write_hanzi_string_GH(3,0,"抽酒");//抽酒:
                       machine_status = MACHINE_DRAW;
                       Lcd_write_hanzi_string_GH(2,0,"已抽:");//已抽:
                       //sprintf(Disp_Buff,"%6.1f ",have_drawed);
                       //Lcd_write_string(2,6,(unsigned char*)&Disp_Buff);
                       clear_area(2,6,9);
                       Print_Disp(2,6,have_drawed,1);
                       times = 0;
                       Valve_H;
                       Pump_H;
                       flag1 = 1;
                       GICR = 0xC0;//开中断1,允许计量	
                    }
               else
               if((machine_status == MACHINE_DRAW) || (machine_status == MACHINE_RESTART))//暂停
                {
                       Lcd_write_hanzi_string_GH(1,0,"数量:");//数量:
                       meter = METER;
                       if(meter == 0.0)
                            meter = 107.512;
                       want_to_draw = Want_To_Draw;
                       if(want_to_draw == 0.0)
                            want_to_draw = 100000.0;
                       //sprintf(Disp_Buff,"%6.1f",want_to_draw);
                       //Lcd_write_string(1,6,(unsigned char*)&Disp_Buff);
                     clear_area(3,0,16);
                     Lcd_write_hanzi_string_GH(3,0,"暂停");//抽酒:
                     machine_status = MACHINE_PAUSE;
                     //DDRD = 0xf3;
                     //PORTD = 0x0c;
                     Valve_L;
                     Pump_L;
                     flag1 = 2;
                     GICR = 0x00;//开中断1,允许计量	
                     clear_area(1,6,9);
                     Print_Disp(1,6,want_to_draw,1);
                }
               else
               if(machine_status == MACHINE_PAUSE)//暂停
                {
                     clear_area(3,0,16);
                     Lcd_write_hanzi_string_GH(3,0,"继续");//抽酒:
                     machine_status = MACHINE_RESTART;
                     Valve_H;
                     Pump_H;
                     flag1 = 1;
                     GICR = 0xC0;//开中断1,允许计量	
                     clear_area(2,6,9);
                     Print_Disp(2,6,have_drawed,1);
                 }
               else
               if((machine_status == MACHINE_STOP) || (machine_status == MACHINE_SET_CON_OK))//没有输入数值,直接开始抽酒
                {
                       Lcd_write_hanzi_string_GH(1,0,"数量:");//数量:
                       meter = METER;
                       if(meter == 0.0)
                            METER = meter = 107.512;
                       want_to_draw = Want_To_Draw;
                       if(want_to_draw == 0.0)
                            Want_To_Draw = want_to_draw = 100000.0;
                       //sprintf(Disp_Buff,"%6.1f",want_to_draw);
                       //Lcd_write_string(1,6,(unsigned char*)&Disp_Buff);
                       clear_area(1,6,9);
                       Print_Disp(1,6,want_to_draw,1);
                       AmountToPulse(want_to_draw);
                    have_drawed = 0.0;
                    clear_area(3,0,16);
                     Lcd_write_hanzi_string_GH(3,0,"重新开始");
                     machine_status = MACHINE_RESTART;
                     pulse = 0;
                     Valve_H;
                     Pump_H;
                     flag1 = 1;
                     GICR = 0xC0;//开中断1,允许计量	
                 }

            }
           break;

          case 13:              //停止:置PD1,PD7为低,PD3为高(酒泵,电磁阀关;流量计高电平)
            if((machine_status & 0x54) != 0x00)
            {

                Valve_L;
                Pump_L;
                GICR = 0x40;//关中断1,不计量
                Extern_Driver(WORK_LED,OFF);
                machine_status = MACHINE_STOP;
                Lcd_write_hanzi_string_GH(2,0,"抽酒:");//抽酒:
                PulseToAmount(pulse);
                clear_area(2,6,9);
                Print_Disp(2,6,have_drawed,1);
                clear_area(3,0,16);
                Lcd_write_hanzi_string_GH(3,0,"停止抽酒");//抽酒:
                want_to_draw = 0.0;
                want_to_draw_pulse = 0;
                have_drawed = 0.0;
                pulse = 0;
                flag1 = 0;
            }
            break;

          case 14:              //仪表常数/删除
            if((machine_status & 0x1aa) != 0x00)
            {
               if(num==0)
               {
                    machine_status = MACHINE_SET_CON;
                    Key_Len = KEY_LEN_CON ;
                    key_status = KEY_NO;
                    Key_Dot = 0;
                    Key_In = 0.0;
                    Dot_Count = 1.0;
                   clear_prog();//清显示RAM
                   Lcd_write_hanzi_string_GH(0,4,"欢迎光临");//欢迎光临
                   Lcd_write_hanzi_string_GH(3,0,"设置仪表常数");//
                   Lcd_write_hanzi_string_GH(1,0,"常数:");//数量:
                   num +=1; //num=1表示'仪表常数'键已经按过一次
                   flag = 1;
                   clear_area(1,6,9);
                   Print_Disp(1,6,Key_In,3);
                   Int_Key_Len = Int_LEN_CON;
                   Int_Key_In = 0;
               }
               else             //第二次按'仪表常数'键表示确认(把仪表常数传给meter)
               {
                    machine_status = MACHINE_SET_CON_OK;
                    Key_Len = KEY_LEN_OIL ;
                    meter = Key_In;
                    if(meter == 0.0)
                        meter = 107.512;
                    METER = meter;
                    clear_area(3,0,16);
                    Lcd_write_hanzi_string_GH(3,0,"仪表常数:");//常数为:
                    num = 0;
                    len = 0;
                    flag = 0;
                    pulse = 0;
                   clear_area(3,9,6);
                   Print_Disp(3,9,meter,3);
               }
            }
            break;
         default:
              break;
     }
     //GICR |= 0x40;//允许外部中断0
}

void Extern_Driver(unsigned char Port,unsigned char state)
{
      if((state == ON) || ((state == HIGH)))
      {
        Extern |= Port;
      }
      else
      {
        Extern &= ~Port;
      }
    PORTB = Extern;
    HC575_CLK_HIGH;
    HC575_CLK_LOW;

}

void Beep(unsigned int Time,unsigned char Times)
{
    Beep_Time = Time ;
    Beep_Times = Times;
    Beep_Begin = 1;
}

⌨️ 快捷键说明

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