基于PIC16F877A的數(shù)碼管顯示
//數(shù)碼管顯示
//★★★★★★★★★數(shù)碼管顯示★★★★★★★★★★★\
//單征機型號:PIC16F877A
//功能描述:采用動態(tài)掃描方式,初始時顯示123,當按下RB0時,數(shù)值加一,當按下RB1時,數(shù)值減一
//端口定義:RA0,RA1,RA2數(shù)碼管位控制腳,RD口數(shù)碼管段控制口,RB0加一按鍵,RB1減一按鍵。
#include
__CONFIG(0XF73A); //芯片配置字節(jié)
const unsigned char disp[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};//0~9譯碼
char ba,sh,ge,keyb0,keyb1;
void dir();
void key();
//========================================================================
//功能描述:延時子程序
//函數(shù)名稱:delay);
void delay()
{
int i;
for(i=200;i>0;i--);
}
//========================================================================
//功能描述:主程序
//函數(shù)名稱:void main()
void main()
{
keyb0=0;
ba=1;
sh=2;
ge=3;
TRISA=0x00;
TRISD=0x00;
PORTA=0xff;
while(1)
{
key();
dir();
}
}
//========================================================================
//功能描述:判斷按鍵程序
//函數(shù)名稱:void key()
void key()
{
//------------------------------------------------------------------------
//判斷RB0鍵是否作用,進行加一操作
if(RB0==0)
{
delay();
if(RB0==0)
{
if(keyb0==0)
{
keyb0=1;
ge++;
if(ge==10)
{
ge=0;
sh++;
if(sh==10)
{
sh=0;
ba++;
if(ba==10)
{ba=0;}
}
}
}
}
}
else keyb0=0;
//------------------------------------------------------------------------
//判斷RB1鍵是否作用,進行減一操作
if(RB1==0)
{
delay();
if(RB1==0)
{
if(keyb1==0)
{
keyb1=1;
ge--;
if(ge==255)
{
ge=9;
sh--;
if(sh==255)
{
sh=9;
ba--;
if(ba==255)
ba=9;
}
}
}
}
}
else keyb1=0;
}
//========================================================================
//功能描述:顯示程序
//函數(shù)名稱:void dir()
void dir()
{
PORTA=0xfb; //選中個位數(shù)碼管
PORTD=disp[ge]; //往個位數(shù)碼管送數(shù)
delay(); //延時一段時間,保證亮度
PORTA=0xfd;
PORTD=disp[sh];
delay();
PORTA=0xfe;
PORTD=disp[ba];
delay();
}