完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
扫一扫,分享给好友
/*电子表:以24小时计时方式工作,使用定时器,每秒数码管显示进1*/
#include #include #define uint unsigned int //宏定义 #define uchar unsigned char //宏定义 ***it dula=P2^6; //数码管段选锁存端 ***it wela=P2^7; //数码管位选锁存端 uchar h1,m1,s1; //时分秒全局变量 uchar tt; //定时器0进入中断的次数 uchar code table[]={ //数码管共阴极段选显示码0~F 0x3f,0x06,0x5b,0x4f, 0x66,0x6d,0x7d,0x07, 0x7f,0x6f,0x77,0x7c, 0x39,0x5e,0x79,0x71}; void init(); void time_add(uchar,uchar,uchar); //时间增加 void display(uchar,uchar,uchar); //显示时分秒 void delay(uint); void main() { init(); //初始化 while(1) { display(h1,m1,s1); } } void init() { tt=0; h1=0; m1=0; s1=0; TMOD=0x01; //使用定时器0 TH0=(65536-50000)/256; TL0=(65536-50000)%256; EA=1; ET0=1; TR0=1; } void dingshi0() interrupt 1 //定时器0中断 { TH0=(65536-50000)/256; TL0=(65536-50000)%256; tt++; if(tt==20) { tt=0; time_add(h1,m1,s1); //问题:为什么h1,m1,s1变量的值始终没有变化?? } } void time_add(uchar h,uchar m,uchar s) //时间增加程序(以秒为单位) { s++; //秒数+1 if(s==60) //计满60秒分位进1 { s=0; //秒位清0 m++; if(m==60) //计满60分时位进1 { m=0; h++; if(h==24) //计满24小时时位清0 { h=0; } } } } (数码管dispaly()和延时函数略去) 问题叙述:数码管显示一直是0时0分0秒,不秒进,也就是说时分秒全局变量h1,m1,s1的值始终没有变化。 可是如果把时间增加函数time_add()写成无参函数后却可以实现秒进,这是怎么回事?百思不得其解,各位大神求教啊 |
|
相关推荐
9个回答
|
|
把定时器的时间函数行参改成s,m,h试试。
|
|
|
|
不对,说错了。是把时间增加函数的行参去了。把里面的s,m,h都改成s1,m1,h1
|
|
|
|
函数结束后行参自动释放掉的
|
|
|
|
要不你就把time_add(h1,m1,s1)改为无参数的函数,time_add中的相应变量改为h1,m1,s1。
关于函数传值与传地址的问题先看看这个吧 http://oushangkang.blog.163.com/blog/static/19945179200611316911120/ 传值与传地址可以这样理解: 就像我把我写的作文抄了一份给你,你拿去看了之后把有的地方改了,现在我要交作文,而我有一份,所以我直接交了,我交的作文内容并没有变,这就是传值,即值传递。 同理,如果我把我的作文直接给你,你看了后也把有些地方改了,现在我也要交,你只能还给我,我再交,这时我交的就是被你改过的了,这就是传地址,即引用传递。 摘自百度 |
|
|
|
还是不明白为什么不能这么写啊,是参数传递的问题吗?我知道可以改成无参函数,但那样这个函数就只能用一次了,我程序中还有另一组闹钟时分秒变量要用到这个函数,还得再写一个相同函数,程序会很怪 |
|
|
|
如果是闹钟的话,那可以在time_add函数中判断时分秒是否到时间了,然后再进行响铃或者别的函数 |
|
|
|
用指针啊,指针在函数结束之后也不会释放
|
|
|
|
多谢,总算搞懂了,还真是值传递和引用传递的问题,C语言的盲点啊,总算搞清楚了 时间增加函数定义应该改成time_add(&h,&m,&s);加上&即为地址传递,这样才能真正改变调用此函数的变量值 |
|
|
|
形参写进去了就读不出来的 除非用指针!
|
|
|
|
你正在撰写答案
如果你是对答案或其他答案精选点评或询问,请使用“评论”功能。
【敏矽微ME32G070开发板免费体验】使用coremark测试敏矽微ME32G070 跑分
250 浏览 0 评论
【敏矽微ME32G070开发板免费体验】开箱+点灯+点亮OLED
473 浏览 2 评论
571 浏览 0 评论
嵌入式学习-飞凌嵌入式ElfBoard ELF 1板卡-内核编译之初次编译
260 浏览 0 评论
400 浏览 0 评论
【youyeetoo X1 windows 开发板体验】少儿AI智能STEAM积木平台
11974 浏览 31 评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-20 01:36 , Processed in 0.797652 second(s), Total 88, Slave 71 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号