求大神帮忙,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 ;
}
呃,我承认我没耐心看~ 介个,goto都用上了,难得一见。 while(P2^7) //这个地方是处理按键的?这样的话,你的程序和流程图刚刚相反,也就是没有按键按下就不显示。楼主就算按按键也是一闪而过。ps:不带这样处理按键的,需要去抖动。
{ gotoAA ; }
楼主的各个位的散转计算好像也不对。显示缓存赋值十位的地方数组不对。
程序太乱~太乱~全部返工吧。别goto过来goto回去,再说最后一个goto也没有意义。 还有一个就是,很严重的。标题不能反应出问题,会被扣钱的。 xinzhi1986 发表于 2012-4-12 22:08 static/image/common/back.gif
呃,我承认我没耐心看~
呃。。。。。。。。还是谢谢你 是不是时序没有控制好啊。 你应先单独调试显示程序。硬件电路有没有问题? 1、先做IO口点灯,看晶振有没有问题,然后再试一下复位。
2、用按钮控制灯的亮灭,看按钮程序有没有错。
3、自己编写一个简单的数码管程序(例如显示1-8八个数字),检查数码管的显示程序有没有问题。
4、再预置一个数组,然后按照显示温度的方式,把虚拟的温度值用数码管输出,看看有没有问题。
5、加入温度元件,看看能否显示,对采集温度的函数进行调试。
6、能成功显示温度以后,加入按钮等其他子函数。
PS。建议楼主找一些代码格式规范的文章看看。每个独立功能都要至少用一个函数,一来可以方便调试,二来向我上面说的4中的一样,可以通过接口函数和虚拟的数值来分布检测各部分函数是否有问题。main函数中尽量只有调用函数。 goolloo 发表于 2012-4-14 15:01 static/image/common/back.gif
1、先做IO口点灯,看晶振有没有问题,然后再试一下复位。
2、用按钮控制灯的亮灭,看按钮程序有没有错。
3 ...
谢谢您的指导,尝试使用您说的方法来调试,发现,是adc数模转化程序出了问题,其他都没什么问题 gotoAA ;
AA: ADC_CONTR|=0x80;
这样可以实现程序的跳转?以前怎么都没见过啊?求指教 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;//四位七段数码管千位数据存放
好像没有用到啊
看看硬件有没有问题先 putin 发表于 2012-4-16 08:02 static/image/common/back.gif
谢谢您的指导,尝试使用您说的方法来调试,发现,是adc数模转化程序出了问题,其他都没什么问题 ...
楼主是北方人丫?习惯说您?
我就一大二小盆友。。。受不起啊。。。
页:
[1]