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

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

QQ登錄

只需一步,快速開始

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

error C214: illegal pointer conversion單片機(jī)編譯錯(cuò)誤

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:842962 發(fā)表于 2021-1-15 12:17 | 只看該作者 回帖獎(jiǎng)勵(lì) |倒序?yàn)g覽 |閱讀模式
10黑幣
1602顯示18B20測(cè)溫加串口;各位大佬幫我看一下這個(gè)問題咋改啊
main.c(65): error C214: illegal pointer conversion

單片機(jī)源程序如下:
  1. /****************************************************************
  2. * 實(shí) 驗(yàn) 名 :DS18B20溫度實(shí)驗(yàn)
  3. * 實(shí)驗(yàn)說明 :數(shù)碼管顯示當(dāng)前溫度
  4. * 連接方式 :將DS18B20插到數(shù)字溫度檢測(cè)模塊的U5上(注意方向),DS_RD接P2.2
  5. *****************************************************************/
  6. //包含文件
  7. #include <reg52.h>
  8. #include <intrins.h>
  9. #include "lcd.h"
  10. //宏定義
  11. #define BAUD 9600        //波特率設(shè)置,bps
  12. #define FOSC 11059200L //晶振設(shè)置,默認(rèn)使用11.0592M Hz
  13. //#define FOSC 12000000L //晶振設(shè)置,使用12M Hz
  14. //#define FOSC 24000000L //晶振設(shè)置,使用24M Hz
  15. //IO接口定義
  16. #define uchar unsigned char
  17. #define uint unsigned int
  18. #define LED_PORT P0

  19. sbit DQ = P2^2;                                        //定義DS18B20端口DQ
  20. void SWC(unsigned char hang,unsigned char lie,unsigned char *p);
  21. //全局變量定義
  22. uchar temperature;
  23. uchar temperature_dec;
  24. uchar qian,bai,shi,ge;
  25. //LED顯示字模 0-F 共陽(yáng)模式
  26. static unsigned char DisNum = 0; //顯示用指針        
  27. unsigned char code table[15] =    {'0','1','2','3','4','5','6','7','8','9','.','-','C'};//{0Xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e};
  28.            unsigned char disbuff[4]           ={ 0,0,0,0,};
  29. uchar RomCode[8];         //DS18B20中的RomCode
  30. /*******************************************************************************
  31. * 函 數(shù) 名 :Delayms
  32. * 函數(shù)功能 :實(shí)現(xiàn) ms級(jí)的延時(shí)
  33. * 輸    入 :ms
  34. * 輸    出 :無(wú)
  35. *******************************************************************************/
  36. void Delayms(uint ms)
  37. {
  38.         uint i,j;
  39.         for(i=0;i<ms;i++)
  40.         #if FOSC == 11059200L
  41.                 for(j=0;j<114;j++);
  42.         #elif FOSC == 12000000L
  43.           for(j=0;j<123;j++);
  44.         #elif FOSC == 24000000L
  45.                 for(j=0;j<249;j++);
  46.         #else
  47.                 for(j=0;j<114;j++);
  48.         #endif
  49. }
  50. /*******************************************************************************
  51. * 函 數(shù) 名 :LEDdisplay
  52. * 函數(shù)功能 :循環(huán)顯示各個(gè)位上的數(shù)據(jù)
  53. * 輸    入 :num要顯示的數(shù)據(jù)
  54. * 輸    出 :無(wú)
  55. *******************************************************************************/

  56. void LEDdisplay()
  57. {        
  58.         disbuff[0]=qian;
  59.         disbuff[1]=bai;
  60.         disbuff[2]=shi;
  61.         disbuff[3]=ge;

  62.         SWC(0, 1, table[disbuff[0]]);
  63.         SWC(1, 1, table[disbuff[1]]);
  64.         SWC(2, 1, table[disbuff[2]]);
  65.         SWC(3, 1, table[disbuff[3]]);        
  66. //        SWC(4, 1, table[10]);//顯示點(diǎn)
  67. //        SWC(5, 1, table[disbuff[4]]);        
  68.         SWC(4, 1, table[12]);//顯示℃
  69.         
  70.         /*wela_1 = 1;          //關(guān)閉所有數(shù)碼管
  71.         wela_2 = 1;
  72.         wela_3 = 1;
  73.         wela_4 = 1;        

  74.         wela_4=0;  //顯示千位
  75.         LED_PORT=table[qian];
  76.         Delayms(1);
  77.         LED_PORT = 0xff;
  78.         wela_4=1;
  79.         
  80.         wela_3=0;  //顯示百位
  81.         LED_PORT=table[bai];
  82.         Delayms(1);
  83.         LED_PORT = 0xff;
  84.         wela_3=1;
  85.         
  86.         wela_2=0;  //顯示十位
  87.         LED_PORT=table[shi] & 0x7F;
  88.         Delayms(1);
  89.         LED_PORT = 0xff;
  90.         wela_2=1;
  91.         
  92.         wela_1=0;  //顯示個(gè)位
  93.         LED_PORT=table[ge];
  94.         Delayms(1);
  95.         LED_PORT = 0xff;*/
  96.         
  97. }
  98. /*******************************************************************/
  99. /*us級(jí)延時(shí)函數(shù)  執(zhí)行一次US--所需6.5us進(jìn)入一次函數(shù)需要11.95us                                    */
  100. /*******************************************************************/
  101. void Delay(uint num)
  102. {
  103.         while( --num ) ;
  104. }
  105. /*******************************************************************/
  106. /*初始化ds1820                                                     */
  107. /*******************************************************************/
  108. bit Init_DS18B20(void)
  109. {
  110.         bit presence;
  111.         DQ = 1;      //DQ復(fù)位
  112.         Delay(8);    //稍做延時(shí)        
  113.         DQ = 0;      //單片機(jī)將DQ拉低
  114.         Delay(90);   //精確延時(shí) 大于 480us        
  115.         DQ = 1;      //拉高總線
  116.         Delay(4);    //稍做延時(shí)         
  117.         presence = DQ; //如果=0則初始化成功 =1則初始化失敗
  118.         Delay(20);  //稍做延時(shí)
  119.         DQ = 1;        
  120.         return(presence); //返信號(hào),0=presence,1= no presence
  121. }
  122. /*******************************************************************/
  123. /* 讀一個(gè)字節(jié)                                                      */
  124. /*******************************************************************/
  125. uchar ReadOneChar(void)
  126. {
  127.         uchar i = 0;
  128.         uchar dat = 0;        
  129.         for (i = 8; i > 0; i--)//循環(huán)8次,通過dat變量的依次右移裝入8位數(shù)據(jù)
  130.         {
  131.                 DQ = 0;                        //單片機(jī)將DQ拉低
  132.                 dat >>= 1;                //dat右移1位,準(zhǔn)備讀取1位數(shù)據(jù)        
  133.                 DQ = 1;                        //單片機(jī)將DQ拉高               
  134.                 if(DQ)                        //判斷DQ狀態(tài),DQ=1則dat的最高位為1,DQ=0則dat的最高位為0        
  135.                         dat |= 0x80;//dat或10000000,控制dat的最高位:DQ=1則為1,DQ=0則為0
  136.                 //proteus仿真設(shè)置為Delay(40)
  137.                 Delay(40);                //延時(shí)
  138.                 //Delay(4);
  139.         }
  140.         return (dat);                //返回值dat即為讀到的一字節(jié)數(shù)據(jù)
  141. }
  142. /*******************************************************************/
  143. /* 寫一個(gè)字節(jié)                                                      */
  144. /*******************************************************************/
  145. void  WriteOneChar(uchar dat)
  146. {
  147.         uchar i = 0;
  148.         for (i = 8; i > 0; i--)//循環(huán)8次,通過dat變量的依次右移發(fā)出8位數(shù)據(jù)
  149.         {
  150.                 DQ = 0;                        //單片機(jī)將DQ拉低
  151.                 DQ = dat&0x01;        //DQ=dat與00000001,則DQ=dat的最低位(0或1)
  152.                 Delay(5);                //延時(shí)               
  153.                 DQ = 1;                        //單片機(jī)將DQ拉高
  154.                 dat>>=1;                //dat右移1位,準(zhǔn)備取下一位數(shù)據(jù)
  155.         }
  156. }
  157. /*******************************************************************/
  158. /* 溫度報(bào)警值寫入DS18B20                                           */
  159. /*******************************************************************/
  160. void Write_Temperature_alarm(uchar Temp_h , uchar Temp_l)
  161. {
  162.     Init_DS18B20();                                //初始化
  163.     WriteOneChar(0xCC);                        //跳過讀序列號(hào)的操作
  164.     WriteOneChar(0x4e);                        //將設(shè)定的溫度報(bào)警值寫入 DS18B20
  165.         WriteOneChar(Temp_h);                //寫TH
  166.         WriteOneChar(Temp_l);                //寫TL
  167.     WriteOneChar(0x7f);                        //12位精確度
  168.         Init_DS18B20();                                //初始化
  169.     WriteOneChar(0xCC);                        //跳過讀序號(hào)列號(hào)的操作
  170.     WriteOneChar(0x48);                        //把暫存器里的溫度報(bào)警值拷貝到EEROM
  171. }
  172. /*******************************************************************/
  173. /* 讀取64位序列碼                                                  */
  174. /*******************************************************************/
  175. void Read_RomCord(void)
  176. {
  177.         uchar j;
  178.         Init_DS18B20();                                //初始化
  179.         WriteOneChar(0x33);                        // 讀序列碼的操作命令
  180.         for (j = 0; j < 8; j++)
  181.         {
  182.                 RomCode[j] = ReadOneChar() ;
  183.         }
  184. }
  185. /*******************************************************************/
  186. /*DS18B20的CRC8校驗(yàn)程序                                            */
  187. /*******************************************************************/
  188. uchar CRC8()
  189. {
  190.         uchar i,x;
  191.         uchar crcbuff,crc;        
  192.         crc=0;
  193.         for(x = 0; x <8; x++)
  194.         {
  195.                 crcbuff=RomCode[x];
  196.                 for(i = 0; i < 8; i++)
  197.                 {
  198.                         if(((crc ^ crcbuff)&0x01)==0)
  199.                                 crc >>= 1;
  200.                         else
  201.                         {
  202.                                 crc ^= 0x18;   //CRC=X8+X5+X4+1
  203.                                 crc >>= 1;
  204.                                 crc |= 0x80;
  205.                         }         
  206.                         crcbuff >>= 1;      
  207.                 }
  208.         }
  209.         return crc;        
  210. }        
  211. /*******************************************************************/
  212. /* 讀取溫度                                                        */
  213. /*******************************************************************/
  214. uchar* Read_Temperature(void)
  215. {
  216.         //unsigned char  i;
  217.         uchar temp_comp[2];        
  218.         uchar temp_data[2];
  219.         uchar temp_alarm[2];        
  220.         //unsigned int t;
  221.         Init_DS18B20();                                //初始化        
  222.         WriteOneChar(0xCC);                        //跳過讀序列號(hào)的操作
  223.         WriteOneChar(0x44);                        //啟動(dòng)溫度轉(zhuǎn)換        
  224.         Init_DS18B20();                                //初始化

  225.         //實(shí)際器件:匹配ROM或跳過序列號(hào)均可        
  226.         //WriteOneChar(0x55);         //匹配ROM命令
  227.         //for(i=0;i<8;i++)
  228.         //        WriteOneChar(RomCode[i]);

  229.         //proteus仿真:跳過序列號(hào)
  230.         WriteOneChar(0xCC);                                //跳過讀序列號(hào)的操作        
  231.         WriteOneChar(0xBE);                                //讀取溫度寄存器
  232.                
  233.         temp_data[0] = ReadOneChar();   //溫度低8位
  234.         temp_data[1] = ReadOneChar();   //溫度高8位
  235.         temp_alarm[0] = ReadOneChar();  //溫度報(bào)警TH
  236.         temp_alarm[1] = ReadOneChar();  //溫度報(bào)警TL        
  237.         temp_comp[0]=((temp_data[0]&0xf0)>>4)|((temp_data[1]&0x0f)<<4);//取溫度整數(shù)值
  238.         temp_comp[1] = temp_data[0]&0x0f;//讀取小數(shù)
  239.         //課件程序:
  240.         //t=temp_data[1];
  241.         //t<<=8;
  242.         //t=t|temp_data[0];
  243.         //temp_comp=t*0.0625;        
  244.         return &temp_comp;                                                                                                                  
  245. }
  246. /*******************************************************************************
  247. * 函 數(shù) 名 :UsartConfiguration
  248. * 函數(shù)功能 :串口設(shè)置
  249. * 輸    入 :無(wú)
  250. * 輸    出 :無(wú)
  251. *******************************************************************************/
  252. void UsartConfiguration()
  253. {
  254.         SCON = 0X50;        //設(shè)置為工作方式1:10位異步收發(fā)器
  255.         TMOD |= 0x20;        //設(shè)置計(jì)數(shù)器工作方式2:8位自動(dòng)重裝計(jì)數(shù)器        
  256.         PCON = 0X80;        //波特率加倍:SMOD = 1
  257.         TH1 = 256 -(FOSC/12/32/(BAUD/2)); //計(jì)算定時(shí)器1初值
  258.         TL1 = 256 -(FOSC/12/32/(BAUD/2));
  259.         TR1 = 1;//啟動(dòng)定時(shí)器T1        
  260.         ES=1;        //開串口中斷
  261.         EA = 1;        //開總中斷
  262. }


  263. /*******************************************************************************
  264. * 函 數(shù) 名 :UsartSendTemper
  265. * 函數(shù)功能 :串口發(fā)送溫度
  266. * 輸    入 :無(wú)
  267. * 輸    出 :無(wú)
  268. *******************************************************************************/
  269. void UsartSendTemper()
  270. {
  271.         //發(fā)送 T
  272.                 TI = 0;                          //清除發(fā)送中斷標(biāo)志位TI
  273.                 SBUF='T';                 //收到的數(shù)據(jù)放入到發(fā)送SBUF,啟動(dòng)串口發(fā)送
  274.                 while(!TI);                  //等待發(fā)送數(shù)據(jù)完成        
  275.         //發(fā)送 :
  276.                 TI = 0;                          //清除發(fā)送中斷標(biāo)志位TI
  277.                 SBUF=':';                 //收到的數(shù)據(jù)放入到發(fā)送SBUF,啟動(dòng)串口發(fā)送
  278.                 while(!TI);                  //等待發(fā)送數(shù)據(jù)完成
  279.         //發(fā)送溫度十位
  280.                 TI = 0;                          //清除發(fā)送中斷標(biāo)志位TI
  281.                 SBUF=temperature/10+'0';//收到的數(shù)據(jù)放入到發(fā)送SBUF,啟動(dòng)串口發(fā)送
  282.                 while(!TI);                  //等待發(fā)送數(shù)據(jù)完成
  283.         //發(fā)送溫度個(gè)位
  284.                 TI = 0;                          //清除發(fā)送中斷標(biāo)志位TI
  285.                 SBUF=temperature%10+'0';//收到的數(shù)據(jù)放入到發(fā)送SBUF,啟動(dòng)串口發(fā)送
  286.                 while(!TI);                  //等待發(fā)送數(shù)據(jù)完成
  287.         //發(fā)送小數(shù)點(diǎn)
  288.                 TI = 0;                          //清除發(fā)送中斷標(biāo)志位TI
  289.                 SBUF='.';//收到的數(shù)據(jù)放入到發(fā)送SBUF,啟動(dòng)串口發(fā)送
  290.                 while(!TI);                  //等待發(fā)送數(shù)據(jù)完成
  291.         
  292.         //發(fā)送溫度小數(shù)位
  293.                 TI = 0;                          //清除發(fā)送中斷標(biāo)志位TI
  294.                 SBUF=temperature_dec+'0';//收到的數(shù)據(jù)放入到發(fā)送SBUF,啟動(dòng)串口發(fā)送
  295.                 while(!TI);                  //等待發(fā)送數(shù)據(jù)完成
  296.                
  297.         //發(fā)送換行符
  298.                 TI = 0;                          //清除發(fā)送中斷標(biāo)志位TI
  299.                 SBUF='\n'; //收到的數(shù)據(jù)放入到發(fā)送SBUF,啟動(dòng)串口發(fā)送
  300.                 while(!TI);                  //等待發(fā)送數(shù)據(jù)完成
  301.                 TI=0;         
  302.                         
  303. }
  304. /*******************************************************************/
  305. /* 主函數(shù)                                                          */
  306. /*******************************************************************/
  307. void main(void)
  308. {
  309.         unsigned char* temp;
  310.         InitLcd1602();
  311.         int count = 0;
  312.         temperature = 0;
  313.         SWC(0, 0,"temperature;");
  314.         //proteus仿真:不讀取64位序列碼        
  315.         //Read_RomCord();         //讀取64位序列碼
  316.         UsartConfiguration();//串口配置
  317.         while(1)
  318.         {
  319.                 if(count >= 200)//采集周期1s
  320.                 {
  321.                         temp = Read_Temperature();  //讀取溫度
  322.                         temperature = temp[0];
  323.                         temperature_dec = temp[1]*0.625;
  324.                         count = 0;
  325.                         UsartSendTemper();//串口發(fā)送溫度               
  326.                 }
  327.                 qian=temperature/100;
  328.                 bai=temperature%100/10;
  329.                 shi=temperature%10;
  330.                 ge=temperature_dec;                                
  331.                 LEDdisplay();//顯示溫度
  332.                

  333.                 count++;
  334.         }
  335. }
復(fù)制代碼

51黑論壇_DS18B20溫度檢測(cè)應(yīng)用設(shè)計(jì).rar

5.14 MB, 下載次數(shù): 7

51黑論壇_DS18B20溫度檢測(cè)應(yīng)用設(shè)計(jì)2.7z

43.87 KB, 下載次數(shù): 5

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

使用道具 舉報(bào)

沙發(fā)
ID:842962 發(fā)表于 2021-1-15 13:08 | 只看該作者
51黑論壇_DS18B20溫度檢測(cè)應(yīng)用設(shè)計(jì) (2)這個(gè)是有問題的程序
回復(fù)

使用道具 舉報(bào)

板凳
ID:879537 發(fā)表于 2021-1-27 15:32 | 只看該作者
#include "lcd.h" 這個(gè)我很服,還有你的延時(shí)函數(shù),串口發(fā)送函數(shù)的聲明呢?不用寫嗎?
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

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

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

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 罗宾被扒开腿做同人网站 | 91精品久久久久久久久久小网站 | 7777在线视频免费播放 | 成人av观看| 欧美性受xxxx | 日本天堂视频在线观看 | 欧美一级在线观看 | 色综合久久久久 | 欧美日韩一区二区三区在线观看 | 欧美午夜一区 | 一区日韩 | 欧美国产日韩在线 | 国产免费xxx | 免费黄色大片 | 91精品国产综合久久久久久丝袜 | 久久精品国产久精国产 | 国产高清av免费观看 | 日韩精品在线一区二区 | 1区2区3区视频 | 麻豆久久久久 | 精品九九| 国产伦一区二区三区视频 | 久久久久国产精品一区 | 亚洲视频自拍 | 国产伦一区二区三区视频 | 欧美激情99| 男人的天堂中文字幕 | 午夜视频一区 | 欧美日韩久久 | 国产视频第一页 | 综合二区| 蜜桃精品视频在线 | 久久久久久久久国产成人免费 | 国产日韩电影 | 欧美极品在线视频 | 欧美精品一二三区 | 国产精品久久久久久久久久久久久 | 精品久久电影 | 日韩精品一区二区三区免费观看 | 国产精品视频在线观看 | 美女久久视频 |