51单片机 数码管显示(0 -F)+4×4键盘矩阵按键输入
51单片机 数码管显示(0 -F)+4×4键盘矩阵按键输入
- Proteus仿真

实例代码
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76
| #include <reg52.h> #define uchar unsigned char #define uint unsigned int sbit BEEP = P3^7;//蜂鸣器引脚
uchar code DSY_CODE[]= { 0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e,0x00 };//共阳数码管断码 uchar Pre_KeyNO = 16,KeyNO = 16;
void DelayMS(uint ms) { uchar t; while(ms--) { for(t=0;t<120;t++); } }
void Keys\_Scan() { uchar Tmp; P1 = 0x0f; DelayMS(1); Tmp = P1 ^ 0x0f; switch(Tmp) { case 1: KeyNO = 0; break; case 2: KeyNO = 1; break; case 4: KeyNO = 2; break; case 8: KeyNO = 3; break; default: KeyNO = 16; } P1 = 0xf0; DelayMS(1); Tmp = P1 >> 4 ^ 0x0f; switch(Tmp) { case 1: KeyNO += 0; break; case 2: KeyNO += 4; break; case 4: KeyNO += 8; break; case 8: KeyNO += 12; } }
void Beep() { uchar i; for(i=0;i<100;i++) { DelayMS(1); BEEP = ~BEEP; } BEEP = 1; }
void main() { P0 = 0x00; while(1) { P1 = 0xf0; if(P1 != 0xf0) Keys\_Scan(); if(Pre_KeyNO != KeyNO) { P0 = ~DSY_CODE[KeyNO]; Beep(); Pre_KeyNO = KeyNO; } DelayMS(100); } }
|
仿真资源和程序源码
1 2 3
| 链接:https://pan.baidu.com/s/1pNq9QLmifw6YW0\_e0Q2Kjw 提取码:p2cd
|
如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!