|
作业11 秒表或电子钟设计
1.秒表任务要求:
最小显示位10ms,计时范围0~59分59秒990毫秒;
可记录多个成绩;
系统工作符合一般秒表要求 ,具备清零、计时、停止、记录、查看功能。
或者
2.电子钟任务要求:
显示当前时间;
调整时间
设置整点报时
设置闹钟
- #include<stc12c5a60s2.h>
- #define uchar unsigned char
- uchar code distable[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71,0x40};
- uchar disnum[]={0,0,16,0,0,16,0,0};
- unsigned int temp1,temp2,temp3,j=0;
- uchar k=0x01,i=0,a,d,b=0,w=0,s=0,c=0;
- char data *p40,*p60,*p80;
- void int_0( ) interrupt 0
- {
- b++;
- if(b==3)
- {
- b=0;
- }
- if(b==0)
- {
- j=0;
- w=0;
- s=0;
- a=1;
- c=0;
- }
- if(b==1)
- {
- a=0;
- }
- if(b==2)
- {
- a=1;
- c=0;
- }
-
- }
- void int_2( ) interrupt 2
- {
- if(b==1)
- {
- c++;
- d=c;
- if(c==1)
- {
- p40=0x40;
- p60=0x60;
- p80=0x80;
- }
- if(c<17)
- {
- *p40=j;
- *p60=w;
- *p80=s;
- p40++;
- p60++;
- p80++;
- }
- }
- if(b==2)
- {
- c++;
- if(c==1)
- {
- p40=0x40;
- p60=0x60;
- p80=0x80;
- }
- if(c<=d)
- {
- j=*p40;
- w=*p60;
- s=*p80;
- p40++;
- p60++;
- p80++;
- }
- }
-
- }
- void int_1( ) interrupt 1
- {
- TH0=55536/256;
- TL0=55536%256;
- if(a==1)
- {
- j=j;
- }
- else
- {
- j++;
- }
- if(j==100)
- {
- j=0;
- w++;
- if(w==60)
- {
- s++;
- w=0;
- if(s==60)
- {
- s=0;
- }
- }
- }
- disnum[7]=j%10;
- disnum[6]=j/10;
- disnum[4]=w%10;
- disnum[3]=w/10;
- disnum[1]=s%10;
- disnum[0]=s/10;
-
- }
- void int_3( ) interrupt 3
- {
- P0M1=0X00;
- P0M0=0XFF;
- P2M1=0X00;
- P2M0=0XFF;
- TH1=65036/256;
- TL1=65036%256;
- P0=distable[disnum[i]];
- P2=k;
- k=k<<1;
- i++;
- if(i==8)
- {
- i=0;
- k=0x01;
- }
-
- }
- void main()
- {
- TMOD=0x11;
- TH1=55536/256;
- TL1=55536%256;
- ET1=1;
- EA=1;
- TR1=1;
- TH0=65036/256;
- TL0=65036%256;
- ET0=1;
- TR0=1;
- IT1=1;
- EX1=1;
- IT0=1;
- EX0=1;
- k=0x01;
- i=0;
- a=1;
- b=0;
- p40=0x40;
- p60=0x60;
- p80=0x80;
- for(j=0;j<16;j++)
- {
- *p40=0;
- p40++;
- *p60=0;
- p60++;
- *p80=0;
- p80++;
- }
- p60=0x60;
- p80=0x80;
- p40=0x40;
- while(1);
- }
复制代码
|
|