想要的結果是:如果按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;
- }
- }
- }
- }
復制代碼
|