(按S1 到数码管为4再按S4进入闹钟设置模式,)还有就是为什么我按S4进入闹钟模式时,displayo(smiao,sfen,sshi),显示不出来。还有就是想问一下display(uchar miao,uchar fen, uchar shi)适用于display(smiao,sfen,sshi)吗?还是说我要写两个display(),?
- #include<reg52.h>
- #define uchar unsigned char
- #define uint unsigned int
- sbit s1=P0^0;
- sbit s2=P0^1;
- sbit s3=P0^2;
- sbit s4=P0^3;
- uchar code duanma[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
- uchar xiao[8];
- uchar weima[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};
- uint cnt=0,shi,fen,miao,knum,smiao,sshi,sfen;
- uchar k;
- unsigned long sec=0;
- void anjian();
- void delayms(int x);
- void displayo(uchar miao,uchar fen,uchar shi);
- void display();
-
- void anjian()
- {
-
- static uchar press,press1;
- //tiao shizhong
- if(!s1||!s2||!s3)
- {
- delayms(10);
- if(!s1||!s2||!s3)
- {
- if(!s1)
- {
- press++;
- k++;
- delayms(200);
- if(k==7)
- k=0;
-
- if(press==4)
- {
- press=0;
- }
- while(!s1);
- }
- if(!s2 && press!=0)
- {
- if(press==1)
- {
-
- shi++;
- if(shi>23)
- shi=0;
-
-
-
- }
- if(press==2)
- {
- fen++;
- if(fen>59)fen=0;
- }
- if(press==3)
- {
- miao++;
- if(miao>59)miao=0;
- }
-
- while(!s2) ;
- }
- if(!s3 && press!=0)
- {
- if(press==1)
- {
- shi--;
- if(shi<0)shi=23;
- }
- if(press==2)
- {
- fen--;
- if(fen<0)fen=59;
- }
- if(press==3)
- {
- miao--;
- if(miao<0)miao=59;
- }
-
- while(!s3);
- }
- while(!s1&&!s2&&!s3);
- }
-
-
- }
-
- //tiao naozhong
-
-
- if(!s4||!s2||!s3)
- {
- delayms(10);
- if(!s4||!s2||!s3)
- {
-
- if(!s4)
- {
-
-
-
- delayms(10);
-
- press1++;
- TR0=0;
- displayo(smiao,sfen,sshi);
- display();
-
-
-
- if(press1==4)
- {
- press1=0;
- TR0=1;
- }
- while(!s4);
-
-
-
- }
- if(!s2 && press1!=0)
- {
-
- if(press1==1)
- {
-
- sshi++;
- if(sshi>23)
- sshi=0;
-
-
-
- }
- if(press1==2)
- {
- sfen++;
- if(sfen>59)
- sfen=0;
- }
- if(press1==3)
- {
- smiao++;
- if(smiao>59)
- smiao=0;
- }
-
-
- displayo(smiao,sfen,sshi);
- display();
-
- while(!s2) ;
- }
- if(!s3 && press1!=0)
- {
-
- if(press1==1)
- {
- sshi--;
- if(sshi<0)
- sshi=23;
-
- }
- if(press1==2)
- {
- sfen--;
- if(sfen<0)
- sfen=59;
-
- }
- if(press1==3)
- {
- smiao--;
- if(smiao<0)
- smiao=59;
-
- }
-
- displayo(smiao,sfen,sshi);
- display();
- while(!s3);
- }
-
-
-
-
- while(!s4&&!s2&&!s3);
- }
-
- }
-
- }
-
-
-
-
- void displayo(uchar miao,uchar fen,uchar shi)
-
- {
- xiao[0]=duanma[shi/10];
- xiao[1]=duanma[shi%10];
- xiao[2]=0x40;
- xiao[3]=duanma[fen/10];
- xiao[4]=duanma[fen%10];
- xiao[5]=0x40;
- xiao[6]=duanma[miao/10];
- xiao[7]=duanma[miao%10];
- }
-
- void display()
- {
- uchar i;
- for(i=0;i<8;i++)
- {
- P1=weima[i];
- P2=xiao[i];
- delayms(1);
- P3=duanma[k];
- delayms(5);
-
-
- }
- }
- void delayms(uint x)
- {
- uint i, j;
- for(j=0;j<x;j++)
- for(i=0;i<120;i++);
- }
- void main()
- {
-
- EA=1;
- TMOD=0x01;
- TH0=15536/256;
- TL0=15536%256;
- ET0=1;
- TR0=1;
- while(1)
- {
- display();
- anjian();
-
- }
- }
- void time() interrupt 1
- {
- TH0=15536/256;
- TL0=15536%256;
- cnt++;
- if(cnt==20)
- {
- cnt=0;
- miao++;
- if(miao==60)
- {
- miao=0;
- fen++;
- if(fen==60)
- {
- fen=0;
- shi++;
- if(shi==24)
- {
- shi=0;
- }
- }
- }
-
- }
- displayo(miao,fen,shi);
- }
-
-
复制代码 |