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 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103
| #include<reg51.h> #define uchar unsigned char #define uint insigned int uchar code LED[]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F};//共阴数码管断码 uchar Buffer[]={0x3F,0x3F}; sbit CLAER=P3^1; sbit BUZZ=P3^0;//喇叭 uchar key\_scan(); void key\_count(uchar num); void disp(); void delay(uchar s); void buzz\_on(); void main() { uchar temp; while(1) { disp(); temp=key\_scan(); if(temp!=0xFF) { key\_count(temp+1); while(CLAER==1) { buzz\_on(); disp( ); } Buffer[0]=0x3F; Buffer[1]=0x3F; BUZZ=1; } } } void disp() { uchar i,w; w=0x01; for(i=0;i<2;i++) { P2=~w; w<<=1; P0=Buffer[i]; delay(10); P2=0xFF; } } uchar key\_scan(void) {//按键扫描 uchar key=0xFF,cord_h,cord_1; P1=0x0F; cord_h=P1&0x0F; if(cord_h!=0x0F) { delay(10); if(cord_h!=0x0F) { cord_h=P1&0x0F; P1=0xF0; cord_1=P1&0xF0; while((P1&0xF0)!=0xF0); switch(cord_h+cord_1) { case 0xEE:key=0;break;//S1 case 0xED:key=1;break;//S2 case 0xEB:key=2;break;//S3 case 0xE7:key=3;break;//S4 case 0xDE:key=4;break;//S5 case 0xDD:key=5;break;//S6 case 0xDB:key=6;break;//S7 case 0xD7:key=7;break;//S8 case 0xBE:key=8;break;//S9 case 0xBD:key=9;break;//S10 case 0xBB:key=10;break;//S11 case 0xB7:key=11;break;//S12 case 0x7E:key=12;break;//S13 case 0x7D:key=13;break;//S14 case 0x7B:key=14;break;//S15 case 0x77:key=15;break;//S16 default: key=0xFF;break; } } } return(key); } void key\_count(uchar num) { Buffer[0]=LED[num/10]; Buffer[1]=LED[num%10]; } void buzz\_on() { BUZZ=0; delay(1); BUZZ=1; delay(1); } void delay(uchar s) { int j; while(s--) for(j=0;j<20;j++); }
|