#include//
#include//
#include//
#defineucharunsignedchar//
#defineuintunsignedint//
//---------------------------------------
#defineBIAS0X50//1/2偏壓,4背極
#defineRC2560X30//系統時鐘選擇為片內RC振蕩器
#defineWDTDIS10X0A//禁止WDT溢出標志輸出
#defineTIMERDIS0X08//時基輸出禁能
#defineSYSEN0X02//打開系統時鐘
#defineLCDON0X06//打開偏壓發生器
#defineSYSDIS0X00//關閉系統時鐘和偏壓發生器
#defineKEY_UPRB7//
#defineKEY_DOWNRB6//
#defineKEY_SETRB5//
//--------------------------------------
//staticunsignedcharKeyV,TempKeyV;//鍵值
unsignedcharbuf0,buf1,buf2,buf3,buff;//
unsignedcharbuf[4];//
unsignedchark,data,sreg,disppoint;//
unsignedinti;//
consttable[10]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xd8,0x80,0x90};//
//*********************************
/*延時函數*/
//*********************************
voiddelay_10ms()//
{uintj;//
for(j=0;j《1000;j++)//
{;}//
}//
//*********************************
voiddelay_1ms()//
{uintj;//
for(j=0;j《100;j++)//
{;}//
}//
//**********************************
voiddelay1s()//延時1S
{
uchari;//
uintj;//
for(i=0;i《10;i++)//
for(j=0;j《1300;j++);//
}//
//**********************************
//按鍵等待程序
//**********************************
voidkeywait()//
{
while((PORTB&0xF0)!=0xF0)//
{;}//
}//
//********************************
//********************************
voidbuf_initial()//
{
buf0=0x00;//
buf[0]=buf0;//
buf1=0x00;//
buf[1]=buf1;//
buf2=0x00;//
buf[2]=buf2;//
buf3=0x00;//
buf[3]=buf3;//
sreg=0x00;//
}//
//**********************************
voidput_num(charc)
{
PORTC=table[c&0x0f];//
}
//**********************************
voiddisplay()//
{
disppoint=0;//
put_num(buf[disppoint]);//
RC0=0;//
delay_1ms();//
RC0=1;//
disppoint++;//
put_num(buf[disppoint]);//
RC1=0;//
delay_1ms();//
RC1=1;//
disppoint++;//
put_num(buf[disppoint]);//
RC2=0;//
delay_1ms();//
RC2=1;//
disppoint++;//
put_num(buf[disppoint]);//
RC3=0;//
delay_1ms();//
RC3=1;//
}
//**********************************
//AD轉換初始化子程序//
//*********************************
voidad_initial()//
{
ADCON0=0B01001001;//fosc/8RA1/AN1ADON=1
ADCON1=0B00000010;//AN0-AN4=AVREF=VDD
ADIE=1;//
PEIE=1;//
}
//**********************************
//按鍵處理子程序//
//**********************************
voidkeywork()//
{
if((PORTB&0xFF)!=0xFF)//如果P1.2--P1.4不為全1,可能有鍵按下
{
delay_10ms();//延時去抖動
if((PORTB&0xFF)!=0xFF)//重讀P1.2-P1.4位,若還是不全為1,定有鍵按下
{
if((PORTB&0xF0)!=0xF0)//重讀P1.2-P1.4位,若還是不全為1,定有鍵按下
{
//-------------------------------------------
if(KEY_SET==0)//按下SET鍵,如在SET狀態就退出,否則進入
{
RC4=!RC4;
keywait();
return;
}
elseif(KEY_DOWN==0)//按下DOWN鍵
{
RC3=!RC3;
keywait();
return;
}
elseif(KEY_UP==0)//按下UP鍵
{
RC2=!RC2;
keywait();
return;
}
}
}
}
}
//--------------------------------------
//--------------------------------------
//Tmr0中斷程序
voidinterruptclkint(void)
{
TMR0=0x13;//
T0IF=0;//
CLRWDT();//
sreg=sreg+1;//
if(sreg==40)//
{//
sreg=0;//
buf[3]++;
if(buf[3]》9)
{buf[3]=0;
buf[2]++;
if(buf[2]》9)
{buf[2]=0;
buf[1]++;
if(buf[1]》9)
{buf[1]=0;
buf[0]++;
if(buf[0]》9)buf[0]=0;
}
}
}
}
}
/*******************************主函數******************************/
main()//主函數
{
OPTION=0B00000000;//
STATUS=0X00;//
ADCON1=0B00000000;//
INTCON=0X00;//
PIE1=0B00000000;//
PIR1=0X00;//
T1CON=0B00000000;//
T0CS=0;//
PSA=1;//
T0IF=0;//
T0IE=1;//
TRISB=0XFF;//
TRISC=0X00;//
PORTB=0XFF;//
PORTC=0X00;//
buf_initial();//
while(1)//
{
keywork();//
}
}
評論
查看更多