当前位置:网站首页>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 .
边栏推荐
- Acwing game 58 [End]
- Utilisation simple de devtools
- Apache Web page security optimization
- 1.五层网络模型
- Pat class a 1160 forever (class B 1104 forever)
- 2021 Li Hongyi machine learning (1): basic concepts
- Privatization lightweight continuous integration deployment scheme -- 01 environment configuration (Part 1)
- Character painting, I use characters to draw a Bing Dwen Dwen
- SFTP cannot connect to the server # yyds dry goods inventory #
- Moco V2 literature research [self supervised learning]
猜你喜欢
El select, El option drop-down selection box
Apache Web page security optimization
Pdf things
【LeetCode】404. Sum of left leaves (2 brushes of wrong questions)
SQL injection exercise -- sqli Labs
Sqoop command
Moco V2 literature research [self supervised learning]
Problem solving: attributeerror: 'nonetype' object has no attribute 'append‘
Azkaban安装部署
1. Five layer network model
随机推荐
Share the newly released web application development framework based on blazor Technology
Idea inheritance relationship
this+闭包+作用域 面试题
2.常见的请求方法
Use UDP to send a JPEG image, and UPD will convert it into the mat format of OpenCV after receiving it
有个疑问 flink sql cdc 的话可以设置并行度么, 并行度大于1会有顺序问题吧?
Why is this an undefined behavior- Why is this an undefined behavior?
Usage scenarios and solutions of ledger sharing
Azkaban installation and deployment
Scientific research: are women better than men?
Qrcode: generate QR code from text
FBO and RBO disappeared in webgpu
2021 Li Hongyi machine learning (1): basic concepts
Bumblebee: build, deliver, and run ebpf programs smoothly like silk
C file in keil cannot be compiled
Eight days of learning C language - while loop (embedded) (single chip microcomputer)
qrcode:将文本生成二维码
腾讯云,实现图片上传
問下,這個ADB mysql支持sqlserver嗎?
There is a question about whether the parallelism can be set for Flink SQL CDC. If the parallelism is greater than 1, will there be a sequence problem?