发新帖我要提问
12
返回列表
打印
[51单片机]

求助大神啊

[复制链接]
楼主: 370792681
手机看帖
扫描二维码
随时随地手机跟帖
21
370792681 发表于 2013-11-15 20:03
不是不显示啊,是那一部分程序根本没有执行,找不到原因啊

那就好办啦,直接仿真调试即可,看看程序是怎么一步步往下走的。

使用特权

评论回复
22
370792681|  楼主 | 2013-11-15 20:22 | 只看该作者
cjseng 发表于 2013-11-15 20:09
那就好办啦,直接仿真调试即可,看看程序是怎么一步步往下走的。

仿真芯片吗,可是买了仿真芯片一直连不上

使用特权

评论回复
23
370792681|  楼主 | 2013-11-15 20:26 | 只看该作者
cjseng 发表于 2013-11-15 20:09
那就好办啦,直接仿真调试即可,看看程序是怎么一步步往下走的。

怎么仿真调试啊,原谅楼主是个小白

使用特权

评论回复
24
cjseng| | 2013-11-15 20:43 | 只看该作者
本帖最后由 cjseng 于 2013-11-15 20:51 编辑

用KEIL+proteus直接仿真。
不过我大致看了下你的程序,到处都是死循环啊。
比如:while(KEY4!=0),这个键不按下去就一直死在这里?
while(!KEY3);按键不松开也是一直死在这里?

使用特权

评论回复
25
NE5532| | 2013-11-15 21:02 | 只看该作者
小白不可怕,可怕的是只会叫唤的小白,想做这行,就自己动手,方法都告诉楼主了。有几个模块?每个模块负责什么?模块之间怎么接口的?自然语言描述一下可以不?有叫唤的时间自己都写出来了。

不建议用仿真软件,会严重误导你做设计的,这么简单的程序,直接烧下去就OK了。楼主你不跟着理模块,是不会有任何收获的。

使用特权

评论回复
26
cjseng| | 2013-11-15 21:08 | 只看该作者
void Display_LCD_String(uchar p,uchar *s) //1602显示
{
      uchar i;
      Set_LCD_POS(p);
      for(i=0;i<16;i++)
     {
          Write_LCD_Data(s);
          DelayMS(1);  
     }
}
这个函数怎么回事?那个i除了计数,还有什么意义吗?
Write_LCD_Data(s);这里面的s一直不会变化,如何显示出字符串来?
楼主大概是想显示这样的结果吧?

使用特权

评论回复
27
370792681|  楼主 | 2013-11-15 22:12 | 只看该作者
cjseng 发表于 2013-11-15 21:08
void Display_LCD_String(uchar p,uchar *s) //1602显示
{
      uchar i;

是在按键设置时lcd上的数没有变,好像那一部分没有运行,数组里的数也没有被改变,我程序里还有一部分是可调式电子钟,那段代码在电子钟那部分可以运行啊,到这里就不行了,谢谢您花时间帮我

使用特权

评论回复
28
cjseng| | 2013-11-15 22:44 | 只看该作者
“是在按键设置时lcd上的数没有变,好像那一部分没有运行”
你说了“好像”这个词,你得想办法把它确定下来!用一些调试手段,检测出“是”还是“不是”,不要用“好像”,否则你的调试就是在瞎蒙。
至于用何种手段,你可以在进入这一段代码的入口处,发出一个信号,比如,某个管脚的电平翻转一下,用万用表一量就知道有没有运行到此处了。
不过,我感觉你的代码很是混乱,逻辑上存在问题。你现在是4个按键,要是有几十个按键,这种写法岂不一团乱麻?

使用特权

评论回复
评分
参与人数 1威望 +2 收起 理由
370792681 + 2 非常感谢
29
370792681|  楼主 | 2013-11-15 23:06 | 只看该作者
cjseng 发表于 2013-11-15 22:44
“是在按键设置时lcd上的数没有变,好像那一部分没有运行”
你说了“好像”这个词,你得想办法把它确定下来 ...

好吧,我正在调试(学习中),谢谢您的指导,我会尽力解决这歌问题的

使用特权

评论回复
30
370792681|  楼主 | 2013-11-16 00:45 | 只看该作者
370792681 发表于 2013-11-15 23:06
好吧,我正在调试(学习中),谢谢您的指导,我会尽力解决这歌问题的

那段程序的确是没有运行,可是还没找到原因

使用特权

评论回复
31
cjseng| | 2013-11-16 01:01 | 只看该作者
本帖最后由 cjseng 于 2013-11-16 01:12 编辑

void int0() interrupt 0                                  //有没有进入中断?
{
        BG=1;
        delay(1);
        while(KEY4!=0)                                    //这个条件有没有满足?
        {
                if(KEY3==0)                                //这个条件有没有满足?
                {
                        DelayMS(5);
                        while(!KEY3);                       //这个条件有没有满足?
                        Format_DateTime(dj+1,LCD_DSY_BUFFER3+6);
                        Format_DateTime(Time[dj][0],LCD_DSY_BUFFER4+2);
                        Format_DateTime(Time[dj][1],LCD_DSY_BUFFER4+7);
                        Format_DateTime(Time[dj][2],LCD_DSY_BUFFER4+12);
                        Display_LCD_String(0x00,LCD_DSY_BUFFER3);
                        Display_LCD_String(0x40,LCD_DSY_BUFFER4);
                        set();
                 }
        }
         delay(2);
        BG=0;
}

你可以在进入set()的必经之路上埋地雷,看看地雷有没有炸,没有炸说明程序根本运行不到这里。如果地雷响了,逐步改变地雷的位置,顺藤摸瓜就可以看清程序走向了。

使用特权

评论回复
32
370792681|  楼主 | 2013-11-16 01:23 | 只看该作者
370792681 发表于 2013-11-16 00:45
那段程序的确是没有运行,可是还没找到原因

终于找到原因了,谢谢大家给我的帮助

使用特权

评论回复
33
370792681|  楼主 | 2013-11-16 01:24 | 只看该作者
谢谢大家了,问题解决了,谢谢大家让我静下来反思,好开心

使用特权

评论回复
34
NE5532| | 2013-11-17 15:32 | 只看该作者
370792681 发表于 2013-11-16 01:24
谢谢大家了,问题解决了,谢谢大家让我静下来反思,好开心

得方法者,得食。

使用特权

评论回复
35
xinghun0813| | 2013-11-20 14:17 | 只看该作者
一般初始化成功就没有太大问题,程序如果没错的话,看看引脚正不正常

使用特权

评论回复
36
lrhsx33| | 2013-11-26 11:03 | 只看该作者
370792681 发表于 2013-11-15 16:26
没有示波器啊

soundforge60软件
台电一台。
接3条线到电脑声音输入口,地,信号1,信号2。
录音,后看波形。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则