单片机学习小组
直播中

廖漳彩

7年用户 186经验值
私信 关注

请问PIC16F877A单片机TMR0计数器与按键怎么关联?

请问下,TMR0用作计数器的话,我想让按键按两下,数码管(我设置为只有两位显示)加一,然后写到这卡住了,问题是:怎么关联按键和计数器呀!!!!?想了好久,求大神答疑、编程!
#include
__CONFIG(0X3F39);
#define ucar unsigned char
const uchar table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,
0x7d,0x27,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71,};
char shi,ge;
void delay(uint x);
void scan();
void init();
void disp(uchar shi,uchar ge);
void main()
{
init();
while(1)
{
scan();
disp(shi,ge);
}
}
void init()
{
TRISB=0xff;//键盘为输入
TRISA=0;//数码管位选输出
TRISD=0;//段选
PORTA=0x20;//开位选
PORTD=0x3f;//开段选
delay(1);
PORTA=0x10;//0001 0000
PORTD=0x3f;
delay(1);
TMR0=255;//按4下+1
OPtiON=0x21;//0010 0001
INTCON=0;//0000 0000
TRISA4=1;
}
void scan()
{
if(RB0==0)
{
delay(10);
if(RB0==0)
{
}
}
}
void disp(uchar shi,uchar ge)//数码管动态扫描
{
PORTD=table[shi];//显示第一个数码管
PORTA=0x20;//0010 0000
delay(2);
PORTD=table[ge];//显示第二个数码管
PORTA=0x10;//0001 0000
delay(2);
}
void delay(uint x)
{
uint a,b;
for(a=x;a>0;a--)
for(b=110;b>0;b--);
}

回帖(11)

贾虎世

2019-5-14 07:34:48
TMR0在这起什么作用?
如果单纯的想按下按钮显示加1,我想就用不着TMR0嘛
// scan函数要返回一个值作按钮是否按下的判断
char scan(void)
{
if(RB0==0)
{
delay(10);
if(RB0==0)
{
return 1;
}
}
return 0;
}
//主循环这么写
while(1)
{
if(scan())
{
ge++;
if(ge>9)
{
ge=0;
shi++;
if(shi>9) shi=0;
}
}
disp(shi,ge);
}
举报

薛丽娜

2019-5-14 07:52:22
帮顶.....
举报

李颖

2019-5-14 08:08:10
老师要求我们熟悉TMR0的计数器用法,不然我就不用计数器啦。求大神指点
举报

胡皓

2019-5-14 08:16:00
哦,那我猜你的意思是要用计数器去捕获按键脉冲,抓到两个按键脉冲后就去控制数码管加1。
举报

更多回帖

发帖
×
20
完善资料,
赚取积分