📄 disp.c
字号:
/**********************************************************************************************
** 文件名称: DISP.C
** 最后修改: 2009-11-9
** 版 本: 1.0
** 描 素: 气体检测系统OCM240128液晶显示界面显示程序
**---------------------------------------------------------------------------------------------
** 作 者: 李雪川
** 创作日期: 2009-11-9
** 文件描述: 驱动OCM240128显示气体检测显示界面
------------------------硬件端口连接定义-------------------------------------------------------
** OXM240128 MCU
** FS GND 字形选择0: 8*8 1: 6*8
** C_D P2.6 =1选择指令, =0选择数据
** _CE P2.7 片选=0有效
** _RW P3.6(_RW) 总线控制读写
** _RD P3.7(_RD)
** PDAT P0 8位总线数据端口
----------------------------------------------------------------------------------------------
** 全局变量:
** 主要函数:
void Message_clr(void) 清除信息显示区
void Disp_Arrow(uchar num) 显示箭头
void Disp_Alarm_num(uchar num, uchar bus) 显示报警数量
void Disp_Alarm( struct alarm *info) 显示详细报警信息
void Disp_fault(struct fault *info) 显示故障信息
void Disp_limit(struct limit *info) 显示上下限信息
void Disp_shield(struct shield *info) 显示屏蔽信息
void Disp_login(struct login *info) 显示注册信息
void Disp_Power(struct power *info) 上掉电信息
void Disp_Time(struct time * t) 显示时间
void Disp_Year(uint year) 显示年
void Disp_picture(uchar target, uchar mod) 图标显示
void Limit_change_ico(void) 上下限修改界面
void Linkage_change_ico(void) 联动和屏蔽修改界面
void OCM_dispinit(void) 显示初始化
**----------------------------------------------------------------------------------------------
** 硬件平台: 51系列单片机,总线方式驱动
** 软件平台: Keil3.0
*************************************************************************************************/
#include "OCM240128.h"
#include "Disp.h"
unsigned char code DVO_tab[3][16][24 / 8] = {
/*-- 文字: D --*/
/*-- 黑体18; 此字体下对应的点阵为:宽x高=13x24 --*/
/*-- 宽度不是8的倍数,现调整为:宽度x高度=16x24 --*/
{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x7F,0x00,0x7F,0xC0,0x71,0xE0,
0x70,0xE0,0x70,0xF0,0x70,0x70,0x70,0x70,0x70,0x70,0x70,0x70,0x70,0x70,0x70,0x70,
0x70,0xF0,0x70,0xE0,0x71,0xE0,0x7F,0xC0,0x7F,0x00,0x00,0x00,0x00,0x00,0x00,0x00},
/*-- 文字: V --*/
/*-- 黑体18; 此字体下对应的点阵为:宽x高=13x24 --*/
/*-- 宽度不是8的倍数,现调整为:宽度x高度=16x24 --*/
{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xE0,0x38,0xF0,0x78,0x70,0x70,
0x70,0x70,0x70,0x70,0x38,0xE0,0x38,0xE0,0x38,0xE0,0x1D,0xC0,0x1D,0xC0,0x1D,0xC0,
0x0D,0x80,0x0F,0x80,0x0F,0x80,0x07,0x00,0x07,0x00,0x00,0x00,0x00,0x00,0x00,0x00},
/*-- 文字: O --*/
/*-- 黑体18; 此字体下对应的点阵为:宽x高=13x24 --*/
/*-- 宽度不是8的倍数,现调整为:宽度x高度=16x24 --*/
{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0F,0x80,0x1F,0xC0,0x3D,0xE0,
0x38,0xE0,0x70,0x70,0x70,0x70,0x70,0x70,0x70,0x70,0x70,0x70,0x70,0x70,0x70,0x70,
0x70,0x70,0x38,0xE0,0x3D,0xE0,0x1F,0xC0,0x0F,0x80,0x00,0x00,0x00,0x00,0x00,0x00}};
unsigned char code arrow_tab[2][12][16 / 8] = {
/*-- 文字: ▲ --*/
/*-- 黑体9; 此字体下对应的点阵为:宽x高=12x12 --*/
/*-- 宽度不是8的倍数,现调整为:宽度x高度=16x12 --*/
0x00,0x00,0x00,0x00,0x06,0x00,0x06,0x00,0x0F,0x00,0x1F,0x80,0x1F,0x80,0x3F,0xC0,
0x3F,0xC0,0x7F,0xE0,0x00,0x00,0x00,0x00,
/*-- 文字: ▼ --*/
/*-- 黑体9; 此字体下对应的点阵为:宽x高=12x12 --*/
/*-- 宽度不是8的倍数,现调整为:宽度x高度=16x12 --*/
0x00,0x00,0x00,0x00,0x7F,0xE0,0x3F,0xC0,0x3F,0xC0,0x1F,0x80,0x1F,0x80,0x0F,0x00,
0x06,0x00,0x06,0x00,0x00,0x00,0x00,0x00};
unsigned char code gImage_look[22][4] = {
/*-- 调入了一幅图像:C:\Documents and Settings\Administrator\桌面\查看.bmp --*/
/*-- 宽度x高度=27x22 --*/
/*-- 宽度不是8的倍数,现调整为:宽度x高度=32x22 --*/
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x7F,0xFF,0xFF,0x80,0x7F,0xFF,0xFF,0x80,0x61,0xFD,0xFD,0x80,0x63,0xFF,0x87,0x80,
0x67,0xFF,0x03,0x80,0x67,0xFE,0x07,0x80,0x67,0xFE,0x07,0x80,0x6F,0xFE,0x07,0x80,
0x6F,0xFC,0x07,0x80,0x6F,0xFC,0x0D,0x80,0x7F,0xFC,0x0D,0x80,0x7F,0xF8,0x0D,0x80,
0x7F,0xF8,0x0D,0x80,0x7F,0xFF,0xFD,0x80,0x60,0x00,0x01,0x80,0x7F,0xFF,0xFF,0x80,
0x7F,0xFF,0xFF,0x80,0x00,0x00,0x00,0x00,};
unsigned char code gImage_time[22][4] = {
/*-- 调入了一幅图像:C:\Documents and Settings\Administrator\桌面\时钟.bmp --*/
/*-- 宽度x高度=27x22 --*/
/*-- 宽度不是8的倍数,现调整为:宽度x高度=32x22 --*/
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x7F,0xFF,0xFF,0x80,0x7F,0xFF,0xFF,0x80,0x61,0xDE,0xE1,0x80,0x63,0x8C,0x71,0x80,
0x63,0x0C,0x39,0x80,0x66,0x0C,0x19,0x80,0x66,0x0C,0x0D,0x80,0x6C,0x0C,0x0D,0x80,
0x6C,0x1F,0xFD,0x80,0x6C,0x1F,0xFD,0x80,0x66,0x1E,0x3D,0x80,0x66,0x0C,0x19,0x80,
0x67,0x00,0x19,0x80,0x63,0x00,0x31,0x80,0x61,0xC0,0xE1,0x80,0x7F,0xFF,0xFF,0x80,
0x7F,0xFF,0xFF,0x80,0x00,0x00,0x00,0x00,};
unsigned char code glmage_login[22][4] = {
/*-- 调入了一幅图像:C:\Documents and Settings\Administrator\桌面\注册_2.bmp --*/
/*-- 宽度x高度=27x22 --*/
/*-- 宽度不是8的倍数,现调整为:宽度x高度=32x22 --*/
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x7F,0xFF,0xFF,0x80,0x7F,0xFF,0xFF,0x80,0x60,0x7F,0x81,0x80,0x60,0xF0,0xC1,0x80,
0x61,0xC0,0xE1,0x80,0x67,0xFF,0xF1,0x80,0x67,0xFF,0xF1,0x80,0x61,0xFC,0x61,0x80,
0x60,0xFC,0x71,0x80,0x60,0x70,0x79,0x80,0x60,0x7E,0xF9,0x80,0x60,0x3F,0xF9,0x80,
0x60,0x03,0xF1,0x80,0x60,0x01,0xE1,0x80,0x60,0x00,0x01,0x80,0x7F,0xFF,0xFF,0x80,
0x7F,0xFF,0xFF,0x80,0x00,0x00,0x00,0x00,};
unsigned char code glmage_limit[22][4] = {
/*-- 调入了一幅图像:C:\Documents and Settings\Administrator\桌面\上下限_3.bmp --*/
/*-- 宽度x高度=27x22 --*/
/*-- 宽度不是8的倍数,现调整为:宽度x高度=32x22 --*/
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x7F,0xFF,0xFF,0x80,0x7F,0xFF,0xFF,0x80,0x6F,0xF8,0x61,0x80,0x6F,0xF8,0x61,0x80,
0x60,0xC0,0x61,0x80,0x60,0xE0,0x61,0x80,0x61,0xE0,0x61,0x80,0x63,0xF0,0x61,0x80,
0x63,0xF1,0xF9,0x80,0x60,0xC1,0xF9,0x80,0x60,0xC1,0xF1,0x80,0x60,0xC0,0xF1,0x80,
0x60,0xC0,0xE1,0x80,0x60,0xC7,0xFD,0x80,0x60,0xC7,0xFD,0x80,0x7F,0xFF,0xFF,0x80,
0x7F,0xFF,0xFF,0x80,0x00,0x00,0x00,0x00,};
unsigned char code gImage_dis[22][4] = {
/*-- 调入了一幅图像:C:\Documents and Settings\Administrator\桌面\继电器联动和屏蔽_4.bmp --*/
/*-- 宽度x高度=27x22 --*/
/*-- 宽度不是8的倍数,现调整为:宽度x高度=32x22 --*/
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x7F,0xFF,0xFF,0x80,0x7F,0xFF,0xFF,0x80,0x6F,0x0F,0x01,0x80,0x6C,0xF3,0xFF,0x80,
0x79,0xF9,0x8D,0x80,0x73,0xBD,0x8D,0x80,0x77,0x36,0xCD,0x80,0x76,0x76,0xCD,0x80,
0x76,0xE6,0xCD,0x80,0x76,0xC6,0xCD,0x80,0x73,0xC6,0xBF,0x80,0x7B,0xFD,0xF7,0x80,
0x7C,0xFB,0xE3,0x80,0x6E,0x07,0x63,0x80,0x67,0xFE,0x7F,0x80,0x7F,0xFF,0xFF,0x80,
0x7F,0xFF,0xFF,0x80,0x00,0x00,0x00,0x00,};
unsigned char code gImage_barr[20][4] = {
/*-- 调入了一幅图像:C:\Documents and Settings\Administrator\桌面\电池符号_2.bmp --*/
/*-- 宽度x高度=27x20 --*/
/*-- 宽度不是8的倍数,现调整为:宽度x高度=32x20 --*/
0xFF,0xFF,0xFF,0xE0,0x83,0xE0,0xF8,0x20,0xBF,0xFF,0xFF,0xA0,0xBF,0xFF,0xFF,0xA0,
0xB0,0x00,0x01,0xA0,0xB0,0x00,0x01,0xA0,0xB0,0x00,0x21,0xA0,0xB0,0x00,0x21,0xA0,
0xB3,0xC0,0xF9,0xA0,0xB0,0x00,0x21,0xA0,0xB0,0x00,0x21,0xA0,0xB0,0x00,0x01,0xA0,
0xB0,0x00,0x01,0xA0,0xB0,0x00,0x01,0xA0,0xB0,0x00,0x01,0xA0,0xB0,0x00,0x01,0xA0,
0xBF,0xFF,0xFF,0xA0,0xBF,0xFF,0xFF,0xA0,0x80,0x00,0x00,0x20,0xFF,0xFF,0xFF,0xE0,
};
/********************************************************************************************
** 函数名称: void Message_clr(void)
** 函数功能: 清除信息区
在切换界面时调用该函数,彻底清除上次的信息界面
** 调用模块: 无
*********************************************************************************************/
void Message_clr(void)
{
uchar i;
for (i = 0; i < 8; i++)
{
OCM_line_clr(MESSAGE_ADDR1 + 30*i,0X00);
}
}
/*********************************************************************************************
** 函数名称: void Disp_Line(uint addr)
** 功能描述: 任意地址画一条线
** 输入参数: addr:图形地址(字节单位)
** 输出参数:
** 调用模块: 外部函数调用
*********************************************************************************************/
void Disp_Line(uint addr)
{
uchar i;
OCM_ac(2,Figure_Addr + addr); //设置地址
for (i = 0; i < 30; i++)
OCM_onewr(0,0XFF);
}
/*********************************************************************************************
** 函数名称: void Disp_Arrow(uchar num)
** 功能描述: 显示箭头
** 输入参数: num: =0 不显示箭头 =1 显示向上箭头 =2 显示向下箭头 =其他 两个同时显示
** 输出参数:
** 调用模块: 内部函数调用
*********************************************************************************************/
void Disp_Arrow(uchar num)
{
uchar h,w;
w = sizeof(arrow_tab[0][0]) * 8;
h = sizeof(arrow_tab[0]) / sizeof(arrow_tab[0][0]);
switch (num)
{
case 0:
/*void OCM_picture(uint addr, uchar w, uchar h, uchar *tab) */
OCM_picture_clr(Figure_Addr + 8 * 30 * 4, w, h);
OCM_picture_clr(Figure_Addr + 8 * 30 * 10, w, h);
break;
case 1:
OCM_picture(Figure_Addr + 8 * 30 * 4, w, h, &arrow_tab[0][0]); //显示向上箭头
OCM_picture_clr(Figure_Addr + 8 * 30 * 10, w, h);
break;
case 2:
OCM_picture_clr(Figure_Addr + 8 * 30 * 4, w, h);
OCM_picture(Figure_Addr + 8 * 30 * 10, w, h, &arrow_tab[1][0]); //显示向下箭头
break;
default: OCM_picture(Figure_Addr + 8 * 30 * 4, w, h, &arrow_tab[0][0]); //显示向上箭头
OCM_picture(Figure_Addr + 8 * 30 * 10, w, h, &arrow_tab[1][0]); //显示向下箭头
break;
}
}
/*********************************************************************************************
** 函数名称: void Disp_Alarm_Figure(void)
** 功能描述: 报警图形显示
** 输入参数: 无
** 输出参数: 无
** 调用模块: 内部函数调用
*********************************************************************************************/
void Disp_Alarm_Figure(void)
{
uchar i;
/* Alarm BUS 显示 */
OCM_autwr(Text_Addr + (30 * 12 + 2),sizeof(ALARM_BUS_tab),ALARM_BUS_tab);
/* 显示报警边框 */
for (i = 0; i < 12; i++)
{
OCM_ac(2, Figure_Addr + (8 * 30 * 13) + 30 * (5+i) + 9);
OCM_onewr(2, 0X04); //地址不变
}
for (i = 0; i < 12; i++)
{
OCM_ac(2, Figure_Addr + (8 * 30 * 13) + 30 * (5+i) + 11);
OCM_onewr(2, 0X24);
}
for (i = 0; i < 12; i++)
{
OCM_ac(2, Figure_Addr + (8 * 30 * 13) + 30 * (5+i) + 13);
OCM_onewr(2, 0X20);
}
OCM_ac(2, Figure_Addr + (8 * 30 * 13) + 30 * 5 + 9); //显示地址14行第15个开始显示 //总线位置
OCM_onewr(0, 0X07);
OCM_onewr(0, 0XFF);
OCM_onewr(0, 0XE7);
OCM_onewr(0, 0XFF);
OCM_onewr(0, 0XE0);
OCM_ac(2, Figure_Addr + (8 * 30 * 15) + 30 * 1 + 9);
OCM_onewr(0, 0X07);
OCM_onewr(0, 0XFF);
OCM_onewr(0, 0XE7);
OCM_onewr(0, 0XFF);
OCM_onewr(0, 0XE0);
}
/*********************************************************************************************
** 函数名称: void Disp_Alarm_num(uchar num, uchar bus)
** 功能描述: 显示警告信息
** 输入参数: num警告个数
bus总线 =0 不显示总线 =1:显示总线1 =2:显示中线2 其他:显示总线1和2
** 输出参数:
** 调用模块: 外部函数调用
*********************************************************************************************/
void Disp_Alarm_num(uchar num, uchar bus)
{
/* 显示报警数 */
OCM_ac(2, Text_Addr + (30 * 14 + 3)); //显示地址14行第6个字
OCM_onewr(0, num / 100 + 0X10);
OCM_onewr(0, (num % 100)/10 + 0X10);
OCM_onewr(0, num % 10 + 0X10);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -