📄 lcd.c
字号:
#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 + -