📄 lcd.c
字号:
#include "c8051F020.h"
#include "ABSACC.H"
/*******************************开始 数据类型定义*********************************************************************/
#define IDATA idata //间接寻址
#define DATA data //直接寻址#define BDATA bata
#define XDATA xdata
#define RDATA code
#define UINT8 unsigned char
#define UINT16 unsigned int
/*******************************结束 数据类型定义*********************************************************************/
typedef UINT8 ghj ;
/*******************************开始 硬件接口说明**********************************************************************/
//液晶数据口 P0 (配置为开漏) 控制口 P1.0~P1.2 (被配置为推挽)
#define Lcd_Port P0
sbit Busy_bit = P0^7;
sbit RS =P2^0;
sbit RW =P2^1;
sbit E = P0^7 ;
bit Revers_Bit=0;
UINT8 DATA Revers_Address=0x04 ;
//LCD屏基本信息
#define Lcd_Line 2 // LCD屏最大行数
#define Lcd_Row 8 // LCD屏最大列数
#define Lcd_1 0X80 // LCD屏第一行
#define Lcd_2 0X90 // LCD屏第二行
//#define Lcd_3 0X88 // LCD屏第三行
//#define Lcd_4 0X98 // LCD屏第四行
#define Lcd_REVERS_1 0X04 // LCD屏第一行反白
#define Lcd_REVERS_2 0X05 // LCD屏第二行反白
//#define Lcd_REVERS_3 0X06 // LCD屏第三行反白
//#define Lcd_REVERS_4 0X07 // LCD屏第四行反白
//绘图单元图像显内存地址
#define Draw_Memroy0 DBYTE[0X50] // 绘图单元图像显内存
#define Draw_Memroy1 DBYTE[0X51] //
#define Draw_Memroy2 DBYTE[0X52] //
#define Draw_Memroy3 DBYTE[0X53] //
#define Draw_Memroy4 DBYTE[0X54] //
#define Draw_Memroy5 DBYTE[0X55] //
#define Draw_Memroy6 DBYTE[0X56] //
#define Draw_Memroy7 DBYTE[0X57] //
/*******************************开始 键盘 接口说明**********************************************************************/
//键盘数据口 P2 (配置为开漏)
sbit Button_H=P1^0; //手动键
sbit Button_A=P1^1; //自动键
sbit Button_S=P1^2; //停止键
sbit Button_P=P1^3; //编辑键
sbit Button_U=P1^4; //上键
sbit Button_D=P1^5; //下键
sbit Button_R=P1^6; //复位键
//键盘按键标志位
bit Push_H=0x21^0; //手动键
bit Push_A=0x21^1; //自动键
bit Push_S=0x21^2; //停止键
bit Push_P=0x21^3; //编辑键
bit Push_U=0x21^4; //上键
bit Push_D=0x21^5; //下键
bit Push_R=0x21^6; //复位键
/*******************************结束 键盘接口说明**********************************************************************/
/*******************************开始 LCD 接口说明**********************************************************************/
/*******************************开始 显示变量说明**********************************************************************/
/*******************************开始 菜单定义*********************************************************************/
//菜单相关变量定义(菜单维数)
#define Menu_Word_Num 16 //每项菜单字符字数
#define Menu_Line_Num 12 //二级菜单最大数量+1
#define Menu_Row_Num 9 //一级菜单数量+1
UINT8 DATA Menu_X_Num=1,Menu_Y_Num=1; //数组行列数变化
//*******************************开始 函数定义*********************************************************************/
UINT8 DATA Conver_Fdata1,Conver_Fdata2,Conver_Fdata3;
UINT8 DATA Power=0;
UINT8 DATA Current;
//*******************************开始 三级与四级函数定义*********************************************************************/
//*******************************开始 菜单数组定义*********************************************************************/
//一级菜单定义
UINT8 RDATA Menu_Data[Menu_Line_Num+1][Menu_Row_Num+1][Menu_Word_Num] =
{ {{" "},{" "},{" "},{" "},{" "},{" "},{" "},{" "},{" "},{" "}},
{{"Ur:380v "},{"⑴选择运行类型 "},{"⑵选择运行方式 "},{"⑶选择泵号 "},{"⑷变频工作频率 "},{" "},{" "},{" "},{" "},{" "}},
{{"⒉系统参数设定 "},{"⑴语言设定 "},{"⑵电机参数设定 "},{"⑶水参数设定 "},{"⑷传感器类型单位"},{"⑸传感器量程 "},{"⑹主水泵数量 "},{"⑺辅水泵数量 "},{" "},{" "}},
{{"⒊控制参数设定 "},{"⑴系统设定数值 "},{"⑵系统上限值设定"},{"⑶上限延迟时间 "},{"⑷系统下限值设定"},{"⑸下限延迟时间 "},{"⑹系统上限报警值"},{"⑺系统上限延时 "},{"⑻系统下限报警值"},{"⑼系统下限延时 "}},
{{"⒋基泵参数设定 "},{"⑴基泵启动延迟 "},{"⑵基泵停止延迟 "},{"⑶PID P "},{"⑷PID I "},{"⑸PID D "},{" "},{" "},{" "},{" "}},
{{"⒌辅泵参数设定 "},{"⑴辅泵上限值设定"},{"⑵辅泵上限延迟 "},{"⑶辅泵下限值设定"},{"⑷辅泵下限延迟 "},{" "},{" "},{" "},{" "},{" "}},
{{"⒍备用泵设定 "},{"⑴主泵备用泵设定"},{"⑵辅泵备用泵设定"},{" "},{" "},{" "},{" "},{" "},{" "},{" "}},
{{"⒎零流量设定 "},{"⑴零流量数值设定"},{"⑵零流量延迟设定"},{" "},{" "},{" "},{" "},{" "},{" "},{" "}},
{{"⒏巡检计时设定 "},{"⑴巡检功能 "},{"⑵巡检时间 "},{"⑶巡检水泵时间 "},{"⑷计时切换功能 "},{" "},{" "},{" "},{" "},{" "}},
{{"⒐运行时间 "},{"⑴系统运行时间 "},{"⑵变频器运行时间"},{"⑶水泵运行时间 "},{"⑷水泵运行时间 "},{"⑸水泵运行时间 "},{" "},{" "},{" "},{" "}},
{{"⒑故障记录 "},{"⑴上次报警 "},{"⑵本次报警 "},{" "},{" "},{" "},{" "},{" "},{" "},{" "}},
{{"⒒通信参数设定 "},{"⑴地址 "},{"⑵波特率 "},{"⑶形式 "},{" "},{" "},{" "},{" "},{" "},{" "}},
{{"⒓零流量监控 "},{"⑴设定值 "},{"⑵实际值 "},{" "},{" "},{" "},{" "},{" "},{" "},{" "}},
};
//二级菜单定义
UINT8 RDATA Menu3_Data[Menu_Line_Num][Menu_Row_Num][Menu_Word_Num] =
{ {{" 压力 "},{"带变频的自动工作"},{" 1 号 泵"},{" "},{" "},{" "},{" "},{" "},{" "}},
{{" 中文 "},{"功率 KW"},{"流量 m3/h"},{"传感器类型 压力"},{" "},{" "},{" "},{" "},{" "}},
{{" "},{" A %"},{" "},{" A %"},{" "},{" "},{" "},{"全启 "},{" "}},
{{" "},{" "},{" "},{" "},{" "},{" "},{" "},{" "},{" "}},
{{" A %"},{" "},{" A %"},{" "},{" "},{" "},{" "},{" "},{" "}},
{{" "},{" "},{" "},{" "},{" "},{" "},{" "},{" "},{" "}},
{{" "},{" "},{" "},{" "},{" "},{" "},{" "},{" "},{" "}},
{{" "},{" "},{" "},{" "},{" "},{" "},{" "},{" "},{" "}},
{{" "},{" "},{"1 泵 小时"},{"3 泵 小时"},{" 5 泵 小时"},{" "},{" "},{" "},{" "}},
{{"本次报警 "},{" "},{" "},{" "},{" "},{" "},{" "},{" "},{" "}},
{{" 00H "},{" "},{" "},{" "},{" "},{" "},{" "},{" "},{" "}},
{{" 00 "},{" 00 "},{" "},{" "},{" "},{" "},{" "},{" "},{" "}},
};
//三级菜单定义
UINT8 RDATA Menu4_Data[Menu_Line_Num][Menu_Row_Num][Menu_Word_Num] =
{ {{" "},{" "},{"运行方式 变频"},{"频率 HZ"},{" "},{" "},{" "},{" "},{" "}},
{{" 2005-07-14 "},{"电流 A "},{"最高扬程 m"},{"单位 Bar "},{" Bar "},{"主泵数量 "},{"辅泵数量 "},{" "},{" "}},
{{" Bar "},{" B Bar "},{" S "},{" B Bar "},{" S "},{" Bar "},{" S "},{" Bar "},{" S "}},
{{" S "},{" S "},{" "},{" "},{" "},{" "},{" "},{" "},{" "}},
{{" B Bar "},{" S "},{" B Bar "},{" S "},{" "},{" "},{" "},{" "},{" "}},
{{" "},{" "},{" "},{" "},{" "},{" "},{" "},{" "},{" "}},
{{" "},{" S "},{" "},{" "},{" "},{" "},{" "},{" "},{" "}},
{{" "},{" S "},{" "},{" "},{" "},{" "},{" "},{" "},{" "}},
{{" "},{" 小时"},{"2 泵 小时"},{"4 泵 小时"},{"6 泵 小时"},{" "},{" "},{" "},{" "}},
{{" 小时"},{" 小时"},{" "},{" "},{" "},{" "},{" "},{" "},{" "}},
{{"注释 "},{" "},{" "},{" "},{" "},{" "},{" "},{" "},{" "}},
{{" S "},{" S "},{" "},{" "},{" "},{" "},{" "},{" "},{" "}},
};
//补字菜单定义
UINT8 RDATA Menu34_Data[9][6][Menu_Word_Num] =
{ {{" 压力 "},{" 压差 "},{" 温度 "},{" "},{""},{""}},
{{"设备停止运行 "},{" 调试 "},{"带变频的自动工作"},{"不带变频自动工作"},{""},{""}},
{{" 1 号 泵"},{" 2 号 泵"},{" 3 号 泵"},{" 4 号 泵"},{" 5 号 泵"},{" 6 号 泵"}},
{{"运行方式 变频"},{"运行方式 工频"},{" 运行方式 结束"},{""},{""},{""}},
{{" 中文 "},{" 英文 "},{""},{""},{""},{""}},
{{"传感器类型 压力"},{"传感器类型 压差"},{"传感器类型 温度"}, {""},{""},{""}},
{{"单位 Bar "},{" 单位 ℃ "},{""},{""},{""},{""}},
{{"4800 "},{"9600 "},{""},{""},{""},{""}},
{{" ASC "},{" RTU "},{""},{""},{""},{""}},
};
//绘图屏显示数组
UINT8 RDATA Display_Data[10][1][Menu_Word_Num] ={{{"Hm 扬程 Q 流量"}},
{{"电压: 220VAC "}},
{{"设定值 "}},
{{"实际值 "}},
{{"I1 A"}},
{{"I2 A"}},
{{"I3 A"}},
{{"I4 A"}},
{{"I5 A"}},
{{"I6 A"}},
} ;
//******************************结束 菜单数组定义*********************************************************************/
/*******************************开始 系统函数声明*********************************************************************/
extern void DelayX10ms (UINT8 Delay_Time10) ; //延时10毫秒函数
extern void DelayX50us (UINT8 Delay_Time50) ; //延时50微秒初始化函数
extern void Monitor_Data(void); //监控界面函数
extern void Init_Device(void); //硬件初始化函数
extern void Key_Interrupt (void); //键盘程序
extern void Send_Instr (UINT8 Lcd_Inst); //lcd指令函数
extern void Send_Data (UINT8 Lcd_Data); //lcd数据函数
extern void Send_Line_Data(UINT8 line,UINT8 x,UINT8 y); //菜单程序指定行送显
extern void Send_34Line_Data(UINT8 x,UINT8 y) ; //送菜单34行数据
extern void Clr_Disply(void); //清显示屏
extern void Lcd_Revers(UINT8 Revers_Line); //指定行反显
extern void Clear_Draw_Screen(); //清画图显示缓冲区
extern void Draw_Screen(UINT8 Y_Position,UINT8 X_Position,UINT8 H_Data,UINT8 L_Data); //绘图函数
extern void Init_Lcd (void); //lcd初始化函数
extern void Over_Limit_Fun() ; //菜单数组越界判定函数
extern void Data_Char(UINT16 Conver_Data); //数据转变字符函数
extern void Process_Fun(UINT8 Fun_x,UINT8 Fun_y); //34级菜单处理函数
extern void Menu_Char34(UINT8 Char3_Line,UINT8 Char3_Post,UINT8 Char3_Num,UINT8 Char4_Line,UINT8 Char4_Post,UINT8 Char4_Num); //34行菜单字符显示处理函数
extern void Menu_Fun34(UINT8 Data3_L,UINT8 Data3_NUM,UINT16 Data3_R,UINT8 Data4_L,UINT8 Data4_NUM,UINT16 Data4_R); //34行菜单数据显示处理函数
extern void Monitor2_Data(void );
/*******************************结束 系统函数声明*********************************************************************/
/***************************开始 初始化 CygnalF020 ********************************/
// Peripheral specific initialization functions,
// Called from the Init_Device() function
void Reset_Sources_Init()
{
WDTCN = 0xDE;
WDTCN = 0xAD;
}
void Timer_Init()
{
TL0 = 0xA0;
TH0 = 0xC1;
}
void Port_IO_Init()
{
// P0.0 - Unassigned, Push-Pull, Digital
// P0.1 - Unassigned, Push-Pull, Digital
// P0.2 - Unassigned, Push-Pull, Digital
// P0.3 - Unassigned, Push-Pull, Digital
// P0.4 - Unassigned, Push-Pull, Digital
// P0.5 - Unassigned, Push-Pull, Digital
// P0.6 - Unassigned, Push-Pull, Digital
// P0.7 - Unassigned, Push-Pull, Digital
// P1.0 - Unassigned, Push-Pull, Digital
// P1.1 - Unassigned, Push-Pull, Digital
// P1.2 - Unassigned, Push-Pull, Digital
// P1.3 - Unassigned, Push-Pull, Digital
// P1.4 - Unassigned, Push-Pull, Digital
// P1.5 - Unassigned, Push-Pull, Digital
// P1.6 - Unassigned, Push-Pull, Digital
// P1.7 - Unassigned, Push-Pull, Digital
// P2.0 - Unassigned, Open-Drain, Digital
// P2.1 - Unassigned, Open-Drain, Digital
// P2.2 - Unassigned, Open-Drain, Digital
// P2.3 - Unassigned, Open-Drain, Digital
// P2.4 - Unassigned, Open-Drain, Digital
// P2.5 - Unassigned, Open-Drain, Digital
// P2.6 - Unassigned, Open-Drain, Digital
// P2.7 - Unassigned, Open-Drain, Digital
// P3.0 - Unassigned, Open-Drain, Digital
// P3.1 - Unassigned, Open-Drain, Digital
// P3.2 - Unassigned, Open-Drain, Digital
// P3.3 - Unassigned, Open-Drain, Digital
// P3.4 - Unassigned, Open-Drain, Digital
// P3.5 - Unassigned, Open-Drain, Digital
// P3.6 - Unassigned, Open-Drain, Digital
// P3.7 - Unassigned, Open-Drain, Digital
P0MDOUT = 0x00;
P1MDOUT = 0xFF; //开漏
P2MDOUT = 0xff;
P3MDOUT = 0xff;
XBR2 = 0x40;
}
void Oscillator_Init()
{
OSCICN = 0x06;
}
void Interrupts_Init()
{
IE = 0x80;
}
// Initialization function for device,
// Call Init_Device() from your main program
void Init_Device(void)
{
Reset_Sources_Init();
Timer_Init();
Port_IO_Init();
Oscillator_Init();
Interrupts_Init();
}
/***************************结束 初始化 CygnalF020 )********************************/
/***************************开始 键盘中断处理 ********************************/
// 函数介绍: 定时器键盘中断处理
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -