当前位置:网站首页>51 independent key basic experiment
51 independent key basic experiment
2022-07-05 03:07:00 【fifteen thousand four hundred and two】
Experimental principle :
Method of detecting keys :
Keyboard circuit diagram :

( One ) Row and column scanning ( The code is more complex )
First enter a column as 0, Others are 1( Determination of column coordinates ), Take turns to detect whether there is output in each row 0( Determination of row coordinates )
Then enter the next column in turn as 0, The rest are listed as 1, All keys can be detected after all columns are completed .
( Two ) Line reversal method
Place column line ( Output line ) All for 0, At this time, the line ( Input line ) If any output is 0 Then a key in this line is pressed .
Setting line ( Output line ) All for 0, At this time, the line ( Input line ) If any output is 0 Then a key in this column is pressed .
Experimental code :
#include "reg52.h"
typedef unsigned char u8;
typedef unsigned int u16;
void delay_10us(u16 ten_us); // The time delay function
u8 key_matrix_ranks_scan(void);
u8 key_matrix_filp_scan(void);
#define KEY_MATRIX_PORT P1
#define SMG_PORT P0
u8 gsmg_code[17]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};
void main() // Press the key S1-S16 Corresponding LED Wait for it to light up 0-F
{
u8 key=0;
while(1)
{
key=key_matrix_filp_scan();
if(key!=0)
SMG_PORT=~gsmg_code[key-1]; // The above array is a common Yin code , Take the inverse to get the common Yang code
}
}
void delay_10us(u16 ten_us)
{
while(ten_us--);
}
u8 key_matrix_filp_scan(void) // Line reversal scanning
{
u8 key_value=0;
KEY_MATRIX_PORT=0x0f; // Column scan
if(KEY_MATRIX_PORT!=0x0f)
{
delay_10us(1000); // Desquamation
if(KEY_MATRIX_PORT!=0x0f)
{
switch(KEY_MATRIX_PORT)
{
case 0x07:key_value=1;break;
case 0x0b:key_value=2;break;
case 0x0d:key_value=3;break;
case 0x0e:key_value=4;break;
}
KEY_MATRIX_PORT=0xf0; // Line scan
switch(KEY_MATRIX_PORT)
{
case 0x70:key_value=key_value;break;
case 0xb0:key_value=key_value+4;break;
case 0xd0:key_value=key_value+8;break;
case 0xe0:key_value=key_value+12;break;
}
while(KEY_MATRIX_PORT!=0xf0);
}
}else
key_value=0; // There is no key press return 0
return key_value; // Return to key number
}
u8 key_matrix_ranks_scan(void) // Determinant scan
{
u8 key_value=0;
KEY_MATRIX_PORT=0xf7; // Low level of the first column
if(KEY_MATRIX_PORT!=0xf7)
{
delay_10us(1000);
switch(KEY_MATRIX_PORT)
{
case 0x77:key_value=1;break;
case 0xb7:key_value=5;break;
case 0xd7:key_value=9;break;
case 0xe7:key_value=13;break;
}
}
while(KEY_MATRIX_PORT!=0xf7); // Wait for the key to release
KEY_MATRIX_PORT=0xfb;
if(KEY_MATRIX_PORT!=0xfb)
{
delay_10us(1000);
switch(KEY_MATRIX_PORT)
{
case 0x7b:key_value=2;break;
case 0xbb:key_value=6;break;
case 0xdb:key_value=10;break;
case 0xeb:key_value=14;break;
}
}
while(KEY_MATRIX_PORT!=0xfb);
KEY_MATRIX_PORT=0xfd;
if(KEY_MATRIX_PORT!=0xfd)
{
delay_10us(1000);
switch(KEY_MATRIX_PORT)
{
case 0x7d:key_value=3;break;
case 0xbd:key_value=7;break;
case 0xdd:key_value=11;break;
case 0xed:key_value=15;break;
}
}
while(KEY_MATRIX_PORT!=0xfd);
KEY_MATRIX_PORT=0xfe;
if(KEY_MATRIX_PORT!=0xfe)
{
delay_10us(1000);
switch(KEY_MATRIX_PORT)
{
case 0x7e:key_value=4;break;
case 0xbe:key_value=8;break;
case 0xde:key_value=12;break;
case 0xee:key_value=16;break;
}
}
while(KEY_MATRIX_PORT!=0xfe);
return key_value;
}
experimental result :
In line with expectations , When the keyboard is pressed S1-S16 The corresponding nixie tube is on 0-F character .
边栏推荐
- 腾讯云,实现图片上传
- Voice chip wt2003h4 B008 single chip to realize the quick design of intelligent doorbell scheme
- Share the newly released web application development framework based on blazor Technology
- D3js notes
- Devtools的簡單使用
- Qrcode: generate QR code from text
- 问题解决:AttributeError: ‘NoneType‘ object has no attribute ‘append‘
- Flume配置4——自定义MYSQLSource
- Cut! 39 year old Ali P9, saved 150million
- Kuboard
猜你喜欢

Cut! 39 year old Ali P9, saved 150million

C file in keil cannot be compiled

SPI and IIC communication protocol

The perfect car for successful people: BMW X7! Superior performance, excellent comfort and safety

Tencent cloud, realize image upload

Accuracy problem and solution of BigDecimal

The perfect car for successful people: BMW X7! Superior performance, excellent comfort and safety

Three line by line explanations of the source code of anchor free series network yolox (a total of ten articles, which are guaranteed to be explained line by line. After reading it, you can change the

Devtools的简单使用

Elfk deployment
随机推荐
SQL injection exercise -- sqli Labs
Pat class a 1162 postfix expression
Apache build web host
2.常见的请求方法
腾讯云,实现图片上传
[200 opencv routines] 99 Modified alpha mean filter
Azkaban actual combat
Ubantu disk expansion (VMware)
Breaking the information cocoon - my method of actively obtaining information - 3
The database and recharge are gone
Linux Installation redis
Design and implementation of community hospital information system
The latest blind box mall, which has been repaired very popular these days, has complete open source operation source code
IPv6 experiment
[Yu Yue education] National Open University autumn 2018 8109-22t (1) monetary and banking reference questions
Design and implementation of kindergarten management system
How to make OS X read bash_ Profile instead of Profile file - how to make OS X to read bash_ profile not . profile file
Jd.com 2: how to prevent oversold in the deduction process of commodity inventory?
Last words record
1.五层网络模型