📄 keyadc.c
字号:
#include <Intrins.h>#include <At89x51.h>#define KEY_PORT P1#define KEY1 0x81 //10000001b#define KEY2 0x41 //01000001b#define KEY3 0x21 //00100001b#define KEY4 0x11 //00010001b#define KEY5 0x82 //10000010b#define KEY6 0x42 //01000010b#define KEY7 0x22 //00100010b#define KEY8 0x12 //00010010b#define KEY9 0x84 //10000100b#define KEY10 0x44 //01000100b#define KEY11 0x24 //00100100b#define KEY12 0x14 //00010100b#define KEY13 0x88 //10001000b#define KEY14 0x48 //01001000b#define KEY15 0x28 //00101000b#define KEY16 0x18 //00011000b#define AD_CS P3_6#define AD_WR P3_2#define AD_RD P3_7#define AD_INPUT_PORT P1#define LOW 0#define HIGH 1unsigned char key_code_temp;unsigned char code digital_led[16]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0x0f8,0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e};unsigned char Key_Scan(void);void Delay_ms(unsigned char second);void extint(void);void Adc_Start(void);unsigned char Adc_Read(void);void Adc_Demo(void);void main(void){ EA=1; IT1=1;//ext1 edge trigger EX1=1; //enable int1while(1) { key_code_temp=Key_Scan(); Delay_ms(30); if(key_code_temp==Key_Scan()) { while(Key_Scan()); switch(key_code_temp) { case KEY1:{P0=0;P2_0=P2_1=P2_2=P2_3=0;} break; case KEY2:{P2_0=P2_1=P2_2=P2_3=1;} break; case KEY3:{P3_3=1;EX1=1;} break; case KEY4:Adc_Demo(); break; case KEY5:P0_4=0; break; case KEY6:P0_5=0; break; case KEY7:P0_6=0; break; case KEY8:P0_7=0; break; case KEY9:P2_0=0; break; case KEY10:P2_1=0; break; case KEY11:P2_2=0; break; case KEY12:P2_3=0; break; case KEY13:P2_4=0; break; case KEY14:{P2_5=0; P2_6=0;P2_7=0;}break; case KEY15:P2=P3;break; case KEY16:P2=0xff;break; default:break; } key_code_temp=0; } }}unsigned char Key_Scan(void){unsigned char key_temp=0,i,j;unsigned char scan_code_row=0x01,scan_code_colum=0x80; for(i=0;i<4;i++) { KEY_PORT=scan_code_row; if(KEY_PORT==0) { for(j=0;j<4;j++) { KEY_PORT=scan_code_colum; if(KEY_PORT==0&&key_temp!=0) {KEY_PORT=0xff; return key_temp=0;} else if(KEY_PORT==0) key_temp=scan_code_row|scan_code_colum; scan_code_colum>>=1; } } scan_code_row<<=1; }KEY_PORT=0xff;return key_temp;}void Delay_ms(unsigned char second){ unsigned char i,j; for(j=0;j<second;j++) for (i=0;i<124;i++) _nop_();}void Adc_Start(void){ AD_CS=LOW; _nop_(); AD_WR=LOW; _nop_(); AD_WR=HIGH; _nop_(); AD_CS=HIGH;}unsigned char Adc_Read(void){unsigned char i; AD_INPUT_PORT=0xff; AD_CS=LOW; _nop_(); AD_RD=LOW; _nop_(); Delay_ms(1); i=AD_INPUT_PORT; _nop_(); _nop_(); AD_RD=HIGH; _nop_(); AD_CS=HIGH; return i;}void Adc_Demo(void){//unsigned char t1,t2;// AD_INPUT_PORT=0xf0; Adc_Start();// while(P3_3); Delay_ms(1); P0=Adc_Read(); P2_0=0; P2_1=0; P2_2=0; P2_3=0;}void extint(void) interrupt 2{ EX1=0; P0=digital_led[5]; P2_0=~P2_0; P2_1=~P2_1; P2_2=~P2_2; P2_3=~P2_3;// EA=1;}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -