卡东欧数学基础 全部用C语言完成,Keil环境。
程序核心有两大模块:Gui.c和Expression
Gui.c负责绘制和动画(底层仅链接oled绘制位图函数,所以和硬件关系不大)
Expression.c负责解析表达式。
相信不少同志看到“C51”准备掉头了…
Wait Wait!
这是基于STC8H8K64U的计算器程序
硬件平台上,STC8H这家伙虽然性能拼比不上X32,但肯定是吊打传统51,能跟328p叫板。这个计算器结构很简单:
一片主控,一个oled12864,两个ADC控制15+20个按键,一片8Mflash,一块电池和一个喇叭(诶,flash和喇叭是干嘛的)堆在一片洞洞板上,整机成本低至15RMB
那这个程序能干什么呢---
这个版本叫做
[卡东欧数学基础]CadioMathBasic
功能分为一般计算和函数绘图
###计算: 能解析数学表达式 (仅这一点应该就能干掉好多自制计算器了)
支持加减乘除乘方,指对幂,三角函数及其反函数,双曲函数,随机数,随机整数,绝对值,阶乘,弧角转化。
内置三个变量xyz和参量uvw,可以通过Ans调用上次的结果,拥有16步记忆,可以随时回滚之前的计算步骤
输入表达式长度最大32个字符,严格按照Geogebra表达式规范,能无限括号嵌套。
比如输入sin(2*e^(ln(2-cos(2)))-2*e),就会得到-0.568161,和GGB的结果一样
###函数:(重头戏,本程序的一个特色)
支持单元函数,隐函数,动态函数(就是能像GGB那样实时改变参数让函数动起来),参数曲线 (以上所有都是直角坐标系里的,极坐标正在开发)
支持缩放平移坐标系,可以随时调出光标查看具体点坐标。多函数同屏时支持快捷键隐藏/显示某个图像,可以设置迭代区间和步长
单元函数:
输入含有x的表达式f(x)),代表图像y=f(x)。
一屏最多支持同时多个图像(做多9个),来观察他们的关系
来看几个直观的高中放缩式叭 分别是
lnx<=x-1
e^x-lnx>4/3*sqrt(3)
e^x+e^-x>=2x
隐函数:
输入含有xy的表达式f(x,y),表示图像f(x,y)=0。这个功能就有意思了,不光能画圆锥曲线这些基础的,随便输点式子都能给你意想不到的图像
动态函数:
这个没得说,就是通过调参数让函数动起来
有uvw三个长沙参数,支持多图像
参数方程:
可以以u vw为参数,分别输入x部分和y部分。既然都参数方程了,不来点李萨如怎么行
以上就是 卡东欧数学基础 部分
怎么样,够基础吧。
那还有别的部分吗? 当然是 有!
[卡东欧统计基础]和[卡东欧空间基础]
正在开发.......
最后的最后
为什么老是说这是个程序?它不是个实体机吗?还有Flash和喇叭,是干甚的?
Emmmmm.........
卡东欧数学基础 全部用C语言完成,Keil环境。
程序核心有两大模块:Gui.c和Expression
Gui.c负责绘制和动画(底层仅链接oled绘制位图函数,所以和硬件关系不大)
Expression.c负责解析表达式。
关于gui,一会传个视频,感觉效果还行,比较丝滑,至少比生硬的直接切屏好些。
expression可能会对各位同志们有用。
它负责解析数学表达式。一个函数。字符串入,浮点数出(或抛出特定类型的错误)
光一个它就已经完成了科学计算器的基本功能那个(稍后会传两个Expression的特写版:数学计算的串口交互和命令行交互)
这个expression的实现其实不难,就是最传统的中缀式转后缀式,然后后缀式求值。
这样基础性的东西,但为什么弄的人不多?
可能是因为太麻烦了。。。
两个Expression的特写版,User_test是STC8H8K64U的串口交互,另一个是c++控制台交互(已经编译好了可以直接体验,点开exe直接输入表达式就行了)
正在赶工焊新板子,演示用的那个太破了。。。
姗姗来迟的代码!(个人原因耽误了几天。。。)
硬件的样子
这就是新版本的硬件,亮点是:几乎全部是直插原件
上一个版本图省事用了大量贴片(尤其是ADC键盘部分,好多好多贴片电阻)
然后就导致,一不小心摔了一下或者用力过猛让板子有机械形变,嘎嘣脆的贴片电阻就寄了
关键是肉眼还看不出来哪个电阻寄了!!!只能眼睁睁的看着按键失灵
吸取教训,这次的ADC键盘,我敢说,只要板子没折,他就能正常工作!!!(ADC键盘已经通过2m摔落测试)
这次的硬件分为2块板子,主板和底板。
除了喇叭和8M Flash之外,诶,怎么还有块8266?!!!!!!!
Emmmmmmm
电池是挪鸡鸭板砖电池,顶耐用
那两颗blinblin的大LED是充电指示。
充电是4056a
喇叭功放,8002。
3.3v稳压供电,1117。
烂大街的方案,经典中的经典。
详细原理图和按键键码表稍后整理完会上传
esp8266的电源开关部分,刚开始用三极管竟然不行,又换pmos,nmos,竟然也不行(一启动联网就死机,怀疑是开关内阻太大供电不足)。最后找了个遥控车马达驱动max512当开关,就ok了
引用WernerPleischner发表于14楼的内容8266性能甩主控5条街系列全手搓的软件功能还是很强大的,要不要再搓个CAS
还真是,8266表示不甘心被支配。。。
[卡东欧数学基础]这个软件(直接叫bin文件好了),只能说是卡东欧计算器的重要程序之一,绝不是全部。
-----什么?!这bin文件已经40k了,哪还有空间运行别的,难不成在spiflash里跑程序?哥们,你这可是51!
-----确实是要运行flash里的程序。
8MB(64Mbit)算下来能装好多程序呢。但怎么运行呢?又怎么把程序放进去呢?这就不得不安利一波STC的IAP了(就是在程序内修改程序空间flash,跑着这,改着那),可以搞一个bootloader放在前12k,让它充当引导程序从外部加载程序,加载完跳转就ok了。
-----不就加载个bin文件,怎么会写出来12k,莫非里面有
-----有确实还有点东西,就是hex80解析,和fat12解析。
这样,就允许了我们不光能加载bin文件,keil直接生成的hex80也来者不拒。同时,如果能让电脑能读写flash,就可以像操作优盘文件一样管理众多bin和hex
于是另一个重要的程序就出场了:USB_MSC
它正是负责把单片机模拟成一个8MB优盘,搭电脑和spiflash的桥梁。至于为什么是fat12就很明显了,因为8M的优盘用windows自带格式化就只能格成fat12
现在就清晰了,通过一个bootloader和一个usbmsc,就能实现电脑<->spiflash->51内部flash的数据传输,于是就能加载外部的程序文件了(usbmsc自己也是一个可被加载的文件,要跟电脑传文件,就先得加载usbmsc)
那一开始,flash里什么也没有,怎么加载usbmsc呢?先给单片机直接烧录一份,usb再用电脑往flash里拖一份就好了。
所以的所以,卡东欧数学基础就是一个能被加载的程序罢了,这个计算器还可以运行好多好多别的
比如简单的串口中端,允许你在上课时候AT+去随便访问点东西,或者打开播放器,播放一首wav,再或者玩一局扫雷贪食神什么的。
从这个意义上,这个是个通用的硬件。
如果从使用角度来看,他就是个能玩游戏能听歌能联网的多功能计算器(自习课摸鱼神器)
如果从学习角度来看,它就是个好玩的C51开发板
测试了一波函数绘图,一般GGB能画的它都能画!
(但可能比较慢,最慢的要将近1分钟!)
p1:x^2+(y-(x^2)^(1/3))-1=0 隐函数
p2:sin(x)^2+y^2-1=0 隐函数
p3:x=8*cos(u)-6*cos(8*u/3) y=8*sin(u)-6*sin(8*u/3) 参数方程
p4:cos(y)-tan(x)=0 隐函数
p5:x=u*cos(u) y=u*sin(u) 参数方程(其实就是极坐标的p=theta,可以写成参数方程)
p6:sin(x)-cos(y)=0 隐函数
p7:忘了。。。
p8: y^2+cos(x+y^2)-1=0 隐函数
p9: x=1*sin(9*u)*cos(u) y=1*sin(9*u)*sin(u)参数方程
卡东欧只能用来计算吗?
当然不是!
它还可以弹奏音乐,看时间,玩游戏,听歌,玩鸡乐盒,敲AT指令联网,甚至还能发射激光
下面就是卡东欧非正规用途的演示
VID_20240826_191736.mp4 点击下载
原理图,代码(尤其是ADC按键)是按这个来的
时段 | 个数 |
---|---|
{{f.startingTime}}点 - {{f.endTime}}点 | {{f.fileCount}} |
200字以内,仅用于支线交流,主线讨论请采用回复功能。