這是一個很牛逼的程序,歷時2天成功的寫出了驅動,單片機io資源得到了最大的利用.
下面是仿真圖:
程序是基于pic單片機的,完整的源代碼下載: http://www.zg4o1577.cn/f/5dk25.rar
#include"pic1687x.h" #define uchar unsigned char uchar emp_press() { uchar w,n,dat=0x00; TRISC=0XFF; PORTC=0XFF; w=PORTC; if((w|0xe0)!=0xff) { if(RC4==0) dat=25; if(RC3==0) dat=24; if(RC2==0) dat=23; if(RC1==0) dat=22; if(RC0==0) dat=21; } return dat; } void scan() { static char n,dat,num; TRISC=0Xfe; PORTC=0Xfe; TRISB=0X00; num=PORTC; if((~num)&(0x01<<1))dat=1 ; else if((~num)&(0x01<<2))dat=2 ; else if((~num)&(0x01<<3))dat=3 ; else if((~num)&(0x01<<4))dat=4 ; TRISC=0Xfd; PORTC=0Xfd; num=PORTC; if((~num)&(0x01<<0))dat=5 ; else if((~num)&(0x01<<2))dat=6 ; else if((~num)&(0x01<<3))dat=7 ; else if((~num)&(0x01<<4))dat=8 ; TRISC=0Xfb; PORTC=0Xfb; num=PORTC; if((~num)&(0x01<<0))dat=9 ; else if((~num)&(0x01<<1))dat=10; else if((~num)&(0x01<<3))dat=11 ; else if((~num)&(0x01<<4))dat=12 ; TRISC=0Xf7; PORTC=0Xf7; num=PORTC; if((~num)&(0x01<<0))dat=13 ; else if((~num)&(0x01<<1))dat=14 ; else if((~num)&(0x01<<2))dat=15 ; else if((~num)&(0x01<<4))dat=16 ; TRISC=0Xef; PORTC=0Xef; num=PORTC; if((~num)&(0x01<<0))dat=17 ; else if((~num)&(0x01<<1))dat=18 ; else if((~num)&(0x01<<2))dat=19; else if((~num)&(0x01<<3))dat=20 ; num=emp_press(); if(num)dat=num; PORTB=dat; for(n=0;n<100;n++); } void main() { while(1)scan(); }