找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1915|回复: 3
收起左侧

Keil编译错误WARNING L16: UNCALLED SEGMENT新手求助?实在不知道怎么改?

[复制链接]
ID:978933 发表于 2021-11-14 21:18 | 显示全部楼层 |阅读模式
*** WARNING L16: UNCALLED SEGMENT, IGNORED FOR OVERLAY PROCESS
    SEGMENT: ?PR?_DISPLY18B20ROM?18B20

  1. #include <reg52.h>
  2. #include <intrins.h>

  3. sbit RS=P2^0;   
  4. sbit RW=P2^1;
  5. sbit E=P1^2;
  6. sbit DQ=P1^4;

  7. sbit buzz=P0^6;
  8. static unsigned char readtemp;
  9. unsigned char s[]={"Temp:"};
  10. unsigned char str[]={0,1,2,3,4,5,6,7,8,9};

  11. void disply18b20Rom(char Rom);
  12. //************************************************************************
  13. void delay(unsigned int n)
  14. {
  15.   unsigned i=0,j=0;
  16.     for(i=0;i<n;i++)
  17.     {
  18.       for(j=0;j<120;j++);
  19.     }
  20. }
  21. //*************************ds18b20****************************************
  22. void Write_DS18B20(unsigned char dat)
  23. {
  24.         unsigned char i;
  25.         for(i=0;i<8;i++)
  26.         {
  27.                 DQ = 0;
  28.                 DQ = dat&0x01;
  29.                 delay(5);
  30.                 DQ = 1;
  31.                 dat >>= 1;
  32.         }
  33.         delay(5);
  34. }
  35. unsigned char Read_DS18B20(void)
  36. {
  37.         unsigned char i;
  38.         unsigned char dat;

  39.         for(i=0;i<8;i++)
  40.         {
  41.                 DQ = 0;
  42.                 dat >>= 1;
  43.                 DQ = 1;
  44.                 if(DQ)  
  45.                 {
  46.                         dat |= 0x80;
  47.                 }            
  48.                 delay(5);
  49.         }
  50.         return dat;
  51. }
  52. bit init_ds18b20(void)
  53. {
  54.           bit initflag = 0;
  55.          
  56.           DQ = 1;
  57.           delay(12);
  58.           DQ = 0;
  59.           delay(80);
  60.           DQ = 1;
  61.           delay(10);
  62.           initflag = DQ;     
  63.           delay(5);

  64.           return initflag;
  65. }
  66. unsigned char Readtemp(void)
  67. {
  68.     unsigned char low,high;
  69.           char temp;  

  70.           init_ds18b20();
  71.           Write_DS18B20(0xCC);
  72.           Write_DS18B20(0x44);
  73.           delay(200);

  74.           init_ds18b20();
  75.           Write_DS18B20(0xCC);
  76.           Write_DS18B20(0xBE);

  77.           low = Read_DS18B20();
  78.           high = Read_DS18B20();

  79.           temp = high<<4;   
  80.           temp |= (low>>4);

  81.           return temp;
  82. }

  83. //*********************1602************************************
  84. void writedat(unsigned char dat)
  85. {
  86.   RS=1;
  87.     RW=0;  
  88.     E=0;   
  89.     P0=dat;
  90.     delay(5);
  91.     E=1;
  92.     E=0;
  93. }

  94. void writecom(unsigned char com)
  95. {
  96.   RS=0;
  97.     RW=0;  
  98.     E=0;  
  99.     P0=com;
  100.     delay(5);
  101.     E=1;
  102.     E=0;
  103. }
  104. void initlcd()
  105. {
  106.   writecom(0x38);  
  107.     writecom(0x0c);  
  108.     writecom(0x06);  
  109.     writecom(0x01);  
  110. }

  111. //******************DòáDoÅ*************************************
  112. void disply18b20Rom(char Rom)
  113. {
  114.         char h,l;
  115.         l=Rom&0x0f;
  116.         h=Rom&0xf0;
  117.         h>>=4;
  118.         if((h>=0x00)&&(h<=0x30))
  119.         {
  120.                 writedat(h+0x30);
  121.         }
  122.                 else
  123.                         writedat(h+0x37);
  124.                 if((l>=0x00)&&(l<=0x09))
  125.                 {
  126.                         writedat(l+0x30);
  127.                 }
  128.                 else
  129.                         writedat(l+0x37);
  130.                
  131.         }

  132. void display()
  133. {
  134.         unsigned int temp0=0,temp1=0,temp2=0,i=0;
  135.         temp0=readtemp/100+'0';
  136.         temp1=(readtemp%100)/10+'0';
  137.         temp2=readtemp%10+'0';
  138.         writecom(0x80);  
  139.         delay(5);            
  140.         while(s[i]!='\0')
  141.         {
  142.           writedat(s[i]);
  143.                 delay(5);
  144.                 i++;
  145.         }
  146.         
  147.         writecom(0x80+6);  
  148.         delay(5);
  149.         writedat(str[temp0]);
  150.         delay(5);           
  151.         writedat(str[temp1]);
  152.         delay(5);            
  153.         writedat(str[temp2]);
  154.         delay(5);         
  155.         writedat(0xDF);
  156.         delay(5);         
  157.         writedat('C');
  158.         delay(5);           
  159. }


  160. void main()
  161. {
  162.         initlcd();
  163.         while(1)
  164.         {
  165.          readtemp=Readtemp();
  166.          display();
  167.         }
  168. }
复制代码
回复

使用道具 举报

ID:624769 发表于 2021-11-14 21:54 | 显示全部楼层
void disply18b20Rom(char Rom)

你写了这个函数,但是运行的程序里根本没有用到,
编译器发警告,告诉你浪费资源可耻,写了就要用,不用就不要写。
但是,你可以不去理它,就好像你可以点一桌子菜,然后只吃几口,有路人说天打雷劈,但是你不会有任何损失。
回复

使用道具 举报

ID:854772 发表于 2021-11-16 14:03 | 显示全部楼层
188610329 发表于 2021-11-14 21:54
void disply18b20Rom(char Rom)

你写了这个函数,但是运行的程序里根本没有用到,

回复

使用道具 举报

ID:883242 发表于 2021-11-16 19:33 | 显示全部楼层
一个合格的程序员眼里只有error,是看不见warning的。
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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