大家好!小萌新想请教大家关于我自己改的定时器外部脉冲处的问题。题目大概是对T0引脚输入的外部脉冲进行计数,并在数码管上显示结果。外部脉冲由独立按键KEY2产生,要求KEY2每按一次,产生一个脉冲,数码管显示的数字加一。这个没有问题,主要是(第二个问:实现每当外部脉冲技术达到5个时,数码管显示的数字加一)自己改的不对。
以下是书上的代码,没有问题。大家可以忽略。
#include<reg52.h>
sbit KEY2=P3^4;
sbit LSA=P1^5;
sbit LSB=P1^6;
sbit LSC=P1^7;
unsigned char code smgduan[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};
void Delayms(unsigned int );
void main(void)
{
bit keybuf=1; //按键值暂存
bit backup=1; //按键值备份
unsigned char cnt=0; //按键计数
LSA=1;
LSB=0;
LSC=0;
P0=smgduan[cnt];
while(1)
{
keybuf=KEY2;
if(keybuf!=backup)
{
Delayms(10);
if(keybuf == KEY2)
{
if(backup==0)
{
cnt++;
if(cnt>=10)
{
cnt=0;
}
P0=smgduan[cnt];
}
backup=keybuf;
}
}
}
}
void Delayms(unsigned int xms)
{
unsigned int i,j;
for(i=xms;i>0;i--)
{
for(j=110;j>0;j--);
}
}
第二个问
是自己改的,但是感觉自己基础很薄弱,这个最后也没有跑出来。题目说是外部脉冲技术达到5个时,数码管显示数字加一,我自己认为是cnt>=0&&cnt<5的时候P0处的赋值不变,5<cnt<10的时候,P0处赋值加一,但是我这样的不对,没有什么基础,还想问问看啥书?
if(keybuf==KEY2)
{
if(backup==0)
{
cnt++;
if(cnt>=0&&cnt<5)
{
P0=smgduan[cnt];
}
if(cnt>=5&&cnt<10)
{
P0=smgduan[cnt+1];
}
if(cnt>=10)
{
cnt=0;
}
想请教大家这里出现什么问题了?是if不可以这样用吗?
|