Спойлер
Код: Выделить всё
#define F_CPU 32000000UL
#include <inttypes.h>
#include <avr/io.h>
#include <avr/interrupt.h>
#include <avr/sleep.h>
#include <util/delay.h>
#include "keyboard.h"
#include "lcd_lib.h"
#define PAUSE 150
int k = 0;
int b = 0;
int i = 0;
int c = 0;
int cont = 0;
int col[5] = {0b00000000, 0b00000001, 0b00000010, 0b00000100, 0b00001000};
int row[6] = {0b00011111, 0b00011110, 0b00011101, 0b00011011, 0b00010111, 0b00001111};
unsigned char buf = 0;
unsigned char buttons[4];
void selectKey(int r, int c, int delay)
{
PORTD = col[r];
PORTC = row[c];
_delay_ms(PAUSE);
PORTC = row[0];
PORTD = col[0];
_delay_ms(delay);
}
void send(void)
{
selectKey(1, 5, PAUSE); // RES
selectKey(1, 4, PAUSE); // PRI
selectKey(1, 1, PAUSE); // TOT
selectKey(1, 2, PAUSE); // CAL
int i;
for ( i = 0; i < 4; i++)
{
selectKey(3, 5, PAUSE); // 0
}
selectKey(4, 5, PAUSE); // OK
selectKey(2, 2, PAUSE); // 1
}
void end(void)
{
selectKey(1, 4, PAUSE); // PRI
selectKey(1, 5, PAUSE); // RES
}
void fin(void)
{
LCD_Clear();
LCD_Goto(0, 0);
LCD_SendString("Kod otpravlen! ");
_delay_ms(1000);
LCD_Clear();
b = 0;
k = 0;
for (i = 0; i < 4; i++)
{
buttons[i] = 0;
}
cont = 0;
}
int main(void)
{
DDRD=0xFF;
DDRC=0xFF;
LCD_Init();
LCD_Goto(0, 0);
LCD_SendString("Vvedite ");
LCD_Goto(4, 1);
LCD_SendString("Koefitsent: ");
_delay_ms(2000);
LCD_Clear();
KEYB_Init();
while (1)
{
KEYB_ScanKeyboard();
buf = KEYB_GetKey();
if (buf)
{
if (b < 4 && buf != '*'&& buf != '#')
{
// Проверяем, есть ли еще место в массиве и выполняем ограничения на ввод
if (b == 0 && buf != '1')
{
LCD_Goto(0, 0);
LCD_SendString("Oshibka");
_delay_ms(2000);
LCD_Clear();
b = 0;
k = 0;
for (i = 0; i < 4; i++)
{
buttons[i] = 0;
}
continue; // Пропускаем ввод, если первый адрес массива не равен единице
}
if (b == 1 && (buf != '0' && buf != '1'))
{
LCD_Clear();
LCD_Goto(0, 0);
LCD_SendString("Oshibka");
_delay_ms(2000);
LCD_Clear();
b = 0;
k = 0;
for (i = 0; i < 4; i++)
{
buttons[i] = 0;
}
continue; // Пропускаем ввод, если второй адрес массива не равен нулю или единице
}
buttons[b++] = buf;
LCD_Goto(k++, 1);
LCD_WriteData(buf);
}
if (buf == '*')
{
for (c = 0; c < 4; c++)
{
if (buttons[c] >= '0' && buttons[c] <= '9')
{
int digit = buttons[c] - '0';
cont = cont * 10 + digit;
}
}
switch(cont)
{
case 1001:
send();
selectKey(3, 5, PAUSE);
selectKey(3, 5, PAUSE);
selectKey(2, 2, PAUSE);
end();
fin();
break;
case 1002:
send();
selectKey(3, 5, PAUSE);
selectKey(3, 5, PAUSE);
selectKey(3, 2, PAUSE);
end();
fin();
break;
case 1003:
send();
selectKey(3, 5, PAUSE);
selectKey(3, 5, PAUSE);
selectKey(4, 2, PAUSE);
end();
fin();
break;
case 1004:
send();
selectKey(3, 5, PAUSE);
selectKey(3, 5, PAUSE);
selectKey(2, 3, PAUSE);
end();
fin();
break;
case 1005:
send();
selectKey(3, 5, PAUSE);
selectKey(3, 5, PAUSE);
selectKey(3, 3, PAUSE);
end();
fin();
break;
case 1006:
send();
selectKey(3, 5, PAUSE);
selectKey(3, 5, PAUSE);
selectKey(4, 3, PAUSE);
end();
fin();
break;
case 1007:
send();
selectKey(3, 5, PAUSE);
selectKey(3, 5, PAUSE);
selectKey(2, 4, PAUSE);
end();
fin();
break;
case 1008:
send();
selectKey(3, 5, PAUSE);
selectKey(3, 5, PAUSE);
selectKey(3, 4, PAUSE);
end();
fin();
break;
case 1009:
send();
selectKey(3, 5, PAUSE);
selectKey(3, 5, PAUSE);
selectKey(4, 4, PAUSE);
end();
fin();
break;
case 1010:
send();
selectKey(3, 5, PAUSE);
selectKey(2, 2, PAUSE);
selectKey(3, 5, PAUSE);
end();
fin();
break;
case 1011:
send();
selectKey(3, 5, PAUSE);
selectKey(2, 2, PAUSE);
selectKey(2, 2, PAUSE);
end();
fin();
break;
case 1012:
send();
selectKey(3, 5, PAUSE);
selectKey(2, 2, PAUSE);
selectKey(3, 2, PAUSE);
end();
fin();
break;
case 1013:
send();
selectKey(3, 5, PAUSE);
selectKey(2, 2, PAUSE);
selectKey(4, 2, PAUSE);
end();
fin();
break;
case 1014:
send();
selectKey(3, 5, PAUSE);
selectKey(2, 2, PAUSE);
selectKey(2, 3, PAUSE);
end();
fin();
break;
case 1015:
send();
selectKey(3, 5, PAUSE);
selectKey(2, 2, PAUSE);
selectKey(3, 3, PAUSE);
end();
fin();
break;
case 1016:
send();
selectKey(3, 5, PAUSE);
selectKey(2, 2, PAUSE);
selectKey(4, 3, PAUSE);
end();
fin();
break;
case 1017:
send();
selectKey(3, 5, PAUSE);
selectKey(2, 2, PAUSE);
selectKey(2, 4, PAUSE);
end();
fin();
break;
case 1018:
send();
selectKey(3, 5, PAUSE);
selectKey(2, 2, PAUSE);
selectKey(3, 4, PAUSE);
end();
fin();
break;
case 1019:
send();
selectKey(3, 5, PAUSE);
selectKey(2, 2, PAUSE);
selectKey(4, 4, PAUSE);
end();
fin();
break;
case 1020:
send();
selectKey(3, 5, PAUSE);
selectKey(3, 2, PAUSE);
selectKey(3, 5, PAUSE);
end();
fin();
break;
case 1021:
send();
selectKey(3, 5, PAUSE);
selectKey(3, 2, PAUSE);
selectKey(2, 2, PAUSE);
end();
fin();
break;
case 1022:
send();
selectKey(3, 5, PAUSE);
selectKey(3, 2, PAUSE);
selectKey(3, 2, PAUSE);
end();
fin();
break;
case 1023:
send();
selectKey(3, 5, PAUSE);
selectKey(3, 2, PAUSE);
selectKey(4, 2, PAUSE);
end();
fin();
break;
case 1024:
send();
selectKey(3, 5, PAUSE);
selectKey(3, 2, PAUSE);
selectKey(2, 3, PAUSE);
end();
fin();
break;
case 1025:
send();
selectKey(3, 5, PAUSE);
selectKey(3, 2, PAUSE);
selectKey(3, 3, PAUSE);
end();
fin();
break;
case 1026:
send();
selectKey(3, 5, PAUSE);
selectKey(3, 2, PAUSE);
selectKey(4, 3, PAUSE);
end();
fin();
break;
case 1027:
send();
selectKey(3, 5, PAUSE);
selectKey(3, 2, PAUSE);
selectKey(2, 4, PAUSE);
end();
fin();
break;
case 1028:
send();
selectKey(3, 5, PAUSE);
selectKey(3, 2, PAUSE);
selectKey(3, 4, PAUSE);
end();
fin();
break;
case 1029:
send();
selectKey(3, 5, PAUSE);
selectKey(3, 2, PAUSE);
selectKey(4, 4, PAUSE);
end();
fin();
break;
case 1030:
send();
selectKey(3, 5, PAUSE);
selectKey(4, 2, PAUSE);
selectKey(3, 5, PAUSE);
end();
fin();
break;
case 1031:
send();
selectKey(3, 5, PAUSE);
selectKey(4, 2, PAUSE);
selectKey(2, 2, PAUSE);
end();
fin();
break;
case 1032:
send();
selectKey(3, 5, PAUSE);
selectKey(4, 2, PAUSE);
selectKey(3, 2, PAUSE);
end();
fin();
break;
case 1033:
send();
selectKey(3, 5, PAUSE);
selectKey(4, 2, PAUSE);
selectKey(4, 2, PAUSE);
end();
fin();
break;
case 1034:
send();
selectKey(3, 5, PAUSE);
selectKey(4, 2, PAUSE);
selectKey(2, 3, PAUSE);
end();
fin();
break;
case 1035:
send();
selectKey(3, 5, PAUSE);
selectKey(4, 2, PAUSE);
selectKey(3, 3, PAUSE);
end();
fin();
break;
case 1036:
send();
selectKey(3, 5, PAUSE);
selectKey(4, 2, PAUSE);
selectKey(4, 3, PAUSE);
end();
fin();
break;
case 1037:
send();
selectKey(3, 5, PAUSE);
selectKey(4, 2, PAUSE);
selectKey(2, 4, PAUSE);
end();
fin();
break;
case 1038:
send();
selectKey(3, 5, PAUSE);
selectKey(4, 2, PAUSE);
selectKey(3, 4, PAUSE);
end();
fin();
break;
case 1039:
send();
selectKey(3, 5, PAUSE);
selectKey(4, 2, PAUSE);
selectKey(4, 4, PAUSE);
end();
fin();
break;
case 1040:
send();
selectKey(3, 5, PAUSE);
selectKey(2, 3, PAUSE);
selectKey(3, 5, PAUSE);
end();
fin();
break;
case 1041:
send();
selectKey(3, 5, PAUSE);
selectKey(2, 3, PAUSE);
selectKey(2, 2, PAUSE);
end();
fin();
break;
case 1042:
send();
selectKey(3, 5, PAUSE);
selectKey(2, 3, PAUSE);
selectKey(3, 2, PAUSE);
end();
fin();
break;
case 1043:
send();
selectKey(3, 5, PAUSE);
selectKey(2, 3, PAUSE);
selectKey(4, 2, PAUSE);
end();
fin();
break;
case 1044:
send();
selectKey(3, 5, PAUSE);
selectKey(2, 3, PAUSE);
selectKey(2, 3, PAUSE);
end();
fin();
break;
case 1045:
send();
selectKey(3, 5, PAUSE);
selectKey(2, 3, PAUSE);
selectKey(3, 3, PAUSE);
end();
fin();
break;
case 1046:
send();
selectKey(3, 5, PAUSE);
selectKey(2, 3, PAUSE);
selectKey(4, 3, PAUSE);
end();
fin();
break;
case 1047:
send();
selectKey(3, 5, PAUSE);
selectKey(2, 3, PAUSE);
selectKey(2, 4, PAUSE);
end();
fin();
break;
case 1048:
send();
selectKey(3, 5, PAUSE);
selectKey(2, 3, PAUSE);
selectKey(3, 3, PAUSE);
end();
fin();
break;
case 1049:
send();
selectKey(3, 5, PAUSE);
selectKey(2, 3, PAUSE);
selectKey(4, 3, PAUSE);
end();
fin();
break;
case 1050:
send();
selectKey(3, 5, PAUSE);
selectKey(3, 3, PAUSE);
selectKey(3, 5, PAUSE);
end();
fin();
break;
case 1051:
send();
selectKey(3, 5, PAUSE);
selectKey(3, 3, PAUSE);
selectKey(2, 2, PAUSE);
end();
fin();
break;
case 1052:
send();
selectKey(3, 5, PAUSE);
selectKey(3, 3, PAUSE);
selectKey(3, 2, PAUSE);
end();
fin();
break;
case 1053:
send();
selectKey(3, 5, PAUSE);
selectKey(3, 3, PAUSE);
selectKey(4, 2, PAUSE);
end();
fin();
break;
case 1054:
send();
selectKey(3, 5, PAUSE);
selectKey(3, 3, PAUSE);
selectKey(2, 3, PAUSE);
end();
fin();
break;
case 1055:
send();
selectKey(3, 5, PAUSE);
selectKey(3, 3, PAUSE);
selectKey(3, 3, PAUSE);
end();
fin();
break;
case 1056:
send();
selectKey(3, 5, PAUSE);
selectKey(3, 3, PAUSE);
selectKey(4, 3, PAUSE);
end();
fin();
break;
case 1057:
send();
selectKey(3, 5, PAUSE);
selectKey(3, 3, PAUSE);
selectKey(2, 4, PAUSE);
end();
fin();
break;
case 1058:
send();
selectKey(3, 5, PAUSE);
selectKey(3, 3, PAUSE);
selectKey(3, 3, PAUSE);
end();
fin();
break;
case 1059:
send();
selectKey(3, 5, PAUSE);
selectKey(3, 3, PAUSE);
selectKey(4, 3, PAUSE);
end();
fin();
break;
case 1060:
send();
selectKey(3, 5, PAUSE);
selectKey(4, 3, PAUSE);
selectKey(3, 5, PAUSE);
end();
fin();
break;
case 1061:
send();
selectKey(3, 5, PAUSE);
selectKey(4, 3, PAUSE);
selectKey(2, 2, PAUSE);
end();
fin();
break;
case 1062:
send();
selectKey(3, 5, PAUSE);
selectKey(4, 3, PAUSE);
selectKey(3, 2, PAUSE);
end();
fin();
break;
case 1063:
send();
selectKey(3, 5, PAUSE);
selectKey(4, 3, PAUSE);
selectKey(4, 2, PAUSE);
end();
fin();
break;
case 1064:
send();
selectKey(3, 5, PAUSE);
selectKey(4, 3, PAUSE);
selectKey(2, 3, PAUSE);
end();
fin();
break;
case 1065:
send();
selectKey(3, 5, PAUSE);
selectKey(4, 3, PAUSE);
selectKey(3, 3, PAUSE);
end();
fin();
break;
case 1066:
send();
selectKey(3, 5, PAUSE);
selectKey(4, 3, PAUSE);
selectKey(4, 3, PAUSE);
end();
fin();
break;
case 1067:
send();
selectKey(3, 5, PAUSE);
selectKey(4, 3, PAUSE);
selectKey(2, 4, PAUSE);
end();
fin();
break;
case 1068:
send();
selectKey(3, 5, PAUSE);
selectKey(4, 3, PAUSE);
selectKey(3, 4, PAUSE);
end();
fin();
break;
case 1069:
send();
selectKey(3, 5, PAUSE);
selectKey(4, 3, PAUSE);
selectKey(4, 4, PAUSE);
end();
fin();
break;
case 1070:
send();
selectKey(3, 5, PAUSE);
selectKey(2, 4, PAUSE);
selectKey(3, 5, PAUSE);
end();
fin();
break;
case 1071:
send();
selectKey(3, 5, PAUSE);
selectKey(2, 4, PAUSE);
selectKey(2, 2, PAUSE);
end();
fin();
break;
case 1072:
send();
selectKey(3, 5, PAUSE);
selectKey(2, 4, PAUSE);
selectKey(3, 2, PAUSE);
end();
fin();
break;
case 1073:
send();
selectKey(3, 5, PAUSE);
selectKey(2, 4, PAUSE);
selectKey(4, 2, PAUSE);
end();
fin();
break;
case 1074:
send();
selectKey(3, 5, PAUSE);
selectKey(2, 4, PAUSE);
selectKey(2, 3, PAUSE);
end();
fin();
break;
case 1075:
send();
selectKey(3, 5, PAUSE);
selectKey(2, 4, PAUSE);
selectKey(3, 3, PAUSE);
end();
fin();
break;
case 1076:
send();
selectKey(3, 5, PAUSE);
selectKey(2, 4, PAUSE);
selectKey(4, 3, PAUSE);
end();
fin();
break;
case 1077:
send();
selectKey(3, 5, PAUSE);
selectKey(2, 4, PAUSE);
selectKey(2, 4, PAUSE);
end();
fin();
break;
case 1078:
send();
selectKey(3, 5, PAUSE);
selectKey(2, 4, PAUSE);
selectKey(3, 4, PAUSE);
end();
fin();
break;
case 1079:
send();
selectKey(3, 5, PAUSE);
selectKey(2, 4, PAUSE);
selectKey(4, 4, PAUSE);
end();
fin();
break;
case 1080:
send();
selectKey(3, 5, PAUSE);
selectKey(3, 4, PAUSE);
selectKey(3, 5, PAUSE);
end();
fin();
break;
case 1081:
send();
selectKey(3, 5, PAUSE);
selectKey(3, 4, PAUSE);
selectKey(2, 2, PAUSE);
end();
fin();
break;
case 1082:
send();
selectKey(3, 5, PAUSE);
selectKey(3, 4, PAUSE);
selectKey(3, 2, PAUSE);
end();
fin();
break;
case 1083:
send();
selectKey(3, 5, PAUSE);
selectKey(3, 4, PAUSE);
selectKey(4, 2, PAUSE);
end();
fin();
break;
case 1084:
send();
selectKey(3, 5, PAUSE);
selectKey(3, 4, PAUSE);
selectKey(2, 3, PAUSE);
end();
fin();
break;
case 1085:
send();
selectKey(3, 5, PAUSE);
selectKey(3, 4, PAUSE);
selectKey(3, 3, PAUSE);
end();
fin();
break;
case 1086:
send();
selectKey(3, 5, PAUSE);
selectKey(3, 4, PAUSE);
selectKey(4, 3, PAUSE);
end();
fin();
break;
case 1087:
send();
selectKey(3, 5, PAUSE);
selectKey(3, 4, PAUSE);
selectKey(2, 4, PAUSE);
end();
fin();
break;
case 1088:
send();
selectKey(3, 5, PAUSE);
selectKey(3, 4, PAUSE);
selectKey(3, 4, PAUSE);
end();
fin();
break;
case 1089:
send();
selectKey(3, 5, PAUSE);
selectKey(3, 4, PAUSE);
selectKey(4, 4, PAUSE);
end();
fin();
break;
case 1090:
send();
selectKey(3, 5, PAUSE);
selectKey(4, 4, PAUSE);
selectKey(3, 5, PAUSE);
end();
fin();
break;
case 1091:
send();
selectKey(3, 5, PAUSE);
selectKey(4, 4, PAUSE);
selectKey(2, 2, PAUSE);
end();
fin();
break;
case 1092:
send();
selectKey(3, 5, PAUSE);
selectKey(4, 4, PAUSE);
selectKey(3, 2, PAUSE);
end();
fin();
break;
case 1093:
send();
selectKey(3, 5, PAUSE);
selectKey(4, 4, PAUSE);
selectKey(4, 2, PAUSE);
end();
fin();
break;
case 1094:
send();
selectKey(3, 5, PAUSE);
selectKey(4, 4, PAUSE);
selectKey(2, 3, PAUSE);
end();
fin();
break;
case 1095:
send();
selectKey(3, 5, PAUSE);
selectKey(4, 4, PAUSE);
selectKey(3, 3, PAUSE);
end();
fin();
break;
case 1096:
send();
selectKey(3, 5, PAUSE);
selectKey(4, 4, PAUSE);
selectKey(4, 3, PAUSE);
end();
fin();
break;
case 1097:
send();
selectKey(3, 5, PAUSE);
selectKey(4, 4, PAUSE);
selectKey(2, 4, PAUSE);
end();
fin();
break;
case 1098:
send();
selectKey(3, 5, PAUSE);
selectKey(4, 4, PAUSE);
selectKey(3, 4, PAUSE);
end();
fin();
break;
case 1099:
send();
selectKey(3, 5, PAUSE);
selectKey(4, 4, PAUSE);
selectKey(4, 4, PAUSE);
end();
fin();
break;
case 1100:
send();
selectKey(2, 2, PAUSE);
selectKey(3, 5, PAUSE);
selectKey(3, 5, PAUSE);
end();
fin();
break;
}
}
if (b > 0&&buf == '#')
{
LCD_Clear();
LCD_Goto(0, 4);
LCD_SendString("Ochistka");
_delay_ms(2000);
LCD_Clear();
b = 0;
k = 0;
for (i = 0; i < 4; i++)
{
buttons[i] = 0;
}
}
}
}
return 0;
}


