0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

采用STM32F103ZE的计算器设计与实现

嵌入式技术 来源:嵌入式技术 作者:嵌入式技术 2022-05-28 19:03 次阅读

硬件平台

CPUSTM32F103ZE

屏幕:LCD屏幕接口(NT35310)

触摸屏:XPT2046(SPI接口)

外扩内存:IS62WV51216(FSMC驱动)

2.功能实现

1.完成LCD驱动、触摸屏驱动,SPI FLASH驱动保存字库;
2.完成STemwin移植,设计计算器界面;
3.计算器基本功能实现:基本运算(加、减、乘、除);
4.实现多级运算、平方运算;

3.硬件介绍

3.1 TFTLCD屏 NT35310驱动

nt35310 是一个低功耗、 26 万色、单芯片的 TFT-LCD 控制器/驱动器,分辨率 480*320,它有一个 345600 字节的显示 RAM 和一整套控制功能。 nt35310 支持数字接口( MDDI), MIPI 接口, RGB 接口, 8 / 9 / 16 / 18 位8080 接口。可以实现指定的窗口区域可以有选择地更新,以便可以显示运动图像。同时也可以独立显示静止的图像区域。

3.2 8080时序

8080 总线又叫Intel(英特尔开发)总线。大致来说, Intel 总线的控制线有四根, RD 写使能, WR 读使能, ALE 地址锁存, CS 片选。
模块的 8080 并口读/写的过程为:
先根据要写入/读取的数据的类型,设置 RS 为高(数据) /低(命令),然后拉低片选,选中 LCD,接着我们根据是读数据,还是要写数据置 RD/WR 为低,然后:
读数据:在 RD 的上升沿, 读取数据线上的数据(D[15:0]);
写数据:在 WR 的上升沿,使数据写入到 NT35310 里面;

8080写时序

poYBAGKQ0rCALy8zAAC2esTvz_k661.png
/*LCD写寄存器*/
static void LcdWriteReg(u16 reg)
{
	LCD_CS=0;//拉低片选,选择LCD
	LCD_RS=0;//写命令
	LCD_WR=0;//开始写
	DATA_OUT(reg);
	LCD_WR=1;//写完成
	LCD_CS=1;//取消选中
}
/*LCD写数据*/
static void LcdWriteData(u16 dat)
{
	LCD_CS=0;//拉低片选,选择LCD
	LCD_RS=1;//写数据
	LCD_WR=0;//开始写
	DATA_OUT(dat);
	LCD_WR=1;//写完成
	LCD_CS=1;//取消选中
}

8080读时序

poYBAGKQ0uGAMcQMAAC1itO_jSU917.png
/*LCD写数据*/
static u16 LcdWriteData(void)
{
	u16 data=0;
	LCD_CS=0;//拉低片选,选择LCD
	LCD_RS=1;//写数据
	LCD_RD=0;//开始读
	data=DATAIN();//读取消息
	LCD_RD=1;//读完成
	LCD_CS=1;//取消选中
	return data;
}

3.3 触摸屏驱动XPT2046

XPT2046 是一款四线制电阻触摸屏控制芯片,由深圳市矽普特科技有限公司研发生产,被广泛的应用于触摸屏驱动,堪称经典之作!
XPT2046 内部有 2.5V 的参考电压源,可以作为辅助输入、电池电压测量和片内温度测量的参考电压。当不使用时,参考电压源可以处于省电模式。内部参考电压源在电源电压低至 2.7V 时仍可正常工作。当不使用时,参考电压还可以处于省电模式。内部参考电压在电源电压低于 2.7V 时仍可正常工作,并且监测着在 0V~6V 范围内的电源电压。 XPT2046 在 125KHz 转换速率和 2.7V 电压下的功耗仅为 750 µW。XPT2046 以其低功耗和高速率等特性,被广泛应用在采用电池供电的小型手持设备上,比如 PDA、手机等。

pYYBAGKQ1uOAIPj5AAJN_ySTm0E932.png#pic_center

3.4 XPT2046驱动时序

XPT2046 数据接口是串行接口,其典型工作时序如图 9 所示,图中展示的信号来自带有基本串行接口的单片机或数据信号处理器。处理器和转换器之间的的通信需要 8 个时钟周期,可采用 SPI、 SSI 和 Microwire 等同步串行接口。一次完整的转换需要 24 个串行同步时钟( DCLK)来完成。
前 8 个时钟用来通过DIN引脚输入控制字节。当转换器获取有关下一次转换的足够信息后,接着根据获得的信息设置输入多路选择器和参考源输入,并进入采样模式,如果需要,将启动触摸面板驱动器。 3 个多时钟周期后,控制字节设置完成,转换器进入转换状态。这时,输入采样-保持器进入保持状态,触摸面板驱动器停止工作(单端工作模式)。接着的12 个时钟周期将完成真正的模数转换。如果是度量比率转换方式( SER/DFR= 0),驱动器在转换过程中将一直工作,第13 个时钟将输出转换结果的最后一位。剩下的 3 个多时钟周期将用来完成被转换器忽略的最后字节(DOUT置低)。

poYBAGKQ1uOAOW0IAACrrbcp6TU251.png#pic_center
#define TOUCH_VALUE_ADDR  200 //保存校准值参数信息
#define T_MISO PBin(2)
#define T_MOSI PFout(9)
#define T_PEN PFin(10)
#define T_CS PFout(11)
#define T_SCK PBout(1)
u16 XPT2046_WR_Data(u8 cmd)
{
  u16 dat=0;
  u8 i=0;
  T_CS=0;
  for(i=0;i<8;i++)
  {
    T_SCK=0;
    T_MOSI=cmd&0x80?1:0;
    T_SCK=1;
    cmd<<=1;
  }
   Delay_Us(8);
  T_SCK=0;
  Delay_Us(1);
  T_SCK=1;
  for(i=0;i<16;i++)
  {
    T_SCK=0;
    T_SCK=1;
    dat<<=1;
    if(T_MISO)dat|=0x01;
  }
  dat>>=4;
  T_CS=1;
  return dat;
}

4.STemwin移植与计算器界面制作

4.1 STemwin简介

emWin 是由德国 SEGGER 公司开发,可为图形 LCD 设计提供高级支持,极大简化了 LCD 设计。 为恩智浦ARM 微控制器用户免费提供的 emWin 图形库。在国内做嵌入式系统的大部分都使用 emwin, 其简单来说就是一套图形库。
STemWin是SEGGER公司授权给ST(意法半导体)的。使用ST芯片的用户可以免费使用STemWin。其实不光授权给了ST,还有NXP,Energy Micro等。凡是使用这些芯片厂商生产的处理器都可以免费的使用emWin。但是出于一定的保护措施,使用STemWin的库是不能用在其它芯片厂商的处理器上面的。因为在工程初始化STemWin前要使能CRC校验。如果没有使能,STemWin是启动不起来的。KEIL MDK的安装目录里面也带有emWin软件包,这个软件包也不是可以直接使用的,用户需要给KEIL MDK注册RL-ARM才可以使用。

这里STemWin还针对ST的微控制器做了专门的优化,比如在使用ST的F4XX微控制器带FPU的芯片时,STemWin在需要浮点处理的地方专门做了优化。

4.2 emwin特性

emWin 设计用于提供高效且独立于处理器和显示控制器的图形用户界面,用于任何使用图形显示进行操作的应用。它与单任务和多任务环境、专用操作系统或具有任何商业 RTOS 兼容, emWin 的发货形式为 C 语言源代码。它可适用于任何尺寸的、具有任何显示控制器和 CPU 的物理和虚拟显示器。其特性包括:

一般特性
• 支持使用任何控制器的任何 (单色、灰度或彩色)显示器 (如果有正确的驱动)。
• 在较小显示器上无显示控制器也可运行。
• 使用配置宏可支持任何接口。
• 显示尺寸可配置。
• 可在显示器上的任何点 (而不仅仅是在偶数位字节地址)上写入字符和位图。
• 已针对尺寸和速度优化了各种例程。
• 利用编译时间切换可进行不同优化。
• 对于较慢的显示控制器,可在存储器中缓存显示,将存取操作减到最少,从而获得非常高的速度。
• 结构清晰。
• 支持虚拟显示;虚拟显示可大于实际显示。
图形库
• 支持不同色深的位图。
• 可使用位图转换器。
• 绝对无浮点使用。
• 快速线 / 点绘制 (不使用浮点)。
• 圆形 / 多边形绘制非常快速。
• 不同的绘图模式。
字体
• 基本软件配备多种不同的字体: 46、 68、 69、 88、 89、 816、 817、 818、 24*32,以及像素高度为 8、 10、 13、 16 的比例字体。
• 可以定义新的字体并只需简单链接。
• 只有应用程序使用的字体才实际链接到生成的可执行程序,从而使 ROM 使用最小。
• 字体可分别在 X 和 Y 方向完全缩放。
• 可使用字体转换器;主机系统 (即 Microsoft Windows)上有的任何字体都可以转换。
字符串 / 值输出例程
• 例程可以十进制、二进制、十六进制、任何字体形式显示值。
• 例程可以十进制、二进制、十六进制、任何字体形式编辑值。
窗口管理器 (WM)
• 完整的窗口管理操作,包括裁剪。窗口的客户区以外的区域不可能被覆盖。
• 窗口可以移动和调整大小。
• 支持回调例程 (可选择是否使用)。
• WM 使用最小的 RAM (每个窗口大约 50 字节)。
PC 界面外观的可选小工具
• 提供各种小工具 (窗口对象,也称为控件)。它们通常自动操作并且简单易用。
支持触摸屏和鼠标
• 对于按钮小工具等窗口对象, emWin 提供触摸屏和鼠标支持。
PC 工具
模拟脉冲查看器。
• 位图转换器。
• 字体转换器。

4.3 GUIBuilde

GUIBuilder应用程序是一款无需使用 C编程语言即可创建对话框的工具。小工具的放置和大小调整,可通过拖放操作来实现,而无需编写源代码。根据上下文菜单,能添加其他各种属性。对这些小工具的属性进行编辑后,就能实现微调。该操作无需使用 C 编程语言。对话框可以另存为 C 文件,在添加用户定义的代码后可对其进行增强。当然, GUIBuilder 可以加载并修改具有嵌入式用户代码的这些C 文件。

poYBAGKQ1pCAeBsyAAK14Q9L4ZM061.png

计算器界面效果

pYYBAGKQ1OSAFa1wAAUUX0Ii3AE145.png

平方运算和分数计算

poYBAGKQ17iAP06_AAVysCxGEiY616.png

基本运算和顺序运算

poYBAGKQ1WaABBMmAArmat174sU016.png

主函数

#include "gui.h"
#include "EmWinHZFont.h"
#include "DIALOG.h"
#include 
extern WM_HWIN CreateFramewin(void);
int main()
{
  u16 time=0;
  GUI_PID_STATE pState;
  STM32_Clock_Init(16);
  Beep_Init();
  Led_Init();
  Key_Init();
  Usartx_Init(USART1,115200,128);
  W25Q64_Init();  
  IIC_Init();
  Sram_Init();
  NT35310_Init();
  XPT2046_Init();
  printf("校准完成\r\n"); 
	XPT2046_Calibration2();
  TIMx_Init(TIM7,128,1000);//1ms,用来给STemwint延时函数使用
  TIM7->CR1|=1<<0;//开启定时器	
	RCC->AHBENR|=1<<6;//开启CRC时钟
	GUI_Init();//STemwin初始化
  WM_SetCreateFlags(WM_CF_MEMDEV);    /*在所有窗口上使用存储设备以避免闪烁 */
  CreateFramewin();
  while(1)
  {
    GUI_Exec();//更新界面显示,显示对话框
   
    GUI_TOUCH_GetState(&pState);//获取触摸屏状态
    if(pState.Pressed)
		{
			GUI_CURSOR_SetPosition(pState.x,pState.y);//设置坐标位置
			GUI_CURSOR_Show();//显示光标
		}
		Delay_Ms(1);
		time++;
		if(time>=500)
		{
			LED1=!LED1;
			time=0;
		}  
  }
}


审核编辑:汤梓红

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 计算器
    +关注

    关注

    16

    文章

    437

    浏览量

    37287
  • STM32F103ZE
    +关注

    关注

    2

    文章

    14

    浏览量

    10868
  • XPT2046
    +关注

    关注

    0

    文章

    18

    浏览量

    18249
收藏 人收藏

    评论

    相关推荐

    STM32应用案例 基于STM32F103ZE开发的数码相册

    1.硬件平台 CPU:STM32F103ZE 屏幕:3.5寸TFTLCD屏 触控:电阻式触摸屏xpt2046 SD卡、外扩Sram
    的头像 发表于 06-02 09:09 7210次阅读
    <b class='flag-5'>STM32</b>应用案例 基于<b class='flag-5'>STM32F103ZE</b>开发的数码相册

    STM32F103ZE最小系统版

    1.单片机:STM32F103ZE最小系统版6.0✔N1RVcKX0SpK₴回????/宝或點***击***链节至瑬览STM32F103ZET6小系统板 STM32开发板
    发表于 08-06 07:51

    基于stm32F103ZE单片机的USART串口怎么使用?

    基于stm32F103ZE单片机的USART串口怎么使用?
    发表于 12-10 06:57

    STM32F103ZE按键部分原理实现

    型号:STM32F103ZE按键部分原理图:主函数:#include "bsp-led2.h"#include "stm32f10x.h"#include
    发表于 01-17 08:38

    STM32F103ze简介

    一、STM32F103ze 简介本文中,采用的 MCU 具体型号为 STM32F103ZET6,其拥有丰富的外设资源(USB,IIC,USART,TIMER)等,大容量的RAM和ROM,以及上百
    发表于 02-11 06:04

    STM32F103ZE最小系统原理图

    STM32F103ZE最小系统原理图
    发表于 09-20 11:07 196次下载
    <b class='flag-5'>STM32F103ZE</b>最小系统原理图

    基于stm32f103ze的四轴飞控代码

    基于stm32f103ze的四轴飞控代码
    发表于 01-13 10:21 30次下载

    嵌入式 STM32F103ZE主要特性

    Embest公司的STM32F103ZE ARM Cortex-M3嵌入式评估板采用ST公司的STM32F103ZE处理,工作频率72MHz.评估板集成了USB, CAN, SD卡接
    发表于 05-08 11:17 1.5w次阅读
    嵌入式 <b class='flag-5'>STM32F103ZE</b>主要特性

    基于STM32F103ZE的USART2 端口时钟

    STM32F103ZE默认的USART2就是PA03PA02,如果配置映射,USART2端口是PD05PD06了。
    发表于 06-04 07:26 6328次阅读
    基于<b class='flag-5'>STM32F103ZE</b>的USART2 端口时钟

    新版STM32F103ZE核心板原理图详细资料免费下载

    本文档的主要内容详细介绍的是新版STM32F103ZE核心板原理图详细资料免费下载。
    发表于 08-29 08:00 0次下载
    新版<b class='flag-5'>STM32F103ZE</b>核心板原理图详细资料免费下载

    STM32F103ZE核心板电路原理图和PCB图免费下载

    本文档的主要内容详细介绍的是STM32F103ZE核心板电路原理图和PCB图免费下载。
    发表于 04-01 08:00 0次下载
    <b class='flag-5'>STM32F103ZE</b>核心板电路原理图和PCB图免费下载

    新版STM32F103ZE核心板原理图免费下载

    本文档的主要内容详细介绍的是新版STM32F103ZE核心板原理图免费下载。
    发表于 02-26 11:46 0次下载
    新版<b class='flag-5'>STM32F103ZE</b>核心板原理图免费下载

    新版STM32F103ZE核心板原理图

    新版STM32F103ZE核心板原理图免费下载。
    发表于 06-18 11:14 0次下载

    STM32F103ZE构建固件库模板

    STM32F103ZE构建固件库模板
    发表于 12-08 18:51 13次下载
    <b class='flag-5'>STM32F103ZE</b>构建固件库模板

    STM32F103ZE最小系统板

    STM32F103ZE最小系统板,可能带有一些不足
    发表于 03-30 18:18 0次下载