登录  | 立即注册

游客您好!登录后享受更多精彩

扫一扫,访问微社区

QQ登录

只需一步,快速开始

开启左侧

[学习笔记] 矩阵按键

[复制链接]
发表于 2022-2-10 18:21:28 | 显示全部楼层 |阅读模式
学习笔记
学习科目: 单片机
学习安排: 跟随视频
开始时间: 2022-02-10
结束时间: 2022-02-10

  1. #include <reg52.h>
  2. sbit ENLED = P1^1;
  3. sbit P20 = P2^0;
  4. sbit P21 = P2^1;
  5. sbit P22 = P2^2;
  6. sbit P23 = P2^3;
  7. sbit KOUT1 = P2^4;
  8. sbit KOUT2 = P2^5;
  9. sbit KOUT3 = P2^6;
  10. sbit KOUT4 = P2^7;

  11. unsigned char code LedChar[] = {
  12. 0xC0, 0xF9, 0xA4, 0xB0, 0x99, 0x92, 0x82, 0xF8,
  13. 0x80, 0x90, 0x88, 0x83, 0xC6, 0xA1, 0x86, 0x8E
  14. };
  15. unsigned char KeySta[4][4] = {
  16.         {1,1,1,1},{1,1,1,1},{1,1,1,1},{1,1,1,1}
  17. };

  18. void main()
  19. {
  20.         unsigned char i,j;
  21.         unsigned char backup[4][4] = {
  22.         {1,1,1,1},{1,1,1,1},{1,1,1,1},{1,1,1,1}
  23.         };
  24.         ENLED = 0;
  25.         EA = 1;
  26.         TMOD = 1;
  27.         TL0 = 0x67;
  28.         TH0 = 0xFC;
  29.         ET0 = 1;
  30.         TR0 = 1;
  31.         P0 = LedChar[0];
  32.         while(1)
  33.         {
  34.                 for(i=0;i<4;i++)
  35.                 {
  36.                         for(j=0;j<4;j++)
  37.                         {
  38.                                 if(backup[i][j] != KeySta[i][j])
  39.                                 {
  40.                                         if(backup[i][j] != 0)
  41.                                         {
  42.                                                 P0 = LedChar[i*4+j];
  43.                                         }
  44.                                         backup[i][j] = KeySta[i][j];
  45.                                 }
  46.                         }
  47.                 }
  48.         }
  49. }
  50. void InterruptTimer0() interrupt 1
  51. {
  52.         unsigned char m;
  53.         static unsigned char kout = 0;
  54.         static unsigned char keybuf[4][4] = {
  55.                 {0xFF, 0xFF, 0xFF, 0xFF},{0xFF, 0xFF, 0xFF, 0xFF},
  56.                 {0xFF, 0xFF, 0xFF, 0xFF},{0xFF, 0xFF, 0xFF, 0xFF}
  57.         };
  58.         P21 = 1;
  59.         TL0 = 0x67;
  60.         TH0 = 0xFC;
  61.         keybuf[kout][0] = (keybuf[kout][0]<<1) | P20;
  62.         keybuf[kout][1] = (keybuf[kout][1]<<1) | P21;
  63.         keybuf[kout][2] = (keybuf[kout][2]<<1) | P22;
  64.         keybuf[kout][3] = (keybuf[kout][3]<<1) | P23;
  65.         for(m=0;m<4;m++)
  66.         {
  67.                 if((keybuf[kout][m] & 0x0F) == 0x00)
  68.                 {
  69.                         KeySta[kout][m] = 0;
  70.                 }
  71.                 else if((keybuf[kout][m] & 0x0F) == 0x0F)
  72.                 {
  73.                         KeySta[kout][m] = 1;
  74.                 }
  75.                 else
  76.                 {}
  77.         }
  78.         kout++;
  79.         kout = kout & 0x03;
  80.         switch(kout)
  81.         {
  82.                 case 0:KOUT1 = 1;KOUT4 = 0;break;
  83.                 case 1:KOUT4 = 1;KOUT3 = 0;break;
  84.                 case 2:KOUT3 = 1;KOUT2 = 0;break;
  85.                 case 3:KOUT2 = 1;KOUT1 = 0;break;
  86.                 default: break;
  87.         }
  88.         P20 = 1;
  89.         P21 = 0;
  90.         P22 = 1;
  91. }
复制代码


好懒~~不想说~~~
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

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