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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

error c237:function already has a body單片機程序編譯錯誤

[復制鏈接]
跳轉到指定樓層
樓主
程序是找別的大佬借鑒的想實現的功能是先超聲波測距離 然后距離小于10或者大于100時候pwm調占空比為0 距離在10到20時減少占空比 20到30時占空比不變 30到100時占空比增加

問題如圖


error c237:function already has a body

單片機源程序如下:
#include<reg52.h>
#include <intrins.h>
#define uint unsigned int
#define uchar unsigned char
sbit rs=P2^0;            //1602的數據/指令選擇控制線
sbit rw=P2^1;           //1602的讀寫控制線
sbit en=P2^2;          //1602的使能控制線
sbit trig=P2^5;      //超聲波測距模塊Trig
sbit echo=P3^2;     //超聲波測距模塊Echo
bit flag1;         //觸發信號標志位//
uchar count;           //中斷累加變量
long int distance;    //測量所得距離
unsigned char code table[ ]={"0123456789"}; //定義字符數組顯示數字

void delay(uint n)                          
{
    uint x,y;
    for(x=n;x>0;x--)
    for(y=110;y>0;y--);
}


void delayt(uint x)
{
    uchar j;
    while(x-- > 0)
    {
              for(j = 0;j < 125;j++)
        {
          ;
        }
    }
}


void lcd_wcom(uchar com)           
{
    rs=0;                //選擇指令寄存器
    rw=0;               //選擇寫
    P0=com;            //把命令字送入P0
    delay(5);         //延時一小會兒,讓1602準備接收數據
    en=1;            //使能線電平變化,命令送入1602的8位數據口
    en=0;
}


void lcd_wdat(uchar dat)      
{
    rs=1;             //選擇數據寄存器
    rw=0;            //選擇寫
    P0=dat;         //把要顯示的數據送入P0
    delay(5);      //延時一小會兒,讓1602準備接收數據,也就是檢測忙信號,這點非常重要。
    en=1;         //使能線電平變化,數據送入1602的8位數據口
    en=0;
  }


void lcd_init()            
{
    lcd_wcom(0x38);       //8位數據,雙列,5*7字形  ,用到功能設定指令   
    lcd_wcom(0x0c);      //開啟顯示屏,關光標,光標不閃爍,用到顯示開關控制指令
    lcd_wcom(0x06);     //顯示地址遞增,即寫一個數據后,顯示位置右移一位,用到了寫入模式設置指令
    lcd_wcom(0x01);    //清屏,用到了清屏指令
}


void lcd_xianshi()            
{
    lcd_wcom(0x80+0x40);
        lcd_wdat('D');
        lcd_wdat('i');
        lcd_wdat('s');
        lcd_wdat('t');
        lcd_wdat('a');
           lcd_wdat('n');
        lcd_wdat('c');
        lcd_wdat('e');
        lcd_wdat(':');
        lcd_wcom(0x80+0x4c);
        lcd_wdat('.');
        lcd_wcom(0x80+0x4e);//單位是厘米//
        lcd_wdat('c');
        lcd_wdat('m');
}


void init_t0()
{
        TMOD=0x01;        
         TL0=0x66;
        TH0=0xfc;              //1ms
    ET0=1;            
        EA=1;                     
}


void trigger()
{
    trig=0;
    _nop_();
    _nop_();
    _nop_();
    _nop_();
    _nop_();
    _nop_();
    _nop_();
    _nop_();
    _nop_();
    _nop_();
    _nop_();
    _nop_();
    _nop_();
    _nop_();
    _nop_();
    _nop_();
    _nop_();
    _nop_();
    _nop_();
    _nop_();
    _nop_();
        trig=1;      
}


void init_measuring()
{
        trig=1;
        echo=1;
        count=0;
}


void measuring()
{
        uchar l;
        uint h,y;
        TR0 = 1;
        while(echo==1)
    {
        ;
    }      
        TR0 = 0;
        l = TL0;
        h = TH0;
        y = (h << 8) + l;
        y = y - 0xfc66;//us部分
        distance = y + 1000 * count;//計算總時間,單位是微秒
        TL0 = 0x66;
        TH0 = 0xfc;
        delayt(30);
        distance = 3453* distance / 20000;//原始為:(0.34毫米/us)*時間/2//      
}


void display(uint x)
{
        uchar qian,bai,shi,ge;
        qian=x/1000;
        bai=(x/100);
        shi=(x/10);
        ge=x;
        lcd_wcom(0x80+0x49);//單位是厘米//
        lcd_wdat(table[qian]);
        lcd_wdat(table[bai]);
        lcd_wdat(table[shi]);
        lcd_wcom(0x80+0x4d);
        lcd_wdat(table[ge]);
}

void main()           
{   lcd_init();          //液晶初始化      
    init_t0();          //定時器0初始化  
        init_measuring();  //超聲波相應端口初始化

        while(1)
        {
         lcd_xianshi();   //液晶顯示特定字符
         trigger();      //觸發超聲波啟動
          while(echo==0)          //等待回聲
          {
             ;
          }
            measuring();           //進行距離測量
            display(distance);    //對測量結果進行顯示
            init_measuring();    //超聲波相應端口初始化
            delayt(10000);        //每次測量間隔1s
        }
}

//……………………………………………中斷服務函數…………………………………………………//
void T_0()interrupt 1
{
        TF0 = 0;
        TL0 = 0x66;
        TH0 = 0xfc;
        count++;
        if(count==18)
        {
          TR0 =0;
          TL0 = 0x66;
          TH0 = 0xfc;
          count = 0;
        }
}
#include <reg52.h>
#define uchar unsigned char
#define V_TH0  0XFF                 
#define V_TL0  0XF6                 
#define V_TMOD 0X01                 

void init_sys(void);            /*系統初始化函數*/
void Delay5Ms(void);

unsigned char ZKB1,ZKB2;

void main (void)
{
init_sys();
  ZKB1=40;            /*占空比初始值設定*/
  ZKB2=70;            /*占空比初始值設定*/
  while(1)
  {
      if (distance<10&distance>100) //如果距離<10或者大于100,占空比為0
      {
       Delay5Ms();
       if (distance<10&distance>100)
         {
         ZKB1=0;
         ZKB2=100;
         }
      }
                 if (20<distance<30) //如果20<距離<30,占空比不變
      {
       Delay5Ms();
       if (20<distance<30)
         {
         ZKB1=ZKB1;
         ZKB2=100-ZKB1;
         }
      }

           if (30<distance<100) //如果30<距離<100,增加占空比
      {
       Delay5Ms();
       if (30<distance<100)
         {
         ZKB1++;
         ZKB2=100-ZKB1;
         }
      }
               
       if (10<distance<20) //如果10<距離<20,減少占空比
      {
       Delay5Ms();
       if (10<distance<20)
         {
         ZKB1--;
         ZKB2=100-ZKB1;
         }
      }
/*對占空比值限定范圍*/
if (ZKB1>99) ZKB1=1;
if (ZKB1<1) ZKB1=99;

  }



}


/******************************************************
*函數功能:對系統進行初始化,包括定時器初始化和變量初始化*/
void init_sys(void)            /*系統初始化函數*/
{
  /*定時器初始化*/
  TMOD=V_TMOD;
  TH0=V_TH0;
  TL0=V_TL0;
  TR0=1;
  ET0=1;
  EA=1;
}


//延時
void Delay5Ms(void)
{
unsigned int TempCyc = 1000;
while(TempCyc--);
}

/*中斷函數*/
void timer0(void) interrupt 1 using 2
{
static uchar click=0;                  /*中斷次數計數器變量*/
TH0=V_TH0;                                    /*恢復定時器初始值*/
TL0=V_TL0;
++click;
if (click>=100) click=0;

if (click<=ZKB1)      /*當小于占空比值時輸出低電平,高于時是高電平,從而實現占空比的調整*/
  P1_0=0;
else
  P1_0=1;

if (click<=ZKB2)                       
  P1_1=0;
else
  P1_1=1;

}



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

使用道具 舉報

沙發
ID:70069 發表于 2020-4-30 08:14 | 只看該作者
你這是兩個程序,還是一個程序。
回復

使用道具 舉報

板凳
ID:267719 發表于 2020-4-30 08:44 | 只看該作者
你沒看到有兩個main函數么?你是把兩個程序功能簡單合并到一個C文件中么?
回復

使用道具 舉報

地板
ID:592807 發表于 2020-4-30 08:49 | 只看該作者
變量未定義

51hei截圖20200430084538.png (19.56 KB, 下載次數: 121)

51hei截圖20200430084538.png
回復

使用道具 舉報

5#
ID:452950 發表于 2020-4-30 10:49 | 只看該作者
不是把兩個單片機程序復制到一起就能一起用的
回復

使用道具 舉報

6#
ID:741080 發表于 2020-5-1 09:45 | 只看該作者
benclee 發表于 2020-4-30 08:14
你這是兩個程序,還是一個程序。

兩個 我以為合一起可以用
回復

使用道具 舉報

7#
ID:741080 發表于 2020-5-1 09:45 | 只看該作者
carpcarey 發表于 2020-4-30 08:44
你沒看到有兩個main函數么?你是把兩個程序功能簡單合并到一個C文件中么?

是的 我不懂這個...
回復

使用道具 舉報

8#
ID:741080 發表于 2020-5-1 09:46 | 只看該作者
xxpp2011 發表于 2020-4-30 10:49
不是把兩個單片機程序復制到一起就能一起用的

啊好像這樣的 之前我不知道
回復

使用道具 舉報

9#
ID:741080 發表于 2020-5-1 09:47 | 只看該作者

謝謝指導
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 亚洲三区视频 | 亚洲精品久久久久久宅男 | 男女网站在线观看 | 亚洲成人精选 | 91精品久久久久久久久中文字幕 | 精品欧美色视频网站在线观看 | 亚洲精品一区二三区不卡 | 日韩久久久久久 | 精品欧美乱码久久久久久1区2区 | 久久久久久久久久久福利观看 | 日韩视频精品在线 | 日本高清不卡视频 | 黄视频免费 | 国产欧美精品在线 | 国产综合久久久久久鬼色 | 日韩成人免费视频 | 国产精品99久久久久久久vr | 福利av在线| 日本色高清| 精品久久久久久久久久久下田 | 无人区国产成人久久三区 | 91免费观看 | 国产一级片免费视频 | av免费在线观看网站 | 一区视频在线免费观看 | 天天操网| 看亚洲a级一级毛片 | 成人a视频片观看免费 | 日韩精品在线观看一区二区三区 | 91精品在线播放 | 亚洲成人av | 91精品久久久久久久久久入口 | 亚洲午夜av | 七七婷婷婷婷精品国产 | 91网站视频在线观看 | 欧美 日韩 国产 一区 | 中文字幕欧美日韩 | 欧美在线综合 | 91免费在线看 | 尤物在线 | 精品真实国产乱文在线 |