«Это 17-й день моего участия в ноябрьском испытании обновлений. Подробную информацию об этом событии см.:Вызов последнего обновления 2021 г."
Мелкие кодовые фермеры для президента, кхм, смеете говорить, что ключи нельзя делать ради знаний?
Независимые клавиши и матричные клавиши
Независимые ключи
шаблон
После нажатия кнопки часто возникает проблема дрожания.Эластичность самой кнопки, нажатие или отпускание кнопки сформирует нестабильный процесс воздействия.Этот процесс занимает определенное время, поэтому микроконтроллер не может считать Статус ввода-вывода во время этого процесса. , который может быть задержан программно или аппаратно.
Схема
Простая функция кнопок (для умных машин можно наклониться)
процесс показан
Причина того, что GIF не сделан, заключается в том, что после завершения прошло не менее 1M, из-за чего моя опечатка была вставлена, и я не стал бы ее отображать, поэтому я отправил ее на станцию B, а станция B будет моей видеотекой. в будущем.
Функции
Кнопки сверху - это всего лишь один клик и один клик.Ничего привлекательного, нет яркого пятна, поэтому мы нажимаем его и начинаем сначала.
Демонстрация полуфабриката
Добавлено отображение долгого нажатия
нищий дисплей
//按键扫描
void Key_Scan_Drive()
{
static bit flag = 0;//长短按标志
static bit key_down = 0;//按下标志,由于双击也用这个,所以标记范围得扩大
static u8 count1 = 0;//计数器1,因为100以内,所以u8足够了
static u16 count2 = 0;//计数器2,大于255就用u16
if(key_down)//检测按键是否被按下过
{
count2++;
if(count2>250)
{
count2 = 0;
flag = 1;
//长按程序
LCD12864_Write_Cmd(0x8c);
LCD12864_Write_Data(0x30);
LCD12864_Write_Data(0x30+LCD12864_Num_Buffer[1]);
}
if(KEY1)
{
key_down = 0;//松开就把标志清零
count2 = 0;
if(flag)
{
flag = 0;
}
else
{
//短按程序
LCD12864_Write_Cmd(0x8c);
LCD12864_Write_Data(0x30);
LCD12864_Write_Data(0x30+LCD12864_Num_Buffer[3]);
}
}
}
else
{
if(!KEY1)
{
count1++;
if(count1>20)
{
count1 = 0;
if(!KEY1)
{
key_down = 1;
}
}
}
}
}
Так же есть функция всегда добавлять и добавлять, но код в принципе аналогичен, заново писать не надо, это все повторная аналогичная работа
оргазм
Матричная клавиатура
P6^0 P6^1 P6^2 P6^3 четыре строки — сканирование строк, P6^4 P6^5 P6^6 P6^7 четыре строки — сканирование столбцов. 4 строки и 4 столбца используют в общей сложности 8 портов ввода-вывода, которые могут сканировать состояние переключателя 16 клавиш, что является преимуществом матричной клавиатуры.(резистор должен быть подключен последовательно между портами ввода-вывода).
Схема
анализировать
#include "all.h"
u8 code KEY4x4_Buffer[4] = {0xef,0xdf,0xbf,0x7f};//列输入 /列控制数组
u8 xdata KEY4x4_Read_Byte = 0; //读到/检测到的字节
void KEY4x4_Drive_Init()
{
P6M1 = 0;
P6M0 = 0;
}
void KEY4x4_Scan_Drive()
{
static xdata u16 count = 0;
u8 i = 0;
u8 j = 0;//循环扫描变量
u8 Value = 0;//检测行变量
count++;
if(count>10)//通过计数的方式来减少循环次数,还消抖
{
count = 0;
for(i = 0;i<4;i++)//列输入 /列控制
{
P6 = KEY4x4_Buffer[i];
Value = 0x08;
for(j = 0;j<4;j++)
{
if(!(Value&P6))//哪个位被拉成0了就会被检测到
{
KEY4x4_Read_Byte = j*4+i+1;
}
Value >>= 1;//右移一位
}
}
P6 = 0xff;//P6口用完拉高,因为以后会用到他
}
}