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

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条回答
怕碎的瓶子
1楼-- · 2019-07-16 08:14
没弄明白,还在继续查询中
怕碎的瓶子
2楼-- · 2019-07-16 08:48
本帖最后由 怕碎的瓶子 于 2012-3-28 14:08 编辑

//定义时间类型
typedef struct _SYSTEMTIME_
{
unchar Second;
unchar Minute;
unchar Hour;
unchar Week;
unchar Day;
unchar Month;
unchar Year;
unchar DateString[9];
unchar TimeString[9];
}SYSTEMTIME;   

新的问题,高手把这个给解释一下吧,typedef struct_SYSTEMTIME_ 这类的常用用法,在写C的时候经常会用到吗?
A670521546
3楼-- · 2019-07-16 14:41
这个是数据结构的,一般用到比较少吧,不过掌握最好了
怕碎的瓶子
4楼-- · 2019-07-16 19:12
 精彩回答 2  元偷偷看……
怕碎的瓶子
5楼-- · 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);
}
怕碎的瓶子
6楼-- · 2019-07-17 03:55
我的理解,望指正:
模块之间传递参数,其实在使用全局变量,在我看的这个例程里,全局变量被定义为了一种结构变量;

在很多文章里提到,不要在头文件里定义变量,那么这种结构变量的全局变量在头文件里定义合适吗?还有更好的办法吗?

一周热门 更多>