当前位置:首页 > 单片机 > 单片机
[导读]//数码管显示//★★★★★★★★★数码管显示★★★★★★★★★★★\\\\ //单征机型号:PIC16F877A //功能描述:采用动态扫描方式,初始时显示123,当按下RB0时,数值加一,当按下RB1时,数值减一 //端口定义:RA0

//数码管显示

//★★★★★★★★★数码管显示★★★★★★★★★★★\
//单征机型号: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();
}

本站声明: 本文章由作者或相关机构授权发布,目的在于传递更多信息,并不代表本站赞同其观点,本站亦不保证或承诺内容真实性等。需要转载请联系该专栏作者,如若文章内容侵犯您的权益,请及时联系本站删除( 邮箱:macysun@21ic.com )。
换一批
延伸阅读
关闭