按照教科书上的程序写的,但是测试发现好多错误。不会改,求大神帮忙改一下让程序能用。- #include”reg51.h"
- typedef unsigned int u16;
- typedef unsigned char u8;
- sbit naodeng=P2^0;
- sbit S1=P3^0;
- sbit S2=P3^2;
- sbit S3=P3^3;
- sbit beep=P2^7;
- void shijian( );
- void Timer0Init ( );
- void DigDisplay( );
- void alarm( );
- void tiao_nao ( );
- void moshi ( );
- void delay ( u16 i ) ;
- bit nao ;
- u8 a =0;
- u8 dispiay [] = {0,0,0,0,0,0};
- u8 ssec, sec, min, hour, nao_hour=0, nao_min=0;
- void delay ( u16 i )
- {
- while (i--);
- }
- void Timer0Init ( )
- {
- TMOD =0x01;
- EX0 =1;
- IT0 =1;
- PX0 =1;
- EX1 =1;
- IT1 = 0;
- TH0= 0xd8;
- TL0 = 0xf0;
- ET0 = 1;
- EA=1;
- TR0=1;
- }
- void DigDisplay ( )
- {
- u8 i, j, m, temp;
- u8 led [] = { 0x3f, 0x06, 0x5b, 0x4f, 0x66, 0x6d, 0x7d, 0x07, 0x7f, 0x6f };
- temp=0x01;
- for ( i=0 ; i<6 ; i++)
- {
- P1=0x00;
- j=display [ i ];
- P1=led [j];
- P0=~temp;
- temp<<=1;
- for ( m=0 ; m<100; m++);
- }
- }
- void alarm ( )
- {
- if ( nao_ hour==hour && nao_ min==min && sec>=0 && sec<15 && nao ==1 )
- {
- beep=1;
- delay (5);
- beep=0;
- delay(5);
- }
- }
- void tiao_ nao ( )
- {
- IT0=0;
- EX1=0;
- EX0=0;
- delay ( 10 ) ;
- while ( S1 )
- {
- if (S2 = =0)
- {delay (10);
- if ( S2==0 ) nao_ hour++;
- while ( ! S2 ) ; }
- if ( nao_ hour>=24 ) nao_ hour=0;
- if(S3==0)
- {delay ( 10 );
- if (S3==0) nao_ min++; while ( ! S3 ) ; }
- if(nao_ min>=60) nao_ min=0;
- display [5] =0;
- display [4] =0;
- display [3] =nao_ min%10;
- display [2] =nao_ min/10;
- display [1] =nao_ hour%10;
- display [0] =nao_ hour/10;
- DigDisplay ( ) ;
- }
- IT0=1;
- EX1=1;
- EX0=1;
- nao=1;
- }
- void moshi ( )
- {
- if ( S1==0 )
- {
- delay(100);
- if(S1==0)
- {
- a++;
- if ( a>=2 ) a=0;
- while( ! S1);
- switch (a)
- {
- case (0) ; nao=~nao; break;
- case (1) ; tiao_ nao ( ) ; break;
- }
- }
- }while ( ! S1 );
- }
- void shijian ( )
- {
- display [5] =sec%10;
- display [4] =sec/10;
- display [3] =min%10;
- display [2] =min/10;
- display [1] =hour%10;
- display [0] =hour/10;
- DigDisplay ( ) ;
- }
- void timer0 ( ) interrupt 1
- {
- TH0=0xd8;
- TL0=0xf0;
- ssec++;
- if ( ssec>=100 )
- {
- ssec=0;
- sec++;
- if ( sec>=60 )
- {
- sec=0;
- min++;
- if ( min>=60)
- {
- min=0;
- hour++;
- if ( hour>=24 )
- {
- hour=0;
- }
- }
- }
- }
- }
- void int0 ( ) interrupt 0
- {
- delay (10);
- hour++;
- if (hour>=24) hour=0;
- }
- void int1 ( ) interrupt 2
- {
- min++;
- if ( min==60 ) min=0;
- while ( ! S3 );
- }
- void main ( )
- {
- Timer0Init ( ) ;
- while ( 1 )
- {
- if ( nao==1 ) naodeng=0;
- else naodeng =1;
- shijian ( );
- moshi ( );
- alarm ( );
- }
- }
复制代码 这是一个数字钟的程序,自动计时,由6位LED显示器显示时、分、秒。 具备校准功能,可以设置当前时间。 具备定时启闹功能,可以设置启闹时间并同时开启闹钟功能,启闹15s后自动关闭闹铃。 在闹钟开启状态或闹铃过程中,可以按键关闭闹钟功能
|