|
應(yīng)該是關(guān)于消隱的內(nèi)容沒(méi)有弄好,第七位數(shù)碼管的數(shù)字看不到了,各位大佬能幫忙看看到底應(yīng)該怎么改代碼才能得到穩(wěn)定的顯示呢?
數(shù)碼管第七位不顯示
數(shù)碼管第七位不顯示且定時(shí)器進(jìn)位也有問(wèn)題.PNG (58.9 KB, 下載次數(shù): 7)
下載附件
2024-9-10 11:11 上傳
單片機(jī)源程序如下:
- #include<stc15.h>
- #define uChar unsigned char
- #define uInt unsigned int
- uChar a[10]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f}; //共陰0.1.2.3.4.5.6.7.8.9
- uChar b[8]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f}; //不斷進(jìn)1位
- uChar second=46,minute=59,hour=12,year=24,month=9,day=17,count;
- sbit Key1 = P2^0; //計(jì)時(shí)停止
- sbit Key2 = P2^1; //調(diào)位
- sbit Key3 = P2^2; //加一
- sbit Key4 = P2^3; //切換
- sbit Buzzer=P5^4;
- /*********************延遲函數(shù)********************/
- void Delay(uInt t)
- {
- while(t)
- {
- t--;
- }
- }
- /*********************時(shí)分秒顯示函數(shù)*******************/
- void Dispaly1(uChar second,uChar minute,uChar hour)
- {
- /*********************第一位數(shù)碼管*********************/
- P1=b[0];
- P0=a[hour/10];
- Delay(10);
- /*********************第二位數(shù)碼管*********************/
- P1=b[1];
- P0=a[hour%10];
- Delay(10);
- /*********************第三位數(shù)碼管*********************/
- P1=b[2];
- P0=0x40;
- Delay(10);
- /*********************第四位數(shù)碼管*********************/
- P1=b[3];
- P0=a[minute/10];
- Delay(10);
- /*********************第五位數(shù)碼管*********************/
- P1=b[4];
- P0=a[minute%10];
- Delay(10);
- /*********************第六位數(shù)碼管*********************/
- P1=b[5];
- P0=0x40;
- Delay(10);
- /*********************第七位數(shù)碼管*********************/
- P1=b[6];
- P0=a[second/10];
- Delay(10);
- /*********************第八位數(shù)碼管*********************/
- P1=b[7];
- P0=a[second%10];
- Delay(10);
- }
- /*********************年月日顯示函數(shù)********************/
- void Dispaly2(uChar day,uChar month,uChar year)
- {
- P1=b[0];
- P0=a[day/10];
- Delay(10);
- P1=b[1];
- P0=a[day%10];
- Delay(10);
- P1=b[2];
- P0=0x40;
- Delay(10);
- P1=b[3];
- P0=a[month/10];
- Delay(10);
- P1=b[4];
- P0=a[month%10];
- Delay(10);
- P1=b[5];
- P0=0x40;
- Delay(10);
- P1=b[6];
- P0=a[year/10];
- Delay(10);
- P1=b[7];
- P0=a[year%10];
- Delay(10);
- }
- /*********************時(shí)鐘按鍵掃描函數(shù)*********************/
- void Keyscan1()
- {
- static uChar i=0,j=0;
- if(Key1==0)
- {
- Delay(10); //消抖
- if(Key1==0)
- while(!Key1); //等待按鍵彈
- i++;
- }
- /*時(shí)鐘暫停功能*/
- if(i%2==1)
- {
- TR0=0;/*如果是奇數(shù)次按鍵自然關(guān)閉定時(shí)器0*/
- }
- if(i%2==0)
- {
- TR0=1;/*如果是偶數(shù)次按鍵則打開(kāi)定時(shí)器0*/
- }
- /*時(shí)鐘調(diào)位和數(shù)值加一功能*/
- if(Key2==0)
- {
- Delay(10);
- if(Key2==0)
- while(!Key2);
- j++;
- }
- if(j%4==1) //調(diào)秒的時(shí)間
- {
- if(Key3==0)
- {
- Delay(10);
- if(Key3==0)
- while(!Key3);
- second++;
- if(second==60)
- second=0;
- }
- }
- if(j%4==2) //調(diào)分的時(shí)間
- {
- if(Key3==0)
- {
- Delay(10);
- if(Key3==0)
- while(!Key3);
- minute++;
- if(minute==60)
- minute=0;
- }
- }
- if(j%4==3) //調(diào)時(shí)的時(shí)間
- {
- if(Key3==0)
- {
- Delay(10);
- if(Key3==0)
- while(!Key3);
- hour++;
- if(hour==24)
- hour=0;
- }
- }
- }
- /*********************日期按鍵掃描函數(shù)*********************/
- void Keyscan2()
- {
- static uChar m=0,n=0;
- if(Key1==0)
- {
- Delay(10);
- if(Key1==0)
- while(!Key3);
- m++;
- }
- if(m%2==1)
- {
- TR0=0;/*奇數(shù)次按鍵則關(guān)閉定時(shí)器0*/
- }
- if(m%2==0)
- {
- TR0=1;/*偶數(shù)次按鍵則打開(kāi)定時(shí)器0*/
- }
- if(Key2==0)
- {
- Delay(10);
- if(Key2==0)
- while(!Key2);
- n++;
- }
- /*日期調(diào)位和日期加一功能*/
- if(n%4==1)
- {
- if(Key3==0)
- {
- Delay(10);
- if(Key3==0)
- while(!Key3);
- day++;
- if(day==30)
- day=0;
- }
- }
- if(n%4==2)
- {
- if(Key3==0)
- {
- Delay(10);
- if(Key3==0)
- while(!Key3);
- month++;
- if(month==12)
- month=0;
- }
- }
- if(n%4==3)
- {
- if(Key3==0)
- {
- Delay(10);
- if(Key3==0)
- while(!Key3);
- year++;
- if(year==99)
- year=0;
- }
- }
- }
- /************************************************/
- /***************主函數(shù)***************************/
- /************************************************/
- void main()
- {
- TMOD=0x01; /*定時(shí)器以方式一工作*/
- TH0=(65536-10000)/256;
- TL0=(65536-10000)%256;/*10ms計(jì)時(shí)*/
- ET0=1;/*允許定時(shí)器0中斷*/
- EA=1;
- TR0=1;/*打開(kāi)定時(shí)器0*/
- while(1)
- {
- static uChar h=0;
- /*時(shí)鐘和日期切換功能*/
- if(Key4==0)
- {
- Delay(10);
- if(Key4==0)
- while(!Key4);
- h++;
- }
- if(h%2==0)/*如果按鍵偶數(shù)次則顯示時(shí)鐘*/
- {
- Dispaly1(second,minute,hour);
- Keyscan1();
- }
- if(h%2==1)/*如果按鍵奇數(shù)次則顯示日期*/
- {
- Dispaly2(year,month,day);
- Keyscan2();
- }
- }
- }
- /**********************中斷函數(shù)**************************/
- void time0_int(void) interrupt 1
- {
- TH0=(65536-10000)/256;
- TL0=(65536-10000)%256;
- count++;
- if(count==100)
- {
- count=0;
- second++;
- if(second==60)
- {
- second=0;
- minute++;
- if(minute==60)
- {
- minute=0;
- hour++;
- if(hour==24)
- {
- hour=0;
- day++;
- if(day==30)
- {
- day=0;
- month++;
- if(month==12)
- {
- month=0;
- year++;
- if(year==99)
- {
- year=0;
- }
- }
- }
- }
- }
- }
- }
- /*判斷整點(diǎn)提醒*/
- if(second==00&&minute==00)
- Buzzer=0;
- else
- Buzzer=1;
- }
復(fù)制代碼
|
|