完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
扫一扫,分享给好友
本帖最后由 kamfun 于 2011-5-5 13:56 编辑
要求如下: (1. 开机时,显示12:00:00的时间开始计时; (2. P0.0/AD0控制“秒”的调整,每按一次加1秒; (3. P0.1/AD1控制“分”的调整,每按一次加1分; (4. P0.2/AD2控制“时”的调整,每按一次加1个小时; 我的程序没错,但功能不能实现,为什么?? 要求如下: (1. 开机时,显示12:00:00的时间开始计时; (2. P0.0/AD0控制“秒”的调整,每按一次加1秒; (3. P0.1/AD1控制“分”的调整,每按一次加1分; (4. P0.2/AD2控制“时”的调整,每按一次加1个小时; 我的程序没错,但功能不能实现,为什么?? #include #define SEG P0 #define uchar unsigned char #define uint unsigned int ***it AD0=P3^2; //定义按键 ***it AD1=P3^3; //定义按键 ***it AD2=P3^4; //定义按键 void delay(int);//延迟函数 unsigned long times=120000; int ID=0; uchar TAB[10] = {0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f}; // 0~9 uchar LED_W[6] = {2,3,4,5,6,7}; //通过38译码器选中特定的 数码管 char disp[6]={0x06,0x5b,0x3f,0x3f,0x3f,0x3f}; //初始显示120000 unsigned long save_hours,save_minutes,save_seconds,pass_num; void pass( unsigned long); void display( void); void dispose(void); void scan(void); void init(void); void main() { while(1) { dispose(); display(); } } void init(void) { uchar i = 0,j = 0; SEG = disp; // i 值的 个位数 P2 = LED_W[j]; //点亮第一位数码管利用三八译码器依次选择点亮八数码管, delay(2); j++; i++; if(j ==6) //利用 j 值的变化,来控制数码管数值变化间隔的时间 { j = 0; i = 0; } } void dispose(void) { if(AD0==0) { delay(20); while(AD0!=1); delay(20); if(times<235959) save_hours=times+=10000; ID=1; } if(AD1==0) { delay(20); while(AD1!=1); delay(20); if(times<235959) save_minutes=times+=100; ID=2; } if(AD2==0) { delay(20); while(AD0!=1); delay(20); if(times<235959) save_seconds=times++; ID=3; } } void display( ) { switch(ID) { case 0: pass(times); init();break; case 1: pass(save_hours); scan();break; case 2: pass(save_minutes); scan();break; case 3: pass( save_seconds); scan(); break; } } void scan(void) { uchar i = 0,j = 0; SEG = TAB[disp]; // i 值的 个位数 P2 = LED_W[j]; //点亮第一位数码管利用三八译码器依次选择点亮八数码管, delay(2); j++; i++; if(j ==6) //利用 j 值的变化,来控制数码管数值变化间隔的时间 { j = 0; i = 0; } } void pass( unsigned long x) { disp[5]=TAB[x/100000]; //时 disp[4]=TAB[x/10000]; disp[3]=TAB[x/1000]; //分 disp[2]=TAB[(x/100)%10]; disp[1]=TAB[(x/10)%10]; // 秒 disp[0]=TAB[x%10]; } //===延迟函数================================ void delay(int x) // 延迟函数开始 { int i,j; // 声明变量 for(i=0;i } // 延迟函数结束 |
|
相关推荐
4个回答
|
|
(2. P0.0/AD0控制“秒”的调整,每按一次加1秒;
(3. P0.1/AD1控制“分”的调整,每按一次加1分; (4. P0.2/AD2控制“时”的调整,每按一次加1个小时; ***it AD0=P3^2; //定义按键 ***it AD1=P3^3; //定义按键 ***it AD2=P3^4; //定义按键 定义的管脚跟要求不一样.小心不要接错脚了. int 是16位,最多可以计数为2的16次方,为65536, int times=120000;溢出了. |
|
|
|
版主分析的对,应该是数据溢出的问题。
|
|
|
|
回复 lirongqing 的帖子
呵呵~原来这样,那先谢啦。上面是我改之后的,用unsigned long类型,管脚我也定义好了,但是当我初始化时不会显示120000旭,而是显示奇怪的5,按下自会出现5,6,7一个数字的跳变,是我的程序编得不好还是什么的?请高手再指点一下小弟,谢谢~~ |
|
|
|
|
|
|
|
你正在撰写答案
如果你是对答案或其他答案精选点评或询问,请使用“评论”功能。
494 浏览 0 评论
使用Keil建立完整的工程,并使用外部中断0触发数码管显示903
1050 浏览 0 评论
嵌入式学习-飞凌嵌入式ElfBoard ELF 1板卡-使用AHT20进行环境监测之AHT20传感器介绍
1151 浏览 0 评论
887 浏览 0 评论
928 浏览 1 评论
【youyeetoo X1 windows 开发板体验】少儿AI智能STEAM积木平台
11841 浏览 31 评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-2 09:16 , Processed in 0.631901 second(s), Total 77, Slave 61 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号