完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
哪位大哥,能帮个忙啊,把两个程序合并,万分感谢
第一个电子时钟::: #include #define uchar unsigned char #define uint unsigned int ***it s1=P2^0; //数码管位选控制端 ***it s2=P2^1; ***it s3=P2^2; ***it s4=P2^3; ***it s5=P2^4; ***it s6=P2^5; ***it s7=P2^6; /*k1设置时间,k2定时。k1,k2使用不自动弹起按键。 k3时分秒选择,k4加数字,k5减数字。*/ ***it k1=P1^0; ***it k2=P1^1; ***it k3=P1^2; ***it k4=P1^3; ***it k5=P1^4; uchar count=0,sec,min,hour,ss=0;s=60,m=60,h=24; uchar code mum[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90}; //共阳数码管0-9编码 void delayms(uint k) //延时函数 { uint i,j; for(i=k;i>0;i--) for(j=110;j>0;j--); } /*通过count获得hour,min,sec变量值 */ void timecontrol() { sec++; if(sec==60) { sec=0; min++; if(min==60) { min=0; hour++; if(hour==24) hour=0; } } } void display(uchar zs,uchar zm, uchar zh) //数码管显示函数 { s1=1; P0=mum[zh/10]; delayms(5); s1=0; s2=1; P0=mum[zh%10]&0x7f; // 时的个位加上小数点 delayms(5); s2=0; s3=1; P0=mum[zm/10]; delayms(5); s3=0; s4=1; P0=mum[zm%10]&0x7f; //分的个位加上小数点 delayms(5); s4=0; s5=1; P0=mum[zs/10]; delayms(5); s5=0; s6=1; P0=mum[zs%10]; delayms(5); s6=0; } void keyscan_settime() //时间设置模块 { uchar st,mt,ht; if(k1==0) { delayms(10); if(k1==0) { st=sec,mt=min,ht=hour; TR0=0; //关闭定时器 while(k1==0) //等待用户按键 { display(st,mt,ht); if(k3==0) { delayms(10); if(k3==0) { while(!k3); ss++; if(ss==3) ss=0; } } /*通过ss选择时分秒设置*/ if(k4==0) //加数 { delayms(10); if(k4==0) { while(!k4); switch(ss) { case 0:st++;if(st==60)st=0;break; case 1:mt++;if(mt==60)mt=0;break; case 2:ht++;if(ht==24)ht=0;break; default :; } } } if(k5==0) //减数 { delayms(10); if(k5==0) { while(!k5); switch(ss) { case 0:if(st>0)st--; else st=0;break; case 1:if(mt>0)mt--; else mt=0;break; case 2:if(ht>0)ht--; else ht=0;break; default : ; } } } } TR0=1; sec=st,min=mt,hour=ht; } } display(sec,min,hour); } void keyscan_time() //用户定时模块 { if(k2==0) { delayms(10); if(k2==0) { s=sec;m=min;h=hour; while(k2==0) //开始定时设置 { display(s,m,h); if(k3==0) { delayms(10); if(k3==0) { while(!k3); ss++; if(ss==3) ss=0; } } /*通过ss选择时分秒设置*/ if(k4==0) //加数 { delayms(10); if(k4==0) { while(!k4); switch(ss) { case 0:s++;if(s==60)s=0;break; case 1:m++;if(m==60)m=0;break; case 2:h++;if(h==24)h=0;break; default :; } } } if(k5==0) //减数 { delayms(10); if(k5==0) { while(!k5); switch(ss) { case 0:if(s>0)s--; else s=0;break; case 1:if(m>0)m--; else m=0;break; case 2:if(h>0)h--; else h=0;break; default : ; } } } } } } } void buz() { if((hour==h)&&(min==m)&&(sec==s)) { s7=0; delayms(20); s7=1; } } void main() { TMOD=0x01; //定时器0工作在方式1 TH0=(65536-45872)/256; //装初值,50ms TL0=(65536-45872)%256; EA=1; //总中断允许 ET0=1; //T0中断允许 TR0=1; //开定时器0 while(1) { keyscan_settime(); keyscan_time(); buz(); } } void T0_ms() interrupt 1 //中断入口程序 { TH0=(65536-45872)/256; //重新装初值 TL0=(65536-45872)%256; count++; if(count==20) //判定1s时间是否已到 { count=0; timecontrol(); } } 第二个:流水灯(P3口的) #include 原电路图再附件,现在电子时钟已经OK了,可是我把两个程序合并并烧入,仿真没有反应啊,(看附件)实物的电路板已经焊接好了。 思路:P1 P2 为电子时钟的,P3为流水灯的。 (强大点: 上电后,电子时钟运行,而每隔5分钟 流水灯依次点亮(P3.0-P3.7 间隔2秒)再全亮2秒)) (简单点: 上电后,电子时钟运行,流水灯依次点亮(P3.0-P3.7 间隔2秒)再全亮2秒,不断循环) 哪位大哥,能帮个忙啊,把两个程序合并,万分感谢! 2333.jpg (56.34 KB, 下载次数: 0) 22 小时前 上传 点击文件名下载附件捕捉_6.jpg (191.98 KB, 下载次数: 0) 22 小时前 上传 点击文件名下载附件捕捉_5.jpg (126.34 KB, 下载次数: 0) 22 小时前 上传 点击文件名下载附件 |
|
相关推荐
2个回答
|
|
按5分钟流一次,每隔2秒一个灯,最后全亮。你的程序不够简洁,不过我也没给你改,多看看做项目人的程序吧。
#include #define uchar unsigned char #define uint unsigned int ***it s1=P2^0; //数码管位选控制端 ***it s2=P2^1; ***it s3=P2^2; ***it s4=P2^3; ***it s5=P2^4; ***it s6=P2^5; ***it s7=P2^6; /*k1设置时间,k2定时。k1,k2使用不自动弹起按键。 k3时分秒选择,k4加数字,k5减数字。*/ ***it k1=P1^0; ***it k2=P1^1; ***it k3=P1^2; ***it k4=P1^3; ***it k5=P1^4; uchar count=0,sec,min,hour,ss=0;s=60,m=60,h=24; uchar code mum[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90}; //共阳数码管0-9编码 void delayms(uint k) //延时函数 { uint i,j; for(i=k;i>0;i--) for(j=110;j>0;j--); } /*通过count获得hour,min,sec变量值 */ void timecontrol() { sec++; if(sec==60) { sec=0; min++; if(min==60) { min=0; hour++; if(hour==24) hour=0; } } } void ledshow() //led显示 { uchar minsub; minsub=min%5; if(minsub==0) { switch(sec) { case 0:P3=0xfe;break; case 2:P3=0xfd;break; case 4:P3=0xfb;break; case 6:P3=0xf7;break; case 8:P3=0xef;break; case 10:P3=0xdf;break; case 12:P3=0xbf;break; case 14:P3=0x7f;break; case 16:P3=0x00;break; } } if(sec>16) {P3=0xff;} } void display(uchar zs,uchar zm, uchar zh) //数码管显示函数 { s1=1; P0=mum[zh/10]; delayms(5); s1=0; s2=1; P0=mum[zh%10]&0x7f; // 时的个位加上小数点 delayms(5); s2=0; s3=1; P0=mum[zm/10]; delayms(5); s3=0; s4=1; P0=mum[zm%10]&0x7f; //分的个位加上小数点 delayms(5); s4=0; s5=1; P0=mum[zs/10]; delayms(5); s5=0; s6=1; P0=mum[zs%10]; delayms(5); s6=0; } void keyscan_settime() //时间设置模块 { uchar st,mt,ht; if(k1==0) { delayms(10); if(k1==0) { st=sec,mt=min,ht=hour; TR0=0; //关闭定时器 while(k1==0) //等待用户按键 { display(st,mt,ht); if(k3==0) { delayms(10); if(k3==0) { while(!k3); ss++; if(ss==3) ss=0; } } /*通过ss选择时分秒设置*/ if(k4==0) //加数 { delayms(10); if(k4==0) { while(!k4); switch(ss) { case 0:st++;if(st==60)st=0;break; case 1:mt++;if(mt==60)mt=0;break; case 2:ht++;if(ht==24)ht=0;break; default :; } } } if(k5==0) //减数 { delayms(10); if(k5==0) { while(!k5); switch(ss) { case 0:if(st>0)st--; else st=0;break; case 1:if(mt>0)mt--; else mt=0;break; case 2:if(ht>0)ht--; else ht=0;break; default : ; } } } } TR0=1; sec=st,min=mt,hour=ht; } } display(sec,min,hour); } void keyscan_time() //用户定时模块 { if(k2==0) { delayms(10); if(k2==0) { s=sec;m=min;h=hour; while(k2==0) //开始定时设置 { display(s,m,h); if(k3==0) { delayms(10); if(k3==0) { while(!k3); ss++; if(ss==3) ss=0; } } /*通过ss选择时分秒设置*/ if(k4==0) //加数 { delayms(10); if(k4==0) { while(!k4); switch(ss) { case 0:s++;if(s==60)s=0;break; case 1:m++;if(m==60)m=0;break; case 2:h++;if(h==24)h=0;break; default :; } } } if(k5==0) //减数 { delayms(10); if(k5==0) { while(!k5); switch(ss) { case 0:if(s>0)s--; else s=0;break; case 1:if(m>0)m--; else m=0;break; case 2:if(h>0)h--; else h=0;break; default : ; } } } } } } } void buz() { if((hour==h)&&(min==m)&&(sec==s)) { s7=0; delayms(20); s7=1; } } void main() { TMOD=0x01; //定时器0工作在方式1 TH0=(65536-45872)/256; //装初值,50ms TL0=(65536-45872)%256; EA=1; //总中断允许 ET0=1; //T0中断允许 TR0=1; //开定时器0 P3=0XFF; while(1) { ledshow(); keyscan_settime(); keyscan_time(); buz(); } } void T0_ms() interrupt 1 //中断入口程序 { TH0=(65536-45872)/256; //重新装初值 TL0=(65536-45872)%256; count++; if(count==20) //判定1s时间是否已到 { count=0; timecontrol(); } } |
|
|
|
路过学习。。。。。。。。。。。。
|
|
|
|
你正在撰写答案
如果你是对答案或其他答案精选点评或询问,请使用“评论”功能。
4561 浏览 3 评论
5849 浏览 1 评论
6121 浏览 0 评论
Protues中自己封装的芯片元件无Program File、Clock Frequency选项怎么解决,求求大神了!
7859 浏览 1 评论
基于51单片机的车辆倒车雷达报警系统,HC-SR04超声波测距,全套资料
1224 浏览 0 评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-24 14:45 , Processed in 0.472652 second(s), Total 47, Slave 39 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号