基于PIC16F877A的数码管显示
扫描二维码
随时随地手机看文章
//数码管显示
//★★★★★★★★★数码管显示★★★★★★★★★★★\
//单征机型号:PIC16F877A
//功能描述:采用动态扫描方式,初始时显示123,当按下RB0时,数值加一,当按下RB1时,数值减一
//端口定义:RA0,RA1,RA2数码管位控制脚,RD口数码管段控制口,RB0加一按键,RB1减一按键。
#include
__CONFIG(0XF73A); //芯片配置字节
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();
//========================================================================
//功能描述:延时子程序
//函数名称:delay);
void delay()
{
int i;
for(i=200;i>0;i--);
}
//========================================================================
//功能描述:主程序
//函数名称:void main()
void main()
{
keyb0=0;
ba=1;
sh=2;
ge=3;
TRISA=0x00;
TRISD=0x00;
PORTA=0xff;
while(1)
{
key();
dir();
}
}
//========================================================================
//功能描述:判断按键程序
//函数名称: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;
}
//========================================================================
//功能描述:显示程序
//函数名称:void dir()
void dir()
{
PORTA=0xfb; //选中个位数码管
PORTD=disp[ge]; //往个位数码管送数
delay(); //延时一段时间,保证亮度
PORTA=0xfd;
PORTD=disp[sh];
delay();
PORTA=0xfe;
PORTD=disp[ba];
delay();
}