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

📄 disp.c

📁 OCM240128-7.rar
💻 C
📖 第 1 页 / 共 3 页
字号:
/**********************************************************************************************
**  文件名称:       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 + -