一、独立按键
#include <reg52.h> #include "./delay/delay.h" #define SEGFORT P0 sbit key1 = P1^0; sbit bit_select = P2^0; sbit seg_select = P2^1; sbit beep = P2^7; unsigned char weima[10] = {0xfe,0xfd,0xfb,0xf7}; unsigned char seg_data[10] = {0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f}; unsigned char TempData[2]; void display(void) { static unsigned char i = 0; SEGFORT = 0x0; seg_select = 1; seg_select = 0; SEGFORT = 0xff; bit_select = 1; bit_select = 0; SEGFORT = TempData[i]; seg_select = 1; seg_select = 0; SEGFORT = weima[i]; bit_select = 1; bit_select = 0; i++; if(2 == i) { i = 0; } } void timer0_isr(void) interrupt 1 { TH0 = (65536 - 2000) / 256; TL0 = (65526 - 2000) % 256; display(); } void timer0_init(void) { EA = 1; TMOD |= 0x01; TH0 = (65536 - 2000) / 256; TL0 = (65526 - 2000) % 256; ET0 = 1; TR0 = 1; } void main() { unsigned char i = 0; unsigned char j = 0; timer0_init(); while(1) { if(key1 == 0) { if(key1 == 0) { for(j = 0; j < 200; j++) { beep = ~beep; delay_us(200); } while(!key1); delay_ms(10); while(!key1); i++; if(100 == i) { i = 0; } } } TempData[0] = seg_data[i / 10]; TempData[1] = seg_data[i % 10]; } }
二、矩阵键盘
#include <reg52.h> #include "./delay/delay.h" #define KEYFORT P1 #define SEGFORT P0 sbit bit_select = P2^0; sbit seg_select = P2^1; unsigned char weima[8] = {0xfe,0xfd,0xfb,0xf7}; unsigned char seg_data[16] = {0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71}; unsigned char TempData[2]; void display(void) { static unsigned char i = 0; SEGFORT = 0x0; seg_select = 1; seg_select = 0; SEGFORT = 0xff; bit_select = 1; bit_select = 0; SEGFORT = TempData[i]; seg_select = 1; seg_select = 0; SEGFORT = weima[i]; bit_select = 1; bit_select = 0; i++; if(2 == i) { i = 0; } } void timer0_isr(void) interrupt 1 { TH0 = (65536 - 2000) / 256; TL0 = (65536 - 2000) % 256; display(); } void timer0_init(void) { EA = 1; TMOD |= 0x01; TH0 = (65536 - 2000) / 256; TL0 = (65536 - 2000) % 256; ET0 = 1; TR0 = 1; } unsigned char key_scan(void) { unsigned char keyvalue; KEYFORT = 0xf0; if(0xf0 != KEYFORT) { delay_ms(10); if(0xf0 != KEYFORT) { KEYFORT = 0xfe; if(0xfe != KEYFORT) { keyvalue = KEYFORT; while(0xfe != KEYFORT); delay_ms(10); while(0xfe != KEYFORT); return keyvalue; } KEYFORT = 0xfd; if(0xfd != KEYFORT) { keyvalue = KEYFORT; while(0xfd != KEYFORT); delay_ms(10); while(0xfd != KEYFORT); return keyvalue; } KEYFORT = 0xfb; if(0xfb != KEYFORT) { keyvalue = KEYFORT; while(0xfb != KEYFORT); delay_ms(10); while(0xfb != KEYFORT); return keyvalue; } KEYFORT = 0xf7; if(0xf7 != KEYFORT) { keyvalue = KEYFORT; while(0xf7 != KEYFORT); delay_ms(10); while(0xf7 != KEYFORT); return keyvalue; } } } return 0xff; } unsigned char key_pro(void) { unsigned char keynum; keynum = key_scan(); switch(keynum) { case 0x7e:return 0;break; case 0xbe:return 1;break; case 0xde:return 2;break; case 0xee:return 3;break; case 0x7d:return 4;break; case 0xbd:return 5;break; case 0xdd:return 6;break; case 0xed:return 7;break; case 0x7b:return 8;break; case 0xbb:return 9;break; case 0xdb:return 10;break; case 0xeb:return 11;break; case 0x77:return 12;break; case 0xb7:return 13;break; case 0xd7:return 14;break; case 0xe7:return 15;break; default:return 16;break; } return 16; } void main() { unsigned char key; timer0_init(); while(1) { key = key_pro(); if(16 != key) { TempData[0] = seg_data[key / 10]; TempData[1] = seg_data[key % 10]; } } }