想要的结果是:如果按starts1 键,显示停止刷新进入调节时间和日期模式。(如果显示的是日期就调节日期,如果显示的是时间就调节时间),调节完后再按starts1键计时开始。
现在的问题是:进入keysanc函数后还是每隔5s变换显示。
帮助:我是初学者程序有好多比较啰嗦,还请帮忙修改指正,并能达到效果,172229507 谢谢谢!
- /*#include<reg52.h>
- #define uint unsigned int
- #define uchar unsigned char
- sbit starts1=P3^4;
- sbit miaos2=P3^5;
- sbit fens3=P3^6;
- sbit shis4=P3^7;
- sbit dula=P2^6;
- sbit wela=P2^7;
- uchar code table[]={
- 0x3f,0x06,0x5b,0x4f,0x66,
- 0x6d,0x7d,0x07,0x7f,0x6f};
- uchar code table1[]={0xdf,0xef,0xf7,0xfb,0xfd,0xfe};
- uchar t,num,num1,nian ,yue ,ri,flag ,s6,s7,s8;
- char shi,fen,miao;
- void delay(uint x) //延时函数
- {
- uint i,j;
- for(i=x;i>0;i--)
- for(j=110;j>0;j--);
- }
- void display_seg(uchar num1,uchar num) //显示函数
- {
- dula=1;
- P0=table[num];
- dula=0;
- P0=0xff; //消隐
- wela=1;
- P0=table1[num1];
- wela=0;
- delay(1);
- }
- void display1(uchar x,uchar y) //分离函数
- {
- uint shi,ge; //定义变量
- shi=y/10;
- ge=y%10;
- if(x==1) //x=1 表示年,
- {
- display_seg(5,shi); //小时的十位
- delay(2);
- display_seg(4,ge); //小时的个位
- delay(2);
- }
- if(x==2) //x=2 表示月
- {
- display_seg(3,shi); //分钟的十位
- delay(2);
- display_seg(2,ge); //分钟的个位
- delay(2);
- }
- if(x==3) //x=3 表示日
- {
- display_seg(1,shi); //秒的十位
- delay(2);
- display_seg(0,ge); //秒的个位
- delay(2);
- }
- }
- void reflash1() //刷新函数
- {
- display1(1,nian);
- display1(2,yue);
- display1(3,ri);
- }
- void display2(uchar x,uchar y) //分离函数
- {
- uint shi,ge; //定义变量
- shi=y/10;
- ge=y%10;
- if(x==1) //x=1 表示小时,
- {
- display_seg(5,shi); //小时的十位
- delay(2);
- display_seg(4,ge); //小时的个位
- delay(2);
- }
- if(x==2) //x=2 表示分钟
- {
- display_seg(3,shi); //分钟的十位
- delay(2);
- display_seg(2,ge); //分钟的个位
- delay(2);
- }
- if(x==3) //x=3 表示秒
- {
- display_seg(1,shi); //秒的十位
- delay(2);
- display_seg(0,ge); //秒的个位
- delay(2);
- }
- }
- void reflash2() //刷新函数
- {
- display2(1,nian);
- display2(2,yue);
- display2(3,ri);
- }
- void init() //初始化 中断
- {
- TMOD=0X01;
- TH0=(65536-50000)/256;
- TL0=(65536-50000)%256;
- EA=1;
- ET0=1;
- TR0=1;
- }
- void keyscan1() //按键加程序
- {
- if(starts1==0) //功能键,如果有按键按下记时停止,开始调节时间
- {
- delay(5);
- if(starts1==0)
- {
- TR0=~TR0; //按键一次停止计数第二次案件开始计数
- }while(!starts1);
- }
- if(miaos2==0) //秒调节
- {
- TR0=0; //关闭定时器
- delay(5);
- if(miaos2==0)
- {
- miao++;
- if(miao==60)
- miao=0;
- } while(!miaos2); //去抖
- }
- if(fens3==0) //调节分钟
- {
- delay(5);
- if(fens3==0)
- {
- fen++;
- if(fen==60)
- fen=0;
- }while(!fens3);
- }
-
- if(shis4==0) //调节时
- {
- delay(5);
- if(shis4==0)
- {
- shi++;
- if(shi==24)
- shi=0;
- }while(!shis4);
- }
- }
- void main()
- {
- uint x,y;
- init();
- while(1)
- {
- for(x=0;x<300;x++)
- {
- reflash1();
- }
- for(y=0;y<300;y++)
- {
- reflash2();
- }
- }
- }
- void time0() interrupt 1 //定时器/ 计数器0工作方式1
- {
- TH0=(65536-9216)/256; //初值的计算=65536-定时时间(s)/机器周期=65536-定时时间*晶振频率/12
- TL0=(65536-9216)%256; //设定的是10ms
- t++;
- if(t==100) //循环100次 10ms*100=1000ms=1s
- {
- t=0;
- miao++;
- if(miao==60)
- {
- miao=0;
- fen++;
- if(fen==60)
- {
- fen=0;
- shi++;
- if(shi==24)
- shi=0;
- }
- }
- }
- }
复制代码
|