找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 3468|回復(fù): 7
打印 上一主題 下一主題
收起左側(cè)

MAIN.C(16): error C129: missing \';\' before \'temp\'有錯(cuò)誤怎么改 大佬幫幫忙

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
30黑幣

  1. #include<reg52.h>
  2. #include<string.h>
  3. #include <stdio.h>
  4. #include"intrins.h"
  5. #define uchar unsigned char
  6. #define uint unsigned int
  7. uchar code table[]={'0','1','2','3','4','5','6','7','8','9'};
  8. uchar code table1[]="ALC warn=90mg/L";                 //初始顯示
  9. uchar code table2[]="current=";                                //報(bào)警濃度和實(shí)測濃度表示
  10. uchar code table3[]="mg/L";
  11. sbit led=P2^6;
  12. sbit beep=P1^3;
  13. sbit lcdrs=P2^5;               //1602液晶的RS腳接在P2.3口上
  14. sbit lcdrw=P2^4;               //1602液晶的RW腳接在P2.4口上
  15. sbit lcden=P2^3;               //1602液晶的E腳接在P2.5口上
  16. sbit SDA=P3^6;                                                         
  17. sbit SCL=P3^7;
  18. int count,t,num;
  19. uchar cur1,cur2,cur3;                                
  20. uint cur_bj=90;                         //CO報(bào)警值
  21. unsigned char ADbuf;//設(shè)置8位的寄存器用來暫存A/D轉(zhuǎn)換結(jié)果
  22. void delay(unsigned int z)
  23. {
  24.         uint i,j;
  25.         for(i=z;i>0;i--)
  26.           for(j=110;j>0;j--);
  27. }


  28. /*******************************延時(shí)函數(shù)*********************************/
  29. void delayms(unsigned int ms)
  30. {
  31.         unsigned char i=100,j;
  32.         for(;ms;ms--)
  33.         {
  34.                 while(--i)
  35.                 {
  36.                         j=10;
  37.                         while(--j);
  38.                 }
  39.         }
  40. }










  41. /*******************************報(bào)警函數(shù)*********************************/
  42. void led_warn()                                                
  43. {
  44.         led=~led;
  45.         delay(200);
  46. }
  47. void beep_warn()


  48. {
  49.         beep=~beep;
  50.         delay(200);
  51. }



  52.    /******************************寫命令函數(shù)********************************/
  53. void write_com(uchar com)
  54. {
  55.          lcdrs=0;
  56.          P0=com;                                //讀命令
  57.          delay(1);
  58.          lcden=1;                                //啟動(dòng)脈沖
  59.          delay(1);
  60.          lcden=0;
  61. }
  62. /******************************寫數(shù)據(jù)函數(shù)********************************/
  63. void write_data(uchar date)
  64. {
  65.          lcdrs=1;
  66.          P0=date;                                //寫命令
  67.          delay(1);
  68.          lcden=1;                                //啟動(dòng)脈沖
  69.          delay(1);
  70.          lcden=0;
  71. }
  72. /******************************LCD初始化*********************************/
  73. void init_1602()
  74. {
  75.          lcden=0;
  76.          write_com(0x38);                        //設(shè)置16*2顯示;5*7點(diǎn)陣;8位數(shù)據(jù)接口
  77.          write_com(0x0c);                        //設(shè)置開顯示,不顯示光標(biāo)
  78.          write_com(0x06);                        //寫一個(gè)字符后地址指針自動(dòng)加1
  79.          write_com(0x01);                        //設(shè)置清0,數(shù)據(jù)指針清零
  80. }










  81. void IICstart(void)
  82. {
  83.      SDA=1;                //先將SDA=1,以準(zhǔn)備在SCL=1時(shí),將SDA=0
  84.      SCL=1;                //時(shí)鐘總線拉高
  85.      _nop_();                          //略做延時(shí)
  86.      _nop_();                          //略做延時(shí)
  87.      SDA=0;                //SCL=1時(shí),將SDA拉低即產(chǎn)生啟動(dòng)信號
  88.      _nop_();                          //略做延時(shí)
  89.      _nop_();                          //略做延時(shí)
  90.      SCL=0;                //將SCL=0,完成啟動(dòng)信號操作      
  91. }




  92. /*****************************IIC停止信號函數(shù)***********************************/
  93. void IICstop(void)
  94. {
  95.      SDA=0;                //先將SDA=0,以準(zhǔn)備在SCL=1時(shí),將SDA=1
  96.      SCL=1;                //時(shí)鐘總線拉高
  97.      _nop_();                          //略做延時(shí)
  98.      _nop_();                          //略做延時(shí)
  99.      SDA=1;                //SCL=1時(shí),將SDA拉高即產(chǎn)生停止信號
  100.      _nop_();                          //略做延時(shí)
  101.      _nop_();                          //略做延時(shí)
  102.      SCL=0;                //將SCL=0,完成啟動(dòng)信號操作      
  103. }


  104. /*****************************向IIC總線寫入1個(gè)字節(jié)函數(shù)**************************/
  105. void Write1Byte(unsigned char Buf1)
  106. {
  107.      unsigned char k;      //1個(gè)字節(jié)要分8次寫入,需要定義一個(gè)寄存器用來計(jì)數(shù)
  108.      for(k=0;k<8;k++)      //做一個(gè)8次的循環(huán),每次寫入1位,需要寫8次
  109.      {
  110.          if(Buf1&0x80)     //從最高位開始寫
  111.          {
  112.              SDA=1;        //如果欲寫入數(shù)據(jù)為1,就將數(shù)據(jù)線置1
  113.          }
  114.          else
  115.          {
  116.              SDA=0;        //如果欲寫入數(shù)據(jù)為0,就將數(shù)據(jù)線寫0
  117.          }
  118.          _nop_();          //略做延時(shí)
  119.          _nop_();          //略做延時(shí)
  120.          SCL=1;            //時(shí)鐘線做一個(gè)上升沿,將一位數(shù)據(jù)寫入
  121.          Buf1=Buf1<<1;     //數(shù)據(jù)左移一位,將下次要寫入的位數(shù)據(jù)移到最高位
  122.          _nop_();          //略做延時(shí)
  123.          SCL=0;            //將SCL=0,以準(zhǔn)備通過上升沿將數(shù)據(jù)寫入
  124.          _nop_();          //略做延時(shí)
  125.      }
  126.      SDA=1;                //將SDA=1,準(zhǔn)備讀應(yīng)答信號
  127.      _nop_();              //略做延時(shí)
  128.      SCL=1;                //將SCL=1,做個(gè)上升沿準(zhǔn)備讀應(yīng)答信號
  129.      _nop_();              //略做延時(shí)
  130.      _nop_();              //略做延時(shí)
  131.      SCL=0;                //將SCL=0,結(jié)束應(yīng)答信號讀操作
  132. }


  133. /****************************從IIC總線讀入1個(gè)字節(jié)函數(shù)******************************/
  134. unsigned char Read1Byte(void)
  135. {
  136.      unsigned char k;      //1個(gè)字節(jié)要分8次讀出,需要定義一個(gè)寄存器用來計(jì)數(shù)
  137.      unsigned char t=0;    //定義一個(gè)寄存器用保存讀出數(shù)據(jù)
  138.      for(k=0;k<8;k++)      //做一個(gè)8次的循環(huán),每次讀入1位,需要讀8次
  139.      {
  140.          t=t<<1;           //數(shù)據(jù)左移一位,空出最低位以準(zhǔn)備保存讀入的一位數(shù)據(jù)
  141.          SDA=1;            //將SDA寫1準(zhǔn)備讀
  142.          SCL=1;            //將SCL=1,做個(gè)上升沿準(zhǔn)備讀一位數(shù)據(jù)
  143.          _nop_();          //略做延時(shí)
  144.          _nop_();          //略做延時(shí)
  145.          if(SDA==1)        //讀一位數(shù)據(jù),并判斷
  146.          {
  147.              t=t|0x01;     //如果讀入數(shù)據(jù)為1,就將接收緩沖區(qū)最低一位置1
  148.          }
  149.          else
  150.          {
  151.              t=t&0xfe;     //如果讀入數(shù)據(jù)為0,就將接收緩沖區(qū)最低一位寫0
  152.          }
  153.          SCL=0;            //SCL恢復(fù)為0,結(jié)束一位數(shù)據(jù)讀操作
  154.          _nop_();          //略做延時(shí)
  155.          _nop_();          //略做延時(shí)
  156.      }
  157.      return t;             //將讀入的一個(gè)字節(jié)返回
  158. }


  159. /******************************軟件模擬IIC向PCF8591指定地址寫一個(gè)字節(jié)函數(shù)********************************/
  160. void WritePCF8591(unsigned char Databuf)
  161. {                          //直接調(diào)用本函數(shù)即可啟動(dòng)PCF8591的D/A轉(zhuǎn)換
  162.     IICstart();            //IIC啟動(dòng)信號


  163.     Write1Byte(0x90);      //發(fā)送PCF8591的器件地址和寫信號


  164.     Write1Byte(0x40);      //發(fā)送器件子地址


  165.     Write1Byte(Databuf);   //發(fā)送數(shù)據(jù)


  166.     IICstop();             //產(chǎn)生IIC停止信號
  167. }




  168. /******************************軟件模擬IIC從PCF8563指定地址讀一個(gè)字節(jié)函數(shù)************************************/
  169. unsigned char ReadPCF8591(unsigned char Ch)
  170. {                          //直接調(diào)用本函數(shù)即可從PCF8591的Ch通道讀出數(shù)據(jù)返回
  171.     unsigned char buf;     //定義一個(gè)寄存器用來暫存讀出的數(shù)據(jù)
  172.     IICstart();            //IIC啟動(dòng)信號


  173.     Write1Byte(0x90);      //發(fā)送PCF8591的器件地址和寫信號


  174.     Write1Byte(0x40|Ch);   //發(fā)送器件通道參數(shù)Ch=0-3


  175.     IICstart();            //IIC啟動(dòng)信號


  176.     Write1Byte(0x91);      //發(fā)送PCF8591的器件地址和讀信號


  177.     buf=Read1Byte();//讀一個(gè)字節(jié)數(shù)據(jù)


  178.     IICstop();             //產(chǎn)生IIC停止信號


  179.     return(buf);           //將讀出數(shù)據(jù)返回
  180. }




  181. /******************************顯示初始值函數(shù)**********************************/
  182. void dis_init()
  183. {
  184.         uchar a,b,c;
  185.         write_com(0x80+0x00);        //初始化顯示
  186.          for(a=0;a<15;a++)
  187.          {
  188.                   write_data(table1[a]);
  189.                   delay(1);
  190.          }
  191.         delay(200);
  192.         write_com(0x80+0x40);        //第二行顯示酒精濃度表示單位        
  193.          for(b=0;b<8;b++)
  194.          {
  195.                   write_data(table2[ b]);[/b][ b]
  196.                   delay(1);
  197.          }
  198.                  write_com(0x80+0x4B);        //第二行顯示酒精濃度表示單位        
  199.          for(c=0;c<4;c++)
  200.          {
  201.                   write_data(table3[c]);
  202.                   delay(1);
  203.          }


  204. }






  205. /*********************************1602顯示濃度數(shù)據(jù)h和酒精報(bào)警程序**************************/
  206. void dis_cur(uint t)
  207. {
  208.   uchar i;
  209.      t=t*100/255;
  210.    i=t/100;
  211.    write_com(0x80+0x48);           //顯示濃度百位
  212.    write_data(table[ i]);[/i][ i]
  213.    cur1=table[ i];[/i][ i]
  214.   i=t%100/10;


  215.     write_com(0x80+0x49);
  216.         write_data(table[ i]);[/i][ i]
  217.          cur2=table[ i];[/i][ i]
  218.   i=t%100%10;
  219.           write_com(0x80+0x4A);           //顯示濃度個(gè)位
  220.          write_data(table[ i]);[/i][ i]


  221.          cur3=table[ i];[/i][ i]




  222.          if(t>cur_bj)
  223.           {         
  224.                 led_warn();
  225.             beep_warn();
  226.           }


  227.     else
  228.           {
  229.                 led=1;
  230.                 beep=1;
  231.           }


  232. }


  233. /*******************************串口初始化********************************/
  234. void  UARTinit()
  235. {
  236. //   TMOD=0X21;
  237. //   SCON=0X40;
  238.   TMOD=0x20;
  239.   PCON=0x00;
  240.   SCON=0x50;
  241.    TH1=0XFF;
  242.    TL1=0XFD;
  243.    TH0=(65536-45872)/256;
  244.    TL0=(65536-45872)%256;
  245.    TR1=1;
  246.    TR0=1;
  247.    EA=1;
  248.    ES=1;
  249.    TI=0;
  250.    ET0=1;
  251. }
  252. /*******************************發(fā)送一個(gè)字節(jié)************************************/
  253. void UART_Send_Byte(unsigned char mydata)        
  254. {
  255.          ES=0;
  256.          TI=0;
  257.          SBUF=mydata;
  258.          while(!TI);
  259.          TI=0;
  260.          ES=1;
  261. }
  262. /****************************發(fā)送文本串****************************************/
  263. void UART_Send_Str(char *s)         
  264. {
  265.          int i=0;
  266.          while(s[ i]!=0)[/i][ i]
  267.          {
  268.                  UART_Send_Byte(s[ i]);[/i][ i]
  269.                  i++;
  270.          }


  271. }


  272. void T0_time() interrupt 1
  273. {
  274.    count++;
  275.    TH0=(65536-45872)/256;
  276.    TL0=(65536-45872)%256;
  277.            if(count==400)
  278.                 {
  279.                  count=0;
  280.                  num=1;
  281.                 }


  282. }




  283. main()
  284. {
  285. uchar g,s,b;


  286. //        uchar i = 0;
  287. //          uchar code Buffer[]="0" ;  //所要發(fā)送的數(shù)據(jù)
  288. //          uchar *p;


  289.         led=1;
  290.         beep=1;
  291.         lcdrw=0;                           //確定讀操作
  292.         init_1602();                   //初始化LCD1602
  293.         delay(5);
  294.         dis_init();                                //1602顯示初始化  
  295.         delay(2000);
  296.         UARTinit();                           //串口初始化


  297.         
  298.          
  299. //          Com_Init();
  300. //          p = Buffer;
  301.         while(1)        
  302.         {
  303.                    ADbuf=ReadPCF8591(0);     //將AIN0通道A/D轉(zhuǎn)換結(jié)果暫存在ADbuf
  304.                     dis_cur(ADbuf);        //濃度顯示
  305.                   b=ADbuf/100;
  306.                 s=ADbuf%100/10;
  307.                 g=ADbuf%100%10;
  308.                 if(num==1)
  309.                 {
  310.                         UART_Send_Byte(g);
  311.                         UART_Send_Byte(s);
  312.                         UART_Send_Byte(b);
  313.                 //        UART_Send_Str("hello");
  314. //                UART_Send_Str("ADbuf/100");
  315. //                UART_Send_Str("ADbuf%100/10");
  316. //                UART_Send_Str("ADbuf%100%10");


  317.                 }
  318.    /*
  319.                  SBUF = *p ;
  320.             while(!TI){  ;//如果發(fā)送完畢,硬件會置位TI
  321.               _nop_();   //此句似乎可以去掉
  322.             }
  323.             TI = 0;  //TI清零
  324.             p++;
  325.             if(*p == '\0')
  326.               break;  */
  327.         }  
  328. }
復(fù)制代碼

獨(dú)立按鍵.png (2.17 MB, 下載次數(shù): 81)

獨(dú)立按鍵.png
分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復(fù)

使用道具 舉報(bào)

沙發(fā)
ID:552614 發(fā)表于 2019-6-16 07:51 | 只看該作者
沒這么寫過unsigned char,可能中間加個(gè)空格就可以了吧。
回復(fù)

使用道具 舉報(bào)

板凳
ID:105364 發(fā)表于 2019-6-16 10:15 | 只看該作者
015行應(yīng)為unsigned char dispbuf[3];//char 后面要有空格
主要還是016行的 uint問題。截圖不全,不知有沒定義 #define uint unsigned int
回復(fù)

使用道具 舉報(bào)

地板
ID:483407 發(fā)表于 2019-6-16 10:37 | 只看該作者
007,008,009,015,這只是能看到的幾行,
unsigned char dat=0x00;
char 與 dat  之間缺個(gè)空格吧
回復(fù)

使用道具 舉報(bào)

5#
ID:376767 發(fā)表于 2019-6-16 10:53 | 只看該作者
unsigned char后面加空格,還有uint、uchar看看有沒有對應(yīng)的typedef,類型聲明和變量名之間要加空格
回復(fù)

使用道具 舉報(bào)

6#
ID:564486 發(fā)表于 2019-6-17 14:52 | 只看該作者
第15行 char后面要加空格
回復(fù)

使用道具 舉報(bào)

7#
ID:553887 發(fā)表于 2019-6-19 20:40 | 只看該作者
47okey 發(fā)表于 2019-6-16 10:15
015行應(yīng)為unsigned char dispbuf[3];//char 后面要有空格
主要還是016行的 uint問題。截圖不全,不知有沒 ...

有定義
回復(fù)

使用道具 舉報(bào)

8#
ID:542954 發(fā)表于 2019-8-11 20:32 | 只看該作者
我似乎看到了一個(gè)重復(fù)定義的問題
回復(fù)

使用道具 舉報(bào)

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

本版積分規(guī)則

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

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

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