因為只學了視頻前面5節課,語句的應用還不夠熟練,很多東西都還不會,硬生升的讓我編出來了,希望高手幫我分析一下,有哪里需要改進。
我現在想寫一個能用按鍵設置倒計時時間,并且可以開始可以復位功能的程序。可以一直實現不了。
/*99分鐘內任意時間定時程序,修改m值即可改變定時時間
。定時結束后蜂鳴器響,時間顯示為0000閃動。*/
- #include<reg52.h>
- sbit wei=P2^7;
- sbit duan=P2^6;
- sbit bb=P2^3;
- #define uchar unsigned char
- #define uint unsigned int
- uchar a,b,c,d,m,s;
- uint x,y,tt,num;
- uchar code table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x00};
- void display(num);
- void display2();
- void delay(uint z);
- void first();
- void main()
- {
- first();
- while(1)
- {
- display(num) ;
- TR0=1;
- if(tt==20)
- {
- tt=0;
- s--;
- if(s==255)
- {
- s=59;
- m--;
- }
- }
- if((m==0)&&(s==0))
- {
- TR0=0;
- display2();
- }
- }
- }
- void first()
- {
- num=100*m+s;
- m=60; //修改m值即可修改定時時間(m取值范圍:0<=m<=99)。
- s=0; //s值也可以修改,但是修改的時候不要大于59,否則顯示的時候會出錯。
- TMOD=0X01;
- TH0=(65536-46080)/256;
- TL0=(65536-46080)%256;
- EA=1;
- ET0=1;
-
- }
- void timer() interrupt 1
- {
- TH0=(65536-46080)/256;
- TL0=(65536-46080)%256;
- tt++;
- }
- void delay(uint z)
- {
- for(x=100;x>0;x--)
- for(y=z;y>0;y--);
- }
- void display(num)
- {
- a=m/10;
- b=m%10;
- c=s/10;
- d=s%10;
- wei=0;
- duan=0;
- P0=table[a];
- duan=1;
- duan=0;
- P0=0xfb;
- wei=1;
- wei=0;
- delay(1);
- P0=table[b];
- duan=1;
- duan=0;
- P0=0xf7;
- wei=1;
- wei=0;
- delay(1);
- P0=table[c];
- duan=1;
- duan=0;
- P0=0xef;
- wei=1;
- wei=0;
- delay(1);
- P0=table[d];
- duan=1;
- duan=0;
- P0=0xdf;
- wei=1;
- wei=0;
- delay(1);
- }
- void display2()
- {
- while(1)
- {
- P0=0xc3;
- wei=1;
- wei=0;
- P0=table[0];
- duan=1;
- bb=0;
- delay(100);
- bb=1;
- delay(100);
- bb=0;
- delay(100);
- bb=1;
- P0=table[10];
- duan=0;
- delay(500);
- }
- }
復制代碼 |