大家好!小萌新想請教大家關于我自己改的定時器外部脈沖處的問題。題目大概是對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不可以這樣用嗎?
|