qian++;沒(méi)有限制最大9。千位數(shù)大于9顯示亂碼。給你換一個(gè)思路寫這個(gè)程序,你試試。
無(wú)標(biāo)題.jpg (123.27 KB, 下載次數(shù): 82)
下載附件
2020-6-12 13:48 上傳
- #include<reg51.h>
- #include<stdio.h>
- //sbit P20=P2^0; //四位數(shù)碼管位選
- //sbit P21=P2^1;
- //sbit P22=P2^2;
- //sbit P23=P2^3;
- sbit s1=P2^4; //開(kāi)始/暫停
- sbit s2=P2^5; //模式/復(fù)位
- //sbit s3=P2^6; //記錄
- //sbit s4=P2^7; //讀取
- sbit BUZZER=P3^6; //蜂鳴器
- unsigned char code led[]={//共陽(yáng)數(shù)碼管段碼"0~f-."
- 0xc0,0xf9,0xa4,0xb0,
- 0x99,0x92,0x82,0xf8,
- 0x80,0x90,0x88,0x83,
- 0xc6,0xa1,0x86,0x8e,0xbf,0x7f};
- unsigned char shu[4];
- unsigned char sec=0;
- char num=0;
- bit flag=0;
- bit pause=0;
- void T0_init() //定時(shí)器T0初始化
- {
- TMOD=0x21;
- TH0=0xDC; //10ms定時(shí)
- TL0=0x00;
- TH1=0x38; //200us定時(shí) 用于無(wú)源蜂鳴器驅(qū)動(dòng)
- TL1=0x38;
- EA=1;
- ET0=1;
- ET1=1;
- TR0=1;
- }
- void keyscan() //按鍵掃描程序
- {
- static bit sign=0; //按鍵自鎖標(biāo)志
- static unsigned char count=0; //消抖計(jì)數(shù)變量
- if(!s1||!s2) //檢測(cè)按鍵如果為0
- {
- if(++count>=10 && sign==0)
- {
- sign=1; //按鍵自鎖標(biāo)志置1
- if(!s1) //開(kāi)始/暫停
- {
- if(pause==0&&flag==0)
- {
- if(num==99 && sec==99)
- {
- sec=0;
- num=0;
- }
- }
- if(pause==0&&flag==1)
- {
- if(num==0 && sec==0)
- {
- sec=59;
- num=100;
- }
- }
- pause=~pause;
- }
- if(!s2)//模式/復(fù)位鍵 99s正計(jì)時(shí)/60s倒計(jì)時(shí)
- {
- pause=0;
- flag=~flag;
- if(flag)
- {
- sec=60;
- num=00;
- }
- else
- {
- sec=0;
- num= 0;
- }
- }
- TR1=1;//開(kāi)蜂鳴器
- }
- }
- else //按鍵抬起
- {
- sign=0; //按鍵自鎖標(biāo)志清0
- count=0; //消抖計(jì)數(shù)清0
- }
- }
- void display( )
- {
- static unsigned char i=0;
- shu[0]=led[sec/10];
- shu[1]=led[sec%10];
- shu[2]=led[num/10%10];
- shu[3]=led[num%10];
- P0 =0xff;
- P2&=0xf0;
- if(i==1) P0=shu[i]&0x7f;//加小數(shù)點(diǎn)
- else P0=shu[i];
- P2|=(0x01<<i);
- i++;
- i%=4;
- }
- void main()
- {
- T0_init();
- while(1)
- {
- keyscan();
- display();
- }
- }
- void T0int() interrupt 1 //定時(shí)器T0中斷 方式1
- {
- TH0=0xDC;
- TL0=0x00;
- if(pause)
- {
- if(!flag)//正計(jì)數(shù)99.99s
- {
- num++;
- if(num==99 && sec==99)
- {
- pause=0;
- TR1=1;
- }
- if(num>99)
- {
- num=0;
- sec++;
- }
- }
- else //倒計(jì)時(shí)60.00s
- {
- num--;
- if(num==0&&sec==0)
- {
- pause=0;
- TR1=1;
- }
- if(num<0)
- {
- num=99;
- sec--;
- }
- }
- }
- }
- void T1int() interrupt 3
- {
- static unsigned int count=0;
- BUZZER=~BUZZER;
- count++;
- if(count>=250)
- {
- count=0;
- BUZZER=1;
- TR1=0;
- }
- }
復(fù)制代碼
|