大家好,請教一下,我在使用188數碼管時,遇到了一個消影問題,數碼管動態(tài)掃描,在刷新函數中,已經加入了消影語句,即各個引腳設置為高阻輸入,但是不應該亮的數碼管還是會有弱光,所以顯示并不清晰,當然消影函數還是有一定的作用,不加消影函數,幾乎無法分辨數字,請大家?guī)蛶兔Γ纯词悄睦镉袉栴}
硬件上:使用的是STC8G1K08系列,直接IO口驅動數碼管
程序是從 188數碼管顯示 這里幾乎不動的寫過來的,刷新函數在定時器中斷函數中每 4ms 刷新一次
- #include "188.h"
- #include "delay.h"
- #include "intrins.h"
- #include "stc8g.h"
- sbit PSEG_1 = P3^6;
- sbit PSEG_2 = P3^5;
- sbit PSEG_3 = P3^4;
- sbit PSEG_4 = P3^3;
- sbit PSEG_5 = P3^2;
- #define PIN1_IN() P3M1 |= 0x40;P3M0 &= 0xbf; //把單片機IO口配置為高阻輸入
- #define PIN2_IN() P3M1 |= 0x20;P3M0 &= 0xdf;
- #define PIN3_IN() P3M1 |= 0x10;P3M0 &= 0xef;
- #define PIN4_IN() P3M1 |= 0x08;P3M0 &= 0xf7;
- #define PIN5_IN() P3M1 |= 0x04;P3M0 &= 0xfb;
- #define PIN1_L() P3M0 |= 0x40;P3M1 &= 0xbf;PSEG_1 = 0; //配置為推挽輸出,且拉低
- #define PIN2_L() P3M0 |= 0x20;P3M1 &= 0xdf;PSEG_2 = 0;
- #define PIN3_L() P3M0 |= 0x10;P3M1 &= 0xef;PSEG_3 = 0;
- #define PIN4_L() P3M0 |= 0x08;P3M1 &= 0xf7;PSEG_4 = 0;
- #define PIN5_L() P3M0 |= 0x04;P3M1 &= 0xfb;PSEG_5 = 0;
- #define PIN1_H() P3M0 |= 0x40;P3M1 &= 0xbf;PSEG_1 = 1; //配置為推挽輸出,且拉高
- #define PIN2_H() P3M0 |= 0x20;P3M1 &= 0xdf;PSEG_2 = 1;
- #define PIN3_H() P3M0 |= 0x10;P3M1 &= 0xef;PSEG_3 = 1;
- #define PIN4_H() P3M0 |= 0x08;P3M1 &= 0xf7;PSEG_4 = 1;
- #define PIN5_H() P3M0 |= 0x04;P3M1 &= 0xfb;PSEG_5 = 1;
- /************************************************************************************/
- void LED_GPIO_Init(void)//初始化IO口
- {
- P3PU &= 0x83; //關閉上拉電阻
- P3M1 &= 0x83; //設置P3.2~P3.6為推挽輸出
- P3M0 |= 0x7c;
- }
- /********************************熄滅所有數碼管***********************************/
- void Set_AllPin_INPUT(void)
- {
- PIN1_IN();//把單片機IO口配置為輸入模式
- PIN2_IN();
- PIN3_IN();
- PIN4_IN();
- PIN5_IN();
- }
- unsigned char bai=0,shi=0,ge=0;//百位,十位,個位,
- unsigned short display_sram=0;
- unsigned short code Segment[3][11]={
- {0x0000,0x0006,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000},//百位
- {0x0770,0x0420,0x0741,0x0661,0x0431,0x0271,0x0371,0x0460,0x0771,0x0671,0x0000},//十位
- {0xE888,0x8080,0xD808,0xD880,0xB080,0x7880,0x7888,0x8880,0xF888,0xF880,0x0000} //個位
- };
-
- void Display_Scan1(void)
- {
- PIN1_L(); //拉低Pin1
- if(display_sram&0x8000) //取出最高位
- PIN2_H();
- if(display_sram&0x4000)
- PIN3_H();
- if(display_sram&0x2000)
- PIN4_H();
- if(display_sram&0x1000)
- PIN5_H();
- }
- void Display_Scan2(void)
- {
- PIN2_L(); //拉低Pin2
-
- if(display_sram&0x0800)
- PIN1_H();
- if(display_sram&0x0400)
- PIN3_H();
- if(display_sram&0x0200)
- PIN4_H();
- if(display_sram&0x0100)
- PIN5_H();
- }
- void Display_Scan3(void)
- {
- PIN3_L(); //拉低Pin3
-
- if(display_sram&0x0080)
- PIN1_H();
- if(display_sram&0x0040)
- PIN2_H();;
- if(display_sram&0x0020)
- PIN4_H();
- if(display_sram&0x0010)
- PIN5_H();
- }
- void Display_Scan4(void)
- {
- PIN4_L(); //拉低Pin4
-
- if(display_sram&0x0008)
- PIN1_H();
- if(display_sram&0x0004)
- PIN2_H();
- if(display_sram&0x0002)
- PIN3_H();
- if(display_sram&0x0001)
- PIN5_H();
- }
-
- /****************************顯示函數***********************************/
-
- //放在定時器中斷函數,5ms運行一次,掃描一輪需要4*5ms=20ms,
- //也就是50Hz的刷新頻率,如果感覺閃爍,可以4ms運行。
- void Display_tube(void)
- {
- static unsigned char case_cnt;//逐行掃描
- Set_AllPin_INPUT();//消影作用
- display_sram=0;
- display_sram=Segment[0][bai] | Segment[1][shi] | Segment[2][ge];//顯示百位,十位,個位
- switch(case_cnt)
- {
- case 0x00:Display_Scan1();case_cnt++;break;
- case 0x01:Display_Scan2();case_cnt++;break;
- case 0x02:Display_Scan3();case_cnt++;break;
- case 0x03:Display_Scan4();case_cnt=0;break;
- default:case_cnt=0;break;
- }
- }
- void Dispaly_Dig(unsigned int dig)//拆分
- {
- bai = dig/100;
- shi = (dig/10)%10;
- ge = dig%10;
- Display_tube();
- }
復制代碼
這是定時器中斷函數,4ms一次刷新
- void TM1_Isr() interrupt 3 //定時器1
- {
- static unsigned char case_cnt;//定時中斷次數
- case_cnt++;
- if(case_cnt==4)
- {
- case_cnt=0;
- Dispaly_Dig(12);//顯示數字12
- }
- }
復制代碼
這是原理圖,直接連到了單片機引腳上
Snipaste_2022-02-12_14-56-21.png (18.4 KB, 下載次數: 92)
下載附件
2022-2-12 15:05 上傳
這是效果圖,圖一加有消影函數,圖二未添加,消影函數如圖三所示
IMG_20220212_143348.jpg (1.55 MB, 下載次數: 105)
下載附件
2022-2-12 15:06 上傳
IMG_20220212_143505.jpg (1.71 MB, 下載次數: 96)
下載附件
2022-2-12 15:06 上傳
Snipaste_2022-02-12_15-08-06.png (262.37 KB, 下載次數: 105)
下載附件
2022-2-12 15:08 上傳
拜托大家了
|