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

控制/MCU

1813人已加入

描述

//数码管显示

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

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

}

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分