|
你這程序?qū)懙脝?wèn)題不少,難以達(dá)到預(yù)期效果,給你改了,仿真正常。
無(wú)標(biāo)題.jpg (256.16 KB, 下載次數(shù): 59)
下載附件
2021-2-16 22:18 上傳
- #include "reg52.h"
- //sbit a=P2^2;
- //sbit b=P2^3;
- //sbit c=P2^4;
- sbit k1=P3^0;
- sbit k2=P3^1;
- sbit k4=P3^3;
- //sbit k8=P3^7;
- unsigned char num,cishu=0;
- //unsigned int l=0;
- bit flag=0;
- unsigned int ssec=0;
- char sec=0,min=0;
- bit sign=0;
- bit flash;
- unsigned char DisplayData[8];
- unsigned char code dongtai[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,
- 0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};
- void delay(unsigned int i)
- {
- while(i--);
- }
- void Timer0Init()
- {
- TMOD|=0X01;//選擇為定時(shí)器0模式,工作方式1,僅用TR0打開(kāi)啟動(dòng)。
- TH0 = 0xFC; //設(shè)置定時(shí)初值定時(shí)1ms
- TL0 = 0x18; //設(shè)置定時(shí)初值
- ET0=1;//打開(kāi)定時(shí)器0中斷允許
- EA=1;//打開(kāi)總中斷
- TR0=1;//打開(kāi)定時(shí)器
- }
- /*
- void Timer1Init()
- {
- TMOD|=0X10;//選擇為定時(shí)器1模式,工作方式1,僅用TR1打開(kāi)啟動(dòng)。
- TH1=0XFC; //給定時(shí)器賦初值,定時(shí)1ms
- TL1=0X18;
- ET1=1;//打開(kāi)定時(shí)器1中斷允許
- EA=1;//打開(kāi)總中斷
- TR1=1;//打開(kāi)定時(shí)器
- }*/
- void aaa()
- {
- DisplayData[0]=dongtai[cishu];
- DisplayData[1]=0x40;
- DisplayData[2]=0x40;
- DisplayData[3]=0x40;
- if(cishu==0)
- {
- DisplayData[4]=dongtai[min/10];
- DisplayData[5]=dongtai[min%10]+0x80;
- DisplayData[6]=dongtai[sec/10];
- DisplayData[7]=dongtai[sec%10];
- }
- else
- {
- if(cishu==1&&flash==1)
- DisplayData[4]=0;
- else
- DisplayData[4]=dongtai[min/10];
- if(cishu==2&&flash==1)
- DisplayData[5]=0x80;
- else
- DisplayData[5]=dongtai[min%10]+0x80;
- if(cishu==3&&flash==1)
- DisplayData[6]=0;
- else
- DisplayData[6]=dongtai[sec/10];
- if(cishu==4&&flash==1)
- DisplayData[7]=0;
- else
- DisplayData[7]=dongtai[sec%10];
- }
- /*
- if(min==0&&sec==0)
- {
- DisplayData[4]= 0x3f;
- DisplayData[5]= 0x3f+0x80;
- DisplayData[6]= 0x3f;
- DisplayData[7]= 0x3f;
- }*/
- }
- void abc()
- {
- static unsigned char t=0;
- P0=0x00;
- P2&=0xe3;
- P2|=(t<<2);
- P0=DisplayData[t];
- t=++t%8;
- }
- void main()
- {
- // P0=0x00;
- Timer0Init();
- while(1)
- {
- if(!k1||!k2||!k4)
- {
- delay(1000);
- if((!k1||!k2||!k4) && sign==0)
- {
- sign=1;
- if(!k1 && flag==0)
- cishu=++cishu%5;
- if(!k2 && cishu>0)
- {
- switch(cishu)
- {
- case 1: min+=10;if(min/10>5)min%=10; break;
- case 2: min++;if(min%10==0)min-=10; break;
- case 3: sec+=10;if(sec/10>5)sec%=10; break;
- case 4: sec++;if(sec%10==0)sec-=10; break;
- }
- }
- if(!k4 && cishu==0)
- flag=1;
- }
- }
- else sign=0;
- aaa();
- }
- }
- void Timer0() interrupt 1
- {
- TH0 = 0xFC; //設(shè)置定時(shí)初值
- TL0 = 0x18; //設(shè)置定時(shí)初值
- if(flag)
- {
- if(min|sec!=0)
- {
- ssec++;
- if(ssec>=1000) //1s
- {
- ssec=0;
- sec--;
- if(min==0&&sec==0)
- flag=0;
- else if(sec<0)
- {
- min--;
- sec=59;
- }
- }
- }
- else flag=0;
- }
- if(++num==200)
- {
- num=0;
- flash=~flash;
- }
- abc();
- }
- /*
- void Timer1() interrupt 3
- {
- static unsigned int j=0;
- TH1=0XFC; //給定時(shí)器賦初值,定時(shí)1ms
- TL1=0X18;
- j++;
- if(j>=500)
- {
- j=0;
- P0=0x00;
- delay(20000);
- }
- }*/
復(fù)制代碼
|
|