Klock Plus

Klock Plus 是一个时钟App展示工具,可以运行在PC / CASIO fx-9860 / WinCE等平台上。

并且可以在PC上构建用户自定义的表盘。

此项目按照 BSD 协议开源。

下载

在这里下载当前版本的 KlockPlus。包含可执行文件与构建好的样例表盘。

安装

1. 在fx-9860系列上安装

KLOCKP.G1A安装在 Flash Mem,并将需要展示的表盘文件 *.kwf 放置在 Flash Mem 或者 SD Card,启动程序即可展示。

2. 在 Windows CE 上安装

2.1 Windows CE1.0 & CE1.01

因为CE.1x并不支持 GetModuleFileName API。所以需要把所有KWF文件放在根目录下。在其他地方运行KlockP开头的exe即可。

2.2 Windows CE 2.x

在CE2.x下把exe与KWF文件放在同个目录下即可。

2.3 更高版本

可以启动,但是文件不能被正确列出,请按照CE1.x的情况把KWF文件放在系统根目录下。

showcase2

3. 在 Windows CE上如何使用

为了尽可能兼容更多的设备,KlockPlus在WinCE上使用了虚拟按键。实体按键的功能如下:

实体键功能
方向键 上 / Enter / 确认显示 / 隐藏虚拟按键
方向键 下翻转屏幕方向(在竖屏的设备上)
Tab / Esc / 取消退出 App
W, A, S, D对应方向:上,下,左,右
K, L 对应功能键 A,B

 

制作自定义表盘

用户可以自己编写 KBasic Script并且使用KlockPlus Builder来构建KWF格式的表盘。

关于 KBasic

KBasic 是一种表达绘制流程的简单脚本语言,使用Builder构建,编译为KRT字节码(一个简单的基于堆栈的虚拟机)。

表盘 App 加载后,会后循环执行KBasic的代码,并且传入时、分、秒、毫秒等信息来执行绘制表盘,绘制的速度大约是 12 FPS。

样例

更多的样例请参考 samples/文件夹下的kbs文件。

构建表盘的二进制文件

  1. 假设上面的样例保存为文件 sample0-basic.kbs

  2. 在命令行输入下面的命令来构建

  3. 输入以下的命令来预览

    当然,也可以选择直接双击 klockbuilder.exe,会弹出选择文件的对话框,选择文件来预览。

tutorial-0-preview

KBasic 有五种指令:

 指令样例功能附注
1image 指令image "bitmap_file_name.bmp"加载 bmp 格式的图片只接受色深为 24bit 的 bmp
2let 指令let var_name = expr将 expr 的计算结果赋值给变量 var_name请注意,如果没有let在行首,会被理解为使用=(等于)操作符的表达式,并不会报错
3标签指令label_name:跳转标签 
4goto 指令goto label_name无条件跳转到指定标签 
5if 指令if expr goto label_nameexpr 计算结果不为0时跳转到指定标签 
6表达式zeropad(hh, 2) & ":" & zeropad(mm, 2)
1+2/sin(ms)
可以计算的表达式 

预定义变量

变量名功能附注
hh当前时间的小时 
mm当前时间的的分钟 
ss当前时间的秒 
ms当前时间的毫秒受到 fx-9860 RTC 功能的限制,毫秒的精度是基于1/128秒的,需要注意。

 

表达式

表达式可以有两种值,字符串 RVT_STRING 与 数值RVT_NUMBER

表达式的操作符

优先级操作符功能样例
500-取负数-a
-1.5
200*乘法a * b
200/除法a / b
200%取模a % b
200\整数除法a \ b
100+加法a + b
100-减法a - b
90&字符串连接"hello " & "world & 2"
60>大于a > b
60<小于a < b
60>=大于等于a >= b
60<=小于等于a <= b
50=等于a = b
50<>不等于a <> b
50!逻辑非!a
40&&逻辑与a && b
30||逻辑或a || b

表达式支持的内建函数

函数标号函数声明返回值附注
0sin(a)RVT_NUMBER正弦
1cos(a)RVT_NUMBER余弦
2tan(a)RVT_NUMBER正切
3sqrt(a)RVT_NUMBER平方根
4exp(a)RVT_NUMBER指数
5abs(a)RVT_NUMBERe为底的指数函数
6log(a)RVT_NUMBER对数
7rand()RVT_NUMBER范围在区间[0, 1)的随机数
8clr()RVT_NUMBER清除屏幕内容。总是返回 0
9zeropad(num, digits)RVT_STRING将数值转化为字符串,长度不足的时候在前方补充0
10printmini(x, y, str, rev)RVT_NUMBER打印字符串,字体尺寸4x6。总是返回 0
11print(x, y, str, rev)RVT_NUMBER打印字符串,字体尺寸6x8。总是返回 0
12gprint(x, y, str, image_index)RVT_NUMBER将指定的图片当做包含字符:与字符0-9的字体,打印字符串
总是返回 0
13line(x0, y0, x1, y1, dot)RVT_NUMBER画线,dot为1是黑色,dot为0时白色。总是返回 0
14blt(x, y, image_index)RVT_NUMBER在指定位置绘制图片。总是返回 0
15p(expr)RVT_NUMBER在控制台输出参数的内容,只在pc上有效。总是返回 0
16gprintv(x, y, str, image_index)RVT_NUMBERgprint功能相同,但是打印方向是竖向。
总是返回 0

还有什么

我为fx-9860GII设计了可以3D打印的表带:

watch-strap

可以真的把fx-9860当做手表戴在手腕上,稍后你可以在Thingiverse上找到它。

其他

此项目的 KlockPlus Builder 使用了 SDL,并在分发时附带了 SDL.dll。如果想要自己修改、构建 KlockPlus Builder,需要在你的工具链中安装SDL 1.2

此项目的字体使用了 Portfolio 6x8Tom Thumb 4x6

此项目的吉祥物:狗大哈 · Husky The Big。记得谢谢狗大哈