📄 key.c
字号:
#define _KEY_
#include <iom16.h>
#include <string.h>
#include "lcd.h"
#include "main.h"
#include "key.h"
#include "count.h"
#include <stdio.h>
//全局变量
extern double have_drawed;//已经抽酒的数量
extern long want_to_draw_pulse;//想要抽酒量的脉冲数
extern long pulse;
extern unsigned int have_drawed_int;
extern unsigned int have_drawed_decimal;
//double bak;//保存想抽酒的数量,用于暂停时求还剩下多少没抽
unsigned char KeySet[]=
{
0x31,0x32,0x33,0x34,//1,2,3,4
0x35,0x36,0x37,0x38,//5,6,7,8
0x39,0x30,0x2E//9,0,.
};
//键盘初始化
void Key_Init(void)
{
DDRD = 0xF3;//PD2(INT0)IN
MCUCR = 0x3A;//省电模式
//GICR = 0x40;//允许外部INT0中断,低电平触发
DDRA = 0xF0;//反转PORTB I/O方向.PA0~3输入(行),PA4~7输出(列)
PORTA = 0x0F;//置行为低电平。行为输出,低电平;列为输入,高电平
//want_to_draw = 0.0;
meter = 107.512;
len = 0;
len = 0;
KeyDown = 0;
num = 0;
flag = 0;
flag1 = 0;
key_status = KEY_NO;
Key_Len = KEY_LEN_OIL;
Key_Dot = 0;
Key_In = 0.0;
machine_status = MACHINE_STOP;
}
//将键盘输入的数量转换为want_to_draw
void draw(void)
{
unsigned int temp = len;
//unsigned int i = 0;
if(temp >= 1)//输入数量的情况
{
want_to_draw = Key_In ;
}
else//temp<=0没有输入数量直接抽酒,表示无限抽酒,先用1000000表示无限大
{
want_to_draw = 1000000;
}
AmountToPulse(want_to_draw);
num = 0;
len = 0;
flag = 0;
//bak = want_to_draw;
}
#pragma vector=INT0_vect
__interrupt void INT0_vect_isr(void)
{
}
void ReadKey(void)
{
unsigned char b;
unsigned char temp;
unsigned char i;
PORTA = 0x0f;
temp = PINA & 0x0F;
//temp = (~temp) & 0x0f;
switch(key_status)
{
case KEY_NO:
if(temp != 0x0f)
{
key_status = KEY_START;
Key_Temp = temp;
}
break;
case KEY_START:
if(temp == 0x0f)
key_status = KEY_NO;
else
if(Key_Temp == temp)
key_status = KEY_PRESS;
break;
case KEY_PRESS:
for(i = 0; i < 4; i++)
{ //高4位为输出,低4位为输入,高4位一次输出低电平
b = (~(1 << (4 + i))) | 0x0f;
//temp = 1 << i | 0xf0;
PORTA = b;
asm("NOP");
asm("NOP");
asm("NOP");
asm("NOP");
b = PINA & 0x0f;
if(b != 0x0f)
break;
}
if(temp == 0x0e)
Key = i;
else
if(temp == 0x0d)
Key = 4 + i;
else
if(temp == 0x0b)
Key = 8 + i;
else
if(temp == 0x07)
Key = 12 + i;
key_status = KEY_WAIT;
break;
case KEY_WAIT:
if(temp == 0x0f)
key_status = KEY_RELEASE;
break;
default:
break;
}
}
void key_action()
{
KeyDown = 0;
//数字键
switch (Key)
{
case 0: // 0
case 1: // 1
case 2: // 2
case 3: // 3
case 4: // 4
case 5: // 5
case 6: // 6
case 7: // 7
case 8: // 8
case 9: // 9
if((machine_status == MACHINE_SET_OIL) || (machine_status == MACHINE_SET_CON ))
{
if( len < Key_Len)
{
if(Key_Dot == 0)
{
if(Int_Key_In < Int_Key_Len)
{
array[len] = Key+0x30;
Key_In *= 10.0;
Key_In += (double)Key ;
len += 1;
Int_Key_In ++;
}
else
{
Beep(100,3);
}
}
else
{
if(Dot_Key_In < Dot_Key_Len)
{
array[len] = Key+0x30;
Dot_Count /= 10.0;
Key_In += ((double)Key ) * Dot_Count;
Dot_Key_In ++;
len += 1;
}
else
{
Beep(100,3);
}
}
array[len] = 0;
if(machine_status == MACHINE_SET_OIL)
{
clear_area(1,6,9);
Print_Disp(1,6,Key_In,1);
}
else
{
clear_area(1,6,9);
Print_Disp(1,6,Key_In,3);
}
}
}
break;
case 10: //小数点
if((machine_status == MACHINE_SET_OIL) || (machine_status == MACHINE_SET_CON ))
{
if(( len < Key_Len) && (Key_Dot == 0))
{
array[len] = '.';
Key_Dot = 1;
len += 1;
array[len] = 0;
Dot_Count = 1.0;
Dot_Key_In = 0;
if(machine_status == MACHINE_SET_OIL)
{
Dot_Key_Len = Dot_LEN_OIL;
//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);
}
else
{
Dot_Key_Len = Dot_LEN_CON;
//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;
//cancel ?
case 11:
if(machine_status == MACHINE_SET_OIL)
{
clear_area(1,7,8);
Lcd_write_hanzi_string_GH(1,0,"数量:");//数量:
len = 0;
key_status = KEY_NO;
Key_Len = KEY_LEN_OIL;
Key_Dot = 0;
Key_In = 0.0;
Dot_Count = 1.0;
Dot_Key_In = 0;
Int_Key_In = 0;
num = 1;
//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);
}
if(machine_status == MACHINE_SET_CON ) //
{
key_status = KEY_NO;
Key_Len = KEY_LEN_OIL;
Key_Dot = 0;
Key_In = 0.0;
Dot_Count = 1.0;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -