[STC单片机] 数字电烙铁程序问题求指教

[复制链接]
408|13
 楼主 | 2018-10-9 19:32 | 显示全部楼层 |阅读模式
本人之前搞硬件的,自学单片机第一次搞这款数字电烙铁,发现编译时不通过,弄了好几天,在网上找过一些资料还是没头绪,水平有待提高,请各位大神指点下,深谢!下面是程序:
 楼主 | 2018-10-9 19:38 | 显示全部楼层
  1. #include"STC15.h"
  2. #include "intrins.h"
  3. //#include "Display.h"
  4. #define  Display
  5. #define  uchar  unsigned char  
  6. #define  uint   unsigned int  
  7. #define  ulong  unsigned long
  8. #define ADC_POWER   0x80            //ADCµçÔ´¿ØÖÆλ
  9. #define ADC_FLAG    0x10            //ADCÍê³É±êÖ¾
  10. #define ADC_START   0x08            //ADCÆðʼ¿ØÖÆλ
  11. #define ADC_SPEEDLL 0x00            //540¸öʱÖÓ
  12. #define ADC_SPEEDL  0x20            //360¸öʱÖÓ
  13. #define ADC_SPEEDH  0x40            //180¸öʱÖÓ
  14. #define ADC_SPEEDHH 0x60            //90¸öʱÖÓ

  15. sbit baiwei=P1^3;
  16. sbit shiwei=P1^2;
  17. sbit gewei=P1^1;
  18. sbit danwei=P1^0;
  19. //sbit dian=P3^4;
  20. /*sfr P1M0=0x0f;
  21. sfr P1M1=0x00;
  22. sfr P3M0=0xff;
  23. sfr P3M1=0x00; */
  24. sbit up=P1^0;
  25. sbit down=P1^1;

  26. sbit heat=P1^7;
  27. //sbit s2=P1^2;

  28. uchar makesure;//S3¼ü ¡°È·Èϼü¡°
  29. uchar tp=0;
  30. uchar num=0;
  31. uchar ad=0;
  32. char s1,s2,s3,temp;[code]uchar code LED[]={0xCF,0x0C,0xEA,0xE3,0xAC,0x67,0xE7,0x0E,0xEF,0x6F,0x5e}; //¶¨ÒåÊýÂë¹Ü0-9Êý×éºÍСÊýµãµ¥Î»¡°C"[code]const ulong KT_1[14][101]=       
  33. {
  34.         /*-100  0*/
  35.         {        3568,3523,3492,3461,3430,3399,3368,3337,3305,3274,
  36.                 3242,3211,3179,3147,3115,3082,3050,3018,2985,2953,
  37.                 2920,2887,2854,2821,2788,2754,2721,2687,2654,2620,
  38.                 2586,2552,2518,2484,2450,2416,2381,2347,2312,2277,
  39.                 2243,2208,2173,2137,2102,2067,2032,1996,1961,1925,
  40.                 1889,1853,1817,1781,1745,1709,1673,1636,1600,1563,
  41.                 1527,1490,1453,1416,1379,1342,1305,1268,1231,1193,
  42.                 1156,1118,1081,1043,1005, 968, 930, 892, 854, 816,
  43.                 777 ,739 , 701, 662, 624, 585, 547, 508, 469, 431,
  44.                 392 ,353 , 314, 275, 236, 197, 157, 118,  79,  39,  
  45.                 0
  46.         },
  47.           
  48.           /*0   100*/
  49.         {           0,  39,  79, 119, 158, 198, 238, 277, 317, 357,                                 
  50.                   397, 437, 477, 517, 557, 597, 637, 677, 718, 758,                                          
  51.                   798, 838, 879, 919, 960,1000,1041,1081,1122,1162,                        
  52.                  1203,1244,1285,1325,1366,1407,1448,1489,1529,1570,     
  53.                  1611,1652,1693,1734,1776,1817,1858,1899,1940,1981,
  54.                  2022,2064,2105,2146,2188,2229,2270,2312,2353,2394,
  55.                  2436,2477,2519,2560,2601,2643,2684,2726,2767,2809,
  56.                  2850,2892,2933,2975,3016,3058,3100,3141,3183,3224,
  57.                  3266,3307,3349,3390,3432,3473,3515,3556,3598,3639,
  58.                  3681,3722,3764,3805,3847,3888,3930,3971,4012,4054,
  59.                  4095  
  60.          },
  61.         /*100   200  */
  62.         {
  63.                 4095,4137,4178,4219,4261,4302,4343,4384,4426,4467,
  64.                 4508,4549,4590,4632,4673,4714,4755,4796,4837,4878,
  65.                 4919,4960,5001,5042,5083,5124,5164,5205,5246,5287,
  66.                 5327,5368,5409,5450,5490,5531,5571,5612,5652,5693,
  67.                 5733,5774,5814,5855,5895,5936,5976,6016,6057,6097,
  68.                 6137,6177,6218,6258,6298,6338,6378,6419,6459,6499,
  69.                 6539,6579,6619,6659,6699,6739,6779,6819,6859,6899,
  70.                 6939,6979,7019,7059,7099,7139,7179,7219,7259,7299,
  71.                 7338,7378,7418,7458,7498,7538,7578,7618,7658,7697,
  72.                 7737,7777,7817,7857,7897,7937,7977,8017,8057,8097,
  73.                 8137
  74.         },
  75.         /*200  300  */
  76.         {
  77.                  8137, 8177, 8216, 8256, 8296, 8236, 8376, 8416, 8456, 8497,
  78.                  8537, 8577, 8617, 8657, 8697, 8737, 8777, 8817, 8857, 8898,
  79.                  8938, 8978, 9018, 9058, 9099, 9139, 9179, 9220, 9260, 9300,
  80.                  9341, 9381, 9421, 9462, 9502, 9543, 9583, 9624, 9664, 9705,
  81.                  9745, 9786, 9826, 9867, 9907, 9948, 9989,10029,10070,10111,
  82.                 10151,10192,10233,10274,10315,10355,10396,10437,10478,10519,
  83.                 10560,10600,10641,10682,10723,10764,10805,10846,10887,10928,
  84.                 10969,11010,11051,11093,11134,11175,11216,11257,11298,11239,
  85.                 11381,11422,11463,11504,11546,11587,11628,11669,11711,11752,
  86.                 11793,11835,11876,11918,11959,12000,12042,12083,12125,12166,
  87.                 12207
  88.         }
  89.                
  90. };
  91. /*****************ÑÓʱ×Ó³ÌÐò*****************/
  92. void delayus(uint xus)
  93. {
  94.    uint i,j;
  95.    for(i=0;i<xus;i++)
  96.    for(j=0;j<10;j++);
  97.    }


  98. void delay1ms(unsigned int i)
  99. {
  100.      uchar j;
  101.          while(i--)
  102.          {

  103.        for(j=0;j>115;j++);
  104.            {;}
  105.            }
  106.    }[code]/*********¶Ë¿Ú³õʼ»¯********/
  107. /*void Init()
  108. {
  109.   P1M1&=~0X40;
  110.   P1M0|=0Xf3;
  111.   P3M1=0X00;
  112.   P3M0=0XFF;
  113.   P1M0&=~0X40;//P1^6¸ß×èÊäÈë
  114.   P1M1|=0X40;
  115.   ADC_CONTR=0X80;//Æô¶¯
  116.   ADC_START=0X08;
  117.   delay1ms(2);
  118.   AUXR1&=~0X04;//ADÖµ´¢´æ·½Ê½
  119.   ADC_CONTR=0XE1;
  120.   }        */  
  121. void Init()
  122.   {
  123.    P1M0= 0x0f;            
  124.    P1M1= 0x00;
  125.    P3M0=0xff;
  126.    P3M1=0x00;              
  127.    P1ASF=0x20;               //ÉèÖÃP1µÄµÚ6ͨµÀ¶Ë¿Ú×÷ΪģÄâÊäÈë
  128.    ADC_RES=0;                //Çå³ýADC_RES´æ´¢Æ÷ÒÔÇ°µÄ½á¹û
  129.    ADC_RESL=0;               //Çå³ýADC_RESL´æ´¢Æ÷ÒÔÇ°µÄ½á¹û
  130.    ADC_CONTR=ADC_POWER|ADC_SPEEDLL;   //ADC ¿ªÆôµçÔ´¡¢×ª»»ËÙ¶È
  131.    delay1ms(2);                      //ÉϵçÑÓʱ1ms
  132.     }       


  133. /****¼üÅ̼ì²â*****/
  134. void Keyboardset(void)
  135. {
  136.   
  137. if((s1+s2+s3)!=0)
  138. {
  139.   if(s1==1)
  140.   num=num-1;
  141.   Display(num,tp);
  142.   }
  143.   if(s2==1)
  144.   {
  145.    num=num+1;
  146.    Display(num,tp);
  147.    if(num>=99)num=99;
  148.    }
  149.     if(s3==1)
  150.         {
  151.       if(num>tp)
  152.           makesure=1;
  153.           return;
  154.     }
  155.         }
  156.                   
  157. /********°´¼üɨÃ躯Êý**********/
  158. void Keyask(void)
  159. {
  160.   uchar tepm;
  161. s1=0;
  162. s2=0;
  163. s3=0;
  164. P1=0x30;
  165. P5=0xff;
  166. tepm=P1&0X30;
  167. if(temp!=0x30)
  168. {
  169.   delay1ms(10);
  170.   if(temp!=0x30)
  171.   switch(temp)
  172.   {
  173.    case(0x20):s1=1;
  174.    while(!(P1&0X10));
  175.    break;
  176.    case(0x10):s2=1;
  177.    while(!(P1&0x20));
  178.    break;
  179.    }
  180.    }
  181.    P1=0X70;
  182.    if(temp!=0x30)
  183.    {
  184.      delay1ms(10);
  185.          if(temp!=0x30)
  186.         switch(temp)
  187.         {
  188.         case(0x20):s3=1;
  189.    while(!(P1&0X10));
  190.    }
  191.    }
  192.    }         
  193. /**********AD³õʼ»¯²¢²É¼¯**************/
  194. /*uchar getAD(void)
  195. {
  196. uchar i;
  197. uint sum=0;
  198. for(i=0;i<8;i++)
  199. {
  200.   ADC_CONTR|=0X08;
  201.   BIT3=0x08(ADC_STARTAD)
  202.   delay(1);
  203.   P1ASF=0x40;
  204.   while((ADC_CONTR&0x10)==0x00);//µÈ´ýת»»½áÊø
  205.   ADC_CONTR&=~0x10;
  206.   sum+=ADC_RES;
  207.   }
  208.   sum>>=3;
  209.   return(uchar)sum;        //Ç¿ÖÆת»»ÎªucharÐÎʽ
  210.   }          */
  211. uint get_ad_result(uchar channel)
  212. {
  213.    uchar ad_finished=0;//´æ´¢A/Dת»»±êÖ¾
  214.    uchar i;
  215.    uint sum=0;
  216.    for(i=0;i<8;i++)
  217.    {
  218.    ADC_RES=0;//¸ß8λÇåÁã
  219.    ADC_RESL=0;//µÍ2λÇåÁã
  220.    channel&=0x07;//0000 0111 ÇåÁã¸ß5λ
  221.    ADC_CONTR=0x60;//ת»»ËÙÂÊΪ70¸öʱÖÓÖÜÆÚת»»1´Î
  222.     _nop_();
  223.     ADC_CONTR=channel;//Ñ¡ÔñA/Dµ±Ç°Í¨µÀ
  224.     _nop_();
  225.     ADC_CONTR|=0x80;//Æô¶¯A/DµçÔ´
  226.     delay1ms(2);//ÑÓʱһÏÂʹÊäÈëµçѹ´ïµ½Îȶ¨
  227.     ADC_CONTR|=0x08;//0000,1000 Áî ADCS = 1, Æô¶¯A/Dת»»,
  228.     ad_finished=0;
  229.     while(ad_finished==0)//µÈ´ýA/Dת»»½áÊø
  230.    {
  231.      ad_finished=(ADC_CONTR&0x10); //0001,0000 ²âÊÔA/Dת»»½áÊø·ñ
  232.       }
  233.       ADC_CONTR&=0xE7;//1111,0111 Çå ADC_FLAG λ, ¹Ø±ÕA/Dת»», sum+=ADC_RES;
  234.           sum+=ADC_RES;
  235.           }
  236.       sum>>=3;                 //Çóȡƽ¾ùÖµ
  237.       return(uchar)sum;        //Ç¿ÖÆת»»ÎªucharÐÎʽ
  238.       return(ADC_RES*256+ADC_RESL);//·µ»Ø A/D ¸ß8λ+µÍ2λת»»½á¹û
  239.    }         

  240. /*************ÊýÂë¹ÜÏÔʾ*****************/
  241.   void Display(num,tp)
  242.   {

  243.     P3=0x00;
  244.     baiwei=0;
  245.         P3=LED[num/10];
  246.         baiwei=1;
  247.         delay5ms();
  248.         shiwei=0;
  249.         P3=LED[num%10];
  250.         shiwei=1;
  251.         delay5ms();
  252.         gewei=0;
  253.         P3=LED[tp%10];
  254.         gewei=1;
  255.         delay5ms();
  256.         dianwei=0;
  257.         P3=0x5e;
  258.         dianwei=1;
  259.         delay5ms();
  260.         }
  261.    /*uchar ge,shi,bai;
  262.    bai=num/100%10;
  263.    shi=num/10%10;
  264.    ge=num%10;
  265.    
  266.    P3=0x00;          //ÏûÒþ
  267.    baiwei=0;
  268.    P3=LED[bai];//°Ùλ
  269.    baiwei=1;
  270.    delay5ms(2);
  271.    shiwei=0;
  272.    P3=LED[shi];//ʮλ
  273.    shiwei=1;
  274.    delay5ms(2);
  275.    gewei=0;
  276.    P3=LED[ge];//¸öλ
  277.    gewei=1;
  278.    delay5ms(2);
  279.    dianwei=0;
  280.    P3=0xe5;          //ÏÔʾµ¥Î»¡±C"
  281.    dianwe=1;
  282.    delay5ms(2);
  283.    } */
  284. /***********Ö÷³ÌÐò***********/
  285.    void main()
  286.    {
  287.     Init();
  288.         while(1)
  289.         {
  290.          Keyboardset();
  291.          ad=get_AD();
  292.          tp=KT_1[ad/2];
  293.          if(makesure==1)
  294.          {
  295.           if(num>=tp)
  296.           {
  297.           heat=1;
  298.           }
  299.           if(tp>num)
  300.           {
  301.            heat=0;
  302.            }
  303.            }
  304.            display(num,tp);
  305.            }
  306.            }
复制代码
[/code][/code][/code]
 楼主 | 2018-10-9 19:40 | 显示全部楼层
感温探头是K型热电偶,下面数据表是一部份数据
 楼主 | 2018-10-9 19:45 | 显示全部楼层
附图是编译不通过的

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
 楼主 | 2018-10-9 19:46 | 显示全部楼层
这是原理图,供电是5V2A

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
| 2018-10-10 08:32 | 显示全部楼层
LKC134 发表于 2018-10-9 19:46
这是原理图,供电是5V2A

有些是少了分号,有些是逗号

双击错误信息,就知道问题在哪
 楼主 | 2018-10-10 09:02 | 显示全部楼层
看了,是显示函数那项出的问题。
 楼主 | 2018-10-10 09:04 | 显示全部楼层
指向void Display(num,tp)这句
| 2018-10-10 09:53 | 显示全部楼层
LKC134 发表于 2018-10-10 09:04
指向void Display(num,tp)这句

少了分号
 楼主 | 2018-10-10 10:22 | 显示全部楼层
已加了,但还是不行
 楼主 | 2018-10-10 10:27 | 显示全部楼层
我重新改下:
void Display();
{
   num=tp;
uchar  b,sh,g;
b=num/100;
sh=(num/10)%10;
g =num%10;
................
编译是指向 void Display()这句说语法错误“)”提示这个括号。
 楼主 | 2018-10-10 10:47 | 显示全部楼层
刚查了下程序,在程序开头那里漏了一句函数定义
加上这句void Display(num,tp);就好了,但是还有其它问题,我再查查,感谢版主的回复。如确实不行再劳烦你了。
| 2018-10-10 11:13 | 显示全部楼层
LKC134 发表于 2018-10-10 10:27
我重新改下:
void Display();
{

函数定义的时候,需要有参数或者写 void ,且末尾不用分号
函数调用时,不用加 void ,如果有参数一定要填写正确的参数
 楼主 | 2018-10-10 15:37 | 显示全部楼层
现在编译通过了,但是有7个警告,烧录后数码管只显示(0000),发现在显示程序那里位分配没有作用,将它屏蔽后编译少了4个警告,还在摸索中。
扫描二维码,随时随地手机跟帖
您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复

您需要登录后才可以回帖
登录 | 注册
高级模式
我要创建版块 申请成为版主

论坛热帖

关闭

热门推荐上一条 /1 下一条

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