电路原理图控件
通过海龟绘图我们可以构建元件库,特别是利用新版本的海龟绘图,可以支持旋转,因此我们构建的电子元件可以横放和竖放,同时利用海龟绘图的锚点功能将元器件的连接点贡献出来,方便外部电路的连线;
在本控件内,构建了一个元件库的概念,即一行一个元件,以行号来调用(第一行编号0);其次我们构建了标记字符串库,同样以行号标记,可以在原理图字符串中调用;
本控件实际上是用控件脚本解码命里字符串,这个与海龟绘图有些类似,不同处在于考虑到整个图纸不需要旋转,因此命令采用上下左右来标识,而非左转和右转,详细参见命令表(注意,本控件的命令表和海龟绘图的命令表是不同的两组命令)
属性:
属性名 | 描述 | 默认值 | 备注 |
---|---|---|---|
x1 | 左上角X1坐标 | 10 | |
y1 | 左上角y1坐标 | 10 | |
x2 | 右下角X2坐标 | 30 | |
y2 | 右下角y2坐标 | 30 | |
status | 状态寄存器 | 128 | 这里设置定时值 |
status2 | 状态寄存器 | 0 | |
lib | 元件库字符串 | 一样一个,详细见下面说明 | |
shstr | 图纸字符串 | 一样一个,详细见下面说明 | |
mark | 文本标注 | 一样一个,0开始 | |
dotm | 显示汉字的点阵大小 | 16 | 汉字点阵数12/16/24/32/48/64 |
linec | 15画线的颜色 | 15 | |
cc | 字符的颜色 | 1 |
元件库:
lib 属性:
C15K0G3AG1BG5BG1S0G1BG5BG1J0BG3K1//0:电阻
C15K0BG4BG3BBG6BT0G1BG1T1G4AT0G1AG1T1G2//1:GND
C15K0G3AG3BBG6T0AG2AT1G3S0G3J0BG3K1//2:电容
C15K0G3BG1AG2S0AG4S1AG2AG1S2G2J2BG3K1 J1BRG3RBG10BRG3//3:蜂鸣器
C15K0T1G3AG4BT0G2BT1G1S0G1 T0G1T1G1S1G1 T0G1T1G1S2G1 T0BG2T1BG5BB AJ0G4AG4K1 BJ1G1S3LG1J3BG1LJ3G3BG7K2 J0G1BBG2 BJ2G4//4:NMOS
C15K0AG3AG2BBG4//5:vcc
C15K0G4LG1BG1BG1BG1BRT0 G4T1LG1S1BG1S0BG1BG1J0BRG4K1 J1T0AG1BG1 AA T1G6BBG3AG2//6:按钮
元件库是利用海龟绘图构建的符号,其中命令解析参见:tpen 语句
shstr图纸字符串
命令表:
命令 | 描述 | 备注 |
---|---|---|
Un | 上移n点 | |
Dn | 下移n点 | |
Ln | 左移n点 | |
Rn | 右移n点 | |
Tn | 抬笔 | 0=不绘制 1-绘制 |
Mn | 记录当前位置到n号 | n<16 |
Jn | 跳到n号位置 | |
Fn | 设置元件的方向 | |
Sn | 设置元件得到放大倍数 | |
Pn | 绘制n号元件 | |
Bn | 绘制n号字符串 | |
Xn | 绘制圆点(实心圆),半径n | |
Hn | 设置(选择)元件编号 | |
Kn | 跳转到当前元件的n号锚点 |
例如:
T0R10D70B0
D15T1R40
X3H0S3F1P0//R
R10H1F0P4//mos
H0K1R37X3//R下连接线
H1K2D20F0P1//GND
H1K1U10H2F0P3//蜂鸣器
H2K1U15F0P5//vcc
U25L20B1//3.3V
算法讲解
本控件比较复杂,且与海龟绘图的内部语句相关,下面讲述一下核心原理:
void create()
{ int i;
ms=newbin(512); //建立一个数据结构
// 初始化这个结构
for (i=0;i<512;i++){
setbin(ms,i,0xff); //全部填写ff
}
defbin(ms,0,"55 AA");
setbin(ms,34,16); //R34=16 初始化坐标编号计数器
}
在控件的create事件中,首先构建了一个512字节的bin数组,并且获得句柄存在ms变量中;
void drawyj(int n,int x,int y){
//绘制一个元件
int bs;
str s;
bs=strlist_creat(lib);
s="Z"+ms+"H"+dqyj+"F"+yjfx+strlist_get(bs,n);
s=explode_str(s,"/",0);
tpen(x,y,yjsize,s);
}
然后通过Z命令设置bin数组的句柄,H命令设置元件的编号,F命令设置方向,这样绘制元件,当执行到元件内部的K命令的时候,当前坐标会存储到bin对应的位置;
当绘制完元件后,通过Hn选择元件,K命令跳转到对应锚点,于是可以方便绘制连接线构成原理图。
bin数据格式
bin数据格式,512字节 256个坐标,每元件最多16个mark点,最多32个元件
0-1:0x55 0xaa 标志位,用于识别存储区存在
2-33:32个元件的指针,u8的值,ff表示空,可以设置
34:坐标编号js,默认16开始
35-39:备用
40-512:存储坐标,编号0~157;每坐标3字节
[XL8][YL8][S2.XH3.YH3]
其中前16个为系统使用,非元件使用
XL8 表示X坐标的低8位
YL8 表示Y坐标的低8位
s2暂时00(2bit),存储状态字节目前备用
XH3 表示X坐标高3位;也就是0~7; 表达最大值8*256=2048
YH3 表示Y坐标高3位;也就是0~7; 表达最大值8*256=2048
注意
- 海龟字符串参见 tpen 语句
- 海龟的起点在控件的正中心坐标