#include
__CONFIG(0x1832);
constcharTABLE[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0X82,0XF8,0X80,0X90};//定義常數0-9的數據表格
volatileunsignedcharresult=0,temp=0,f=0;
volatileunsignedinttotal=0,ge=0,shi=0,bai=0,qian=0,c=1;
voiddelay();//delay函數申明
voidinit();//I/O口初始化函數申明
voidsCAN();//按鍵掃描程序申明
voiddisplay(unsignedintx);//顯示函數申明
//---------------------------------------------------
//主程序
voidmain()
{
init();//調用初始化子程序
while(1)//循環(huán)工作
{
scan();
display(result);
}
}
//---------------------------------------------------
//初始化函數
voidinit()
{
ADCON1=0X07;//設置A口為普通I/O口
TRISA=0B00000000;//設置A口高2位為輸出,低4位為輸入
TRISC=0B11110000;//設置C口高4位為輸入,低4位為輸出
TRISD=0X00;//設置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)//電壓顯示函數
{
unsignedintg,s,b,q;//定義6個臨時變量
//temp=result;c=1;
q=x/1000;
b=x%1000/100;//求顯示的千位
s=x%100/10;//求顯示的百位
g=x%10;//求顯示的十位
PORTD=TABLE[q];//顯示一個小數點
PORTA=0B11111110;//RA0輸出低電平,點亮千位顯示
delay(1);
PORTD=TABLE[b];//查表得百位顯示的代碼
PORTA=0B11111101;//RA1輸出低電平,點亮百位顯示
delay(1);//延時一定時間,保證顯示亮度
PORTD=TABLE[s];//查表得十位顯示的代碼
PORTA=0B11111011;//RA2輸出低電平,點亮十位顯示
delay(1);//延時一定時間,保證亮度
PORTD=TABLE[g];//查表得十位顯示的代碼
PORTA=0B11110111;//RA3輸出低電平,點亮十位顯示
delay(1);//延時一定時間,保證亮度
PORTD=0xff;
}
//------------------------------------------------------------------
//延時程序
voiddelay()//延時程序
{
inti;//定義整形變量
for(i=0x100;i--;);//延時
}