#第三届立创大赛#可用C代码快速开发的液晶屏人机控制器 - 嘉立创EDA开源硬件平台

编辑器版本 ×
标准版 Standard

1、简单易用,可快速上手

2、流畅支持300个器件或1000个焊盘以下的设计规模

3、支持简单的电路仿真

4、面向学生、老师、创客

专业版 professional

1、全新的交互和界面

2、流畅支持超过3w器件或10w焊盘的设计规模,支持面板和外壳设计

3、更严谨的设计约束,更规范的流程

4、面向企业、更专业的用户

标准版 #第三届立创大赛#可用C代码快速开发的液晶屏人机控制器

  • 4.9k
  • 1
  • 10

暂无简介

开源协议: BSD

(未经作者授权,禁止转载)

创建时间: 2019-05-29 14:34:27
更新时间: 2024-03-16 11:37:15
描述

一、作品简介

例如,可以包括但不局限于以下内容:

1.作品的整机外观图片或焊接组装好的PCBA图片;

 

 

2.作品的研究背景、目的和功能、市场应用前景; 

        见立项陈述;

3.作品在创新性、趣味性、实用性甚至公益性方面,有哪些亮点可体现?

       立项陈述中已经讲了,这里再强调一下,我们主要的创新点在于在生态上的技术创新,也就是说,软硬件设备的普及难度很大主要因为要求用户起点水平较高,如果能大幅度降低使用用户的门槛,那将是一个不朽的产品,比如 Micro:Bit 开发板,拥有海量的用户基础,但是他的缺点也很暴露,就是价格太贵,定义市场为教学市场,在实际产品设计中没有人会采用micro:bit;而我们的方法不同,首先使用产业链整合降低成本,3.5寸70元的售价,可以迅速切入用户的产品产业链中,同时把用户分为两种,写控件的和用控件的,这样可以覆盖更多的不同层次的用户,如果我们加大投入,再设计出不少与之匹配的模块,比如AD,电压电流表、电机、温湿度、PM2.5、WIFI、NBIOT、LORA.....那将对教学用户产生根本性质的影响,相信将来,不再有学生在写什么“万年历”程序,因为,用此系统可以在数分钟之内搭建一套;

    在语言上,我们丢弃了C语言中比较难理解的指针概念(这是很多单片机开发者学习C语言的拦路虎),相比我们引入了直接的str变量,可以直接操作字符串;进一步降低学习难度;

 

二、系统构架图

用流程图或思维导图等形式,描述您的作品的组成构架,即方案图。

 

   本系统的原理并不复杂,观看上图基本都可以理解,但是难度在于软件的工作量相当的大,图上的每一个小块分类都是一个海量的代码体系,且必须是高质量的代码;

   说实话,如果代码现在丢了的话,不知道还有没有勇气再重新搞一次,太累了;

 

三、硬件部分的描述

1.附上原理图&PCB实物图的图片或者源文件(官方建议大家尽量用源文件上传),如果是图片,请确保图片是清晰可辨的; 

 

上传的图只是示意图,详细,请直接访问:
https://lceda.cn/editor#id=|95c6f8ca348c4088a7d6d4664bfd7767|9fef2ce659574c60b76706734d75aa92

在硬件实现上,电路并不复杂,中间一块GD32F303RCT6,通过SPI连接flash psram存储器和25Q64的存储器,通过GPIO端口连接液晶屏,以及触摸屏IC 2046,剩下的就是串口以及扩展引出等;屏幕的背光通过PWM端口进行调制;

 

2.用文字把该作品的实现原理、系统的工作过程大致讲解一下。

    工作原理其实没有什么可以讲的,基本上就是大学教材《编译原理》的翻版,这里就不再重复了,我们主要讲一下UI层面的选型:

    大家知道,如何快速的驱动MCU接口的液晶屏是一个难点,尤其是在MCU选型上是个问题,开始我们考虑选型stm32F0 或F1 系列,但是此系列的SPI接口速度太低,只有18M,这样SPI 就成了整个系统的瓶颈,而F401系列,居然把PB11给搞丢了(我们需要PB0~~PB15 接MCU16位总线),而再往上的STM32就基本用不起了;然后我们考察了其他型号的MCU,发现GD32F303系列的SPI主频可以上到60M,且支持QSPI,价格10元左右,带SDIO,基本满足我们需求,这点上,比STM32强多了;

    但是在实际研发过程中,也产生可很多意想不到的问题,比如官方GD32F303的库带的样例代码根本上不到60M,后来找到GD官方的技术支持,解决了这个问题,但是却发现QSPI的DMA仍然调不稳定(也不是不通,就是连续工作数小时候几率卡死),费了2~3个月去解决这个不稳定,那真是噩梦,最后还是决定选择普通SPI模式,因为发现GD32的AHB实际也达不到60MQSPI,因此60M QSPI其实意义不大,降低为SPI后,A2 A3 管脚腾出,可以变为第二个串口,看来有得必有失;

    不过鉴于gd的具体情况,我们也在考虑是否有更好的选择;

    现在,一副整屏图(480*320)刷新到屏幕上大约30ms左右,有了这个优良的参数,为屏的使用效果奠定了良好的基础;

    硬件驱动的秘密就在于大量使用DMA来提速,以及双buf乒乓方案等等........

    剩下的就是各种语句的绘制,这些倒是不难,就是代码量非常的大;

 

  

3.注明所用到的EDA工具软件名称并附上设计链接。

立创EDA:   https://lceda.cn/editor#id=|95c6f8ca348c4088a7d6d4664bfd7767|9fef2ce659574c60b76706734d75aa92

 

四、材料清单(BOM列表)

列出您这个作品所用到的主要器件(关键器件即可),比如单片机&ARM芯片、专用集成芯片(ASIC)、传感器、功能模块等。

如果所列出的芯片是来自我们立创商城上的,最好能写出该器件的商品编号或附上对应购买链接。 

 

https://item.szlcsc.com/142738.html  GD32f303rct6

https://item.szlcsc.com/175500.html 25Q64

https://item.szlcsc.com/19779.html xpt2046

还有一块外采购的3.5寸液晶屏,带TP的

 

 

五、软件部分的描述(选填)

如果您的作品涉及到软件,请列出作品对应的软件工作流程图,及关键部分的例程、源码(如果您想开源的话请上传全部源码)。

    内部的算法基本参考大学教材《编译原理》,这里不再讲述,这里我们来讲述三大机制:

1)控件机制:

    控件是UI的核心,在各大编程语言UI界面中都有控件的概念,控件的概念来源于类的概念,有属性和方法的概念;

首先,我们来看一下一个控件的模板:

 

//-------声明控件的基础属性,基础属性不可以修改,也不可以调整顺序
int x1=10;#defattr(x1,int,"左上角X1坐标");
int y1 = 10;#defattr(y1,int,"左上角y1坐标");
int x2 = 110;#defattr(x2,int,"右下角X2坐标");
int y2 = 50;#defattr(y2,int,"右下角y2坐标");
int status=0x00008080;#defattr(status,status,"状态寄存器");
int status2 = 0x0000;
//--------开始在此定义控件的用户属性,比如以下常用属性:----------
//str text="演示系统";#defattr(text,str,"显示字符串");
//int dotm = 16;#defattr(dotm,select,"显示汉字的点阵大小","16:16点阵;24:24点阵;32:32点阵;48:48点阵;64:64点阵");
//int cc = 15;#defattr(cc,color,"显示汉字的颜色");
//int bc = 63;#defattr(bc,color,"背景颜色");
//int pic = 0;#defattr(pic,pic,"选择图片");
//--------开始定义内部属性,不加#defattr,即控件内部变量,在上位机属性列表中不出现
//比如: 
//int a=0;

//---create():控件的初始化,可以在此书写有关默认参数的初始化
void create()
{	//在此书写当前页的初始化,比如根据图片的大小,重新计算x2,y2
}

//---draw():绘制背景,所有不变的东西,不随数据变化的东西都称之为背景界面
void draw()
{    //在此书写绘制背景的语句
	//automode(bc); or tranmode(n);//选择显示模式,具体讲解请参见语句说明书
}

//---show():刷新前景数据,也就是自定义属性发生变化时,界面跟着变得部分
void show()
{    //在此书写刷新前景的语句
	//automode(bc); or tranmode(n); //选择显示模式,具体讲解请参见语句说明书
}

//----onmouse方法,用户点击触摸屏上的热区,会调用此方法,其中:
//t:触摸模式: t=0 按下鼠标按钮,相当于触摸屏点击 ;t=1 鼠标移动 ;t=2鼠标抬起
//rn:热区编号,允许一个控件对应多个热区,多个热区靠rn变量识别,对于按钮等整个控件一个热区,可以忽视rn
void onmouse(int t,int rn)
{   //在此书写有关热区处理方法的代码
}

//----ontimer方法:status中设置的定时器会调用此方法
//当本控件有属性数值发生变化后,系统会自动调用show方法显示,定时器代码中无需操作界面
void ontimer()
{   //在此书写有关定期器对数据的修改代码
}

//----在此书写其他的控件方法
//某个方法加: #defattr(方法名,function,"方法说明");语句后,在界面编辑时双击控件,可以在页面程序中立即继承此方法


首先,我们定义一些控件的属性和方法,如上例,属性就是变量,并使用#defattr 宏定义,定义描述,然后书写控件的create事件,绘制背景draw事件,刷新数据的show事件,还有鼠标事件,定时器事件等,于是一个控件就做好了,可以在页面(实际就是窗体)程序中隔离的重复引用,且属性隔离;

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

2)CMD机制

 由于是编译系统,系统最后以微码的方式发行(非源码),并最终提供量产加密方案,防止用户写的程序被非法复制; 但是考虑到实际使用,我们增加了CMD语句的解译:

即支持:  l1.text="启动";l1.show();   这样的语句解释执行,但不支持变量和表达式;

其中:l1.show();只是表示可以执行控件的方法示例,如果只是l1.text修改内容,修改后,屏幕会自动完成刷新显示,无需调用l1.show();

CMD机制用于屏幕和其他的单片机通信,当然也可以传输二进制数据包,到屏端使用代码进行协议翻译;

3)数据绑定机制

系统命令中支持 :  $"电压"="5.0V";  bind(l1.text,"电压”);  就可以实现数据绑定,当单片机通过串口传入:$"电压"="5.0V";语句设置绑定变量后,所有绑定的控件属性会自动更新(所有界面,无需代码);同时我们可以指定一些绑定变量进行实例化存储,断电不丢失;

 

六、作品演示

请上传您的作品的功能演示到腾讯视频,并编辑到本楼(或附上视频链接)。按要求上传视频可获得10分,具体详见活动规则。

软件界面参见 8楼 截图

硬件屏幕操作视频:  https://v.qq.com/x/page/w0757an3rcp.html

上位机操作视频:  https://v.qq.com/x/page/e0761y489yy.html

 

七、总结

例如您在完成该作品过程中的一些体会、碰到的技术问题或调试经验、作品的未来规划,及对我们主办方的建议和意见等。 

    这个项目深深感觉到使用通用器件的痛,在各大MCU选型中徘徊不定,感觉真正产业级别的发展,应该从芯片的ASIC级别的来设计产品,可以大幅度降低成本,而通用器件就是通用器件,你能做,别人也能做,完全束缚产品经理的想象;

 

更多项目详情见链接:http://club.szlcsc.com/article/details_34302_1.html

本项目归立创社区“jetbin”所有

设计图
原理图
1 /
PCB
1 /
未生成预览图,请在编辑器重新保存一次
工程视频/附件
暂无
侵权投诉
相关工程
换一批
加载中...
添加到专辑 ×

加载中...

温馨提示 ×

是否需要添加此工程到专辑?

温馨提示
动态内容涉嫌违规
内容:
  • 153 6159 2675

服务时间

周一至周五 9:00~18:00
  • 技术支持

support
  • 开源平台公众号

MP