欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 5012|回復: 7
收起左側

missing';'before'0000' 為什么c語言的程序會出現這樣的錯誤?

[復制鏈接]
ID:401913 發表于 2018-10-13 21:22 | 顯示全部樓層 |閱讀模式
1黑幣
錯誤提示:missing';'before'0000'
捕獲1.PNG
  1. #include<reg52.h>
  2. #include<intrins.h>
  3. sbit KEY1 = P1^0;                 // 上調報警溫度
  4. sbit KEY2 = P1^1;                 // 下調報警溫度
  5. sbit LED1 = P1^2;                 // 正常時綠燈亮
  6. sbit LED2 = P1^3;                 // 報警時紅燈亮
  7. sbit BUZZ = P1^6;
  8. sbit IO_18B20 = P3^2;  //DS18B20通信引腳
  9. #define LCD1602_DB  P0
  10. sbit LCD1602_RS = P2^0;
  11. sbit LCD1602_RW = P2^1;
  12. sbit LCD1602_E  = P2^2;

  13. bit enBuzz = 0;                            //蜂鳴器使能標志
  14. bit flag1s = 0;              //1s定時標志
  15. unsigned int warnT = 30;     //報警溫度值
  16. unsigned char T0RH = 0;     //T0重載值的高字節
  17. unsigned char T0RL = 0;     //T0重載值的低字節

  18. void ConfigTimer0(unsigned int ms);           
  19. unsigned char IntToString(unsigned char *str, int dat);
  20. extern bit Start18B20();
  21. extern bit Get18B20Temp(int *temp);
  22. extern void InitLcd1602();
  23. extern void LcdShowStr(unsigned char x, unsigned char y, unsigned char *str);
  24. extern void LcdWriteCmd(unsigned char cmd);


  25. //DS18B20程序:

  26. /* 軟件延時函數,延時時間(t*10)us */
  27. void DelayX10us(unsigned char t)
  28. {
  29.     do {
  30.         _nop_();
  31.         _nop_();
  32.         _nop_();
  33.         _nop_();
  34.         _nop_();
  35.         _nop_();
  36.         _nop_();
  37.         _nop_();
  38.     } while (--t);
  39. }
  40. bit Get18B20Ack()
  41. {
  42.         bit ack;

  43.         EA = 0;
  44.         IO_18B20 = 0;
  45.         DelayX10us(50);
  46.         IO_18B20 = 1;
  47.         DelayX10us(6);
  48.         ack = IO_18B20;
  49.         while(!IO_18B20);
  50.         EA = 1;

  51.         return ack;
  52. }

  53. void  Write18B20(unsigned char dat)
  54. {
  55.         unsigned char mask;
  56.         EA = 0;
  57.         for(mask=0x01; mask!= 0; mask<<=1)
  58.         {
  59.                 IO_18B20 = 0;
  60.                 _nop_();
  61.                 _nop_();
  62.                 if((mask&dat) == 0)
  63.                         IO_18B20 = 0;
  64.                 else
  65.                         IO_18B20 = 1;
  66.                 DelayX10us(6);
  67.                 IO_18B20 = 1;
  68.         }
  69.         EA = 1;
  70. }

  71. unsigned char Read18B20()
  72. {
  73.         unsigned char dat;
  74.         unsigned char mask;

  75.         EA = 0;
  76.         for(mask=0x01; mask!=0; mask<<=1)
  77.         {
  78.                 IO_18B20 = 0;
  79.                 _nop_();
  80.                 _nop_();
  81.                 IO_18B20 = 1;
  82.                 _nop_();
  83.                 _nop_();
  84.                 if(!IO_18B20)
  85.                         dat &= ~mask;
  86.                 else
  87.                         dat |= mask;
  88.                 DelayX10us(6);
  89.         }
  90.         EA = 1;

  91.         return dat;
  92. }

  93. bit Start18B20()
  94. {
  95.         bit ack;

  96.         ack = Get18B20Ack();
  97.         if(ack == 0)
  98.         {
  99.                 Write18B20(0xCC);
  100.                 Write18B20(0x44);
  101.         }
  102.         return ~ack;
  103. }

  104. bit Get18B20Temp(int *temp)
  105. {
  106.         bit ack;
  107.         unsigned char LSB, MSB;

  108.         ack = Get18B20Ack();
  109.         if(ack == 0)
  110.         {
  111.                 Write18B20(0xCC);
  112.                 Write18B20(0xBE);
  113.                 LSB = Read18B20();
  114.                 MSB = Read18B20();
  115.                 *temp = ((int)MSB<<8) + LSB;
  116.         }
  117.         return ~ack;
  118. }



  119. //LCD1602程序:




  120. /* 等待液晶準備好 */
  121. void LcdWaitReady()
  122. {
  123.     unsigned char sta;

  124.     LCD1602_DB = 0xFF;
  125.     LCD1602_RS = 0;
  126.     LCD1602_RW = 1;
  127.     do {
  128.         LCD1602_E = 1;
  129.         sta = LCD1602_DB; //讀取狀態字
  130.         LCD1602_E = 0;
  131.     } while (sta & 0x80); //bit7等于1表示液晶正忙,重復檢測直到其等于0為止
  132. }
  133. /* 向LCD1602液晶寫入一字節命令,cmd-待寫入命令值 */
  134. void LcdWriteCmd(unsigned char cmd)
  135. {
  136.     LcdWaitReady();
  137.     LCD1602_RS = 0;
  138.     LCD1602_RW = 0;
  139.     LCD1602_DB = cmd;
  140.     LCD1602_E = 1;
  141.     LCD1602_E = 0;
  142. }
  143. /* 向LCD1602液晶寫入一字節數據,dat-待寫入數據值 */
  144. void LcdWriteDat(unsigned char dat)
  145. {
  146.     LcdWaitReady();
  147.     LCD1602_RS = 1;
  148.     LCD1602_RW = 0;
  149.     LCD1602_DB = dat;
  150.     LCD1602_E = 1;
  151.     LCD1602_E = 0;
  152. }
  153. /* 設置顯示RAM起始地址,亦即光標位置,(x,y)-對應屏幕上的字符坐標 */
  154. void LcdSetCursor(unsigned char x, unsigned char y)
  155. {
  156.     unsigned char addr;

  157.     if (y == 0)  //由輸入的屏幕坐標計算顯示RAM的地址
  158.         addr = 0x00 + x;  //第一行字符地址從0x00起始
  159.     else
  160.         addr = 0x40 + x;  //第二行字符地址從0x40起始
  161.     LcdWriteCmd(addr | 0x80);  //設置RAM地址
  162. }
  163. /* 在液晶上顯示字符串,(x,y)-對應屏幕上的起始坐標,str-字符串指針 */
  164. void LcdShowStr(unsigned char x, unsigned char y, unsigned char *str)
  165. {
  166.     LcdSetCursor(x, y);   //設置起始地址
  167.     while (*str != '\0')  //連續寫入字符串數據,直到檢測到結束符
  168.     {
  169.         LcdWriteDat(*str++);
  170.     }
  171. }
  172. /* 初始化1602液晶 */
  173. void InitLcd1602()
  174. {
  175.     LcdWriteCmd(0x38);  //16*2顯示,5*7點陣,8位數據接口
  176.     LcdWriteCmd(0x0C);  //顯示器開,光標關閉
  177.     LcdWriteCmd(0x06);  //文字不動,地址自動+1
  178.     LcdWriteCmd(0x01);  //清屏
  179. }






  180. void main()
  181. {
  182.     bit res;
  183.         bit backup = 1;
  184.     int temp;          //讀取到的當前溫度值
  185.     int intT, decT;      //溫度值的整數和小數部分
  186.     unsigned char len,len1;
  187.     unsigned char str[12],str1[12];

  188.     EA= 1;            //開總中斷
  189.         P1= 0XF3;
  190.     ConfigTimer0(1);    //T0定時1ms
  191.     Start18B20();       //啟動DS18B20
  192.     InitLcd1602();      //初始化液晶

  193.     while (1)
  194.     {
  195.             
  196.                 if (flag1s)   //每秒更新一次溫度
  197.                 {
  198.                     flag1s = 0;
  199.                     res = Get18B20Temp(&temp);  //讀取當前溫度
  200.                     if (res)                    //讀取成功時,刷新當前溫度顯示
  201.                     {
  202.                         intT = temp >> 4;              //分離出溫度值整數部分
  203.                         decT = temp & 0xF;            //分離出溫度值小數部分
  204.                         len = IntToString(str, intT);      //整數部分轉換為字符串
  205.                                     len1 = IntToString(str1, warnT);  //報警溫度轉換為字符串
  206.                         str[len++] = '.';                //添加小數點
  207.                         decT = (decT*10) / 16;     //二進制的小數部分轉換為1
  208. //位十進制位
  209.                         str[len++] = decT + '0';     //十進制小數位再轉換為
  210. //ASCII字符
  211.                                         str[len++] = 0xdf;         //添加字符串"℃"
  212.                                         str[len++] = 'C';
  213.                                         str[len++] = ' ';
  214.                                         str[len] = '\0';             //添加字符串結束符
  215.                                         str1[len1++] = 0xdf;       //添加字符串"℃"
  216.                                         str1[len1++] = 'C';
  217.                                         str1[len1] = '\0';           //添加字符串結束符
  218.                                         if (intT < warnT)                    //超過報警溫度時執行報警
  219.                                         {                                            
  220.                                              enBuzz = 0;                                        //關閉蜂鳴器
  221.                                                  LcdWriteCmd(0x01);             //清屏
  222.                                                  LcdShowStr(2, 0, "Temperature");        //顯示第一行         
  223.                                                  LcdShowStr(2, 1, str);         //顯示實時溫度
  224.                                                  LcdShowStr(9, 1, "<");      
  225.                                                  LcdShowStr(11, 1, str1);       //顯示報警溫度                                                                                 
  226.                                         }
  227.                                         else
  228.                                         {                                
  229.                                                  enBuzz = 1;                                    //啟動蜂鳴器發聲  
  230.                                                  LcdWriteCmd(0x01);             //清屏
  231.                                                  LcdShowStr(4, 0, "Warning!");  //顯示警告   
  232.                                                  LcdShowStr(0, 1, "Temp:");     
  233.                                                  LcdShowStr(5, 1, str);         //顯示實時溫度
  234.                                                  LcdShowStr(11, 1, ">");
  235.                                                  LcdShowStr(12, 1, str1);       //顯示報警溫度
  236.                                         }                                                                                                         
  237.                     }
  238.                     else                        //讀取失敗時,提示錯誤信息
  239.                     {
  240.                         LcdShowStr(4, 1, "error!");
  241.                     }
  242.                     Start18B20();               //重新啟動下一次轉換
  243.                 }
  244.     }
  245. }
  246. /* 按鍵動作函數 */
  247. void KeyAction ()
  248. {
  249.      if (KEY1 == 0)
  250.          {
  251.              KEY1 = 1;         
  252.                  warnT++;
  253.          }
  254.          else if (KEY2 == 0)
  255.          {
  256.              KEY2 = 1;
  257.                  warnT--;
  258.          }
  259. }
  260. /* 整型數轉換為字符串,str-字符串指針,dat-待轉換數,返回值-字符串長度 */
  261. unsigned char IntToString(unsigned char *str, int dat)
  262. {
  263.     signed char i = 0;
  264.     unsigned char len = 0;
  265.     unsigned char buf[6];

  266.     if (dat < 0)  //如果為負數,首先取絕對值,并在指針上添加負號
  267.     {
  268.         dat = -dat;
  269.         *str++ = '-';
  270.         len++;
  271.     }
  272.     do {          //先轉換為低位在前的十進制數組
  273.         buf[i++] = dat % 10;
  274.         dat /= 10;
  275.     } while (dat > 0);
  276.     len += i;         //i最后的值就是有效字符的個數
  277.     while (i-- > 0)   //將數組值轉換為ASCII碼反向拷貝到接收指針上
  278.     {
  279.         *str++ = buf[i] + '0';
  280.     }
  281.     *str = '\0';  //添加字符串結束符
  282.     return len;   //返回字符串長度
  283. }
  284. /* 配置并啟動T0,ms-T0定時時間 */
  285. void ConfigTimer0(unsigned int ms)
  286. {
  287.     unsigned long tmp;  //臨時變量

  288.     tmp = 11059200 / 12;      //定時器計數頻率
  289.     tmp = (tmp * ms) / 1000;  //計算所需的計數值
  290.     tmp = 65536 - tmp;        //計算定時器重載值
  291.     tmp = tmp + 28;           //補償中斷響應延時造成的誤差
  292.     T0RH = (unsigned char)(tmp>>8);  //定時器重載值拆分為高低字節
  293.     T0RL = (unsigned char)tmp;
  294.     TMOD &= 0xF0;   //清零T0的控制位
  295.     TMOD |= 0x01;   //配置T0為模式1
  296.     TH0 = T0RH;     //加載T0重載值
  297.     TL0 = T0RL;
  298.     ET0 = 1;        //使能T0中斷
  299.     TR0 = 1;        //啟動T0
  300. }
  301. /* T0中斷服務函數,完成250ms, 1s定時 */
  302. void InterruptTimer0() interrupt 1
  303. {
  304.     static unsigned int tmr1s = 0;
  305.         static unsigned int tmrms = 0;

  306.     TH0 = T0RH;         //重新加載重載值
  307.     TL0 = T0RL;
  308.         if (enBuzz)                //蜂鳴器發聲處理
  309.         {
  310.             BUZZ = ~BUZZ;   //啟動蜂鳴器發聲        
  311.                 LED1 = 0;
  312.                 LED2 = 1;
  313.         }
  314.         else
  315.         {
  316.             BUZZ = 1;                //關閉蜂鳴器
  317.                 LED1 = 1;
  318.                 LED2 = 0;
  319.         }
  320.     tmr1s++;
  321.         tmrms++;
  322.         if (tmrms >= 250)        //延時250ms
  323.         {
  324.             tmrms = 0;
  325.         KeyAction ();
  326.         }
  327.     if (tmr1s >= 1000)  //定時1s
  328.     {
  329.         tmr1s = 0;
  330.         flag1s = 1;        
  331.     }
  332. }
復制代碼

回復

使用道具 舉報

ID:409338 發表于 2018-10-14 10:39 | 顯示全部樓層
報錯,錯誤在reg52.h里面。你得把這個頭文件貼出來看看。
回復

使用道具 舉報

ID:388197 發表于 2018-10-14 11:01 | 顯示全部樓層
我將代碼復制下來,再我電腦上(keil4 c51)編譯能通過,樓主檢查下是否修改過頭文件

評分

參與人數 1黑幣 +20 收起 理由
admin + 20 絕世好帖!

查看全部評分

回復

使用道具 舉報

ID:401913 發表于 2018-10-14 16:38 | 顯示全部樓層
越雨 發表于 2018-10-14 10:39
報錯,錯誤在reg52.h里面。你得把這個頭文件貼出來看看。

頭文件怎么看?就只有這整個代碼
回復

使用道具 舉報

ID:401913 發表于 2018-10-14 16:39 | 顯示全部樓層
cjm82 發表于 2018-10-14 11:01
我將代碼復制下來,再我電腦上(keil4 c51)編譯能通過,樓主檢查下是否修改過頭文件

代碼我是從網上找的,一運行就出現這個問題,都沒改過頭文件
回復

使用道具 舉報

ID:137736 發表于 2018-10-14 17:44 | 顯示全部樓層
包含的頭文件可能沒找到或者損壞。自己查找到打開看看,或下個頭文件覆蓋掉。
回復

使用道具 舉報

ID:155507 發表于 2018-10-14 18:11 | 顯示全部樓層
是keil的問題!
所以把keil卸載了,在安裝keil才能運行的
回復

使用道具 舉報

ID:213173 發表于 2018-10-14 19:09 | 顯示全部樓層
631607010604 發表于 2018-10-14 16:39
代碼我是從網上找的,一運行就出現這個問題,都沒改過頭文件

把這個頭文件REG52.H放在工程文件里,引用時不用尖括號用雙引號就可以了。
#include "REG52.H" reg51.zip (876 Bytes, 下載次數: 5)

回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表