|
不要輕易使用外部中斷做按鍵輸入這種簡(jiǎn)單任務(wù),既不易消抖,也占用有限資源。數(shù)碼管亮度不一排除硬件因素后多為消隱不良和動(dòng)態(tài)掃描周期不均衡。給你改了,你試試。
- #include <REGX52.H>//頭文件
- //#include "Delay.h"
- //unsigned char sec_s=0,min_s=0;//秒、分設(shè)置變量
- //void Cnt10ms=0; //中斷計(jì)時(shí)變量
- unsigned char code duan[]={
- 0xC0, //"0"
- 0xF9, //"1"
- 0xA4, //"2"
- 0xB0, //"3"
- 0x99, //"4"
- 0x92, //"5"
- 0x82, //"6"
- 0xF8, //"7"
- 0x80, //"8"
- 0x90, }; //段選
- unsigned char code wei[]={0x01,0x02,0x04,0x08};
- unsigned char cache[4];
- unsigned int number=1000;//初始值
- //unsigned char qian,bai,shi,ge;
- unsigned char count=0;
- bit sign=0;
- unsigned char num=0;
- void Delay(unsigned int t)
- {
- unsigned int i,j;
- for(i=t;i>0;i--)
- for(j=120;j>0;j--);
- }
- /*
- void INT0_inti()//外部中斷初始化
- {
- EA=1;
- IT0=1;
- EX0=1;
- }
- void INT2_inti()//外部中斷初始化
- {
- EA=1;
- IT1=1;
- EX1=1;
- }*/
- void jisuan()//計(jì)算子程序
- {//分解數(shù)據(jù),保存入緩存
- cache[0]=duan[number/1000%10];
- cache[1]=duan[number/100%10];
- cache[2]=duan[number/10%10];
- cache[3]=duan[number%10];
-
- P2=0x00;//消隱
- P0=cache[num];//送段碼
- P2=wei[num];//送位碼
- Delay(1);//延時(shí)
- num=++num%4;//循環(huán)計(jì)數(shù)
- }
- void main()
- {
- // INT0_inti();//中斷初始化
- // INT2_inti();//中斷初始化
- P3_4=0;//鍵盤是矩陣的,所以給了3-4低電位,用的是P3-2,P3-3
- while(1)
- {
- if(!P3_2||!P3_3)
- {
- if(++count>=10 && sign==0)//消抖
- {
- sign=1;
- if(!P3_2)
- {
- if(number<9999)number++;
- }
- if(!P3_3)
- {
- if(number>0)number--;
- }
- }
- }
- else
- {
- count=0;
- sign=0;
- }
- jisuan();//數(shù)碼管
- }
- }
- /*
- void IWT0_ISR() interrupt 0//進(jìn)入中斷
- {
- number=number+1;
- if(number==10000)
- number=0;
- if(number==-1)
- number=9999;
- }
- void IWT2_ISR() interrupt 2//進(jìn)入中斷
- {
- number=number-1;
- if(number==10000)
- number=0;
- if(number==-1)
- number=9999;
- }*/
復(fù)制代碼 |
|