putin 发表于 2012-4-12 21:54:59

求大神帮忙,stc12c5a60s2开发中遇到问题,谢谢!

做了一个单片机温度测量器,但是程序烧录进去后没有显示!
程序流程

#include "stc12c5a.h"          //包含STC12C5A60S2单片机寄存器定义文件
unsigned char data ge _at_ 0x30;    //四位七段数码管个位数据存放
unsigned char data shi _at_ 0x31;   //四位七段数码管十位数据存放
unsigned char data bai _at_ 0x32;   //四位七段数码管百位数据存放
unsigned char data qian _at_ 0x33;//四位七段数码管千位数据存放
unsigned char code table[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};//个、十、千位七段数码管数字显示表
unsigned char code table1[]={0x40,0x79,0x24,0x30,0x19,0x12,0x02,0x78,0x00,0x10};//百位七段数码管显示表,里面含小数点,即dp段永远被点亮
void main(void)
{
unsigned long i;
unsigned char status;
unsigned int y;
unsigned int a;
unsigned int b;
unsigned int c;
unsigned int d;
unsigned int e;
ge=table;
shi=table;
bai=table1;
qian=table;
P2=0   ;
BB:while(1)                        //七段数码管显示循环
      {   
         while(P2^7)
             {
               gotoAA ;
             }   
      P2=0x0E;                           //选择四位七段数码管的千位
          P0=qian;                           //显示四位七段数码管的千位
   for (i=0;i<100;i++);
      P2=0x0D;                         //选择四位七段数码管的百位
          P0=bai;                        //显示四位七段数码管的百位
   for (i=0;i<100;i++);
       P2=0x0B;                        //选择四位七段数码管的十位
          P0=shi;                        //显示四位七段数码管的十位
   for (i=0;i<100;i++);
       P2=0x07;                         //选择四位七段数码管的个位
          P0=ge;                         //显示四位七段数码管的个位
   for (i=0;i<100;i++);
}
AA:        ADC_CONTR|=0x80;                      //开A/D转换电源,第一次使用时要打开内部模拟电源
        for (i=0;i<10000;i++);                //适当延时
        P1ASF=0x04;                     //选择P1.2作为A/D转换通道
        ADC_CONTR=0xEA;                 
        for (i=0;i<10000;i++);                 //适当延时
      status=0;
      while(status==0)
      {
          status=ADC_CONTR&0x10;   
      }
      ADC_CONTR&=0xE7;             //将ADC_FLAG清零
      e= ADC_RES;                  // 保存AD转化结果
      y=2569.002+10.5859375*e;   //AD转换后的结果于温度之间的函数关系
          a=y%10 ;                        //四位七段数码管个位数
      b=(y%100)/10;                   //四位七段数码管十位数
      c=(y%100)/100;                  //四位七段数码管百位数
      d=y/1000 ;                      //四位七段数码管千位数
      ge=table;                  //四位七段数码管个位显示数据
      shi=table;                   //四位七段数码管十位显示数据
      bai=table1;                  //四位七段数码管百位显示数据
      qian=table;                  //四位七段数码管千位显示数据
      goto BB        ;

}

xinzhi1986 发表于 2012-4-12 22:08:06

呃,我承认我没耐心看~

vp110 发表于 2012-4-12 22:19:29

介个,goto都用上了,难得一见。

vp110 发表于 2012-4-12 22:44:14

while(P2^7)      //这个地方是处理按键的?这样的话,你的程序和流程图刚刚相反,也就是没有按键按下就不显示。楼主就算按按键也是一闪而过。ps:不带这样处理按键的,需要去抖动。
       {               gotoAA ;             }


楼主的各个位的散转计算好像也不对。显示缓存赋值十位的地方数组不对。


程序太乱~太乱~全部返工吧。别goto过来goto回去,再说最后一个goto也没有意义。

vp110 发表于 2012-4-12 22:47:26

还有一个就是,很严重的。标题不能反应出问题,会被扣钱的。

putin 发表于 2012-4-13 20:22:59

xinzhi1986 发表于 2012-4-12 22:08 static/image/common/back.gif
呃,我承认我没耐心看~

呃。。。。。。。。还是谢谢你

caiseyuzhou 发表于 2012-4-14 11:43:44

是不是时序没有控制好啊。

davidd 发表于 2012-4-14 11:53:25

你应先单独调试显示程序。硬件电路有没有问题?

goolloo 发表于 2012-4-14 15:01:16

1、先做IO口点灯,看晶振有没有问题,然后再试一下复位。
2、用按钮控制灯的亮灭,看按钮程序有没有错。
3、自己编写一个简单的数码管程序(例如显示1-8八个数字),检查数码管的显示程序有没有问题。
4、再预置一个数组,然后按照显示温度的方式,把虚拟的温度值用数码管输出,看看有没有问题。
5、加入温度元件,看看能否显示,对采集温度的函数进行调试。
6、能成功显示温度以后,加入按钮等其他子函数。

PS。建议楼主找一些代码格式规范的文章看看。每个独立功能都要至少用一个函数,一来可以方便调试,二来向我上面说的4中的一样,可以通过接口函数和虚拟的数值来分布检测各部分函数是否有问题。main函数中尽量只有调用函数。

putin 发表于 2012-4-16 08:02:33

goolloo 发表于 2012-4-14 15:01 static/image/common/back.gif
1、先做IO口点灯,看晶振有没有问题,然后再试一下复位。
2、用按钮控制灯的亮灭,看按钮程序有没有错。
3 ...

谢谢您的指导,尝试使用您说的方法来调试,发现,是adc数模转化程序出了问题,其他都没什么问题

TROYWINDON 发表于 2012-4-16 09:34:46

gotoAA ;

AA:      ADC_CONTR|=0x80;
这样可以实现程序的跳转?以前怎么都没见过啊?求指教

dudududu 发表于 2012-4-16 10:01:26

goto语句,我的话,还是建议用子函数代替靠谱;
你前面定义的这些:
unsigned char data ge _at_ 0x30;    //四位七段数码管个位数据存放
unsigned char data shi _at_ 0x31;   //四位七段数码管十位数据存放
unsigned char data bai _at_ 0x32;   //四位七段数码管百位数据存放
unsigned char data qian _at_ 0x33;//四位七段数码管千位数据存放

好像没有用到啊
看看硬件有没有问题先

goolloo 发表于 2012-4-16 10:14:32

putin 发表于 2012-4-16 08:02 static/image/common/back.gif
谢谢您的指导,尝试使用您说的方法来调试,发现,是adc数模转化程序出了问题,其他都没什么问题 ...

楼主是北方人丫?习惯说您?

我就一大二小盆友。。。受不起啊。。。
页: [1]
查看完整版本: 求大神帮忙,stc12c5a60s2开发中遇到问题,谢谢!