找回密码
 注册
关于网站域名变更的通知
查看: 141|回复: 2
打印 上一主题 下一主题

单片机4*4矩阵键盘接口电路程序 Proteus仿真图

  [复制链接]

该用户从未签到

跳转到指定楼层
1#
发表于 2022-7-5 10:11 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式

EDA365欢迎您登录!

您需要 登录 才可以下载或查看,没有帐号?注册

x
设计一个单片机键盘接口电路,实现4*4矩阵键盘,用数码管显示相应按键内容,当指定某一个按键连续被按三次时,显示“口”字符号,按键有去抖动功能,数码管可以通过清零键清零。
9 Y1 J5 s1 W( _. _5 W
0 V- \* v- d+ i! _8 g+ a
仿真原理图
$ x# _3 C- L) M
+ |8 r) v3 s0 v单片机源程序如下:* b! y7 ~" A  @8 D3 R. x$ t& \- p$ y
  • //0x3F, 0x06, 0x5B, 0x4F, 0x66, 0x6D, 0x7D, 0x07, 0x7F, 0x6F, 0x77, 0x7C, 0x39, 0x5E, 0x79, 0x71 共阴
  • //0xC0, 0xF9, 0xA4, 0xB0, 0x99, 0x92, 0x82, 0xF8, 0x80, 0x90, 0x88, 0x83, 0xC6, 0xA1, 0x86, 0x8E 共杨
  • #include <reg52.h>
  • #define GPIO_DIG    P0   //段选数码管
  • #define GPIO_KEY     P2      //矩阵按键
  • sbit led = P1^0;
  • typedef unsigned char uchar;
  • typedef unsigned int uint;
  • uint keynum = 0;
  • uint count=0;
  • uchar code table[]={0x3F, 0x06, 0x5B, 0x4F, 0x66, 0x6D, 0x7D, 0x07, 0x7F, 0x6F, 0x77, 0x7C, 0x39, 0x5E, 0x79, 0x71};
  • uchar code table0[]={0x5c};
  • void delay( uchar i ){
  •     while( i-- );
  • }
  • void key44scan(void)//键盘扫描函数
  • {
  • //                uint count=0;
  •     uint t;
  •     P2=0xfe;
  •     t=P2;
  •     t=t&0xf0;
  •                 if(t!=0xf0){
  •                         delay(100);
  •                         if(t!=0xf0)
  •                         {
  •                                         t=P2;
  •                                         count++;
  •                                         switch(t)
  •                                         {
  •                                                                 case 0xee:keynum=1; break;
  •                                                                 case 0xde:keynum=5; break;
  •                                                                 case 0xbe:keynum=9; break;
  •                                                                 case 0x7e:keynum=13; break;
  •                                         }
  •                                         P0=table[keynum];
  •                                         while(t!=0xf0)
  •                                         {
  •                                                          t=P2;
  •                                                          t=t&0xf0;
  •                                         }
  •                         }
  •                 }
  •                 P2=0xfd;
  •                 t=P2;
  •                 t=t&0xf0;
  •                 if(t!=0xf0){
  •                         delay(100);
  •                         if(t!=0xf0)
  •                         {
  •                                         t=P2;
  •                                         count++;
  •                                         switch(t)
  •                                         {
  •                                                                 case 0xed:keynum=2; break;
  •                                                                 case 0xdd:keynum=6; break;
  •                                                                 case 0xbd:keynum=10; break;
  •                                                                 case 0x7d:keynum=14; break;
  •                                         }
  •                                         P0=table[keynum];
  •                                         while(t!=0xf0)
  •                                         {
  •                                                          t=P2;
  •                                                          t=t&0xf0;
  •                                         }
  •                         }
  •                 }
  •                 P2=0xfb;
  •                 t=P2;
  •                 t=t&0xf0;
  •                 if(t!=0xf0){
  •                         delay(100);
  •                         if(t!=0xf0)
  •                         {
  •                                         t=P2;
  •                                         count++;
  •                                         switch(t)
  •                                         {
  •                                                                 case 0xeb:keynum=3; break;
  •                                                                 case 0xdb:keynum=7; break;
  •                                                                 case 0xbb:keynum=11; break;
  •                                                                 case 0x7b:keynum=15; break;
  •                                         }
  •                                         P0=table[keynum];
  •                                                         while(t!=0xf0)
  •                                         {
  •                                                          t=P2;
  •                                                          t=t&0xf0;
  •                                         }
  •                         }
  •                 }
  •                 P2=0xf7;
  •                 t=P2;
  •                 t=t&0xf0;
  •                 if(t!=0xf0){
  •                         delay(100);
  •                         if(t!=0xf0)
  •                         {
  •                                         t=P2;
  •                                         count++;
  •                                         switch(t)
  •                                         {
  •                                                                 case 0xe7:keynum=4; break;
  •                                                                 case 0xd7:keynum=8; break;
  •                                                                 case 0xb7:keynum=12; break;
  •                                                                 case 0x77:keynum=0; break;
  •                                         }
  •                                         P0=table[keynum];
  •                                         while(t!=0xf0)
  •                                         {
  •                                                          t=P2;
  •                                                          t=t&0xf0;
  •                                         }
  •                         }
  •                 }
  • //                        if(count==3){
  • //                                                count = 0;
  • //                                                led =~ led;
  • //                                                P0=table0[0];
  • //                                                delay(1000);
  • //                                        }
  • }
  • void main (){
  •                 led = 0;
  •     while(1) {
  •                                         key44scan();
  •                                         if(count==3){
  •                                                 //count = 0;
  •                                                 led =~ led;
  •                                                 P0=table0[0];
  •                                         //        delay(1000);
  •                                         }
  •                                         if(count==4){
  •                                                 count = 0;
  •                                                 led =~ led;
  •                                                 P0=table[0];
  •                                         //        delay(1000);
  •                                         }
  •     }
  • }6 S* g! G# f7 l4 w

1 c, ~# w9 `, ?$ z3 R+ T  x- v: J6 r7 Z9 ?* T% h+ M% Y* e; k
3 O+ i: f, W8 L5 o7 s
- ]% t$ q+ d1 s9 j7 t0 }% f

该用户从未签到

2#
发表于 2022-7-5 11:05 | 只看该作者
认真学习技术上的知识

该用户从未签到

3#
发表于 2022-7-5 13:43 | 只看该作者
帮助他人,解决问题,提升自己。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

推荐内容上一条 /1 下一条

EDA365公众号

关于我们|手机版|EDA365电子论坛网 ( 粤ICP备18020198号-1 )

GMT+8, 2025-6-29 05:56 , Processed in 0.078125 second(s), 26 queries , Gzip On.

深圳市墨知创新科技有限公司

地址:深圳市南山区科技生态园2栋A座805 电话:19926409050

快速回复 返回顶部 返回列表