数码管应用

目录

原理图

程序

main.c

display.c

display.h

现象


原理图

程序

main.c

#include <reg51.h>
#include "delay.h"
#include "display.h"

void dis_Service();

unsigned char wnd;
unsigned char parm1=44;
unsigned char parm2=55;
unsigned char parm3=66;
unsigned char parm4=77;

void main()
{
	unsigned int i;
	for(i=0;i<1000;i++)
	{
	   Display();
    }

    dis_Service();
}


void dis_Service()
{
	unsigned int i;
    while(1)                 
    {
		switch(wnd)
		{
			case 0:
			{
				LEDBuf[0]=0;
				LEDBuf[1]=22;
				LEDBuf[2]=parm1/10;
				LEDBuf[3]=parm1%10;
				for(i=0;i<1000;i++)
				{
				  Display();
				}
				wnd++;
				break;
			}
			case 1:
			{
				LEDBuf[0]=1;
				LEDBuf[1]=22;
				LEDBuf[2]=parm2/10;
				LEDBuf[3]=parm2%10;
				for(i=0;i<1000;i++)
				{
				  Display();
				}
				wnd++;
				break;
			}				
			case 2:
			{
				LEDBuf[0]=2;
				LEDBuf[1]=22;
				LEDBuf[2]=parm3/10;
				LEDBuf[3]=parm3%10;
				for(i=0;i<1000;i++)
				{
				  Display();
				}
				wnd++;
				break;
			}			
			case 3:
			{
				LEDBuf[0]=3;
				LEDBuf[1]=22;
				LEDBuf[2]=parm4/10;
				LEDBuf[3]=parm4%10;
				for(i=0;i<1000;i++)
				{
				  Display();
				}
				wnd=0;
				break;
			}				
			default:break;
		}

    }

}

display.c

#include "display.h"
#include "delay.h"
#include <reg51.h>

unsigned char code table[]={
	0xc0,//0
	0xf9,//1
	0xa4,//2
	0xb0,//3
	0x99,//4
	0x92,//5
	0x82,//6
	0xf8,//7
	0x80,//8
	0x90,//9
	0x88,//A
	0x83,//B
	0xc6,//C
	0xa1,//D
	0x86,//E
	0x8e, //F
	0x8c, //P
	0xc1,//U
	0x91,//Y
	0x7c,//L
	0x00,//全亮
	0xff //熄灭
};

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  //熄灭
	};
	
unsigned char LEDBuf[]={8,8,8,8};//数据缓存区
unsigned char code PLACE_CODE[]={0XFE,0XFD,0XFB,0XF7};//位选信号
void Display()
{//段码 位选 延时 消隐
	static unsigned char i=0;//unsigned char i
	switch(i)
	{
		case 0:
		{
			GPIO_DIG=leddata[LEDBuf[0]];
			GPIO_PLACE=PLACE_CODE[0];
			Delay_ms(1);
			GPIO_DIG=0x00;
			i++;
		    break;
		}
		case 1:
		{
			GPIO_DIG=leddata[LEDBuf[1]];
			GPIO_PLACE=PLACE_CODE[1];
			Delay_ms(1);
			GPIO_DIG=0x00;
			i++;
		    break;
		}			
		case 2:
		{
			GPIO_DIG=leddata[LEDBuf[2]];
			GPIO_PLACE=PLACE_CODE[2];
			Delay_ms(1);
			GPIO_DIG=0x00;
			i++;
		    break;
		}
		case 3:
		{
			GPIO_DIG=leddata[LEDBuf[3]];
			GPIO_PLACE=PLACE_CODE[3];
			Delay_ms(1);
			GPIO_DIG=0x00;
			i=0;
		    break;
		}
		default:break;	
	}
}

display.h

#ifndef _display_h
#define _display_h

#include <reg51.h>
#include "delay.h"

#define GPIO_DIG    P0//段码
#define GPIO_PLACE  P2//位选
#define N           4 //数码管个数

extern unsigned char LEDBuf[];
unsigned char code leddata[];
unsigned char code table[];

extern void Display();

#endif

现象

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值