代码拉取完成,页面将自动刷新
同步操作将从 ECBM工作室/ECBM_GUI 强制同步,此操作会覆盖自 Fork 仓库以来所做的任何修改,且无法恢复!!!
确定后同步将在后台操作,完成时将刷新页面,请耐心等待。
#ifndef _ECBM_UI_H_ //头文件防止重加载必备,先看看有没有定义过这个,定义说明已经加载过一次了。
#define _ECBM_UI_H_ //没定义说明是首次加载,那么往下执行。并且定义这个宏定义,防止下一次被加载。
/*-------------------------------------------------------------------------------------
The MIT License (MIT)
Copyright (c) 2020 奈特
Permission is hereby granted, free of charge, to any person obtaining a copy of
this software and associated documentation files (the "Software"), to deal in
the Software without restriction, including without limitation the rights to
use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
the Software, and to permit persons to whom the Software is furnished to do so,
subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
免责说明:
本软件库以MIT开源协议免费向大众提供。作者只保证原始版本是由作者在维护修BUG,
其他通过网络传播的版本也许被二次修改过,由此出现的BUG与作者无关。而当您使用原始
版本出现BUG时,请联系作者解决。
**************************
* 联系方式:进群778916610 *
**************************
------------------------------------------------------------------------------------*/
//-----------------以下是图形设置界面,可在Configuration Wizard界面设置-----------------
//<<< Use Configuration Wizard in Context Menu >>>
//这里就填写当前库的各项设置。
//<o>UI画面的宽度
//<i>整个UI管控的画面宽度,若有多个OLED屏,则按实际排布计算总的宽度。
//<1-255>
#define UI_WIDTH 128
//<o>UI画面的高度
//<i>整个UI管控的画面高度,若有多个OLED屏,则按实际排布计算总的高度。
//<i>需注意在单色屏内,每8个纵向的像素合为一个字节,所以高度应是8的倍数。
//<8-255:8>
#define UI_HEIGHT 64
//<o>UI_PRINTF函数的
#define UI_PRINTF_BUFF_SIZE 32
//<<< end of configuration section >>>
//-----------------以上是图形设置界面,可在Configuration Wizard界面设置-----------------
/*---------------------------------------头文件------------------------------------*/
#include "ecbm_core.h" //ECBM库的头文件,里面已经包含了STC8的头文件。
/*---------------------------------------宏定义------------------------------------*/
#define UI_SYSTEM_BUFF_SIZE (UI_WIDTH*(UI_HEIGHT/8)) //UI系统缓存数组的大小。
#define point_off 0 //ui_write_point函数的state参数,代表将对应坐标的像素熄灭。
#define point_on 1 //ui_write_point函数的state参数,代表将对应坐标的像素点亮。
#define point_tog 2 //ui_write_point函数的state参数,代表将对应坐标的像素状态取反。
/*--------------------------------------变量定义-----------------------------------*/
extern u8 xdata ui_system_buff[UI_SYSTEM_BUFF_SIZE];//通用画面缓存。
extern u8 code * ui_font_english;
extern u8 code * ui_font_chinese;
/*--------------------------------------程序定义-----------------------------------*/
/*程序区折叠专用***********************基础操作模块*****************************/#if 1
/*-------------------------------------------------------
函数名:ui_cls
描 述:UI缓存清除函数。清除所有画面。
输 入:无
输 出:无
返回值:无
创建者:奈特
调用例程:无
创建日期:2019-02-02
修改记录:
-------------------------------------------------------*/
void ui_cls(void);
/*-------------------------------------------------------
函数名:ui_error
描 述:UI的参数错误提示函数。当某个画面生成失败的时候,由此函数代替该画面显示。
输 入:x,y - 要替代的元素的坐标值。
输 出:无
返回值:无
创建者:奈特
调用例程:无
创建日期:2019-02-02
修改记录:
-------------------------------------------------------*/
void ui_error(u8 x,u8 y);
/*-------------------------------------------------------
函数名:ui_write_point
描 述:UI的写点函数。向指定位置写一个点。
输 入:x,y - 要写入的点的坐标值。
state - 写入的点的状态,有3种状态:point_off-熄灭该点;point_on-点亮该点;point_tog-翻转该点;
输 出:无
返回值:无
创建者:奈特
调用例程:无
创建日期:2019-02-02
修改记录:
2020-02-21:把原来的if结构换成了switch结构。
-------------------------------------------------------*/
void ui_write_point(u8 x,u8 y,u8 state);
/*-------------------------------------------------------
函数名:ui_read_point
描 述:UI的读点函数。读取指定位置的一个点的状态。
输 入:x,y - 要读取的点的坐标值。
输 出:无
返回值:0代表该点是熄灭的,1代表该点是点亮的。
创建者:奈特
调用例程:无
创建日期:2019-02-02
修改记录:
2020-02-21:合并了两个return 0。
-------------------------------------------------------*/
u8 ui_read_point(u8 x,u8 y);
/*-------------------------------------------------------
函数名:ui_write_byte
描 述:UI的写字节函数。由于数组的最小储存单位是字节,所以该函数能一次写一个字节的数据。
输 入:x,y - 要写入的字节的坐标值。
dat - 要写入的数据。
mode - 对照下表,获取想要的模式。
|-----mode define-----|
|D7~D3 | D2 | D1 | D0 |
| x | EN |FAN | Po |
|------|----|----|----|
| 0 | 0 | 0 | * |01,源数据的0和1都输出。
| 0 | 0 | 1 | * |23,源数据的0和1都输出,且0和1互换。
| 0 | 1 | 0 | 0 |4 ,只输出源数据的0。
| 0 | 1 | 0 | 1 |5 ,只输出源数据的1。
| 0 | 1 | 1 | 0 |6 ,只输出源数据的0,且0换成1。
| 0 | 1 | 1 | 1 |7 ,只输出源数据的1,且1换成0。
输 出:无
返回值:无
创建者:奈特
调用例程:无
创建日期:2019-02-02
修改记录:
-------------------------------------------------------*/
void ui_write_byte(u8 x,u8 y,u8 dat,u8 mode);
/*程序区折叠专用**************************************************************/#endif
/*程序区折叠专用***********************文字处理模块*****************************/#if 1
/*-------------------------------------------------------
函数名:ui_char_e
描 述:UI的显示字符函数(英文)。在指定位置显示一个字符。
输 入:x,y - 字符显示的坐标值。
ch - 要显示的字符。
mode - 字符显示的模式。参考ui_write_byte函数的说明。
输 出:无
返回值:无
创建者:奈特
调用例程:无
创建日期:2019-02-02
修改记录:
2020-02-27:
优化算法,单个字符解析耗时从600.6us降到582.54us。
2020-03-24:
改成英文字符显示。
-------------------------------------------------------*/
void ui_char_e(u8 x,u8 y,u8 ch,u8 mode);
/*-------------------------------------------------------
函数名:ui_char_c
描 述:UI的显示字符函数(中文)。在指定位置显示一个字符。
输 入:x,y - 字符显示的坐标值。
ch1 - 要显示的汉字的编码1。
ch2 - 要显示的汉字的编码2。
mode - 字符显示的模式。参考ui_write_byte函数的说明。
输 出:无
返回值:无
创建者:奈特
调用例程:无
创建日期:2019-03-24
修改记录:
-------------------------------------------------------*/
void ui_char_c(u8 x,u8 y,u8 ch1,u8 ch2,u8 mode);
/*-------------------------------------------------------
函数名:ui_printf
描 述:UI的printf函数。在指定位置显示一个格式化字符串。
输 入:x,y - 字符串显示的坐标值。
mode - 字符显示的模式。参考ui_write_byte函数的说明。
str - 格式化的字符串。
... - 额外的参数。
输 出:无
返回值:无
创建者:奈特
调用例程:无
创建日期:2019-02-02
修改记录:
2020-02-22:删除了多余语句。
2020-03-24:增加了中文显示的支持。
-------------------------------------------------------*/
void ui_printf(u8 x,u8 y,u8 mode,const char * str,...);
/*程序区折叠专用**************************************************************/#endif
/*程序区折叠专用***********************图像处理模块*****************************/#if 1
/*-------------------------------------------------------
函数名:ui_fill_frame
描 述:UI的填充矩形函数。将会画出一个实心的矩形。
输 入:x1,y1 - 矩形左上角坐标。
x2,y2 - 矩形右下角坐标。
state - 点的状态,参考ui_write_point函数的参数。
输 出:无
返回值:无
创建者:奈特
调用例程:无
创建日期:2019-02-02
修改记录:
2020-02-22:大幅度的优化了显示的速度。
画2x2矩形的执行时间从20.47us降至10.78us。
画100x50矩形的执行时间从22.55ms降至1.21ms。
-------------------------------------------------------*/
void ui_fill_frame(u8 x1,u8 y1,u8 x2,u8 y2,u8 state);
/*-------------------------------------------------------
函数名:ui_draw_line
描 述:UI的画线函数。
输 入:x1,y1 - 线的一端的坐标。
x2,y2 - 线的另一端的坐标。
state - 点的状态,参考ui_write_point函数的参数。
输 出:无
返回值:无
创建者:来源于网络的Bresenham算法。
调用例程:无
创建日期:2019-02-02
修改记录:
-------------------------------------------------------*/
void ui_draw_line(u8 x1,u8 y1,u8 x2,u8 y2,u8 state);
/*-------------------------------------------------------
函数名:ui_draw_wline
描 述:UI的画横线函数。
输 入:x1,x2 - 横线两端的X轴坐标。
y - 横线的Y轴坐标。
state - 点的状态,参考ui_write_point函数的参数。
输 出:无
返回值:无
创建者:奈特
调用例程:无
创建日期:2019-02-02
修改记录:
2020-02-22:优化了实现方法。
画120像素的线执行时间从475.4us降至205.1us。
画2像素的线执行时间从9.91us降至6.78us。
-------------------------------------------------------*/
void ui_draw_wline(u8 x1,u8 x2,u8 y,u8 state);
/*-------------------------------------------------------
函数名:ui_draw_hline
描 述:UI的画竖线函数。
输 入:x - 竖线的X轴坐标。
y1,y2 - 竖线两端的Y轴坐标。
state - 点的状态,参考ui_write_point函数的参数。
输 出:无
返回值:无
创建者:奈特
调用例程:无
创建日期:2019-02-02
修改记录:
2020-02-22:优化了实现方法。
画60像素的线执行时间从278.7us降至20.86us。
画2像素的线执行时间从10.11us降至6.71us。
-------------------------------------------------------*/
void ui_draw_hline(u8 x,u8 y1,u8 y2,u8 state);
/*-------------------------------------------------------
函数名:ui_draw_frame
描 述:UI的画矩形函数。将会画出一个空心的矩形。
输 入:x1,y1 - 矩形左上角坐标。
x2,y2 - 矩形右下角坐标。
state - 点的状态,参考ui_write_point函数的参数。
输 出:无
返回值:无
创建者:奈特
调用例程:无
创建日期:2019-02-02
修改记录:
-------------------------------------------------------*/
void ui_draw_frame(u8 x1,u8 y1,u8 x2,u8 y2,u8 state);
/*-------------------------------------------------------
函数名:ui_draw_circle
描 述:UI的画圆函数。将会画出一个空心的圆形。
输 入:x0,y0 - 圆的原点坐标。
r - 圆的半径。
opt - 圆的形态。该接口提供给圆角矩形使用。只是画圆的话填5就行。
state - 点的状态,参考ui_write_point函数的参数。
输 出:无
返回值:无
创建者:来源于网上的Bresenham画圆算法
调用例程:无
创建日期:2019-02-02
修改记录:
-------------------------------------------------------*/
void ui_draw_circle(u8 x0,u8 y0,u8 r,u8 opt,u8 state);
/*-------------------------------------------------------
函数名:ui_fill_circle
描 述:UI的填充圆函数。将会画出一个实心的圆形。
输 入:x0,y0 - 圆的原点坐标。
r - 圆的半径。
opt - 圆的形态。该接口提供给圆角矩形使用。只是画圆的话填5就行。
state - 点的状态,参考ui_write_point函数的参数。
输 出:无
返回值:无
创建者:来源于网上的Bresenham画圆算法
调用例程:无
创建日期:2019-02-02
修改记录:
-------------------------------------------------------*/
void ui_fill_circle(u8 x0,u8 y0,u8 r,u8 opt,u8 state);
/*-------------------------------------------------------
函数名:ui_fill_roundframe
描 述:UI的填充圆角矩形函数。将会画出一个实心的圆角矩形。
输 入:x1,y1 - 圆角矩形的左上角坐标。
x2,y2 - 圆角矩形的右下角坐标。
r - 圆角的半径。
state - 点的状态,参考ui_write_point函数的参数。
输 出:无
返回值:无
创建者:奈特
调用例程:无
创建日期:2019-02-02
修改记录:
-------------------------------------------------------*/
void ui_fill_roundframe(u8 x1,u8 y1,u8 x2,u8 y2,u8 r,u8 state);
/*-------------------------------------------------------
函数名:ui_draw_roundframe
描 述:UI的画圆角矩形函数。将会画出一个空心的圆角矩形。
输 入:x1,y1 - 圆角矩形的左上角坐标。
x2,y2 - 圆角矩形的右下角坐标。
r - 圆角的半径。
state - 点的状态,参考ui_write_point函数的参数。
输 出:无
返回值:无
创建者:奈特
调用例程:无
创建日期:2019-02-02
修改记录:
-------------------------------------------------------*/
void ui_draw_roundframe(u8 x1,u8 y1,u8 x2,u8 y2,u8 r,u8 state);
/*-------------------------------------------------------
函数名:ui_fill_mesh
描 述:UI的填充网格函数。将会填充出一个网格图形。
输 入:x1,y1 - 网格的左上角坐标。
x2,y2 - 网格的右下角坐标。
mode - 网格的模式,通常就是指点与点之间的间隔。
输 出:无
返回值:无
创建者:奈特
调用例程:无
创建日期:2019-02-02
修改记录:
2020-02-23:优化了实现方法。
间隔2像素的执行时间从7.76ms降到7.07ms。
间隔5像素的执行时间从1.400ms降到1.276ms。
-------------------------------------------------------*/
void ui_fill_mesh(u8 x1,u8 y1,u8 x2,u8 y2,u8 mode);
/*-------------------------------------------------------
函数名:ui_draw_bmp
描 述:UI的画图片函数。将会画出bmp型图片。
输 入:x,y - 显示图片的位置。
w,h - 图片的尺寸。
bmp - 存放图片的数组。
mode - 显示的模式,参考ui_write_byte函数的参数。
输 出:无
返回值:无
创建者:奈特
调用例程:无
创建日期:2020-03-24
修改记录:
-------------------------------------------------------*/
void ui_draw_bmp(u8 x,u8 y,u8 w,u8 h,u8 bmp[],u8 mode);
/*程序区折叠专用**************************************************************/#endif
#endif
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。