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

📄 display.c

📁 基于51单片机系统
💻 C
📖 第 1 页 / 共 2 页
字号:
#include <at89x52.h>
#include "define.h"

extern unsigned char g_State[22];

void LEDInitial()      // 数码管显示初始化
{
	unsigned int Data1 = 0x0401;
	unsigned int Data2 = 0x0580;
	unsigned int Data3; 

	unsigned int Temp;
	unsigned char i;
	
	for(i=0; i<12; i++)			// 驱动芯片系统参数初始化 
	{
		LED_DCLK1 = 0;
		LED_DCLK2 = 0;
		LED_DCLK3 = 0;

		if(Data1 & 0x0001)
		{
			LED_DIN1 = 1;
			LED_DIN2 = 1;
			LED_DIN3 = 1;
		}
		else
		{
			LED_DIN1 = 0;
			LED_DIN2 = 0;
			LED_DIN3 = 0;
		}

		LED_DCLK1 = 1;
		LED_DCLK2 = 1;
		LED_DCLK3 = 1;

		Temp = Data1>>1;
		Data1 = Temp;
	}

	LED_A3 = 0;
	LED_A2 = 0;
	LED_A1 = 0;
	LED_A0 = 0;
	LED_E = 0;
	LED_E = 1;

	LED_A3 = 0;
	LED_A2 = 0;
	LED_A1 = 0;
	LED_A0 = 1;
	LED_E = 0;
	LED_E = 1;

	LED_A3 = 0;
	LED_A2 = 0;
	LED_A1 = 1;
	LED_A0 = 0;
	LED_E = 0;
	LED_E = 1;

	LED_A3 = 0;
	LED_A2 = 0;
	LED_A1 = 1;
	LED_A0 = 1;
	LED_E = 0;
	LED_E = 1;

	LED_A3 = 0;
	LED_A2 = 1;
	LED_A1 = 0;
	LED_A0 = 0;
	LED_E = 0;
	LED_E = 1;

	LED_A3 = 0;
	LED_A2 = 1;
	LED_A1 = 0;
	LED_A0 = 1;
	LED_E = 0;
	LED_E = 1;

	LED_A3 = 0;
	LED_A2 = 1;
	LED_A1 = 1;
	LED_A0 = 0;
	LED_E = 0;
	LED_E = 1;

	LED_A3 = 0;
	LED_A2 = 1;
	LED_A1 = 1;
	LED_A0 = 1;
	LED_E = 0;
	LED_E = 1;

	LED_A3 = 1;
	LED_A2 = 0;
	LED_A1 = 0;
	LED_A0 = 0;
	LED_E = 0;
	LED_E = 1;

	LED_A3 = 1;
	LED_A2 = 0;
	LED_A1 = 0;
	LED_A0 = 1;
	LED_E = 0;
	LED_E = 1;

	LED_A3 = 1;
	LED_A2 = 0;
	LED_A1 = 1;
	LED_A0 = 0;
	LED_E = 0;
	LED_E = 1;

   	for(i=0; i<12; i++)			   // 驱动芯片显示参数初始化 
	{
		LED_DCLK1 = 0;
		LED_DCLK2 = 0;
		LED_DCLK3 = 0;

		if(Data2 & 0x0001)
		{
			LED_DIN1 = 1;
			LED_DIN2 = 1;
			LED_DIN3 = 1;
		}
		else
		{
			LED_DIN1 = 0;
			LED_DIN2 = 0;
			LED_DIN3 = 0;
		}

		LED_DCLK1 = 1;
		LED_DCLK2 = 1;
		LED_DCLK3 = 1;

		Temp = Data2>>1;
		Data2 = Temp;
	}

	LED_A3 = 0;
	LED_A2 = 0;
	LED_A1 = 0;
	LED_A0 = 0;
	LED_E = 0;
	LED_E = 1;

	LED_A3 = 0;
	LED_A2 = 0;
	LED_A1 = 0;
	LED_A0 = 1;
	LED_E = 0;
	LED_E = 1;

	LED_A3 = 0;
	LED_A2 = 0;
	LED_A1 = 1;
	LED_A0 = 0;
	LED_E = 0;
	LED_E = 1;

	LED_A3 = 0;
	LED_A2 = 0;
	LED_A1 = 1;
	LED_A0 = 1;
	LED_E = 0;
	LED_E = 1;

	LED_A3 = 0;
	LED_A2 = 1;
	LED_A1 = 0;
	LED_A0 = 0;
	LED_E = 0;
	LED_E = 1;

	LED_A3 = 0;
	LED_A2 = 1;
	LED_A1 = 0;
	LED_A0 = 1;
	LED_E = 0;
	LED_E = 1;

	LED_A3 = 0;
	LED_A2 = 1;
	LED_A1 = 1;
	LED_A0 = 0;
	LED_E = 0;
	LED_E = 1;

	LED_A3 = 0;
	LED_A2 = 1;
	LED_A1 = 1;
	LED_A0 = 1;
	LED_E = 0;
	LED_E = 1;

	LED_A3 = 1;
	LED_A2 = 0;
	LED_A1 = 0;
	LED_A0 = 0;
	LED_E = 0;
	LED_E = 1;

	LED_A3 = 1;
	LED_A2 = 0;
	LED_A1 = 0;
	LED_A0 = 1;
	LED_E = 0;
	LED_E = 1;

	LED_A3 = 1;
	LED_A2 = 0;
	LED_A1 = 1;
	LED_A0 = 0;
	LED_E = 0;
	LED_E = 1;

	Data3 = 0x0b12;        // 手工控制显示数码管初始化 

	for(i=0; i<12; i++)      
	{
		LED_DCLK3 = 0;

		if(Data3 & 0x0001)
		{
			LED_DIN3 = 1;
		}
		else
		{
			LED_DIN3 = 0;
		}

		LED_DCLK3 = 1;

		Temp = Data3>>1;
		Data3 = Temp;
	}

	LED_A3 = 1;
	LED_A2 = 0;
	LED_A1 = 1;
	LED_A0 = 0;
	LED_E = 0;
	LED_E = 1;

	Data3 = 0x0a12;

	for(i=0; i<12; i++)      
	{
		LED_DCLK3 = 0;

		if(Data3 & 0x0001)
		{
			LED_DIN3 = 1;
		}
		else
		{
			LED_DIN3 = 0;
		}

		LED_DCLK3 = 1;

		Temp = Data3>>1;
		Data3 = Temp;
	}

	LED_A3 = 1;
	LED_A2 = 0;
	LED_A1 = 1;
	LED_A0 = 0;
	LED_E = 0;
	LED_E = 1;

	Data3 = 0x0912;

	for(i=0; i<12; i++)      
	{
		LED_DCLK3 = 0;

		if(Data3 & 0x0001)
		{
			LED_DIN3 = 1;
		}
		else
		{
			LED_DIN3 = 0;
		}

		LED_DCLK3 = 1;

		Temp = Data3>>1;
		Data3 = Temp;
	}

	LED_A3 = 1;
	LED_A2 = 0;
	LED_A1 = 1;
	LED_A0 = 0;
	LED_E = 0;
	LED_E = 1;

	Data3 = 0x0812;

	for(i=0; i<12; i++)      
	{
		LED_DCLK3 = 0;

		if(Data3 & 0x0001)
		{
			LED_DIN3 = 1;
		}
		else
		{
			LED_DIN3 = 0;
		}

		LED_DCLK3 = 1;

		Temp = Data3>>1;
		Data3 = Temp;
	}

	LED_A3 = 1;
	LED_A2 = 0;
	LED_A1 = 1;
	LED_A0 = 0;
	LED_E = 0;
	LED_E = 1;
}

void UpdateVoltage_1(unsigned char Channel, unsigned int Result)	// 数码管1-8显示更新 
{
	unsigned int Data3_1 = 0x0f00;
	unsigned int Data2_1 = 0x0e00;
	unsigned int Data1_1 = 0x0d80;
	unsigned int Data0_1 = 0x0c00;

	unsigned int Data3_2 = 0x0b00;
	unsigned int Data2_2 = 0x0a00;
	unsigned int Data1_2 = 0x0980;
	unsigned int Data0_2 = 0x0800;

	unsigned char Hundred;
	unsigned char Decade;
	unsigned char One;
	unsigned char Tenth;

	unsigned int  Temp;
	unsigned char i;

	Hundred = Result/0x0333;    // 计算百位数值
	
	Result %= 0x333;
	Decade = Result/0x52;		// 计算十位数值

	Result %= 0x52;
	One = Result/0x08;			// 计算个位数值

	Result %= 0x08;
	Tenth = Result*1.22;         // 计算小数位数值

	if(Channel%2)
	{
		Data3_1 |= Hundred;		// 准备要发送的数据
		Data2_1 |= Decade;
		Data1_1 |= One;
		Data0_1 |= Tenth;

		switch(Channel)			// 确定要选通的驱动芯片
		{
			case 1:
				LED_A3 = 0;
				LED_A2 = 0;
				LED_A1 = 0;
				LED_A0 = 0;
				break;
			case 3:
				LED_A3 = 0;
				LED_A2 = 0;
				LED_A1 = 0;
				LED_A0 = 1;
				break;
			case 5:
				LED_A3 = 0;
				LED_A2 = 0;
				LED_A1 = 1;
				LED_A0 = 0;
				break;
			case 7:
				LED_A3 = 0;
				LED_A2 = 0;
				LED_A1 = 1;
				LED_A0 = 1;
				break;
		}

		for(i=0; i<12; i++)		  // 更新数码管显示 
		{
			LED_DCLK1 = 0;

			if(Data3_1 & 0x0001)
			{
				LED_DIN1 = 1;
			}
			else
			{
				LED_DIN1 = 0;
			}

			LED_DCLK1 = 1;

			Temp = Data3_1>>1;
			Data3_1 = Temp;
		}
		
		LED_E = 0;
		LED_E = 1;
		
		for(i=0; i<12; i++)
		{
			LED_DCLK1 = 0;

			if(Data2_1 & 0x0001)
			{
				LED_DIN1 = 1;
			}
			else
			{
				LED_DIN1 = 0;
			}

			LED_DCLK1 = 1;

			Temp = Data2_1>>1;
			Data2_1 = Temp;
		}
		
		LED_E = 0;
		LED_E = 1;
		
		for(i=0; i<12; i++)
		{
			LED_DCLK1 = 0;

			if(Data1_1 & 0x0001)
			{
				LED_DIN1 = 1;
			}
			else
			{
				LED_DIN1 = 0;
			}

			LED_DCLK1 = 1;

			Temp = Data1_1>>1;
			Data1_1 = Temp;
		}
		
		LED_E = 0;
		LED_E = 1;
		
		for(i=0; i<12; i++)
		{
			LED_DCLK1 = 0;

			if(Data0_1 & 0x0001)
			{
				LED_DIN1 = 1;
			}
			else
			{
				LED_DIN1 = 0;
			}

			LED_DCLK1 = 1;

			Temp = Data0_1>>1;
			Data0_1 = Temp;
		}
		
		LED_E = 0;
		LED_E = 1;	
	}
	else
	{
		Data3_2 |= Hundred;
		Data2_2 |= Decade;
		Data1_2 |= One;
		Data0_2 |= Tenth;

		switch(Channel)			// 确定要选通的驱动芯片
		{
			case 2:
				LED_A3 = 0;
				LED_A2 = 0;
				LED_A1 = 0;
				LED_A0 = 0;
				break;
			case 4:
				LED_A3 = 0;
				LED_A2 = 0;
				LED_A1 = 0;
				LED_A0 = 1;
				break;
			case 6:
				LED_A3 = 0;
				LED_A2 = 0;
				LED_A1 = 1;
				LED_A0 = 0;
				break;
			case 8:
				LED_A3 = 0;
				LED_A2 = 0;
				LED_A1 = 1;
				LED_A0 = 1;
				break;
		}

		for(i=0; i<12; i++)      // 更新数码管显示 
		{
			LED_DCLK1 = 0;

			if(Data3_2 & 0x0001)
			{
				LED_DIN1 = 1;
			}
			else
			{
				LED_DIN1 = 0;
			}

			LED_DCLK1 = 1;

			Temp = Data3_2>>1;
			Data3_2 = Temp;
		}
		
		LED_E = 0;
		LED_E = 1;
		
		for(i=0; i<12; i++)
		{
			LED_DCLK1 = 0;

			if(Data2_2 & 0x0001)
			{
				LED_DIN1 = 1;
			}
			else
			{
				LED_DIN1 = 0;
			}

			LED_DCLK1 = 1;

			Temp = Data2_2>>1;
			Data2_2 = Temp;
		}
		
		LED_E = 0;
		LED_E = 1;
		
		for(i=0; i<12; i++)
		{
			LED_DCLK1 = 0;

			if(Data1_2 & 0x0001)
			{
				LED_DIN1 = 1;
			}
			else
			{
				LED_DIN1 = 0;
			}

			LED_DCLK1 = 1;

			Temp = Data1_2>>1;
			Data1_2 = Temp;
		}
		
		LED_E = 0;
		LED_E = 1;
		
		for(i=0; i<12; i++)
		{
			LED_DCLK1 = 0;

			if(Data0_2 & 0x0001)
			{
				LED_DIN1 = 1;
			}
			else
			{
				LED_DIN1 = 0;
			}

			LED_DCLK1 = 1;

			Temp = Data0_2>>1;
			Data0_2 = Temp;
		}
		
		LED_E = 0;
		LED_E = 1;	
	}
}

void UpdateVoltage_2(unsigned char Channel, unsigned int Result)	// 数码管9-16显示更新 
{
	unsigned int Data3_1 = 0x0f00;
	unsigned int Data2_1 = 0x0e00;
	unsigned int Data1_1 = 0x0d80;
	unsigned int Data0_1 = 0x0c00;

	unsigned int Data3_2 = 0x0b00;
	unsigned int Data2_2 = 0x0a00;
	unsigned int Data1_2 = 0x0980;
	unsigned int Data0_2 = 0x0800;

	unsigned char Hundred;
	unsigned char Decade;
	unsigned char One;
	unsigned char Tenth;

	unsigned int  Temp;
	unsigned char i;

	Hundred = Result/0x0333;    // 计算百位数值
	
	Result %= 0x333;
	Decade = Result/0x52;		// 计算十位数值

	Result %= 0x52;
	One = Result/0x08;			// 计算个位数值

	Result %= 0x08;
	Tenth = Result*1.22;         // 计算小数位数值

	if(Channel%2)
	{
		Data3_1 |= Hundred;		// 准备要发送的数据
		Data2_1 |= Decade;
		Data1_1 |= One;
		Data0_1 |= Tenth;

		switch(Channel)			// 确定要选通的驱动芯片
		{
			case 9:
				LED_A3 = 0;
				LED_A2 = 0;
				LED_A1 = 0;
				LED_A0 = 0;
				break;
			case 11:
				LED_A3 = 0;
				LED_A2 = 0;
				LED_A1 = 0;
				LED_A0 = 1;
				break;
			case 13:
				LED_A3 = 0;
				LED_A2 = 0;
				LED_A1 = 1;
				LED_A0 = 0;
				break;
			case 15:
				LED_A3 = 0;
				LED_A2 = 0;
				LED_A1 = 1;
				LED_A0 = 1;
				break;
		}

		for(i=0; i<12; i++)		  // 更新数码管显示 
		{
			LED_DCLK2 = 0;

			if(Data3_1 & 0x0001)
			{
				LED_DIN2 = 1;
			}
			else
			{
				LED_DIN2 = 0;
			}

			LED_DCLK2 = 1;

			Temp = Data3_1>>1;
			Data3_1 = Temp;
		}
		
		LED_E = 0;
		LED_E = 1;
		
		for(i=0; i<12; i++)
		{

⌨️ 快捷键说明

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