这是在开发鄙人负责的大创项目时给项目成员们写的简略教程,后期随缘更心得和踩的坑等等。。
鉴于鄙人水平不高,如有错误惠请大佬们告知;如有疑问也欢迎各位在评论区交流。
---------------------------------------------------------
目录
一、硬件概述
二、要求与说明
三、页面设计(部分)
/************************************************/
一、硬件概述
1.单片机:灵动MM32F3277GXP
2.屏幕选型及参数
1)、选型:2.0’ IPS With 56K Colors.
2)、屏幕分辨率320(L)*240(W).
3)、屏幕行列:240/8=30行;320/8=40列
3.交互外设
1)、设计四个独立按键K1~K4,主要功能分别为确认,+,-,返回,不排除部分根据功能需要改变。
2)、设计一个独立的按键K5作为用来确认用户已经服药的独立按键。
二、要求与说明
这一点请大家根据自己所选用屏幕的实际情况设计,此处按照鄙人项目的屏幕选型描述。
取模软件可以用PC2LCD(希望没记错软件名字)等等
(一)、字符取模要求
1.字符大小:24*24,小二;
2.取模方式:C51;
3.字体:楷体(在另一个项目中我用的是宋体,因为IPS200这个屏幕的分辨率足够,出于美观考虑选了楷体);
(二)、页面行列说明
1、8像素一行,因此UI中每两行纵坐标差3,每页最多10行;
2、列数不用太过关心,确保两字体之间相差3*8=24像素,计算后直接写坐标即可;
(三)、坐标计算方法说明
1、居中
Y从上到下为0~29;X从左到右是0~319。
下面的UI中纵坐标是从1开始的,但实际是从0,且
表格上的1和2实际相差的是Y轴上的3行。
图1 屏幕坐标系
单行居中:行上下左右距离屏幕边界分别相等;
两行居中:左右方向要求同单行居中,向上距离以
上面一行的顶和屏幕顶端的距离为准,向下距离以
下面一行的底和屏幕顶端的距离为准。
2、不居中
1).左侧缩进8像素即坐标的X轴以8为0,包括“确定”等;
2).最底部的“返回”、“配药”等右侧缩进8像素,即最后一个字的最右侧坐标为y_max-8。
(四)、坐标的表达(以本人项目使用的库函数为标准描述)
需要填写的数据格式:填写时每个字符都要带括号,颜色默认黑色。字符的颜色在代码中是可以更改的,前提是硬件支持多色显示。
(x, y, size, *chinese_buffer, number, color)
/*以下为从之前的项目复制来的16*16的坐标代码*/
//标题行示例(16*16)
lcd_display_chinese(64,2,16,Hzk[1],1,WHITE); //目
Lcd_display_chinese(80,2,16,Hzk[17],1,WHITE); //录
//整页示例(16*16)
Lcd_display_chinese(0,2,16,Hzk[1],1,RED); //时
Lcd_display_chinese(16,2,16,Hzk[17],1,RED); //间
Lcd_display_chinese(32,2,16,Hzk[13],1,RED); //设
lcd_display_chinese(48,2,16,Hzk[14],1,RED); //置
lcd_display_chinese(0,4,16,Hzk[24],1,WHITE); //清
lcd_display_chinese(16,4,16,Hzk[25],1,WHITE); //除
lcd_display_chinese(32,4,16,Hzk[22],1,WHITE); //参
lcd_display_chinese(48,4,16,Hzk[23],1,WHITE); //数
lcd_display_chinese(0,6,16,Hzk[20],1,WHITE); //确
lcd_display_chinese(16,6,16,Hzk[21],1,WHITE); //定
lcd_display_chinese(128,6,16,Hzk[18],1,WHITE); //返
lcd_display_chinese(144,6,16,Hzk[19],1,WHITE); //回
//下面给出两行24*24示例
lcd_display_chinese(8,2,24,Hzk[1],1,BLACK);
lcd_display_chinese(32,5,24,Hzk[17],1,BLACK);
同一行的字符计算坐标后按照UI中从左到右的顺序,自上而下摆放,并要在其后备注每一行对应的字符。
具体来讲(以字符24*24为例),我要求同一行字符横向的显示区域左侧起始空8像素,右侧结尾也空8个像素,所以每行第一个字符的横坐标就是7(0+7);第二个就是(7+24);第三个就是(7+24+24),依此类推。映射到我们常用的16*16取模的话,按照我需要起始空8像素的要求,第一个字符的横坐标还是7;第二个变成了(7+16);第三个则变为(7+16+16)。
在此总结一个横坐标的通项公式:X = 起始需要空出的像素 + 字符像素 *(N - 1);
对于纵坐标的计算,我们还是以字符24*24为例讲解,屏幕的坐标系如图一所示。纵坐标的起始和横坐标有些许不同,因为单片机开发中常用的取模方式C51,是按照C的常量数组格式生成的,也就是大家耳熟能详的bit Ubit[8]。所以每列第一个字符的纵坐标就是2(2+0);第二个就是2+3;第三个就是2+3+3,依此类推。映射到我们常用的16*16取模的,第一个字符的纵坐标变为1;第二个变成了(1+2);第三个则变为(1+2+2)。
总结一个纵坐标的通项公式:Y = [( 字符像素 / 8 )- 1] + ( 字符像素 / 8 )*(N - 1);
(六)、需要取模的字体
这里就默认略过了,大家根据需求确定。
建议:
1.设计时想到但暂时没有用到的建议也先取了,后面可能会用到。
2. 大小写字母、标点符号和数字建议和中文分开两个库分别取模。
(七)、字模摆放格式(代码规范)
/**这里是24*24的字符嗷**/
Hzk[][72] = {
{0x00,0x10,0x18,0x18,0x18,0x08,0xF8,0xFC,0x0C,0x8E,0x8E,0x00,0x10,0x70,0xE0,0xE0,/*"科",0*/ 0x00,0xFE,0xFE,0xFE,0x04,0x00,0x00,0x00,0x00,0x01,0x83,0xC1,0xF1,0x7F,0xFF,0xFF, 0x39,0xF1,0xF1,0x01,0x0C,0x3C,0xF8,0xB0,0x80,0xFF,0xFF,0xFF,0xE0,0x60,0x60,0x00, 0x04,0x06,0x07,0x01,0x00,0xF8,0xFF,0xFF,0x00,0x03,0x03,0x03,0x01,0x01,0x01,0x01, 0x00,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00},
{0x00,0x40,0x40,0x40,0x40,0xFE,0xFE,0xFC,0x60,0x60,0x40,0x40,0x40,0x40,0xFE,0xFE,/*"技",1*/ 0xFE,0x44,0x40,0x40,0x60,0x60,0x40,0x00,0x00,0x60,0x60,0x70,0x30,0xFF,0xFF,0xFF, 0x0C,0x0C,0x0C,0x18,0xF8,0xE8,0x8F,0x0F,0x0F,0xC8,0xF8,0xFC,0x38,0x00,0x00,0x00, 0x00,0x10,0x30,0x30,0x70,0x7F,0x7F,0x5F,0x40,0x60,0x60,0x30,0x30,0x1B,0x1F,0x0E, 0x1F,0x3F,0x39,0x70,0x70,0x60,0x20,0x20},
}
/**上页字模的摆放格式与此相同,请仔细观察好后再摆放。本页两个字仅作示例。**/
三、页面设计(部分)
写到这个地方懒得一行行敲了。。直接上图:
页面设计图1 标题居中
页面设计图2 横竖居中
页面设计图3 除去最后一行居中
这个教程到这里就结束了,如果有什么问题惠请大家在评论区提出,我会不定时回来看的。