⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 led.cpp

📁 应用VC++6.0开发的
💻 CPP
字号:
// Led.cpp: implementation of the CLed class.
//
//////////////////////////////////////////////////////////////////////

#include "stdafx.h"
#include "Led.h"
#include "conio.h"
#include "memory.h"
#include "math.h"
//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////

CLedDisplay::CLedDisplay()
{

}

CLedDisplay::~CLedDisplay()
{

}

//显示单个数字
//Dig---位
//Num---数字
//IsDot---是否有小数点
int CLedDisplay::DisplaySingleNum(int Dig,int Num,bool IsDot)
{

	//数位
	unsigned char Digital[][8]={
					{0,0,0,0,0,0,0,1},
					{0,0,0,0,0,0,1,0},
					{0,0,0,0,0,0,1,1},
					{0,0,0,0,0,1,0,0},
					{0,0,0,0,0,1,0,1},
					{0,0,0,0,0,1,1,0},
					{0,0,0,0,0,1,1,1},
					{0,0,0,0,1,0,0,0}};



	//显示数字
	unsigned char Number[][8]={
					{0,0,0,0,0,0,0,0},
					{0,0,0,0,0,0,0,1},
					{0,0,0,0,0,0,1,0},
					{0,0,0,0,0,0,1,1},
					{0,0,0,0,0,1,0,0},
					{0,0,0,0,0,1,0,1},
					{0,0,0,0,0,1,1,0},
					{0,0,0,0,0,1,1,1},
					{0,0,0,0,1,0,0,0},
					{0,0,0,0,1,0,0,1},
					{0,0,0,0,1,0,1,0},
					{0,0,0,0,1,0,1,1},
					{0,0,0,0,1,1,0,0},
					{0,0,0,0,1,1,0,1},
					{0,0,0,0,1,1,1,0},
					{0,0,0,0,1,1,1,1}};

	unsigned char reg[16];

	for(int i=0;i<8;i++)
		reg[i]=Digital[Dig][i];

	for(i=0;i<8;i++)
		reg[i+8]=Number[Num][i];

	if(IsDot)
		reg[8]=1;
	
	SendData(reg);
	
	return 0;

}

void CLedDisplay::Config()
{

}

//2005.8.10/11:00基本完成,功能已实现,需要扩展
//数据位0:CLK,			高电平clk^=0x01,低电平:clk&=0xFE
//数据位1:LOAD			高电平cs^=0x02,低电平:cs&=0xFD
//数据位2:DI,data		高电平data^=0x04,低电平:data&=0xFB	
void CLedDisplay::SendData(unsigned char Register[16])
{
	unsigned char clk=0;
	unsigned char data=0;
//	unsigned char load=0;用于7219
	unsigned char cs=0;
	unsigned char Data_Read=0;

	_outp(0x378,cs);			//首先清零

//	Data_Read=_inp(0x378);
	cs=Data_Read&0xFD;			
	_outp(0x378,cs);			//产生片选低电平


	for(int i=0;i<16;i++)
	{
		Data_Read=_inp(0x378);
		clk=Data_Read&0xFE;		
		_outp(0X378,clk);		//产生时钟低电平

		

		Data_Read=_inp(0x378);
		if(Register[i]==1)
			data=Data_Read|0x04;
		else
			data=Data_Read&0xFB;
		_outp(0x378,data);		//送入数据	
	

		Data_Read=_inp(0x378);
		clk=Data_Read|0x01;		
		_outp(0X378,clk);		//产生时钟高电平,在上升沿加入	
	
	}

	Data_Read=_inp(0x378);
	cs=Data_Read|0x02;			
	_outp(0x378,cs);			//产生片选高电平,在上升沿锁存

}

void CLedDisplay::Init()
{
	unsigned char TEST_MODE0[]={1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0};
	unsigned char TEST_MODE1[]={1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1};
	
	SendData(TEST_MODE1);


	unsigned char Scan_Limit[]={0,0,0,0,1,0,1,1,0,0,0,0,0,1,1,1};
	SendData(Scan_Limit);		//扫描限制,8位全选		

	unsigned char Decode_Mode[]={0,0,0,0,1,0,0,1,1,1,1,1,1,1,1,1};
	SendData(Decode_Mode);		//解码模式,选用8位,B-decode 

	unsigned char Intensity[]={0,0,0,0,1,0,1,0,1,1,1,1,1,1,1,1};
	SendData(Intensity);		//最亮模式
	
	unsigned char ShutDown0[]={0,0,0,0,1,1,0,0,1,1,1,1,1,1,1,0};
	SendData(ShutDown0);
	
	unsigned char ShutDown1[]={0,0,0,0,1,1,0,0,1,1,1,1,1,1,1,1};
	SendData(ShutDown1);/**/
	SendData(TEST_MODE0);		//全部点亮1秒后,熄灭作为测试用

}


//显示数字:暂定显示5位整数和三位小数
void CLedDisplay::DisplayNum(double Num)
{
	//整数部分只能做到保留后五位

	double a,b;			//整数部分和小数部分
	a=modf(Num,&b);

	int temp=(int )b%100000;
	b=temp;
	//以下显示五位整数
	int chushu=0;
	int yushu=0;
	for(int i=0;i<4;i++)
	{
		chushu=pow(10,4-i);
		yushu=(int)b/chushu;
		DisplaySingleNum(7-i,yushu,0);
		b-=yushu*chushu;
	}
	DisplaySingleNum(3,(int)b,1);



	//以下显示三位小数
	int ji=a*1000;	//
	for(i=0;i<3;i++)
	{
		chushu=pow(10,2-i);
		yushu=ji/chushu;
		DisplaySingleNum(2-i,yushu,0);
		ji-=yushu*chushu;
	}
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -