这是在开发鄙人负责的大创项目时给项目成员们写的简略教程,后期随缘更心得和踩的坑等等。。

鉴于鄙人水平不高,如有错误惠请大佬们告知;如有疑问也欢迎各位在评论区交流。

---------------------------------------------------------

目录

一、硬件概述

二、要求与说明

三、页面设计(部分)

/************************************************/

一、硬件概述

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)

•x               坐标x方向的起点 参数范围 [0, x_max-1]
•y               坐标y方向的起点 参数范围 [0, y_max-1]
•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 除去最后一行居中

这个教程到这里就结束了,如果有什么问题惠请大家在评论区提出,我会不定时回来看的。

大创笔记——硬切法实现基于单片机的人机交互系统相关推荐

  1. 基于单片机的显示系统

    基于单片机的显示系统 目录 一.选题背景 1 二.方案论证(设计理念) 2 三.过程论述 3 四.结果分析 29 五.课程设计总结 36 一.选题背景 单片机课程设计是<微机系统与接口技术> ...

  2. 基于单片机的加油机系统

    设计简介: 本设计是基于单片机的加油机系统,主要实现以下功能: LCD12864显示当前加油机(92和95型号)油量 可通过按键设置当前单价(RMB/L) 可进行加油时计算已加油量以及总价 当前油量小 ...

  3. 基于单片机的自动门系统

    设计简介: 本设计是基于单片机的自动门系统,主要实现以下功能: 可通过LCD1602显示温度最大值和当前体温: 可通过按键调整温度最大值: 可通过非接触式的红外测温测量人体温度: 若检测到人且体温小于 ...

  4. 基于单片机锂电池太阳能充电系统电路方案(毕业设计资料)

    以 STC89C52RC单片机微控制器为核心, 针对便携式的小功率产品,设计一个太阳能锂电池充电系统,并对锂电池组的充.放电过程进行保护. 锂电池组的电流.电压.将被系统控制器通过控制AD转换芯片及时 ...

  5. 基于单片机的水流量系统

    设计简介: 本设计是基于单片机的水流量系统,主要实现以下功能: 可通过LCD1602显示当前水流量和总的水流量: 可通过按键设置总的水流量的大小: 通过YF-SC04检测水流量: 通过蜂鸣器进行报警. ...

  6. 大创项目总结及代码分享---基于单片机的智能窗帘的研究与设计

    终于是暑假了,开始有点时间了,把以前做的一些小东西总结一下,其实大创是很早就已经完成了,只不过学校一直到四月份才开始验收结题.项目比较简单,也很方便就能验证功能,比较适合初学者练手,所以大概分享一下. ...

  7. 毕业设计 基于单片机的智能门禁系统

    文章目录 1 简介 2 课题背景 3 详细设计 3.1 整体设计方案 3.2 功能模块 3.3 软件设计 4 实现效果 5 部分实现代码 6 最后 1 简介 Hi,大家好,学长今天向大家介绍一个学长做 ...

  8. 物联网毕业设计 基于单片机的病房呼叫系统

    文章目录 1 简介 2 绪论 2.1 课题背景 3 系统设计 3.1 系统架构 3.2 主程序设计 3.3 语音模块程序设计 3.4 显示模块程序设计 3.5 键盘模块程序设计 3.6 无线传输模块程 ...

  9. 基于单片机智能家居系统-中控面板设计

    设计思路: 单片机是现如今运用最为广泛的电子器件,不论是在我们日常生活的哪方面,都有着单片机的身影.不论是小区内的电梯,还是超市的感应门,单片机给人们带来了极大的便利.本次基于单片机的智能家居的设计主 ...

  10. 基于单片机指纹考勤系统的设计与实现

    功能介绍 以51单片机作为主控系统: 利用指纹采集模块存储打卡信息: 12864显示当前考勤信息,时间 : 如果迟到 语音播报 您已迟到: 按键进行注册指纹.删除指纹.设置当前时间和签到时间.查询打卡 ...

最新文章

  1. 完整java开发中JDBC连接数据库代码和步骤
  2. Spring boot返回JSON类型响应及Content-Type设置
  3. .NET完全手动搭建三层B/S架构
  4. 启动oracle的三过程
  5. pandas fillna_【Python基础】快速提升效率的6个pandas使用小技巧
  6. Jsp+Servlet+Mysql实现的酒店预定管理系统
  7. 微课|中学生可以这样学Python(例11.3):tkinter通信录管理系统2
  8. 摄像头实时帧率_能够侦测的摄像头,怎么选?
  9. StackedGAN详解与实现(采用tensorflow2.x实现)
  10. windows单实例的办法
  11. 前端特效——简单下雪(纯css)
  12. RoadRunner软件初步使用教程
  13. mysql和sqline的异同_mysql的那点事儿,你知道吗
  14. 制造业数字化转型存在哪些问题
  15. php解析psd图层,PSD解析工具实现(七)
  16. 考研还是工作?回过头来反思我当初为何没考研
  17. 阿里企业邮箱:密码登录
  18. 零基础学习单片机切记这四点要求,少走弯路
  19. 静态手势识别控制游戏方向
  20. 「Sqlserver」数据分析师有理由爱Sqlserver之二-像使用Excel一般地使用Sqlserver

热门文章

  1. Android 获取手机分辨率
  2. Paused before potential out-of-memory crash页面崩溃
  3. win10中计算机是英文的,如何解决Win10启动和登陆界面语言中英文混合显示?
  4. 西工大计算机学院李春科,西北工业大学“青春逐梦 激情飞扬”2014友谊校区元旦晚会成功举办...
  5. aurora 64B/66B ip核设置与例程代码详解
  6. 深入理解什么是端口(port)
  7. matlab寻找峰值的函数,Matlab---寻找峰值函数
  8. DEDE网站安全设置防挂马教程
  9. java ajax传参问题
  10. NSIS静默安装VC运行库插件