模块中的数组值怎么传递出来给其他部分使用呢

2019-07-16 06:10发布

我初学C51,很多都不熟悉,望各位不吝赐教啊
我用DS12C887和STC89C52做一个时钟,做到一个C程序中好做一些,如果是分出模块来的话,把DS12C887做成独立的一个模块,然后再模块中读取时间,然后在主程序中获取模块里读取的时间值,程序是我自己想的,思路有不对的也请指正;我在DS12C887的模块中使用了一个函数
uchar ds_r_tim(uchar *p)
{
         uchar a[5];
         a[0] = XBYTE[0x8000];
         a[1] = XBYTE[0x8002];
         a[2] = XBYTE[0x8004];
         a[3] = XBYTE[0x8007];
         a[4] = XBYTE[0x8008];
         a[5] = XBYTE[0x8009];
         p = a;
         return *p;
}

我想把模块离得函数的返回指针P的值在主函数中赋值给主函数中定义的一个数组DS_TIM[5]的首地址指针值。
DS_TIM = &(uchar ds_r_tim(uchar *p))
这样DS_TIM[5]就能够读出时间值了。

这种想法对吗?如果错误的话,像这种模块中的一组数值,应该怎么传递到其他模块中呢?谢谢
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
7条回答
怕碎的瓶子
2019-07-16 22:21
有一个比较类似的程序是这样写的:
在.H头文件里定义了一中新结构
//定义时间类型
typedef struct _SYSTEMTIME_
{
        unchar Second;
        unchar Minute;
        unchar Hour;
        unchar Week;
        unchar Day;
        unchar Month;
        unchar Year;
        unchar DateString[9];
        unchar TimeString[9];
}SYSTEMTIME;   

在主程序中定义了一个新结构的变量
SYSTEMTIME CurrentTime;

在主程序下面使用该变量调用模块中的函数进行时间数据读取
DS1302_GetTime(&CurrentTime);

该语句在模块DS1302.C中展开来看是这样的:
void DS1302_GetTime(SYSTEMTIME *Time);        //声明函数  读出时间

//读出时间
void DS1302_GetTime(SYSTEMTIME *Time)
{
        unchar ReadValue;
        ReadValue = Read1302(DS1302_SECOND);
        Time->Second = ((ReadValue&0x70)>>4)*10 + (ReadValue&0x0f);
        ReadValue = Read1302(DS1302_MINUTE);
        Time->Minute = ((ReadValue&0x70)>>4)*10 + (ReadValue&0x0f);
        ReadValue = Read1302(DS1302_HOUR);
        Time->Hour   = ((ReadValue&0x70)>>4)*10 + (ReadValue&0x0f);
        ReadValue = Read1302(DS1302_DAY);
        Time->Day    = ((ReadValue&0x70)>>4)*10 + (ReadValue&0x0f);
        ReadValue = Read1302(DS1302_WEEK);
        Time->Week   = ((ReadValue&0x70)>>4)*10 + (ReadValue&0x0f);
        ReadValue = Read1302(DS1302_MONTH);
        Time->Month  = ((ReadValue&0x70)>>4)*10 + (ReadValue&0x0f);
        ReadValue = Read1302(DS1302_YEAR);
        Time->Year   = ((ReadValue&0x70)>>4)*10 + (ReadValue&0x0f);
}
看这个函数是完全懵的,什么也看不明白了
其中涉及的另外一个函数是Read1302()是这样的
//读取1302指定地址中的数据
unchar Read1302(unchar Address)
{
        unchar Data;
        DS1302_RST = 0;
        DS1302_CLK = 0;
        DS1302_RST = 1;                                   //RST拉高,启动数据传送
        DS1302_InputByte(Address|0x01);//读取指定地址数据指令
        Data = DS1302_OutputByte();
        DS1302_CLK = 1;
        DS1302_RST = 0;
        return (Data);
}

一周热门 更多>