为什么我的子程序不执行呢

2020-01-23 14:43发布

这是一个小车的
做的是小车循线超声避障循光入库

这是主程序


  1. #include <AT89x51.H>                //Æ÷¼þÅäÖÃÎļþ
  2. #include <intrins.h>
  3. #include "dianji.h"
  4. #include "xunxian.h"
  5. #include "ceju.h"
  6. #define ste P2_7        //¶æ»ú¿ØÖƽÅ
  7. #define RIGHT_led P0_5    //ÓÒ²àÑ­¹âled
  8. #define Before_led_one P0_6  //Ç°·½Ñ­¹âled1
  9. #define Before_led_two P0_7  //Ç°·½Ñ­¹âled2
  10. unsigned char Statusflag=1;  //×Ü״̬±ê־λ
  11. void delayhaomiao(unsigned int ms)
  12. {
  13.         unsigned char i=100,j;
  14.         for(;ms;ms--)
  15.         {
  16.                 while(--i)
  17.                 {
  18.                         j=10;
  19.                         while(--j);
  20.                 }
  21.         }
  22. }

  23. void main()
  24. {
  25.                 while(Statusflag==1)
  26.                 {
  27.                  xunxian();
  28.                  ceju();
  29.                  if(S<=100)
  30.                  Statusflag=2;
  31.                 }
  32.                 while(Statusflag==2)
  33.                 {
  34.                  zuotui();
  35.                  youqian();
  36.                  delayhaomiao(500);           //´ËʱÊý¾Ý¹©±àÒ룬ʵ¼ÊÐèÒªÐë¸ù¾ÝС³µÇé¿ö¸ü¸Ä
  37.                  qianjin();
  38.                  delayhaomiao(30000);           //´ËʱÊý¾Ý¹©±àÒ룬ʵ¼ÊÐèÒªÐë¸ù¾ÝС³µÇé¿ö¸ü¸Ä
  39.                  youzhuan();
  40.                  delayhaomiao(500);         
  41.                  qianjin();
  42.                  Statusflag=3;
  43.                 }
  44.         /*        while(Statusflag==3)
  45.                 {
  46.                                 if(RIGHT_led==0)
  47.                                 {
  48.                                 zuoqian();
  49.                                 youtui();
  50.                                 delayhaomiao(500);         
  51.                                 if((Before_led_one==0)&&(Before_led_two==0))
  52.                                         {
  53.                                         zuoqian();
  54.                                   youtui();
  55.                                         delayhaomiao(500);            
  56.                                         qianjin();
  57.                                         if(S==150)
  58.                                         while(1);
  59.                                         }
  60.                                 }
  61.                 }        */
  62. }

复制代码


  1. /*这个是测距用1602显示的子程序*/

  2. #include <AT89x51.H>                //Æ÷¼þÅäÖÃÎļþ
  3. #include <intrins.h>
  4. #include "ceju.h"
  5. unsigned char code ASCII[15] =    {'0','1','2','3','4','5','6','7','8','9','.','-','M'};
  6. unsigned char disbuff[4]={0,0,0,0,};
  7. unsigned char code mcustudio[] ={"==Range Finder=="};
  8. unsigned char code email[] =    {" Hello Teachers "};
  9. unsigned char code Cls[] =      {"                "};
  10. static unsigned char DisNum = 0; //ÏÔʾÓÃÖ¸Õë                                  
  11. unsigned int  time=0;
  12. unsigned long S=0;
  13. bit      flag =0;
  14.        

  15. /****************дÊý¾Ý****************/
  16. void WriteDataLCM(unsigned char WDLCM)
  17. {
  18.         ReadStatusLCM(); //¼ì²âæ
  19.         LCM_Data = WDLCM;
  20.         LCM_RS = 1;
  21.         LCM_RW = 0;
  22.         LCM_E = 0; //Èô¾§ÕñËÙ¶ÈÌ«¸ß¿ÉÒÔÔÚÕâºó¼ÓСµÄÑÓʱ
  23.         LCM_E = 0; //ÑÓʱ
  24.         LCM_E = 1;
  25. }

  26. /****************дָÁî*****************/
  27. void WriteCommandLCM(unsigned char WCLCM,BuysC) //BuysCΪ0ʱºöÂÔæ¼ì²â
  28. {
  29.         if (BuysC) ReadStatusLCM(); //¸ù¾ÝÐèÒª¼ì²âæ
  30.         LCM_Data = WCLCM;
  31.         LCM_RS = 0;
  32.         LCM_RW = 0;       
  33.         LCM_E = 0;
  34.         LCM_E = 0;
  35.         LCM_E = 1;       
  36. }

  37. /****************¶ÁÊý¾Ý********************/
  38. unsigned char ReadDataLCM(void)
  39. {
  40.         LCM_RS = 1;
  41.         LCM_RW = 1;
  42.         LCM_E = 0;
  43.         LCM_E = 0;
  44.         LCM_E = 1;
  45.         return(LCM_Data);
  46. }

  47. /*****************¶Á״̬********************/
  48. unsigned char ReadStatusLCM(void)
  49. {
  50.         LCM_Data = 0xFF;
  51.         LCM_RS = 0;
  52.         LCM_RW = 1;
  53.         LCM_E = 0;
  54.         LCM_E = 0;
  55.         LCM_E = 1;
  56.         while (LCM_Data & Busy); //¼ì²âæÐźÅ
  57.         return(LCM_Data);
  58. }
  59. /********************LCM³õʼ»¯**********************/
  60. void LCMInit(void)
  61. {
  62.         LCM_Data = 0;
  63.         WriteCommandLCM(0x38,0); //Èý´ÎÏÔʾģʽÉèÖ㬲»¼ì²âæÐźÅ
  64.         Delay5Ms();
  65.         WriteCommandLCM(0x38,0);
  66.         Delay5Ms();
  67.         WriteCommandLCM(0x38,0);
  68.         Delay5Ms();

  69.         WriteCommandLCM(0x38,1); //ÏÔʾģʽÉèÖÃ,¿ªÊ¼ÒªÇóÿ´Î¼ì²âæÐźÅ
  70.         WriteCommandLCM(0x08,1); //¹Ø±ÕÏÔʾ
  71.         WriteCommandLCM(0x01,1); //ÏÔʾÇåÆÁ
  72.         WriteCommandLCM(0x06,1); // ÏÔʾ¹â±êÒƶ¯ÉèÖÃ
  73.         WriteCommandLCM(0x0F,1); // ÏÔʾ¿ª¼°¹â±êÉèÖÃ
  74. }

  75. /**********************°´Ö¸¶¨Î»ÖÃÏÔʾһ¸ö×Ö·û*********************/
  76. void DisplayOneChar(unsigned char X, unsigned char Y, unsigned char DData)
  77. {
  78.         Y &= 0x1;
  79.         X &= 0xF; //ÏÞÖÆX²»ÄÜ´óÓÚ15£¬Y²»ÄÜ´óÓÚ1
  80.         if (Y) X |= 0x40; //µ±ÒªÏÔʾµÚ¶þÐÐʱµØÖ·Âë+0x40;
  81.         X |= 0x80; //Ëã³öÖ¸ÁîÂë
  82.         WriteCommandLCM(X, 1); //·¢ÃüÁî×Ö
  83.         WriteDataLCM(DData); //·¢Êý¾Ý
  84. }
  85. /*****************°´Ö¸¶¨Î»ÖÃÏÔʾһ´®×Ö·û************************/
  86. void DisplayListChar(unsigned char X, unsigned char Y, unsigned char code *DData)
  87. {
  88.         unsigned char ListLength;

  89.   ListLength = 0;
  90.         Y &= 0x1;
  91.         X &= 0xF; //ÏÞÖÆX²»ÄÜ´óÓÚ15£¬Y²»ÄÜ´óÓÚ1
  92.         while (DData[ListLength]>0x19) //Èôµ½´ï×Ö´®Î²ÔòÍ˳ö
  93.                 {
  94.                         if (X <= 0xF) //X×ø±êӦСÓÚ0xF
  95.                                 {
  96.                                         DisplayOneChar(X, Y, DData[ListLength]); //ÏÔʾµ¥¸ö×Ö·û
  97.                                         ListLength++;
  98.                                         X++;
  99.                                 }
  100.                 }
  101. }


  102. /**********************¼ÆË㺯Êý****************************/
  103. void Conut(void)
  104.         {
  105.          time=TH0*256+TL0;
  106.          TH0=0;
  107.          TL0=0;
  108.        
  109.          S=(time*1.8)/10;     //Ëã³öÀ´ÊÇMM
  110.          if((S>=7000)||flag==1) //³¬³ö²âÁ¿·¶Î§ÏÔʾ¡°-¡±
  111.          {         
  112.           flag=0;
  113.          
  114.           DisplayOneChar(0, 1, ASCII[11]);
  115.           DisplayOneChar(1, 1, ASCII[10]);        //ÏÔʾµã
  116.           DisplayOneChar(2, 1, ASCII[11]);
  117.           DisplayOneChar(3, 1, ASCII[11]);
  118.           DisplayOneChar(4, 1, ASCII[11]);
  119.           DisplayOneChar(5, 1, ASCII[12]);        //ÏÔʾM
  120.          }
  121.          else
  122.          {
  123.           disbuff[0]=S/1000;
  124.           disbuff[1]=S/100%10;
  125.           disbuff[2]=S/10%10;
  126.           disbuff[3]=S%10;
  127.           DisplayOneChar(0, 1, ASCII[disbuff[0]]);
  128.           DisplayOneChar(1, 1, ASCII[10]);        //ÏÔʾµã
  129.           DisplayOneChar(2, 1, ASCII[disbuff[1]]);
  130.           DisplayOneChar(3, 1, ASCII[disbuff[2]]);
  131.           DisplayOneChar(4, 1, ASCII[disbuff[3]]);
  132.           DisplayOneChar(5, 1, ASCII[12]);        //ÏÔʾM
  133.          }
  134.         }
  135. /********************************************************/
  136. void zd0() interrupt 1                  //T0ÖжÏÓÃÀ´¼ÆÊýÆ÷Òç³ö,³¬¹ý²â¾à·¶Î§
  137.   {
  138.     flag=1;                                                         //ÖжÏÒç³ö±êÖ¾
  139.                 RX=0;
  140.   }
  141. /***************************Æô¶¯³¬ÉùÄ£¿é*****************************/
  142.      void  StartModule()                         
  143.   {
  144.           TX=1;                                             //Æô¶¯Ò»´ÎÄ£¿é
  145.           _nop_();
  146.           _nop_();
  147.           _nop_();
  148.           _nop_();
  149.           _nop_();
  150.           _nop_();
  151.           _nop_();
  152.           _nop_();
  153.           _nop_();
  154.           _nop_();
  155.           _nop_();
  156.           _nop_();
  157.           _nop_();
  158.           _nop_();
  159.           _nop_();
  160.           _nop_();
  161.           _nop_();
  162.           _nop_();
  163.           _nop_();
  164.           _nop_();
  165.           _nop_();
  166.           TX=0;
  167.   }
  168. void Timer_Count(void)
  169. {
  170.                                 TR0=1;                          //¿ªÆô¼ÆÊý
  171.                                 while(RX);                //µ±RXΪ1¼ÆÊý²¢µÈ´ý
  172.                                 TR0=0;                                //¹Ø±Õ¼ÆÊý
  173.         Conut();                        //¼ÆËã

  174. }

  175. /*********************ÑÓʱº¯Êý**************************/
  176. void delayms(unsigned int ms)
  177. {
  178.         unsigned char i=100,j;
  179.         for(;ms;ms--)
  180.         {
  181.                 while(--i)
  182.                 {
  183.                         j=10;
  184.                         while(--j);
  185.                 }
  186.         }
  187. }


  188. //5msÑÓʱ
  189. void Delay5Ms(void)
  190. {
  191.         unsigned int TempCyc = 5552;
  192.         while(TempCyc--);
  193. }

  194. //400msÑÓʱ
  195. void Delay400Ms(void)
  196. {
  197.         unsigned char TempCycA = 5;
  198.         unsigned int TempCycB;
  199.         while(TempCycA--)
  200.                 {
  201.                         TempCycB=7269;
  202.                         while(TempCycB--);
  203.                 };
  204. }
  205. /*********************Ö÷º¯Êý****************************/
  206. void ceju(void)
  207. {
  208.     unsigned int valA;
  209.         unsigned char TempCyc;
  210.         Delay400Ms(); //Æô¶¯µÈ´ý£¬µÈLCM½²È빤×÷״̬
  211.         LCMInit(); //LCM³õʼ»¯
  212.         Delay5Ms(); //ÑÓʱƬ¿Ì(¿É²»Òª)
  213.         DisplayListChar(0, 0, mcustudio);
  214.         DisplayListChar(0, 1, email);
  215.         ReadDataLCM();//²âÊÔÓþäÎÞÒâÒå
  216.         for (TempCyc=0; TempCyc<10; TempCyc++)
  217.         Delay400Ms(); //ÑÓʱ
  218.         DisplayListChar(0, 1, Cls);       
  219.          TMOD=0x01;                   //ÉèT0Ϊ·½Ê½1£¬GATE=1£»
  220.          TH0=0;
  221.          TL0=0;         
  222.          ET0=1;             //ÔÊÐíT0ÖжÏ
  223.          EA=1;                           //¿ªÆô×ÜÖжϠ                      
  224.          delayms(60);
  225.          RX=1;
  226.          StartModule();
  227.    for(valA=7510;valA>0;valA--)
  228.             {
  229.                                         if(RX==1)
  230.                                         {
  231.            Timer_Count();
  232.                                         }
  233.             }
  234. }
复制代码



结果程序在实际运行的时候1602根本不显示,但是1602的程序是没有问题的,单独拿出来是可以执行的,不懂得问题出在哪里,麻烦大家帮我看一看
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
11条回答
墨逸、
1楼-- · 2020-01-23 16:43
这个是我所有的程序文件
墨逸、
2楼-- · 2020-01-23 20:10
 精彩回答 2  元偷偷看……
maimaige
3楼-- · 2020-01-23 22:41
加断点调试吧,S变量在main中估计需要加上exern定义吧
墨逸、
4楼-- · 2020-01-24 00:00
maimaige 发表于 2014-5-10 17:25
加断点调试吧,S变量在main中估计需要加上exern定义吧

但是我的S是static的啊
maimaige
5楼-- · 2020-01-24 01:20
我只看了一下你贴的代码,
你的那个S在另外一个文件中定义的,而在main函数所在的文件中引用,应该加一个声明,
这个如果编译没有报错的话,lcd显示不正确估计和这个无关。
你多加断点,通过watch看看各个变量的值,和是否已经进入你的显示程序
墨逸、
6楼-- · 2020-01-24 06:10
maimaige 发表于 2014-5-10 17:41
我只看了一下你贴的代码,
你的那个S在另外一个文件中定义的,而在main函数所在的文件中引用,应该加一个声 ...

那个static已经被我换成了extern ,我去看看程序会被执行到哪一步

一周热门 更多>