找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

帖子
查看: 9108|回復(fù): 14
收起左側(cè)

[求助]這個簡單的流水燈程序怎么了

[復(fù)制鏈接]
ID:6799 發(fā)表于 2009-6-30 22:18 | 顯示全部樓層 |閱讀模式

#include <reg51.h>
#define uchar unsigned char
#define uint unsigned int
delay(uint t);
sbit P17=P1^7; //設(shè)置發(fā)光管的開關(guān)
main()
{

 P17=0;
 uchar k=0; //設(shè)置流水燈的方向標志位
 uchar leds=0x01;
 P0=~leds;
 while(1)
 {
  delay(1000); 
  if(k==0&&leds==0x80)
   {
     k=1;
   }
  else if(k==1&&leds==0x01) 
   {
    k=0;
   }
  if(k==0)
   {
    leds=leds<<1;
    P0=~leds;
   }
  else
   {
    leds=leds>>1;
    P0=~leds;
   }
  }

}
delay(uint t)
{
 uint i,j;
 for(i=0;1<t;i++);
 for(j=0;j<223;j++);
}

就這個簡單流水燈,為什么編譯老是說有K,leds沒有被定義,編譯無法通過,試著調(diào)整擺放P17的位置,卻能編譯成功,這到底為什么�。空l能給個解釋�。�

回復(fù)

使用道具 舉報

ID:8993 發(fā)表于 2009-7-1 08:49 | 顯示全部樓層

#include <at89x51.h>
#define uchar unsigned char
#define uint unsigned int
uchar k,leds;
delay(uint t);
sbit P17=P1^7; //設(shè)置發(fā)光管的開關(guān)
main()
{

 P17=0;
 k=0; //設(shè)置流水燈的方向標志位
leds=0x01;
 P0=~leds;
 while(1)
 {
  delay(1000);
  if((k==0)&&(leds==0x80))
   {
     k=1;
   }
  else if((k==1)&&(leds==0x01))
   {
    k=0;
   }
  if(k==0)
   {
    leds=leds<<1;
    P0=~leds;
   }
  else
   {
    leds=leds>>1;
    P0=~leds;
   }
  }

}
delay(uint t)
{
 uint i,j;
 for(i=0;1<t;i++);
 for(j=0;j<223;j++);
}


這樣就可以了,什么原因,我也不清楚,請高手回答一下,謝謝??
回復(fù)

使用道具 舉報

ID:8993 發(fā)表于 2009-7-1 08:50 | 顯示全部樓層

上面的〈at89x51.h>是我隨便改的,和錯誤沒關(guān)系。

回復(fù)

使用道具 舉報

ID:8993 發(fā)表于 2009-7-1 08:55 | 顯示全部樓層
還有一種方法是把P17=0寫在uchar led=0x01的后面也行。
main()
{
 uchar k=0; //設(shè)置流水燈的方向標志位
uchar leds=0x01;
 P17=0;
回復(fù)

使用道具 舉報

ID:14775 發(fā)表于 2009-7-1 19:40 | 顯示全部樓層

把定義放在main前面時,定義的量在全局有效

回復(fù)

使用道具 舉報

ID:6799 發(fā)表于 2009-7-4 07:08 | 顯示全部樓層
如果這樣的話,編譯有錯通不過,
#include <reg51.h>
#define uchar unsigned char
#define uint unsigned int
delay(uint t);
sbit P17=P1^7;
main()
{
 P17=0;
 uchar k,leds;
 leds=0x01;
 P0=~leds;
 while(1)

但是如果只是把P17=0放到uchar k,leds;的后面就可以
#include <reg51.h>
#define uchar unsigned char
#define uint unsigned int
delay(uint t);
sbit P17=P1^7;
main()
{
 uchar k,leds;
 leds=0x01;
 P0=~leds;
 P17=0;
 while(1)

真是不得其解��?想不通為什么...
回復(fù)

使用道具 舉報

ID:14964 發(fā)表于 2009-7-4 19:26 | 顯示全部樓層

在函數(shù)中,變量的定義必須放在執(zhí)行語句前面!

回復(fù)

使用道具 舉報

ID:15556 發(fā)表于 2009-7-24 15:34 | 顯示全部樓層

把定義部分應(yīng)該放在主函數(shù)MAIN之前吧,全局變量

回復(fù)

使用道具 舉報

ID:15225 發(fā)表于 2009-7-27 09:36 | 顯示全部樓層
#define uchar unsigned char
#define uint unsigned int

#include <reg51.h>
。。
。。
。。
這樣?
回復(fù)

使用道具 舉報

ID:15867 發(fā)表于 2009-10-26 10:25 | 顯示全部樓層

#include <reg51.h>
#define uchar unsigned char
#define uint unsigned int
delay(uint t);                  //什么意思??
sbit P17=P1^7;

uchar k,leds;

main()
{
 P17=0;
  leds=0x01;
 P0=~leds;
 while(1)

}

回復(fù)

使用道具 舉報

ID:19203 發(fā)表于 2009-12-7 16:29 | 顯示全部樓層

P17=0;賦值語句 unchar leds;變量定義

 

變量定義放在后面肯定不能通過編譯。

回復(fù)

使用道具 舉報

ID:20780 發(fā)表于 2010-1-6 17:05 | 顯示全部樓層
定義一般都在每個函數(shù)的最前面
回復(fù)

使用道具 舉報

ID:24218 發(fā)表于 2010-6-2 15:50 | 顯示全部樓層
void delay(uint z);
回復(fù)

使用道具 舉報

ID:5392 發(fā)表于 2010-6-30 14:10 | 顯示全部樓層

main里面的

P17=0;是賦值語句

肯定要放在

uchar k=0; //設(shè)置流水燈的方向標志位 
uchar leds=0x01;

之后了,這里沒有什么全局變量不全局變量的問題

回復(fù)

使用道具 舉報

ID:24810 發(fā)表于 2010-6-30 16:28 | 顯示全部樓層

“為什么編譯老是說有K,leds沒有被定義”

我也遇到過這樣的問題,不過現(xiàn)在不會這樣的了。

 

定義變量和常量一定要在要定義,再寫執(zhí)行語句,否則不可能編譯通過

把:

P17=0;
 uchar k=0; //設(shè)置流水燈的方向標志位
 uchar leds=0x01;

改為

uchar k=0; //設(shè)置流水燈的方向標志位
 uchar leds=0x01;
P17=0;
 應(yīng)該可以的了。

[此貼子已經(jīng)被作者于2010-6-30 16:28:24編輯過]
回復(fù)

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規(guī)則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機教程網(wǎng)

快速回復(fù) 返回頂部 返回列表