C51的一个问题,请各位帮助解答下。 用的是CT107D单片机实训平台。 是编CD1302时钟芯片的程序。

/*DS1302时钟芯片显示设置功能:显示时间日期引脚说明:DS1302三引脚CLK=P1^7;PIO=P2^3;RST=P1^3;*/#include<reg51.h>... /*DS1302时钟芯片显示设置
功能:显示 时间 日期
引脚说明:DS1302三引脚 CLK = P1^7; PIO=P2^3; RST=P1^3;
*/
#include<reg51.h>
#include<intrins.h>

#define uchar unsigned char
#define uint unsigned int

uchar code table[10] = {0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90}; //共阳数码管表
uchar data ddz[8] = {0x80,0x40,0x20,0x10,0x08,0x04,0x02,0x01}; //位寻址
uchar data TimeOut[8] = {0xc0,0xc0,0xbf,0xc0,0xc0,0xbf,0xc0,0xc0}; //时间段寻址
uchar data D0ut[8] = {0xc0,0xc0,0xbf,0xc0,0xc0,0xbf,0xc0,0xc0}; //日期段寻址

void delay(uint i) // 用uint 过程会明显点
{
while(--i);
}

void DS1302GetTime()
{
uchar ReadValue;
ReadValue = 0x44; //读秒个位 (用来调试的)
TimeOut[0] = table[ReadValue&0x0f];
TimeOut[1] = table[(ReadValue>>4)&0x0f];
ReadValue = 0x33; //读秒十位
TimeOut[3] = table[ReadValue&0x0f];
TimeOut[4] = table[(ReadValue>>4)&0x0f];
ReadValue = 0x22;
TimeOut[6] = table[ReadValue&0x0f];
TimeOut[7] = table[(ReadValue>>4)&0x0f];
}

void TimeDis()
{
uchar m;
for(m=7;m>=0;m--)
{
P2=0xc0; //开锁存(P2口的567三条线译码控制多个锁存器)
P0=ddz[m]; //位选通
P2=0x00;

P2=0xe0; //开锁存
P0=TimeOut[m]; //段选通
P2=0x00;
delay(0);
}
}
void main(void)
{
EX1=1;
EA=1;
while(1)
{
DS1302GetTime();
TimeDis();
}
}
//程序是调试的独立部分。出现的问题是:第一次显示是正确的,第二次后面开始就完全错了。主函数的循环可能有错,可我找不出来。分可能不错,还是希望各位能帮忙下。谢谢
展开
 我来答
百度网友3b1b680
2011-10-07 · TA获得超过966个赞
知道小有建树答主
回答量:978
采纳率:33%
帮助的人:619万
展开全部
TimeDis();中的for循环出错了,因为你定义的是unsigned char所以m的范围是0~255根本就不会有小于0的说法。。。所以会一直循环下去。建议把unsigned char 改成char就行了
意法半导体(中国)投资有限公司
2023-06-12 广告
STM32是一种由意法半导体(STMicroelectronics)公司设计和生产的单片机系列,广泛用于嵌入式系统、物联网(IoT)设备、汽车电子、工业自动化等领域。STM32具有以下优点:1. 低功耗:STM32单片机通常具有较低的功耗,... 点击进入详情页
本回答由意法半导体(中国)投资有限公司提供
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式