|
上传资料希望各位喜欢
程序预览:
- #include<reg52.h>
- fanhui();
- duanma[]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90};//共阳数字段码 0-9
- sbit g1=P2^1;sbit g2=P2^3;sbit g3=P2^5;sbit g4=P2^7; //位选
- sbit key1=P1^1;sbit key2=P1^5;sbit key3=P1^7;//按键
- sbit spek=P1^0; //蜂鸣器
- sbit powr=P2^0; //继电器开关
- sbit chumo=P1^3; //触摸选项
- char sum=0,s=59,min=0,h=0,add=0;
- void delay()
- {
- int a,b;
- for(a=10;a>0;a--)
- for(b=50;b>0;b--);
- }
- delay1()
- {
- int a,b;
- for(a=50;a>0;a--)
- for(b=300;b>0;b--);
- }
- /////////////////////////////////////////////////////
- ////////////////////时间处理函数/////////////////////
- /////////////////////////////////////////////////////
- jishi()
- {
- if(s<0)
- {
- s=59;min--;
- }
- if(min<0)
- {
- min=59;
- h--;
- }
- if(h<0)
- {
- h=23;
- }
- }
- /////////////////////////////////////////////////////
- ////////////////////显示函数/////////////////////////
- /////////////////////////////////////////////////////
- xianshi()//
- {
- P0=duanma[h/10];////小时显示
- g1=0;
- delay();
- g1=1;
- P0=duanma[h%10];
- g2=0;
- delay();
- g2=1;
- if(add>25)
- {
- P0=duanma[min/10]+0x80;/////分显示
- g3=0;
- delay();
- g3=1;
- P0=duanma[min%10]+0x80;
- g4=0;
- delay();
- g4=1;
- }
- else
- {
- P0=duanma[min/10];/////分显示
- g3=0;
- delay();
- g3=1;
- P0=duanma[min%10];
- g4=0;
- delay();
- g4=1;
- }
- }
- //////////////////////////////////////////////////////
- ////////////////待机程序/////////////////////////////
- /////////////////////////////////////////////////////
- daiji()
- {
- powr=1;
- g4=g3=g2=g1=1;
- delay1();delay1();delay1();delay1();delay1();
- while(1)
- {
- delay1();delay1();
- if(chumo==1)
- {
- delay();
- if(chumo==1)
- {
- while(chumo==1);
- spek=0;
- delay1();
- spek=1;
- sum=0,s=59,min=0,h=0,add=0;//重新对初始变量赋值
- powr=0;
- break;
- }
- }
- }
- fanhui();//重头开始
- }
- ////////////////////////////////////////////////////////
- //////////////////返回起始点//////////////////////////////
- /////////////////////////////////////////////////////
- fanhui() //开始标号
- {
- while(1) //预备显示
- {
- g1=g2=g3=g4=0; //显示三条横线(---)0xbf
- P0=0xbf;
- delay1();
- delay1();
- delay1();
- delay1();
- g1=g2=g3=g4=1;
- delay1();
- delay1();
- delay1();
- delay1();
- if(key1==0)
- {
- spek=0;
- delay1();
- if(key1==0)
- while(key1==0);
- spek=1;
- break;
- }
- if(chumo==1) ///////检测有无关闭指令
- {
- delay1();delay1();delay1();delay1();
- if(chumo==1)
- {
- while(chumo==1);
- spek=0;
- delay1();
- spek=1;
- daiji();
- }
- }
- }
- }
- /////////////////////////////////////////////////////
- ////////////////////按键函数/////////////////////////
- /////////////////////////////////////////////////////
- anjian()
- {
- if(chumo==1)
- {
- delay1();delay1();
- if(chumo==1)
- {
- while(chumo==1);
- spek=0;
- delay1();
- spek=1;
- daiji();
- }
- }
- if(key1==0)
- {
- delay1();
- if(key1==0)
- {
- spek=0;
- delay1();
- spek=1;
- while(key1==0);
- while(1)
- {
- P0=duanma[h/10];////小时显示
- g1=0;
- delay();
- g1=1;
- P0=duanma[h%10];
- g2=0;
- delay();
- g2=1;
- P0=duanma[min/10]+0x80;/////分显示
- g3=0;
- delay();
- g3=1;
- P0=duanma[min%10]+0x80;
- g4=0;
- delay();
- g4=1;
- while(add>49)
- {
- g1=g2=g3=g4=1;
- }
- if(key2==0) //时调整加、、、、、、、、、
- {
- delay1();
- if(key2==0)
- {
- spek=0;
- delay1();
- spek=1;
- if(h==24)
- {
- h=0;
- }
- else
- h++;
- }
- }
- if(key3==0) //分调整加、、、、、、、、、
- {
- delay1();
- if(key3==0)
- {
- spek=0;
- delay1();
- spek=1;
- if(min==60)
- {
- min=0;
- }
- else
- min++;
- }
- }
- if(key1==0) //调试确定并退出调试状态
- {
- delay();
- if(key1==0)
- {
- spek=0;
- delay1();
- spek=1;
- while(key1==0);
- break; //跳出本while语句,即本函数结束
- }
- }
- }
- }
- }
- }
- /////////////////////////////////////////////////////
- ////////////////////主函数///////////////////////////
- /////////////////////////////////////////////////////
- void main()
- {
- TMOD=0x01;
- TH0=(65535-20000)/255;
- TL0=(65535-20000)%255;
- EA=1;
- ET0=1;
- TR0=1;
- chumo=0;
- while(1)
- {
- if(chumo==1)
- {
- delay1();
- if(chumo==1)
- while(chumo==1);
- spek=0;
- delay1();
- spek=1;
- powr=0;
- break;
- }
- }
- fanhui(); //调用初始返回函数
- while(1) //执行主程序
- {
- xianshi();
- anjian();
- if(h==0)
- {
- if(min==0)
- {
- if(add<25)
- {
- g4=g3=g2=g1=1;
- delay1();
- delay1();
- delay1();
- delay1();
- }
- if(s==0)
- {
- daiji();
- }
- }
- }
- }
- }
- /////////////////////////////////////////////////////
- ////////////////////秒表定时中断服务函数/////////////
- /////////////////////////////////////////////////////
- dingshi()interrupt 1
- {
- TH0=(65535-20000)/255;
- TL0=(65535-20000)%255;
- add++;
- if(add==50)
- {
- add=0;
- s--;
- jishi();
- }
- }
复制代码
|
-
-
触摸台灯.rar
3.16 MB, 下载次数: 339, 下载积分: 黑币 -5
智能灯
评分
-
查看全部评分
|