![]() |
發布時間: 2019-6-24 09:22
正文摘要:定義和顯示函數如下 #include <REG52.H> #define uint unsigned int #define uchar unsigned char #define Hidden 16 //DispTab[15]=0xff uchar ... |
個位的零還是要顯示的吧 |
掃描時判斷要現實的值是否為0,是0就跳過這一位 |
更正P0=(miao%100/10>0?su[miao%100/10]:255); |
判斷兩次 1. 判斷兩位數是否大于0,如果不大于0就關閉位選 2. 如果十位數大于0,就顯示十位數和個位數,否則只顯示個位數 如判斷 shij if(shij>0) { if((shij/10)>0) { P0=su[shij/10]; w1=1; delay(1); w1=0; }else{ delay(1); w1=0; } P0=su[shij%10]; w2=1; delay(1); w2=0; }else{ w1 = 0; w2 = 0; delay(1); } 下面的都這樣改,或封裝成函數也行 |
這么改: void xianshi() { P0=su[shij%100/10]; w1=1; ////此行改為:if(P0==0xc0)w1=0;else w1=1; //下面w3=1;w5=1;w7=1;類推 delay(1); w1=0; P0=su[shij%10]; w2=1; delay(1); w2=0; |
如果最高位是“0”,則各段全部熄滅。然后判斷第二位,如果也是“0”....... |
判斷要顯示的數是否小于10,是則把十位顯示關閉,否則顯示 |
將定義的位選由1變為0,比如w1=1改為w1=0;或者刪除該位選也可以 |
顯示的時候判斷一下就可以了,當第一位數據是0的時候關掉第一位數碼的共同端就可以了,其他的數據管正常顯示,比如 P0=su[shij%100/10]; w1=1; delay(1); w1=0; 語句中的W1,如果這個是首位數碼管的顯示是0就W1全部=0,使數碼管不工作,OK |
在第一個非0數字出現前的數字都不顯示,其后的都要顯示,除非有小數點的個位數的0要顯示 |
吧第一個管腳屏蔽了就行 |
把表示0的oxc0直接換成0xff讓他熄滅就好了 |
記得有的芯片有“無效零”顯示腳,,,,,,,,,,我說的是數字集成電路 |
判斷高位是不是0,是0關顯示 |
額,你把位選關了不就行了,不過關了的話,10幾分時怎么辦?嗯。。加個判斷,=0就把位選關了。 |
P0=su[(miao%100/10>0?miao%100/10:255)]; |
說個簡單的邏輯代碼, 假定 number 為待顯示的數 假定 show_enable 函數為顯示數碼管的函數(亮),入口參數分別為 顯示位置 和 顯示值。 假定 show_disable 函數為禁止顯示數碼管的函數(滅),入口參數為 顯示位置。 u8 seek=0; u16 t; do { t=number%10; number=number/10; show(seek,t); seek++; } while(number>0); for(;seek<5;seek++) { show_disable(seek); } 簡單手工模擬下: number=00078 時, 斷點在 while 處看到值 t=8,number=7,seek=1 t=7,number=0,seek=2 number=00100 時, 斷點在 while 處看到值 t=0,number=10,seek=1 t=0,number=1,seek=2 t=1,number=0,seek=3 正負數可以先判斷符號位,然后轉成正數再弄 |
判斷首位為0送#20H顯示空,不為0正常顯示,依次類推 |
把表示0的oxc0直接換成0xff讓他熄滅就好了 |
通過if之類的條件判斷語句。比如當只有后面一位的時候,執行一種顯示模式。如果有高位大于零的時候,再顯示出來。 |