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

📄 lcd.c

📁 24位AD压力实验板 protell99se打开
💻 C
📖 第 1 页 / 共 2 页
字号:
#include <msp430x14x.h>
#include"lcd.h"

// 全局变量F

unsigned char DisplayData[7];  // 分离出数字存入的数组

unsigned char   ZeroFlag = 0;        // 清零标志
unsigned char InterfaceIndex = 1;  // 界面索引
unsigned char P_RangeFlag = 0;     // 压力模块量程的识别
long  SecondZero = 0;
// LED字库
static unsigned char Number[14][2] = {{0x0F, 0x0A}, // 0
	                        {0x00, 0x0A}, // 1
	                        {0x0B, 0x0C}, // 2
	                        {0x09, 0x0E}, // 3
	                        {0x04, 0x0E}, // 4
	                        {0x0D, 0x06}, // 5
	                        {0x0F, 0x06}, // 6
	                        {0x08, 0x0A}, // 7
	                        {0x0F, 0x0E}, // 8
	                        {0x0D, 0x0E}, // 9
	                        {0x00, 0x00}, // null   10
	                        {0x00, 0x04}, // -      11
	                        {0x01, 0x00}, // 下划线 12
	                        {0x01, 0x04}, // 下划线带减号 13
						   };

 static unsigned char Number1_3[14][2] = {{0x05, 0x0F}, // 0
							   {0x00, 0x06}, // 1
							   {0x06, 0x0B}, // 2
							   {0x02, 0x0F}, // 3
							   {0x03, 0x06}, // 4
							   {0x03, 0x0D}, // 5
							   {0x07, 0x0D}, // 6
							   {0x00, 0x07}, // 7
							   {0x07, 0x0F}, // 8
							   {0x03, 0x0F}, // 9
							   {0x00, 0x00}, // null   10
							   {0x02, 0x00}, // -      11
							   {0x00, 0x08}, // 下划线 12
							   {0x02, 0x08}, // 下划线带减号 13
						      };
static unsigned char Number4_6[11][2] = {{0x0F, 0x05}, // 0
							   {0x06, 0x00}, // 1
							   {0x0B, 0x06}, // 2
							   {0x0F, 0x02}, // 3
							   {0x06, 0x03}, // 4
							   {0x0D, 0x03}, // 5
							   {0x0D, 0x07}, // 6
							   {0x07, 0x00}, // 7
							   {0x0F, 0x07}, // 8
							   {0x0F, 0x03}, // 9
							   {0x00, 0x00}, // null 10
							  };
static unsigned char Number13_16[14][2] = {{0x0A, 0x0F},  // 0
								 {0x00, 0x06},  // 1
								 {0x06, 0x0D},  // 2
								 {0x04, 0x0F},  // 3
								 {0x0C, 0x06},  // 4
								 {0x0C, 0x0B},  // 5
								 {0x0E, 0x0B},  // 6
								 {0x00, 0x0E},  // 7
								 {0x0E, 0x0F},  // 8
								 {0x0C, 0x0F},  // 9
								 {0x00, 0x00},  // null 10
								 {0x04, 0x00},  // -    11
								 {0x00, 0x01},  // 下划线 12
								 {0x04, 0x01},  // 下划线带减号 13
								};

/******************************************************************
*函数描述:液晶显示用的延时
*局部变量:
*返回变量:
******************************************************************/
void Delay_lcd(void)
{
     _NOP();                             // Required only for C-spy
     _NOP();                             // Required only for C-spy
     _NOP();                             // Required only for C-spy
}
/******************************************************************
*函数描述:清LCD RAM
*局部变量:
*返回变量:
******************************************************************/
void ClearRAM(unsigned char s)
{
	unsigned char i = 0;
	
	CS1_1(); //CS2_1();
	switch(s)
	{
		case UP:
			CS1_0(); i = 16; // 开片选
			break;
		case DOWN:
			//CS2_0(); i = 22;
			break;
		case ALL:
			CS1_0(); //CS2_0();
			i = 22;
			break;
		default:
			return;
	}
	_NOP();
			
	CLK_0(); 
	DI_1();
	CLK_1();                                     
	
	CLK_0();                                    
	DI_0();
	CLK_1();                                     
	
	CLK_0();                                    
	DI_1();
	CLK_1();
	i = 22;
	for(s = 6; s > 0; s--)
	{
		CLK_0();                                    
	        DI_1();
	        CLK_1();
	}
	
	for(; i > 0; i--)
	{
		for(s = 4; s > 0; s--)
		{
			CLK_0();                                    
	                DI_0();
	                CLK_1();
		}
	}
	CS1_1(); //CS2_1();
}
/******************************************************************
*函数描述:写数据, CLK上升沿有效
          s       选择上两行、下两行、全部
          RAM_Addr RAM地址
          data 数据
*局部变量:
*返回变量:
******************************************************************/
void WriteData(unsigned char s, unsigned char RAM_Addr, unsigned char d)
{
	CS1_1(); //CS2_1();
	
	switch(s)
	{
		case UP:
			CS1_0();  // 开片选
			break;
		case DOWN:
			//CS2_0(); 
			break;
		case ALL:
			CS1_0(); //CS2_0();
			break;
		default:
			return;
	}
	
	// 发送写数据模式101
	
	_NOP();
			
	CLK_0(); 
	DI_1();
	CLK_1();                                     
	
	CLK_0();                                    
	DI_0();
	CLK_1();                                     
	
	CLK_0();                                    
	DI_1();
	CLK_1();
	
	// 发送RAM地址
	RAM_Addr <<= 2;
	for(s = 6; s > 0; s--)
	{
		CLK_0(); 
		if(RAM_Addr & 0x80)
                {DI_1();}
		else
                {DI_0();}
		
		RAM_Addr <<= 1;
		CLK_1(); // 上升沿
		
	}
	
	// 发送数据
	for(s = 4; s > 0; s--)
	{
		CLK_0(); 
		if(d & 0x01)
                {DI_1();}
		else
                {DI_0();}
		d >>= 1;
		CLK_1(); // 上升沿
	}
		
	CS1_1(); //CS2_1();
}
/******************************************************************
*函数描述:写命令,先发送控制字,在发命令
*局部变量:S  选择上两行、下两行、全部
          Command 命令
*返回变量:
******************************************************************/
void WriteCommand(unsigned char s, unsigned char Command)
{
	CS1_1(); //CS2_1();
		switch(s)
	{
		case UP:
			CS1_0();  // 开片选
			break;
		case DOWN:
			//CS2_0(); 
			break;
		case ALL:
			CS1_0(); //CS2_0();
			break;
		default:
			return;
	}
	// 发送模式100
	//CS1_0(); //CS2_0();
	_NOP();
	
	CLK_0();
	DI_1();
	CLK_1();                                     
	
	CLK_0();                                    
	DI_0();
	CLK_1();                                     
	
	CLK_0();                                    
	DI_0();
	CLK_1();	
	// 发送数据
	//Delay();
	for(s = 9; s > 0; s--)
	{
		CLK_0();
		if(Command & 0x80)
		{
			DI_1();
		}
		else
		{
			DI_0();
		}
		//Delay();
		Command <<= 1;
		CLK_1();
		//Delay();
	}
	
	CS1_1(); //CS2_1();
}
/******************************************************************
*函数描述:显示符号
*局部变量: sign正号和负号标志,0为正号,1为负号
*返回变量:
******************************************************************/
void sign_Display(unsigned char sign)
{
	if(sign==0x00)
          {	
          WriteData(UP, 0, Number[0][0]);
          WriteData(UP, 1, Number[0][1]);
          }
	else
            {
            WriteData(UP, 0, Number[11][0]);		
            WriteData(UP, 1, Number[11][1]);	
            }
}
/******************************************************************
*函数描述:显示数字,不带小数点
*局部变量: i : 显示数字位置 num : 显示的数字
           radixPoint : 0不显示小数点 1显示小数点
*返回变量:
******************************************************************/
void DisplayNum(unsigned char i, unsigned char num, unsigned char radixPoint,unsigned char flag_null)
{
	switch(i)
	{
		case 7:
                   if(flag_null==0x00)
                      {
			WriteData(UP, 0, Number[num][0]);
			if(radixPoint)
				WriteData(UP, 1, Number[num][1] | 0x01);
			else
				WriteData(UP, 1, Number[num][1]);
                      }
                   else
                      {
                       WriteData(UP, 0, Number1_3[10][0]);
                       WriteData(UP, 1, Number1_3[10][1]);
                      }
			break;
		case 8:
                    if(flag_null==0x00)
                      {
			WriteData(UP, 2, Number[num][0]);
			if(radixPoint)
				WriteData(UP, 3, Number[num][1] | 0x01);
			else
				WriteData(UP, 3, Number[num][1]);
                      }
                     else
                      {
                       WriteData(UP, 2, Number1_3[10][0]);
                       WriteData(UP, 3, Number1_3[10][1]);
                      }
			break;
		case 9:
                  if(flag_null==0x00)
                      {
			WriteData(UP, 4, Number[num][0]);
			if(radixPoint)
				WriteData(UP, 5, Number[num][1] | 0x01);
			else
				WriteData(UP, 5, Number[num][1]);
                      }
                   else
                      {
                       WriteData(UP, 4, Number1_3[10][0]);
                       WriteData(UP, 5, Number1_3[10][1]);
                      }
			break;
		case 10:
                  if(flag_null==0x00)
                      {
			WriteData(UP, 6, Number[num][0]);
			if(radixPoint)
				WriteData(UP, 7, Number[num][1] | 0x01);
			else
				WriteData(UP, 7, Number[num][1]);
                       }
                   else
                      {
                       WriteData(UP, 6, Number1_3[10][0]);
                       WriteData(UP, 7, Number1_3[10][1]);
                      }
			break;
		case 11:
                   if(flag_null==0x00)
                      {
			WriteData(UP, 8, Number[num][0]);
			if(radixPoint)
				WriteData(UP, 9, Number[num][1] | 0x01);
			else
				WriteData(UP, 9, Number[num][1]);
                        }
                   else
                      {
                       WriteData(UP, 8, Number1_3[10][0]);
                       WriteData(UP, 9, Number1_3[10][1]);
                      }
			break;
		case 12:
                  if(flag_null==0x00)
                      {
			WriteData(UP, 10, Number[num][0]);
			if(radixPoint)
				WriteData(UP, 11, Number[num][1] | 0x01);
			else
				WriteData(UP, 11, Number[num][1]);
                      }
                   else
                      {
                       WriteData(UP, 10, Number1_3[10][0]);
                       WriteData(UP, 11, Number1_3[10][1]);
                      }
			break;
		/*case 1:
                      if(flag_null==0x00)
                      {
                        WriteData(DOWN, 0, Number1_3[num][0]);
			WriteData(DOWN, 1, Number1_3[num][1]);
                      } 
                      else 
                      {
                        WriteData(DOWN, 0, Number1_3[10][0]);
			WriteData(DOWN, 1, Number1_3[10][1]);                      
                      }
			break;
		case 2:
                      if(flag_null==0x00)
                      {
			WriteData(DOWN, 2, Number1_3[num][0]);
			WriteData(DOWN, 3, Number1_3[num][1]);
                        } 
                      else 
                      {
                        WriteData(DOWN, 2, Number1_3[10][0]);
			WriteData(DOWN, 3, Number1_3[10][1]);                      
                      } 
			break;
		case 3:
                       if(flag_null==0x00)
                      {
			WriteData(DOWN, 4, Number1_3[num][0]);
			WriteData(DOWN, 5, Number1_3[num][1]);
                        } 
                      else 
                      {
                        WriteData(DOWN, 4, Number1_3[10][0]);
			WriteData(DOWN, 5, Number1_3[10][1]);                      
                      } 
			break;
		case 4:
                      if(flag_null==0x00)
                      {
			WriteData(DOWN, 20, Number4_6[num][0]);
			WriteData(DOWN, 21, Number4_6[num][1]);
                        } 
                      else 
                      {
                        WriteData(DOWN, 20, Number1_3[10][0]);
			WriteData(DOWN, 21, Number1_3[10][1]);                      
                      } 
			break;
		case 5:
                       if(flag_null==0x00)
                      {
			WriteData(DOWN, 18, Number4_6[num][0]);
			WriteData(DOWN, 19, Number4_6[num][1]);
                        } 
                      else 
                      {
                        WriteData(DOWN, 18, Number1_3[10][0]);
			WriteData(DOWN, 19, Number1_3[10][1]);                      
                      } 
			break;
		case 6:
                      if(flag_null==0x00)
                      {
			WriteData(DOWN, 16, Number4_6[num][0]);
			WriteData(DOWN, 17, Number4_6[num][1]);
                        } 
                      else 
                      {
                        WriteData(DOWN, 16, Number1_3[10][0]);
			WriteData(DOWN, 17, Number1_3[10][1]);                      
                      } 
			break;*/
		default:
			break;
	}
}
void UP_num_Display(unsigned char Point, long Value)
{
unsigned char DisplayData[7] = {0,0,0,0,0,0,0};

	DisplayData[0] = 0;   DisplayData[1] = 0;
	DisplayData[2] = 0;   DisplayData[3] = 0;
	DisplayData[4] = 0;   DisplayData[5] = 0;
	DisplayData[6] = 0;
	
	if(Value >= 0)
	{
		DisplayData[0] = 10;  // 正号
	}
	else
	{
		DisplayData[0] = 11;  // 负号
		Value = -Value;
	}
	
        
	DisplayData[1] = Value / 100000;
	Value %= 100000;
	DisplayData[2] = Value / 10000;
	Value %= 10000;
	DisplayData[3] = Value / 1000;
	Value %= 1000;
	DisplayData[4] = Value / 100;
	Value %= 100;
	DisplayData[5] = Value / 10;
	Value %= 10;
	DisplayData[6] = Value;
        
     switch(Point)
	{
        case 1:
          if(DisplayData[0]==10)    
            {
              DisplayNum(7,DisplayData[1],1,0);        
            }
         else
            {sign_Display(1);}
            DisplayNum(8,DisplayData[2],1,0);
            DisplayNum(9,DisplayData[3],0,0);
            DisplayNum(10,DisplayData[4],0,0);
            DisplayNum(11,DisplayData[5],0,0);
            DisplayNum(12,DisplayData[6],0,0);
         break;
        case 2:
          if(DisplayData[0]==10)    
            {
              DisplayNum(7,DisplayData[1],1,0);        
            }
         else
            {sign_Display(1);}
            DisplayNum(8,DisplayData[2],0,0);
            DisplayNum(9,DisplayData[3],1,0);
            DisplayNum(10,DisplayData[4],0,0);
            DisplayNum(11,DisplayData[5],0,0);
            DisplayNum(12,DisplayData[6],0,0);
         break;
         case 3:
          if(DisplayData[0]==10)    
            {
              DisplayNum(7,DisplayData[1],1,0);        

⌨️ 快捷键说明

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