剛剛才開始接觸單片機,
今天學到利用switch-case語句實現數碼管的動態顯示以及多參數的分時顯示,
不知道為啥第二個和第四個數碼管一直沒有辦法顯示,
希望各位大佬能幫忙看看
B7048E01-73A4-4806-A06F-09F7A81DF653.png (76.85 KB, 下載次數: 27)
下載附件
2020-10-30 17:54 上傳
第二個數碼管和第四個數碼管一直無法顯示
主調函數:main.c
#include<reg51.h>
#include"delay.h"
#include"display.h"
unsigned char wnd ; //窗口變量
unsigned char parm1 = 44 ; //每一個窗口變量下設一個參數
unsigned char parm2 = 55 ;
unsigned char parm3 = 66 ;
unsigned char parm4 = 77 ;
void dis_service() ;
void main()
{
unsigned int i ;
for(i=0 ; i<5000 ; i++)
{
Display() ;
}
while(1)
{
dis_service();
}
}
//應用層的功能函數
void dis_service()
{
unsigned int i ;
switch(wnd) //窗口變量默認(初始化)為0
{
case 0 :
LEDBUF[0] = 0;
LEDBUF[1] = 22;
LEDBUF[2] = parm1/10;
LEDBUF[3] = parm1%10;
for(i=0 ; i<5000 ; i++)
{
Display() ;
}
wnd++ ;
break ;
case 1 :
LEDBUF[0] = 0;
LEDBUF[1] = 22;
LEDBUF[2] = parm2/10;
LEDBUF[3] = parm2%10;
for(i=0 ; i<5000 ; i++)
{
Display() ;
}
wnd++ ;
break ;
case 2 :
LEDBUF[0] = 0;
LEDBUF[1] = 22;
LEDBUF[2] = parm3/10;
LEDBUF[3] = parm3%10;
for(i=0 ; i<5000 ; i++)
{
Display() ;
}
wnd++ ;
break ;
case 3 :
LEDBUF[0] = 0;
LEDBUF[1] = 22;
LEDBUF[2] = parm4/10;
LEDBUF[3] = parm4%10;
for(i=0 ; i<5000 ; i++)
{
Display() ;
}
wnd = 0 ;
break ;
default : break ;
}
底層數碼管的驅動函數:display.c
#include"display.h"
#include"delay.h"
unsigned char code leddata [] = {
0x3F, //"0"
0x06, //"1"
0x5B, //"2"
0x4F, //"3"
0x66, //"4"
0x6D, //"5"
0x7D, //"6"
0x07, //"7"
0x7F, //"8"
0x6F, //"9"
0x77, //"A"
0x7C, //"B"
0x39, //"C"
0x5E, //"D"
0x79, //"E"
0x71, //"F"
0x76, //"H"
0x38, //"L"
0x37, //"n"
0x3E, //"u"
0x73, //"P"
0x5C, //"o"
0x40, //"-"
0x00, //熄滅
0x00 //自定義
};
unsigned char LEDBUF [] ={8,8,8,8} ;
unsigned char code PLACE_CODE[] = {0xfe,0xfd,0xfb,0xf7};
void Display ()
{
unsigned char i ;
switch(i)
{
case 0 :
GPIO_DIG = leddata[LEDBUF[0]] ;
GPIO_PLACE = PLACE_CODE[0] ;
DelayXms(1);
GPIO_DIG = 0x00 ;
i++ ;
break ;
case 1 :
GPIO_DIG = leddata[LEDBUF[1]] ;
GPIO_PLACE = PLACE_CODE[1] ;
DelayXms(1);
GPIO_DIG = 0x00;
i++ ;
break;
case 2 :
GPIO_DIG = leddata[LEDBUF[2]] ;
GPIO_PLACE = PLACE_CODE[2] ;
DelayXms(1);
GPIO_DIG = 0x00 ;
i++ ;
break ;
case 3 :
GPIO_DIG = leddata[LEDBUF[3]] ;
GPIO_PLACE = PLACE_CODE[3] ;
DelayXms(1);
GPIO_DIG = 0x00 ;
i = 0 ;
default : break ;
}
i++;
if(N == i)
i = 0 ;
}
函數的聲明:delay.h
#ifndef __DISPLAY_H__
#define __DISPLAY_H__
#include<reg51.h>
/*宏定義*/
//IO的聲明
#define GPIO_DIG P0
#define GPIO_PLACE P2 //
#define N 4
unsigned char code leddata [] ;
extern unsigned char LEDBUF [] ;
void Display() ;
#endif
|