基于STM32设计的计算器(实现基本运算)

1. 项目介绍 计算器是最常见的工具了,现在不管是手机、电脑都带有计算器功能,支持强大的科学运算等。
当前文章介绍的是stm32+lcd触摸屏设计的一个触摸计算器功能,实现基本的加减乘除,二进制转换显示等功能。lcd屏使用的是3.5寸带触摸屏的显示屏,方便操作屏幕,mcu采用stm32f103zet6。
设计的这个计算器用到的硬件不多,主要是lcd屏和触摸屏,用到了一个w25q64存储芯片,保存触摸屏校准后的一些配置数据,这个可有可无,只是方便不需要每次断电后重新校准。
运行效果图如下:
完整项目源码下载地址: https://download.csdn.net/download/xiaolong1126626497/63976226
视频演示地址: https://live.csdn.net/v/182604
2. 项目实现 2.1 运算实现思路 功能介绍:
在除法计算过程中,如果商是小数,计算器得到的结果也是精准的,是double类型。 在计算过程中,可以实现连续运算。过程中是逐步计算出数据来的。
触摸校准流程:
计算器算法:
lcd的驱动芯片是nt35310,支持8080时序读写寄存器,当前项目采用模拟时序控制lcd屏,移植性较高。
核心代码如下:
#include lcd.h#include stdlib.h#include usart.h #include delay.h#include math.h#include timer.h#include spi.h#include usart.h#include #include key.h#include rtc.h#include wannianli.h#include touch.h#include led.h#include #include shuzimo.h#include #include calculator.h/*函数功能:写lcd数据函数参数:data:要写入的值 */void lcdwritedata(u16 data){ lcd_rs=1; //写数据 lcd_cs=0; //选中lcd屏 //输出数据 lcd_data0=(data>>0&0x01); lcd_data1=(data>>1&0x01); lcd_data2=(data>>2&0x01); lcd_data3=(data>>3&0x01); lcd_data4=(data>>4&0x01); lcd_data5=(data>>5&0x01); lcd_data6=(data>>6&0x01); lcd_data7=(data>>7&0x01); lcd_data8=(data>>8&0x01); lcd_data9=(data>>9&0x01); lcd_data10=(data>>10&0x01); lcd_data11=(data>>11&0x01); lcd_data12=(data>>12&0x01); lcd_data13=(data>>13&0x01); lcd_data14=(data>>14&0x01); lcd_data15=(data>>15&0x01); lcd_wr=0; //表示准备写数据 lcd_wr=1; //表示数据写完成 lcd_cs=1; //取消lcd屏片选}/*函数功能:写寄存器参 数:regval:寄存器值*/ void lcdwritereg(u16 data){ lcd_rs=0; //写命令 lcd_cs=0; //选中lcd屏 //输出数据 lcd_data0=(data>>0&0x01); lcd_data1=(data>>1&0x01); lcd_data2=(data>>2&0x01); lcd_data3=(data>>3&0x01); lcd_data4=(data>>4&0x01); lcd_data5=(data>>5&0x01); lcd_data6=(data>>6&0x01); lcd_data7=(data>>7&0x01); lcd_data8=(data>>8&0x01); lcd_data9=(data>>9&0x01); lcd_data10=(data>>10&0x01); lcd_data11=(data>>11&0x01); lcd_data12=(data>>12&0x01); lcd_data13=(data>>13&0x01); lcd_data14=(data>>14&0x01); lcd_data15=(data>>15&0x01); lcd_wr=0; //表示准备写数据 lcd_wr=1; //表示数据写完成 lcd_cs=1; //取消lcd屏片选}/*函数功能:设置光标位置函数参数: xpos:横坐标 ypos:纵坐标*/void lcdsetcursor(u16 xpos, u16 ypos){ lcdwritereg(0x2a); lcdwritedata(xpos>>8); lcdwritedata(xpos&0xff); lcdwritereg(0x2b); lcdwritedata(ypos>>8); lcdwritedata(ypos&0xff); }/*功 能: 初始化lcd屏幕说 明: 用于3.5寸屏幕的初始化。 lcd id:5310硬件连接:硬件连接:fsmc_d0 ------pd14fsmc_d1 ------pd15fsmc_d2 ------pd0fsmc_d3 ------pd1fsmc_d4 ------pe7fsmc_d5 ------pe8fsmc_d6 ------pe9fsmc_d7 ------pe10fsmc_d8 ------pe11fsmc_d9 ------pe12fsmc_d10 -----pe13fsmc_d11 ------pe14fsmc_d12 ------pe15fsmc_d13 ------pd8fsmc_d14 ------pd9fsmc_d15 ------pd10lcd_bl(背光) ----pb0fsmc_ne4(cs) --->pg12fsmc_nwe(wr/clk)--->pd5 fsmc_noe(rd) --->pd4fsmc_a10(rs) --->pg0*/void lcdinit(void){ rcc->apb2enr|=1crh&=0xfff0ffff; //fsmc_ne4(cs) gpiog->crh|=0x00030000; gpiod->crl&=0xff00ffff; //fsmc_nwe(wr/clk)\fsmc_noe(rd) gpiod->crl|=0x00330000; gpiog->crl&=0xfffffff0; //fsmc_a10(rs) gpiog->crl|=0x00000003; /*2. 初始化数据线*/ gpiod->crl&=0xffffff00; gpiod->crl|=0x00000033; gpiod->crh&=0x00fff000; gpiod->crh|=0x33000333; gpioe->crl&=0x0fffffff; gpioe->crl|=0x30000000; gpioe->crh&=0x00000000; gpioe->crh|=0x33333333;}/*函数功能:画点函数形参:x,y:坐标*/void lcddrawpoint(u16 x,u16 y,u16 color){ lcdsetcursor(x,y); //设置光标位置 lcdwritereg(0x2c); //开始写入gram lcdwritedata(color);}/*函数功能:显示一个汉字*/ void lcdshowfont(u8 *font,u16 x,u16 y,u16 size,u16 high,u16 color1,u16 color2){ u8 data; u16 i,j,k; for(i=0;i;i++)> 2.3 触摸屏代码 触摸屏采用xpt2046芯片,一个24位的adc芯片,支持spi接口。
代码里主要完成两个操作: 1. 读取xpt2046检测到的数据 2. 实现触摸屏校准算法
代码如下:
#include touch.h#include delay.h#include lcd.h#include spi.h#include #define t_mosi1 gpiof->odr|=1crh&=0xffff000f; //配置pf口 gpiof->crh|=0x00003830; t_sck1 gpiof->idr|=1<<10; t_cs1; }void touch_write(u8 data) //往xpt2046中写入命令{ u8 i; t_cs0 t_sck0 t_mosi0 for(i=0;i<8;i++) { if(data&0x80) t_mosi1 else t_mosi0 t_sck0 t_sck1 data=data<<1; }}u16 touch_read(u8 data) //从xpt2046中读取数据{ u16 i,dat=0; touch_write(data); delay_us(6); for(i=0;i<16;i++) { dat=dat

如何使用Power Design Manager(PDM)进行功耗评估?
S7-1200:DB_ANY类型
DDoS攻击风暴来袭 Memcached成攻击新宠
分享|基于迪文T5L智能屏的净水机智能控制系统方案
添加FPGA终端的步骤方法
基于STM32设计的计算器(实现基本运算)
分析 | 市场人气低迷价格回调 BTC全网算力涨势暂缓
小问智能耳机增强版TicPods Free Pro上市热销 仅售599元
荣耀9什么时候上市最新消息:华为荣耀9下月发布,正面刚小米6,谁更胜一筹?
技术资讯 | 如何利用电容谐振改善PDN阻抗
康普携手Resonai推进AR技术在智能楼宇领域的应用
三星C7 Pro全面体验评测:细节上做到了大而全
地平线与一汽智能网联开发院签署战略合作协议
IC封装工艺解析
矽品:日月光收购提升国家竞争力的说法禁不起检验
RK3399开发板屏幕切换控制的方式介绍
新发现将传统微流控技术转变为开放式微流控技术
无机锌盐中非质子性极性溶剂适用原则的深入分析!
量子计算是如何确保区块链交易安全的
华为nova出黑色版了曜石黑告诉你什么才叫黑到极致的美