刚刚才开始接触单片机,
今天学到利用switch-case语句实现数码管的动态显示以及多参数的分时显示,
不知道为啥第二个和第四个数码管一直没有办法显示,
希望各位大佬能帮忙看看
第二个数码管和第四个数码管一直无法显示
主调函数: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
|