完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
扫一扫,分享给好友
我初学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个回答
|
|
没弄明白,还在继续查询中
|
|
|
|
本帖最后由 怕碎的瓶子 于 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的时候经常会用到吗? |
|
|
|
这个是数据结构的,一般用到比较少吧,不过掌握最好了
|
|
|
|
我在想着理解透彻,遇到了问题,我在下面贴出来,大家帮着解释一下,谢谢了 |
|
|
|
有一个比较类似的程序是这样写的:
在.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); } |
|
|
|
我的理解,望指正:
模块之间传递参数,其实在使用全局变量,在我看的这个例程里,全局变量被定义为了一种结构变量; 在很多文章里提到,不要在头文件里定义变量,那么这种结构变量的全局变量在头文件里定义合适吗?还有更好的办法吗? |
|
|
|
|
|
你正在撰写答案
如果你是对答案或其他答案精选点评或询问,请使用“评论”功能。
644 浏览 0 评论
求助一下关于51系列单片机的Timer0的计时问题,TH0、TL0+1的时间是怎么算的?
1819 浏览 1 评论
【RA-Eco-RA4E2-64PIN-V1.0开发板试用】开箱+Keil环境搭建+点灯+点亮OLED
1262 浏览 0 评论
【敏矽微ME32G070开发板免费体验】使用coremark测试敏矽微ME32G070 跑分
1136 浏览 0 评论
【敏矽微ME32G070开发板免费体验】开箱+点灯+点亮OLED
1357 浏览 2 评论
【youyeetoo X1 windows 开发板体验】少儿AI智能STEAM积木平台
12028 浏览 31 评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-24 12:14 , Processed in 0.751641 second(s), Total 84, Slave 66 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号