PIC16F877A单片机数码管数值循环显示设计

发表于 2018-12-21 14:49:28 收藏 已收藏
赞(0) •  评论(0

PIC16F877A单片机数码管数值循环显示设计

发表于 2018-12-21 14:49:28
+关注

//数码管显示

//★★★★★★★★★数码管显示★★★★★★★★★★★\\

//单征机型号:PIC16F877A

//功能描述:采用动态扫描方式,初始时显示123,当按下RB0时,数值加一,当按下RB1时,数值减一

//端口定义:RA0,RA1,RA2数码管位控制脚,RD口数码管段控制口,RB0加一按键,RB1减一按键。

PIC16F877A单片机数码管数值循环显示设计
 

#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();

}

收藏

相关话题

评论(0)

加载更多评论

分享到

QQ空间 QQ好友 微博
取消