|
各位大神:新年好! 最近做了一個(gè)溫度報(bào)警器,數(shù)碼管為3位的共陰數(shù)碼管。在全顯時(shí)顯示正常的,在動(dòng)態(tài)顯示時(shí)就會(huì)出現(xiàn)筆畫(huà)暗淡不清楚的現(xiàn)象?戳艘幌抡搲,感覺(jué)應(yīng)該是程序中的消隱沒(méi)有處理好,因個(gè)人能力有限,程序基本上都是摘錄論壇各路大神的現(xiàn)有程序修改的。希望各位大神能幫忙看一下程序看看是否程序有問(wèn)題,謝謝!
- /***********四位共陰數(shù)碼管驅(qū)動(dòng)程序************/
- //stc15w單片機(jī)
- //1在主程序前加上初始化init();程序
- //2硬件連接變動(dòng)時(shí)需修改下面的參數(shù)
- sbit H1 = P1^0;//設(shè)置第1位數(shù)碼管陰極連接的I/O口
- sbit H2 = P1^1;//設(shè)置第2位數(shù)碼管陰極連接的I/O口
- sbit H3 = P1^2;//設(shè)置第3位數(shù)碼管陰極連接的I/O口
- //sbit H4 = P1^5;//設(shè)置第4位數(shù)碼管陰極連接的I/O口
- sbit a = P3^5;
- sbit b = P3^4;
- sbit c = P3^3;
- sbit d = P3^2;
- sbit e = P2^1;
- sbit f = P2^0;
- sbit g = P3^7;
- sbit dp = P3^6;
- #define P1M0SET 0x00 //設(shè)置I/O口工作方式//00000000(左到右,高到低位)
- #define P1M1SET 0x00 //設(shè)置I/O口工作方式//00000000
- #define P3M0SET 0xff //設(shè)置I/O口工作方式//11111111
- #define P3M1SET 0x00 //設(shè)置I/O口工作方式//00000000
- #define P2M0SET 0xff //設(shè)置IO口工作方式11111111
- #define P2M1SET 0x00 //設(shè)置IO口工作方式00000000
- /*****以上定義需要根據(jù)實(shí)際硬件情況更改******/
- data unsigned char PWM;//顯示亮度
- #define light 9 //設(shè)置LED顯示的亮度(值域:1~9)
- #define DELAY_L 12 //設(shè)置每一個(gè)點(diǎn)顯示的時(shí)間長(zhǎng)度(1~20)
- /********* 延時(shí)函數(shù) ***************/
- void delay (unsigned int a){ // 用于點(diǎn)掃描的延時(shí)
- unsigned int i;
- while( a-- != 0){
- for(i = 0; i < DELAY_L; i++);
- }
- }
- /*********************************************************************************************/
- unsigned char code disdata[]={
- 0x3F,0x06,0x5B,0x4F,0x66,
- 0x6D,0x7D,0x07,0x7F,0x6F,
- 0x77,0x7C,0x39,0x5E,0x79,
- 0x71,0x40};//0-9,A-F,-
- //數(shù)碼管:正向位置;共YIN極;正向連接
- void dis_off (void)
- {
- P3 = ~P3M0SET; //關(guān)所有顯示
- P2 = ~P2M0SET;
- H1=H2=H3=1;//P1 = ~P1M0SET;
- delay(10-PWM);
- }
- /*********************************************************************************************/
- void displayHH1 (unsigned char q){ //第1位數(shù)碼管顯示程序
- unsigned char i;
- i = q & 0x01;
- if(i == 0x01){
- H1 = 0;a = 1;}delay(PWM);dis_off();
- i = q & 0x02;
- if(i == 0x02){
- H1 = 0;b = 1;}delay(PWM);dis_off();
- i = q & 0x04;
- if(i == 0x04){
- H1 = 0;c = 1;}delay(PWM);dis_off();
- i = q & 0x08;
- if(i == 0x08){
- H1 = 0;d = 1;}delay(PWM);dis_off();
- i = q & 0x10;
- if(i == 0x10){
- H1 = 0;e = 1;}delay(PWM);dis_off();
- i = q & 0x20;
- if(i == 0x20){
- H1 = 0;f = 1;}delay(PWM);dis_off();
- i = q & 0x40;
- if(i == 0x40){
- H1 = 0;g = 1;}delay(PWM);dis_off();
- i = q & 0x80;
- if(i == 0x80){
- H1 = 0;dp = 1;}delay(PWM);dis_off();
- }
- /*********************************************************************************************/
- void displayHH2 (unsigned char q){ //第2位數(shù)碼管顯示程序
- unsigned char i;
- i = q & 0x01;
- if(i == 0x01){
- H2 = 0;a = 1;}delay(PWM);dis_off();
- i = q & 0x02;
- if(i == 0x02){
- H2 = 0;b = 1;}delay(PWM);dis_off();
- i = q & 0x04;
- if(i == 0x04){
- H2 = 0;c = 1;}delay(PWM);dis_off();
- i = q & 0x08;
- if(i == 0x08){
- H2 = 0;d = 1;}delay(PWM);dis_off();
- i = q & 0x10;
- if(i == 0x10){
- H2 = 0;e = 1;}delay(PWM);dis_off();
- i = q & 0x20;
- if(i == 0x20){
- H2 = 0;f = 1;}delay(PWM);dis_off();
- i = q & 0x40;
- if(i == 0x40){
- H2 = 0;g = 1;}delay(PWM);dis_off();
- i = q & 0x80;
- if(i == 0x80){
- H2 = 0;dp = 1;}delay(PWM);dis_off();
- }
- /*********************************************************************************************/
- void displayHH3 (unsigned char q){ //第3位數(shù)碼管顯示程序
- unsigned char i;
- i = q & 0x01;
- if(i == 0x01){
- H3 = 0;a = 1;}delay(PWM);dis_off();
- i = q & 0x02;
- if(i == 0x02){
- H3 = 0;b = 1;}delay(PWM);dis_off();
- i = q & 0x04;
- if(i == 0x04){
- H3 = 0;c = 1;}delay(PWM);dis_off();
- i = q & 0x08;
- if(i == 0x08){
- H3 = 0;d = 1;}delay(PWM);dis_off();
- i = q & 0x10;
- if(i == 0x10){
- H3 = 0;e = 1;}delay(PWM);dis_off();
- i = q & 0x20;
- if(i == 0x20){
- H3 = 0;f = 1;}delay(PWM);dis_off();
- i = q & 0x40;
- if(i == 0x40){
- H3 = 0;g = 1;}delay(PWM);dis_off();
- i = q & 0x80;
- if(i == 0x80){
- H3 = 0;dp = 1;}delay(PWM);dis_off();
- }
- void diplay_data (unsigned char l,unsigned char q){
- switch (l){//顯示的數(shù)碼管位置
- case 1://
- displayHH1(q); //將顯示數(shù)據(jù)送入
- break;//
- case 2://
- displayHH2(q); //將顯示數(shù)據(jù)送入
- break;//
- case 3://
- displayHH3(q); //將顯示數(shù)據(jù)送入
- break;//
- // case 4://
- // displayHH4(q); //將顯示數(shù)據(jù)送入
- // break;//
-
- }
- }
- /*******************************************/
- void init (void){
- P3M1=P3M1SET;
- P3M0=P3M0SET;
- P1M0=P1M0SET;
- P1M1=P1M1SET;
- dis_off();
- PWM = light;}
- /******************顯示程序*************************
- i=t/100;
- diplay_data (1,disdata[i]);
- i=t%100/10;
- diplay_data (2,disdata[i]+0x80);
- i=t%100%10;
- diplay_data (3,disdata[i]); */
復(fù)制代碼
篇幅限制,具體全部顯示代碼見(jiàn)附件。
4LED_YIN.rar
(1.25 KB, 下載次數(shù): 7)
2023-2-7 14:37 上傳
點(diǎn)擊文件名下載附件
|
|