找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 8812|回复: 6
收起左侧

单片机矩阵键盘控制16个led灯(仿真+代码)

[复制链接]
ID:452210 发表于 2018-12-22 19:38 | 显示全部楼层 |阅读模式
矩阵键盘控制16 个led灯。
仿真原理图如下(proteus仿真工程文件可到本帖附件中下载)

仿真图

仿真图
0.png

单片机源程序如下:
  1. #include<reg52.h>
  2. sbit LED1 = P1^0;
  3. sbit LED2 = P1^1;
  4. sbit LED3 = P1^2;
  5. sbit LED4 = P1^3;
  6. sbit LED5 = P1^4;
  7. sbit LED6 = P1^5;
  8. sbit LED7 = P1^6;
  9. sbit LED8 = P1^7;
  10. sbit LED9 = P3^0;
  11. sbit LED10 = P3^1;
  12. sbit LED11 = P3^2;
  13. sbit LED12 = P3^3;
  14. sbit LED13 = P3^4;
  15. sbit LED14 = P3^5;
  16. sbit LED15 = P3^6;
  17. sbit LED16 = P3^7;
  18. sbit P24 = P2^4;
  19. sbit P25 = P2^5;
  20. sbit P26 = P2^6;
  21. sbit P27 = P2^7;
  22. void delay_ms(unsigned int);
  23. void main(void)
  24. {
  25. while(1)
  26.   {
  27.    P2 = 0xfe;
  28.    if(P24 == 0){LED1 = !LED1;delay_ms(500);}
  29.       else if(P25 == 0){LED2 = !LED2;delay_ms(500);}
  30.       else if(P26 == 0){LED3 = !LED3;delay_ms(500);}
  31.       else if(P27 == 0){LED4 = !LED4;delay_ms(500);}
  32.    P2 = 0xfd;
  33.    if(P24 == 0){LED5 = !LED5;delay_ms(500);}
  34.       else if(P25 == 0){LED6 = !LED6;delay_ms(500);}
  35.       else if(P26 == 0){LED7 = !LED7;delay_ms(500);}
  36.       else if(P27 == 0){LED8 = !LED8;delay_ms(500);}
  37.    P2 = 0xfb;
  38.    if(P24 == 0){LED9 = !LED9;delay_ms(500);}
  39.       else if(P25 == 0){LED10 = !LED10;delay_ms(500);}
  40.       else if(P26 == 0){LED11 = !LED11;delay_ms(500);}
  41.       else if(P27 == 0){LED12 = !LED12;delay_ms(500);}
  42.    P2 = 0xf7;
  43.    if(P24 == 0){LED13 = !LED13;delay_ms(500);}
  44.       else if(P25 == 0){LED14 = !LED14;delay_ms(500);}
  45.       else if(P26 == 0){LED15 = !LED15;delay_ms(500);}
  46.       else if(P27 == 0){LED16 = !LED16;delay_ms(500);}
  47.   }

  48. }

  49. void delay_ms(unsigned int dt)
  50. {
  51. register unsigned char bt,ct;
  52. for (;dt;dt--)
  53.    for(ct=2;ct;ct--)
  54.       for(bt=250;--bt;);
  55. }
复制代码

所有资料51hei提供下载:
矩阵键盘控制led灯.rar (36.5 KB, 下载次数: 96)

评分

参与人数 1黑币 +50 收起 理由
admin + 50 共享资料的黑币奖励!

查看全部评分

回复

使用道具 举报

ID:887405 发表于 2021-3-1 18:21 | 显示全部楼层
谢谢分享!正在学习这个
回复

使用道具 举报

ID:887405 发表于 2021-3-1 18:22 | 显示全部楼层
谢谢分享!正在学习这个!就是还不理解,学习中……
回复

使用道具 举报

ID:839835 发表于 2021-3-2 16:46 | 显示全部楼层
建议题主把sbit led=p0;改为uint16_t,用一个16位数据保存16个led口。比如
    uint16_t led=P0;
    led=P3|(led<<8);
    然后led就可以保存所有16个口的数据状态了,代码直观简洁
回复

使用道具 举报

ID:883031 发表于 2021-3-4 14:51 | 显示全部楼层
xunzhaod 发表于 2021-3-2 16:46
建议题主把sbit led=p0;改为uint16_t,用一个16位数据保存16个led口。比如
    uint16_t led=P0;
    led ...

好建议,
回复

使用道具 举报

ID:500175 发表于 2021-5-4 23:08 | 显示全部楼层
感谢感谢 确实很厉害 学习一下
回复

使用道具 举报

ID:74649 发表于 2024-4-3 14:58 | 显示全部楼层
果断收藏,谢谢你的分享。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

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