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

PIC16F877A单片机数码管数值循环显示设计,第1张

//数码管显示

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

//单征机型号: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();

}

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/dianzi/2587981.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-08-08
下一篇 2022-08-08

发表评论

登录后才能评论

评论列表(0条)

保存