久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 9067|回復: 14
打印 上一主題 下一主題
收起左側

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

[復制鏈接]
跳轉到指定樓層
樓主
ID:6799 發表于 2009-6-30 22:18 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式

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

 P17=0;
 uchar k=0; //設置流水燈的方向標志位
 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沒有被定義,編譯無法通過,試著調整擺放P17的位置,卻能編譯成功,這到底為什么啊?誰能給個解釋啊?

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復

使用道具 舉報

沙發
ID:8993 發表于 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; //設置發光管的開關
main()
{

 P17=0;
 k=0; //設置流水燈的方向標志位
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++);
}


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

使用道具 舉報

板凳
ID:8993 發表于 2009-7-1 08:50 | 只看該作者

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

回復

使用道具 舉報

地板
ID:8993 發表于 2009-7-1 08:55 | 只看該作者
還有一種方法是把P17=0寫在uchar led=0x01的后面也行。
main()
{
 uchar k=0; //設置流水燈的方向標志位
uchar leds=0x01;
 P17=0;
回復

使用道具 舉報

5#
ID:14775 發表于 2009-7-1 19:40 | 只看該作者

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

回復

使用道具 舉報

6#
ID:6799 發表于 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)

真是不得其解啊?想不通為什么...
回復

使用道具 舉報

7#
ID:14964 發表于 2009-7-4 19:26 | 只看該作者

在函數中,變量的定義必須放在執行語句前面!

回復

使用道具 舉報

8#
ID:15556 發表于 2009-7-24 15:34 | 只看該作者

把定義部分應該放在主函數MAIN之前吧,全局變量

回復

使用道具 舉報

9#
ID:15225 發表于 2009-7-27 09:36 | 只看該作者
#define uchar unsigned char
#define uint unsigned int

#include <reg51.h>
。。
。。
。。
這樣?
回復

使用道具 舉報

10#
ID:15867 發表于 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)

}

回復

使用道具 舉報

11#
ID:19203 發表于 2009-12-7 16:29 | 只看該作者

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

 

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

回復

使用道具 舉報

12#
ID:20780 發表于 2010-1-6 17:05 | 只看該作者
定義一般都在每個函數的最前面
回復

使用道具 舉報

13#
ID:24218 發表于 2010-6-2 15:50 | 只看該作者
void delay(uint z);
回復

使用道具 舉報

14#
ID:5392 發表于 2010-6-30 14:10 | 只看該作者

main里面的

P17=0;是賦值語句

肯定要放在

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

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

回復

使用道具 舉報

15#
ID:24810 發表于 2010-6-30 16:28 | 只看該作者

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

我也遇到過這樣的問題,不過現在不會這樣的了。

 

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

把:

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

改為

uchar k=0; //設置流水燈的方向標志位
 uchar leds=0x01;
P17=0;
 應該可以的了。

[此貼子已經被作者于2010-6-30 16:28:24編輯過]
回復

使用道具 舉報

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

本版積分規則

手機版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 色婷婷一区二区三区四区 | 日韩男人天堂 | 黄色免费看 | 极品一区 | 91视频观看 | 欧美日韩亚洲一区 | 欧美日韩在线播放 | 欧美成人激情 | 亚洲精品99 | 国产一区二区三区久久久久久久久 | 日本精品久久 | 成人小视频在线观看 | 国产美女自拍视频 | 亚洲自拍偷拍免费视频 | 精品国产伦一区二区三区观看说明 | 56pao在线 | 精品日韩一区 | 青青久久久 | 日韩毛片在线视频 | 亚洲国产一区二区三区 | 黄网站在线播放 | 欧美aaaaaaaaaa| 欧美a区 | 人人精品| 美女爽到呻吟久久久久 | 国产精品久久久久久久久久久久冷 | 欧美成人视屏 | 欧美偷偷 | 午夜免费影视 | 国产精品一区二区不卡 | 国产一级视频 | 中文在线a在线 | 在线观看av网站永久 | av天天干 | 久久综合九色综合欧美狠狠 | av天空| 高清一区二区三区 | 亚洲欧美中文日韩在线v日本 | 亚洲精品中文字幕在线 | 精品无码久久久久国产 | av大片在线观看 |