首先定义接口,比如:#include“reg
51.h”sbitS1=P1^0;sbitS2=P1^1;sbitS3=P1^2;sbitS4=P1^3;//按键对应的单片机IOsbitSMG_ENP1^4;//数码管选通sbitSMG_SET()SMG_EN=0//数码管公共使能sbitSMG_CLR()SMG_EN=1//数码管公共失能defineGPIO_PORTP2//数码管8位数据口//以上是按键及数码管对应的单片机IO,下面来写驱动程序,首先需要定义一个字符码unsignedcharascll[]={xx0,xx1,xx2,xx3,xx4,xx5,xx6,xx7,xx8,xx9};//此数组的值需要根据数码管与单片机数据口的实际对应关系来写,数组0-9偏移量分别对应数码管显示0-9的数值码希望你能明白这一点。/*延时函数*/voidDelay(unsignedlongw)while(w--);//下面先来写一个驱动函数voidDisPlay(unsignedchardat)SMG_SET();//数码管选通GPIO_PORT=dat;//将数据Dat送给数码管显示//按键扫描函数,按键对应的是P1最低4位unsignedcharkey()unsignedchartemp;P1=0xff;if((P1&0x0f)!=0x0f)//如果P1口低4为不为f则表明有按键按下,下面判断是哪个按键Delay(1000);//延时约20ms用来消抖,必须的if((P1&0x0f)!=0x0f)//消抖后在判断一次如果低4位不为f就表示确实有按键按下temp=GPIO_RORT&0x0f;//将IO上的按键值读给变量tempswitch(temp)//判断是哪个键被按下case0x0e://表示是S1被按下1110DisPlay
(1);//显示1break;case0x0d://表示是S2被按下1101DisPlay
(2);//显示2break;case0x0b://表示是S3被按下1011DisPlay
(3);//显示3break;case0x
07://表示是S4被按下0111DisPlay
(4);//显示4break;while((P1&0x0f)!=0x0f);//如果按键还一直被按着,则等待用户松开按键Delay(1000);//延时20ms消抖voidmain()while
(1)key();//调用按键函数一口气从上面写到下面,给你参考,希望对你有帮助