|
100黑幣
大家好!小萌新想請(qǐng)教大家關(guān)于我自己改的定時(shí)器外部脈沖處的問題。題目大概是對(duì)T0引腳輸入的外部脈沖進(jìn)行計(jì)數(shù),并在數(shù)碼管上顯示結(jié)果。外部脈沖由獨(dú)立按鍵KEY2產(chǎn)生,要求KEY2每按一次,產(chǎn)生一個(gè)脈沖,數(shù)碼管顯示的數(shù)字加一。這個(gè)沒有問題,主要是(第二個(gè)問:實(shí)現(xiàn)每當(dāng)外部脈沖技術(shù)達(dá)到5個(gè)時(shí),數(shù)碼管顯示的數(shù)字加一)自己改的不對(duì)。
以下是書上的代碼,沒有問題。大家可以忽略。
#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; //按鍵計(jì)數(shù)
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--);
}
}
第二個(gè)問
是自己改的,但是感覺自己基礎(chǔ)很薄弱,這個(gè)最后也沒有跑出來。題目說是外部脈沖技術(shù)達(dá)到5個(gè)時(shí),數(shù)碼管顯示數(shù)字加一,我自己認(rèn)為是cnt>=0&&cnt<5的時(shí)候P0處的賦值不變,5<cnt<10的時(shí)候,P0處賦值加一,但是我這樣的不對(duì),沒有什么基礎(chǔ),還想問問看啥書?
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;
}
想請(qǐng)教大家這里出現(xiàn)什么問題了?是if不可以這樣用嗎?
|
|