找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 6851|回复: 5
收起左侧

warning C206: 'write_com': missing function-prototype DB18B20温度显示

[复制链接]
ID:264029 发表于 2017-12-20 21:30 | 显示全部楼层 |阅读模式
keil仿真一直显示
8.C(39): warning C206: 'write_com': missing function-prototype
求助怎么修改程序

  1. #include<reg51.h>
  2. #define uchar unsigned char
  3. #define uint unsigned int  
  4. sbit BEEP=P2^1;   
  5. //sbit led=P1^0;
  6. //sbit led0=P1^1;
  7. //sbit led1=P1^2;
  8. sbit s0=P1^4;
  9. sbit s1=P1^5;
  10. sbit s2=P1^6;  
  11. uchar code tab_0[]="Temp:           ";
  12. uchar code tab_1[]="TH:23    TL:18  ";
  13. uchar TH,TL;                  // 定义高低温度变量
  14. uchar num;                    //全局变量  
  15. /********ms延时(非精确)**********/
  16. void delay(uint z)   
  17. {  uint i,j;
  18. for(i=z;i>0;i--)  
  19. for(j=120;j>0;j--);
  20. }  
  21. /*******TH、TL的温度符号**********/
  22. //void   fuhao()
  23. //void  write_com()
  24. //void  write_dat()

  25. // {  
  26. // write_com(0x80+5);
  27. // write_dat(0xdf);
  28.   //write_dat(0x43);
  29. // write_com(0x80+14);
  30. // write_dat(0xdf);
  31. // write_dat(0x43);
  32. //}
  33. /*************初始化**************/
  34. void init() {  
  35. /***********上电显示初始化**********/
  36. uchar i;
  37. TH=23;TL=18;
  38. write_com(0x80);
  39. for(i=0;i<16;i++)  
  40. {   
  41. write_dat(tab_1[i]);   
  42. delay(5);
  43. }  

  44. write_com(0x80+0x40);
  45.   for(i=0;i<5;i++)  
  46.   {  
  47.    write_dat(tab_0[i]);  
  48.    delay(5);
  49.   }
  50. //fuhao();  

  51. /********定时器初始化*************/  
  52. TMOD=0x01;        //开定时器T0,方式1   
  53. TH0=(65536-50000)/256;   //装入初值
  54. TL0=(65536-50000)%256;   //   
  55. EA=1;     //开全局中断
  56. ET0=1;     
  57. TR0=1;    //打开定时器  
  58. }  
  59. /**********报警函数**************/
  60. void bi(uint t)
  61. {  int i,j;
  62.     for(i=0;i<t;i++)
  63.    {  
  64.     for(j=0;j<50;j++);
  65.     BEEP=~BEEP;      //按位取反BEEP
  66.          }
  67. }

  68. /*******TH、TL取十位个位送人显示***********/
  69. void writeT_HL(uchar add,uchar dat)
  70. {  uchar shi,ge;
  71.    shi=dat/10;    //十位
  72.    ge=dat%10;     //个位
  73. write_com(0x80+add);
  74. write_dat(shi+0x30);  
  75. write_dat(ge+0x30);  
  76. }
  77. /*******按键函数********/
  78. void keyscan() {

  79. /**********功能选择**********/  
  80. if(s0==0)  
  81.   {  num++;   
  82.     delay(2);  
  83.   if(s0==0)  
  84. {    //  led=0;
  85.    while(!s0);
  86.    {bi(300);
  87. //led=1;
  88. }
  89. //按一下灯亮一下声音响一声  

  90. if(num==1)
  91. {TR0=0;
  92. write_com(0x80+12);
  93. delay(10);
  94. }
  95. //
  96. write_com(0x0f);  
  97. if(num==2)
  98. {write_com(0x80+4);}     
  99. if(num==3)
  100. {num=0;
  101.   TR0=1;
  102. }
  103. }
  104. }
  105. /*********功能加*********/      
  106.   if(num!=0)
  107.   {   
  108.   if(s1==0)  
  109.    {   
  110.     delay(2);  
  111.     if(s1==0)
  112. {      
  113. //led0=0;  
  114. while(!s1);
  115. {bi(300);
  116. // led0=1;
  117. } //按一下灯亮一下声音响一声  
  118. if(num==1)
  119. {TH++;
  120. if(TH==100)
  121.   TH=0;
  122. writeT_HL(3,TH);
  123. write_com(0x80+4);}  

  124. if(num==2)
  125. {TL++;
  126. if(TL==100)
  127. TL=0;
  128. writeT_HL(12,TL);
  129. write_com(0x80+10);}      

  130. }

  131. }  
  132. }  
  133. /**********功能减************/   
  134. if(num!=0)   
  135. {   if(s2==0)   
  136.   {     delay(2);  
  137.     if(s2==0)   
  138.           {     // led1=0;  
  139. while(!s2);
  140. {bi(300);
  141. //led1=1;
  142. } //按一下灯亮一下声音响一声  
  143. if(num==1)
  144. {TH--;
  145. if(TH==-1)
  146. TH=99;
  147. writeT_HL(3,TH);
  148. write_com(0x80+4);}
  149.     if(num==2)
  150. {TL--;
  151. if(TL==-1)
  152. TL=99;
  153. writeT_HL(12,TL);
  154. write_com(0x80+10);}      

  155. }
  156. }  
  157. }   
  158. }
  159. /*****温度报警函数*******/
  160. void baojing()
  161. {
  162. uchar temp;
  163. temp=temp/10;   //返回的温度值temp放大了十倍,得除十还原
  164. if(TH<=temp)
  165.   { bi(500);}
  166.   if(TL>=temp)
  167.    { bi(500);}
  168. }
  169. /***************主函数***************/  
  170. void main(void) {  
  171. Init_1602();
  172.   init();
  173.    while(1)  
  174.     { BEEP=0;   
  175.   keyscan();   
  176. ds1820disp();  
  177. baojing();  
  178. }
  179. }


  180. /***********定时器中断函数************/
  181. void time() interrupt 1 {
  182. TH0=(65536-50000)/256;  //重装初值
  183. TL0=(65536-50000)%256;  
  184. }
  185. //DS1802驱动程序
  186. #ifndef __DS18B20_H__
  187. #define __DS18B20_H__  
  188. #define uchar unsigned char
  189. #define uint unsigned int
  190. sbit DQ = P2^7;
  191. uchar tab[5];
  192. uint temp;    //温度值
  193. bit tflag;  
  194. /**************** 延时1微秒**********/  
  195. void delay_18B20(uint i)
  196.   {   while(i--); }
  197. /******************* ds1820复位************/
  198. void ds1820rst()
  199. {    uchar x=0;

  200. DQ=1;              //DQ复位
  201. delay_18B20(8);    //延时
  202.   DQ=0;              //DQ拉低

  203. delay_18B20(80);   //精确延时大于480us
  204. DQ=1;              //拉高
  205. delay_18B20(14);

  206. x=DQ;              //稍做延时后 如果x=0则初始化成功 x=1则初始化失败
  207. while(!DQ);
  208.   delay_18B20(20);
  209. }
  210. /******************** 读一个字节********************/  
  211. uchar ds1820rd()
  212.   {  
  213.    uchar i=0;
  214.    uchar dat=0;
  215.      for (i=8;i>0;i--)
  216.           {   
  217.             DQ=0;     //给脉冲信号
  218.             dat>>=1;
  219.         DQ=1;     //给脉冲信号  
  220.   if(DQ)
  221.     dat|=0x80;
  222.     delay_18B20(4);
  223.          }
  224. return(dat);
  225. }
  226. /*************** 写一个字节***************/
  227. void ds1820wr(uchar dat)
  228. {  uchar i=0;
  229.   for (i=8;i>0;i--)
  230.    {    DQ=0;
  231.      DQ=dat&0x01;
  232.            delay_18B20(5);
  233.               DQ=1;   
  234.                   dat>>=1;
  235. }
  236. }
  237. /****************读取温度 值并转换***************/
  238.   read_temp() {  
  239. uchar a,b;   
  240.   ds1820rst();     
  241.     ds1820wr(0xcc);//跳过读序列号   
  242.          ds1820wr(0x44);//启动温度转换  

  243. delay_18B20(100);
  244.     ds1820rst();     
  245.     ds1820wr(0xcc);//跳过读序列号   
  246.          ds1820wr(0xbe);//读取温度   

  247. delay_18B20(100);
  248.     a=ds1820rd();   
  249.           b=ds1820rd();   
  250.            temp=b;   
  251.             temp<<=8;   
  252.                   temp=temp|a;
  253. if(temp<0x0fff)

  254. tflag=0;
  255.   else  
  256. {  temp=~temp+1;  
  257. tflag=1;
  258. }
  259. temp=temp*(0.625);//温度值扩大10倍,精确到1位小数
  260. return(temp);
  261. }
  262. /***************** 温度值显示****************/
  263. void ds1820disp()
  264. {   
  265. uchar flagdat;
  266. read_temp();
  267. tab[0]=temp%1000/100+0x30;         //十位数  
  268. tab[1]=temp%100/10+0x30;           //个位数  
  269. tab[2]=temp%10+0x30;               //小数位  
  270. if(tflag==0)

  271. flagdat=0x20;//正温度不显示符号
  272.     else   
  273.           flagdat=0x2d;//负温度显示负号:-     

  274. if(tab[0]==0x30) { tab[0]=0x20; }//如果十位为0,不显示  
  275. write_com(0x80+0x40+6)
  276. write_dat(flagdat);    //显示正负
  277. write_dat(tab[0]);    //显示十位
  278. write_dat(tab[1]);    //显示个位  
  279. write_dat(0x2e);          //显示小数点  
  280. write_dat(tab[2]);    //显示小数位
  281. write_dat(0xdf);  write_dat(0x43);
  282. }
  283. #endif
  284. // LCD1602驱动程序
  285. #ifndef __1602_H__
  286. #define __1602_H__  
  287. #define uint unsigned int
  288. #define uchar unsigned char
  289. #define LCD P0
  290. sbit RS=P3^0;
  291. sbit RW=P3^1;
  292. sbit EN=P3^2;
  293. void delayms(uint z);
  294. void Init_1602(void);
  295. void check_busy(void);
  296. void write_com(uchar com);
  297. void write_dat(uchar dat);  
  298. /********************延时z毫秒****************/  
  299. void delayms(uint z)
  300. {
  301. int i,j;
  302. for(i=z;i>0;i--)   
  303. for(j=120;j>0;j--);
  304. }  
  305. /******************** 1cd1602初始化******************/
  306. void Init_1602(void)
  307. {  delayms(15);  
  308. write_com(0x38);
  309.   delayms(5);
  310.    write_com(0x0c);  
  311.    delayms(5);
  312.     write_com(0x06);
  313.          delayms(5);
  314.           write_com(0x01);
  315.            delayms(5);
  316.             write_com(0x80);  
  317.                 delayms(5);
  318. }
  319. /************************** 将数据二进制高地位对换 (为了连线方便但片机P0口 与lcd1602数据口反接) ****************************/ uchar HL_exchange(uchar dat)
  320. {
  321.         uchar i,temp;  
  322.                        temp = 0x00;   
  323.                                  for(i=0;i<8;i++)
  324. {
  325.                 temp >>= 1;         
  326.                                         if((dat<<i)&0x80)        
  327.                                                          {
  328.                         temp |= 0x80;                 }
  329.                                                                 else                 {
  330.                         temp &= 0x7F;                 }         }
  331.         return temp; }  
  332. /**********读忙*****************/
  333. void  check_busy(void)
  334. {  uchar x;
  335. x=HL_exchange(0x80);
  336.    while(x&HL_exchange(0x80))
  337.     {   RS=0;
  338.           RW=1;   
  339.           EN=1;  
  340.            x=LCD;  
  341.             EN=0;  
  342.                  delayms(10);
  343. }
  344. }  
  345. /**************写指令**************/
  346. void write_com(uchar com)
  347. {  check_busy();
  348.   RS=0;
  349.    RW=0;
  350.     EN=1;
  351.          LCD=0XFF;
  352. LCD=HL_exchange(com);
  353.    EN=0;  delayms(10);
  354. }
  355. /**************写数据**************/
  356. void write_dat(uchar dat)
  357.   {  check_busy();
  358.    RS=1;  
  359. RW=0;  
  360. EN=1;
  361. LCD=0XFF;
  362. LCD=HL_exchange(dat);
  363.   EN=0;
  364.    delayms(10); }
  365. #endif
复制代码
回复

使用道具 举报

ID:164602 发表于 2017-12-21 08:36 | 显示全部楼层
你有两个地方要改:
第一:主程序,加
#include"DS18B20.h"
#include"1602.h"
第二:DS18B20.H文件中,加:
#include"1602.h"
就可以编译过了。
回复

使用道具 举报

ID:149988 发表于 2017-12-21 09:03 | 显示全部楼层

RE: warning C206: 'write_com': missing function-prototype DB18B20温度显示

write_com(0x0f)、write_com(0x80+4)语句没有原型,也就是没有子程序的意思。现在格式是你调用了它,那么它的内容呢。
回复

使用道具 举报

ID:264029 发表于 2017-12-30 00:15 | 显示全部楼层
恩恩,谢谢各位大神,问题已经解决。
回复

使用道具 举报

ID:733183 发表于 2020-4-20 01:25 | 显示全部楼层
不倒翁.WZT 发表于 2017-12-21 09:03
write_com(0x0f)、write_com(0x80+4)语句没有原型,也就是没有子程序的意思。现在格式是你调用了它,那么它 ...

lcd.c(67): warning C206: 'write_com': missing function-prototype;
这个怎么改,我还要怎么声明
回复

使用道具 举报

ID:733183 发表于 2020-4-20 01:25 | 显示全部楼层
蔬木果 发表于 2017-12-30 00:15
恩恩,谢谢各位大神,问题已经解决。

lcd.c(67): warning C206: 'write_com': missing function-prototype
怎么解决
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表