休憩小站!

补充能量,继续奋斗!

Proteus仿真51单片机矩阵键盘错误

跟着视频学习51单片机,学到了矩阵键盘后,怎么都不会成功,发现这里面有个BUG。

有人还专门就此问题写了一个论文。

image.png

image.png

这个问题困扰了一天,我找了很多办法,终于成功实现了一种,贴在这里:

image.png

#include "reg51.h"

sbit L1=P1^0;

sbit L2=P1^1;

sbit L3=P1^2;

sbit L4=P1^3;

unsigned s[]={0x3F, 0x06, 0x5B, 0x4F, 0x66, 0x6D, 0x7D, 0x07,0x7F, 0x6F, 0x77, 0x7C, 0x39, 0x5E, 0x79, 0x71};

void delay(unsigned int n)

{

unsigned int i=0,j=0;

for (i=0;i<n;i++)

{

for (j=0;j<120;j++);

}

}

void key_scan()

{

P1=0xef;

if (L1 == 0) P0=~s[0];

if (L2 == 0) P0=~s[4];

if (L3 == 0) P0=~s[8];

if (L4 == 0) P0=~s[12];

delay(10);

P1=0xdf;

if (L1 == 0) P0=~s[1];

if (L2 == 0) P0=~s[5];

if (L3 == 0) P0=~s[9];

if (L4 == 0) P0=~s[13];

delay(10);

P1=0xbf;

if (L1 == 0) P0=~s[2];

if (L2 == 0) P0=~s[6];

if (L3 == 0) P0=~s[10];

if (L4 == 0) P0=~s[14];

delay(10);

P1=0x7f;

if (L1 == 0) P0=~s[3];

if (L2 == 0) P0=~s[7];

if (L3 == 0) P0=~s[11];

if (L4 == 0) P0=~s[15];

delay(10);

}

void main()

{

while(1)

{

key_scan();

}

}

静态显示键值.PDF


发表评论:

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

«    2025年3月    »
12
3456789
10111213141516
17181920212223
24252627282930
31
控制面板
您好,欢迎到访网站!
  查看权限
网站分类
搜索
最新留言
    文章归档
    网站收藏
      友情链接
      • 订阅本站的 RSS 2.0 新闻聚合

      Powered By Z-BlogPHP 1.7.2

      Copyright Your WebSite.Some Rights Reserved.

      沪ICP备2022026513号-1