pic單片機(jī)4*4鍵盤(pán)掃描程序
#include
__CONFIG(0x1832);
constcharTABLE[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0X82,0XF8,0X80,0X90};//定義常數(shù)0-9的數(shù)據(jù)表格
volatileunsignedcharresult=0,temp=0,f=0;
volatileunsignedinttotal=0,ge=0,shi=0,bai=0,qian=0,c=1;
voiddelay();//delay函數(shù)申明
voidinit();//I/O口初始化函數(shù)申明
voidsCAN();//按鍵掃描程序申明
voiddisplay(unsignedintx);//顯示函數(shù)申明
//---------------------------------------------------
//主程序
voidmain()
{
init();//調(diào)用初始化子程序
while(1)//循環(huán)工作
{
scan();
display(result);
}
}
//---------------------------------------------------
//初始化函數(shù)
voidinit()
{
ADCON1=0X07;//設(shè)置A口為普通I/O口
TRISA=0B00000000;//設(shè)置A口高2位為輸出,低4位為輸入
TRISC=0B11110000;//設(shè)置C口高4位為輸入,低4位為輸出
TRISD=0X00;//設(shè)置D口為輸出
PORTA=0XFF;
PORTD=0XFF;//先清除所有顯示
}
//-----------------------------------------------3---
//按鍵掃描程序
voidscan(){
PORTC=0xff;
RC3=0;{if(RC4==0)result=1;if(RC5==0)result=2;if(RC6==0)result=3;if(RC7==0)result=4;}
PORTC=0xff;
RC2=0;{if(RC4==0)result=5;if(RC5==0)result=6;if(RC6==0)result=7;if(RC7==0)result=8;}
PORTC=0xff;
RC1=0;{if(RC4==0)result=9;if(RC5==0)result=10;if(RC6==0)result=11;if(RC7==0)result=12;}
PORTC=0xff;
RC0=0;{if(RC4==0)result=13;if(RC5==0)result=14;if(RC6==0)result=15;if(RC7==0)result=16;}
//if(temp!=result){f++;if(f==1)qian=1000*result;if(f==2)bai=100*result;if(f==3)shi=10*result;if(f==4)ge=result;}if(f==4)while(1){total=ge+shi+bai+qian;display(total);}
}
//----------------------------------------------------------
//顯示程序
voiddisplay(unsignedintx)//電壓顯示函數(shù)
{
unsignedintg,s,b,q;//定義6個(gè)臨時(shí)變量
//temp=result;c=1;
q=x/1000;
b=x%1000/100;//求顯示的千位
s=x%100/10;//求顯示的百位
g=x%10;//求顯示的十位
PORTD=TABLE[q];//顯示一個(gè)小數(shù)點(diǎn)
PORTA=0B11111110;//RA0輸出低電平,點(diǎn)亮千位顯示
delay(1);
PORTD=TABLE[b];//查表得百位顯示的代碼
PORTA=0B11111101;//RA1輸出低電平,點(diǎn)亮百位顯示
delay(1);//延時(shí)一定時(shí)間,保證顯示亮度
PORTD=TABLE[s];//查表得十位顯示的代碼
PORTA=0B11111011;//RA2輸出低電平,點(diǎn)亮十位顯示
delay(1);//延時(shí)一定時(shí)間,保證亮度
PORTD=TABLE[g];//查表得十位顯示的代碼
PORTA=0B11110111;//RA3輸出低電平,點(diǎn)亮十位顯示
delay(1);//延時(shí)一定時(shí)間,保證亮度
PORTD=0xff;
}
//------------------------------------------------------------------
//延時(shí)程序
voiddelay()//延時(shí)程序
{
inti;//定義整形變量
for(i=0x100;i--;);//延時(shí)
}