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

 找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開始

搜索
查看: 4769|回復(fù): 7
收起左側(cè)

missing';'before'0000' 為什么c語言的程序會(huì)出現(xiàn)這樣的錯(cuò)誤?

[復(fù)制鏈接]
ID:401913 發(fā)表于 2018-10-13 21:22 | 顯示全部樓層 |閱讀模式
1黑幣
錯(cuò)誤提示:missing';'before'0000'
捕獲1.PNG
  1. #include<reg52.h>
  2. #include<intrins.h>
  3. sbit KEY1 = P1^0;                 // 上調(diào)報(bào)警溫度
  4. sbit KEY2 = P1^1;                 // 下調(diào)報(bào)警溫度
  5. sbit LED1 = P1^2;                 // 正常時(shí)綠燈亮
  6. sbit LED2 = P1^3;                 // 報(bào)警時(shí)紅燈亮
  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;                            //蜂鳴器使能標(biāo)志
  14. bit flag1s = 0;              //1s定時(shí)標(biāo)志
  15. unsigned int warnT = 30;     //報(bào)警溫度值
  16. unsigned char T0RH = 0;     //T0重載值的高字節(jié)
  17. unsigned char T0RL = 0;     //T0重載值的低字節(jié)

  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. /* 軟件延時(shí)函數(shù),延時(shí)時(shí)間(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. /* 等待液晶準(zhǔn)備好 */
  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; //讀取狀態(tài)字
  130.         LCD1602_E = 0;
  131.     } while (sta & 0x80); //bit7等于1表示液晶正忙,重復(fù)檢測(cè)直到其等于0為止
  132. }
  133. /* 向LCD1602液晶寫入一字節(jié)命令,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液晶寫入一字節(jié)數(shù)據(jù),dat-待寫入數(shù)據(jù)值 */
  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. /* 設(shè)置顯示RAM起始地址,亦即光標(biāo)位置,(x,y)-對(duì)應(yīng)屏幕上的字符坐標(biāo) */
  154. void LcdSetCursor(unsigned char x, unsigned char y)
  155. {
  156.     unsigned char addr;

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






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

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

  193.     while (1)
  194.     {
  195.             
  196.                 if (flag1s)   //每秒更新一次溫度
  197.                 {
  198.                     flag1s = 0;
  199.                     res = Get18B20Temp(&temp);  //讀取當(dāng)前溫度
  200.                     if (res)                    //讀取成功時(shí),刷新當(dāng)前溫度顯示
  201.                     {
  202.                         intT = temp >> 4;              //分離出溫度值整數(shù)部分
  203.                         decT = temp & 0xF;            //分離出溫度值小數(shù)部分
  204.                         len = IntToString(str, intT);      //整數(shù)部分轉(zhuǎn)換為字符串
  205.                                     len1 = IntToString(str1, warnT);  //報(bào)警溫度轉(zhuǎn)換為字符串
  206.                         str[len++] = '.';                //添加小數(shù)點(diǎn)
  207.                         decT = (decT*10) / 16;     //二進(jìn)制的小數(shù)部分轉(zhuǎn)換為1
  208. //位十進(jìn)制位
  209.                         str[len++] = decT + '0';     //十進(jìn)制小數(shù)位再轉(zhuǎn)換為
  210. //ASCII字符
  211.                                         str[len++] = 0xdf;         //添加字符串"℃"
  212.                                         str[len++] = 'C';
  213.                                         str[len++] = ' ';
  214.                                         str[len] = '\0';             //添加字符串結(jié)束符
  215.                                         str1[len1++] = 0xdf;       //添加字符串"℃"
  216.                                         str1[len1++] = 'C';
  217.                                         str1[len1] = '\0';           //添加字符串結(jié)束符
  218.                                         if (intT < warnT)                    //超過報(bào)警溫度時(shí)執(zhí)行報(bào)警
  219.                                         {                                            
  220.                                              enBuzz = 0;                                        //關(guān)閉蜂鳴器
  221.                                                  LcdWriteCmd(0x01);             //清屏
  222.                                                  LcdShowStr(2, 0, "Temperature");        //顯示第一行         
  223.                                                  LcdShowStr(2, 1, str);         //顯示實(shí)時(shí)溫度
  224.                                                  LcdShowStr(9, 1, "<");      
  225.                                                  LcdShowStr(11, 1, str1);       //顯示報(bào)警溫度                                                                                 
  226.                                         }
  227.                                         else
  228.                                         {                                
  229.                                                  enBuzz = 1;                                    //啟動(dòng)蜂鳴器發(fā)聲  
  230.                                                  LcdWriteCmd(0x01);             //清屏
  231.                                                  LcdShowStr(4, 0, "Warning!");  //顯示警告   
  232.                                                  LcdShowStr(0, 1, "Temp:");     
  233.                                                  LcdShowStr(5, 1, str);         //顯示實(shí)時(shí)溫度
  234.                                                  LcdShowStr(11, 1, ">");
  235.                                                  LcdShowStr(12, 1, str1);       //顯示報(bào)警溫度
  236.                                         }                                                                                                         
  237.                     }
  238.                     else                        //讀取失敗時(shí),提示錯(cuò)誤信息
  239.                     {
  240.                         LcdShowStr(4, 1, "error!");
  241.                     }
  242.                     Start18B20();               //重新啟動(dòng)下一次轉(zhuǎn)換
  243.                 }
  244.     }
  245. }
  246. /* 按鍵動(dòng)作函數(shù) */
  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. /* 整型數(shù)轉(zhuǎn)換為字符串,str-字符串指針,dat-待轉(zhuǎn)換數(shù),返回值-字符串長(zhǎng)度 */
  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)  //如果為負(fù)數(shù),首先取絕對(duì)值,并在指針上添加負(fù)號(hào)
  267.     {
  268.         dat = -dat;
  269.         *str++ = '-';
  270.         len++;
  271.     }
  272.     do {          //先轉(zhuǎn)換為低位在前的十進(jìn)制數(shù)組
  273.         buf[i++] = dat % 10;
  274.         dat /= 10;
  275.     } while (dat > 0);
  276.     len += i;         //i最后的值就是有效字符的個(gè)數(shù)
  277.     while (i-- > 0)   //將數(shù)組值轉(zhuǎn)換為ASCII碼反向拷貝到接收指針上
  278.     {
  279.         *str++ = buf[i] + '0';
  280.     }
  281.     *str = '\0';  //添加字符串結(jié)束符
  282.     return len;   //返回字符串長(zhǎng)度
  283. }
  284. /* 配置并啟動(dòng)T0,ms-T0定時(shí)時(shí)間 */
  285. void ConfigTimer0(unsigned int ms)
  286. {
  287.     unsigned long tmp;  //臨時(shí)變量

  288.     tmp = 11059200 / 12;      //定時(shí)器計(jì)數(shù)頻率
  289.     tmp = (tmp * ms) / 1000;  //計(jì)算所需的計(jì)數(shù)值
  290.     tmp = 65536 - tmp;        //計(jì)算定時(shí)器重載值
  291.     tmp = tmp + 28;           //補(bǔ)償中斷響應(yīng)延時(shí)造成的誤差
  292.     T0RH = (unsigned char)(tmp>>8);  //定時(shí)器重載值拆分為高低字節(jié)
  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;        //啟動(dòng)T0
  300. }
  301. /* T0中斷服務(wù)函數(shù),完成250ms, 1s定時(shí) */
  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)                //蜂鳴器發(fā)聲處理
  309.         {
  310.             BUZZ = ~BUZZ;   //啟動(dòng)蜂鳴器發(fā)聲        
  311.                 LED1 = 0;
  312.                 LED2 = 1;
  313.         }
  314.         else
  315.         {
  316.             BUZZ = 1;                //關(guān)閉蜂鳴器
  317.                 LED1 = 1;
  318.                 LED2 = 0;
  319.         }
  320.     tmr1s++;
  321.         tmrms++;
  322.         if (tmrms >= 250)        //延時(shí)250ms
  323.         {
  324.             tmrms = 0;
  325.         KeyAction ();
  326.         }
  327.     if (tmr1s >= 1000)  //定時(shí)1s
  328.     {
  329.         tmr1s = 0;
  330.         flag1s = 1;        
  331.     }
  332. }
復(fù)制代碼

回復(fù)

使用道具 舉報(bào)

ID:409338 發(fā)表于 2018-10-14 10:39 | 顯示全部樓層
報(bào)錯(cuò),錯(cuò)誤在reg52.h里面。你得把這個(gè)頭文件貼出來看看。
回復(fù)

使用道具 舉報(bào)

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

評(píng)分

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

查看全部評(píng)分

回復(fù)

使用道具 舉報(bào)

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

頭文件怎么看?就只有這整個(gè)代碼
回復(fù)

使用道具 舉報(bào)

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

代碼我是從網(wǎng)上找的,一運(yùn)行就出現(xiàn)這個(gè)問題,都沒改過頭文件
回復(fù)

使用道具 舉報(bào)

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

使用道具 舉報(bào)

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

使用道具 舉報(bào)

ID:213173 發(fā)表于 2018-10-14 19:09 | 顯示全部樓層
631607010604 發(fā)表于 2018-10-14 16:39
代碼我是從網(wǎng)上找的,一運(yùn)行就出現(xiàn)這個(gè)問題,都沒改過頭文件

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

回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

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

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

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 久久久久久久久久久久一区二区 | 欧美成人免费 | 国产黄色在线观看 | 国产精久久久 | 久在线 | 亚洲精品乱码久久久久久蜜桃91 | 国产精品久久久久无码av | 狠狠色综合网站久久久久久久 | 亚洲一区二区av | 欧美黑人国产人伦爽爽爽 | 999精品视频在线观看 | 亚洲免费在线 | 国产欧美一区二区三区另类精品 | 视频一区二区三区中文字幕 | av一区二区三区四区 | 天天操夜夜操 | 色噜噜狠狠色综合中国 | 国产美女久久 | 可以免费观看的av片 | 免费看91 | 成人午夜视频在线观看 | 日本电影韩国电影免费观看 | 亚洲一区二区av | 欧美精品1区| 免费欧美视频 | 欧一区二区 | 国产一区二区中文字幕 | 黄色av网站免费看 | 在线免费看黄 | www.色午夜.com| 高清色| 免费成年网站 | 一区2区 | 国产精品视频久久 | 欧美99 | 中文字幕精品一区二区三区在线 | 免费观看av网站 | 亚洲欧美中文字幕在线观看 | 精品在线一区 | 在线观看亚| 91国产视频在线观看 |