普通光学显微镜的构造主要分为三部分:机械部分、照明部分和光学部分。显微镜的机械部分:(1)镜座:是显微镜的底座,用以支持整个镜体。(2)镜柱:是镜座上面直立的部分,用以连接镜座和镜臂。(3)镜臂:一端连于镜柱,一端连于镜筒,是取放显微镜时手握部位。(4)镜筒:连在镜臂的前上方,镜筒上端装有目镜,下端装有物镜转换器。(5)物镜转换器(旋转器)简称“旋转器”:接于棱镜壳的下方,可自由转动,盘上有3-4个圆孔,是安装物镜部位,转动转换器,可以调换不同倍数的物镜,当听到碰叩声时,方可进行观察,此时物镜光轴恰好对准通光孔中心,光路接通。转换物镜后,不允许使用粗调节器,只能用细调节器,使像清晰。显微镜支架可以承载的显微镜有USB数码电子显微镜。四川手持式显微镜支架批发商
显微镜支架用于显微镜的支撑,尺寸数据完全按照现有市面的显微镜装架尺寸设计,如果有其他显微镜或者光学操作灯等仪器的图纸,也可以实现装配配合。显微镜支架可扩大操作范围,任意方向任意角度观察物体。显微镜是由一个透镜或几个透镜的组合构成的一种光学仪器,是人类进入原子时代的标志。如今支架的应用极其普遍,工作生活中随处可以遇见,如照相机的三脚架,医学领域用到的心脏支架等。说明支架内部的摩擦力非常的小,依靠弹力实现悬停。如果平板重量为1KG,升降用力需要10N甚至18N,那支架内部的摩擦力就非常大,内部的力结构不完善需要依靠摩擦力来实现悬停。四川手持式显微镜支架批发商所述固定卡座顶部设有伸缩杆。
调节的显微镜支架包括支撑架、L型固定支架、竖直导轨、限位支架、紧固螺丝、载物台、固定底座和橡胶垫,支撑架与固定底座垂直连接,支撑架一侧具有上下两部分竖直导轨,互不相通,竖直导轨均有以毫米为单位的刻度尺,载物台通过固定支架与限位支架构成载物台运动的整体组件,载物台与限位支架通过紧固螺丝的旋转可自由调节高度,本实用新型灵活点在于可调节的限位支架与可移动的载物台,当在实验过程中调试到合适焦距后,记录当前刻度,实验数据需要重新检测时,直接调用刻度数据,无需再次重新聚焦,提高工作效率,同时能够精确控制对焦点,改变焦平面,通过改变焦平面来获得不同聚焦下的图像用于景深合成。
校准的方法很简单,一般买软件时说明书就有说明的,这里简单说一下,首先要有标准尺(C1测微尺,每小格刻度0.01mm,共100格)。然后要知道自己需要在物镜多少倍的情况下对被观察物测量分析,比果说要用金相40倍物镜,那么首先用40倍物镜将C1测微尺上面的刻度在电脑上拍张照片,然后通过测量软件或是分析软件里面的校准工能把刻度的图片打开,在图片的刻度上一端某刻线处选定然后拖动鼠标到另一端某刻线处终止,数一下多少格,要知道具体长度,比如说共10格,一小格0.01mm,10格就是0.1mm,然后将实际的0.1mm输放软件中,然后选择测量分析后需要输出的长度单位,如果单位选毫米,直接确定就可以了。显微镜是由一个透镜或几个透镜的组合构成的一种光学仪器。
镜柱与三脚架的相对位置以及镜臂与镜柱的相对位置均可以比较方便的进行调节,使得该调焦支架具有多种便利的调焦方式。利用新型的显微镜支架,使显微镜不仅能够在室内使用,还可以随身携带,能够满足室外使用、现场观察的需要。一种显微镜支架,其包括镜柱、镜臂和连接在所述镜柱底部的三脚架,所述三脚架包括三个铰链轴和三个可以绕所述铰链轴旋转的支柱。因三脚架具有重量轻、能够旋转折叠等优点,显微镜调焦支架具有便于携带、使用方便的优点。使用显微镜时操作者的手必须清洗干净,保持环境清洁,保持环境清洁,干燥。四川手持式显微镜支架批发商
在萤光显微镜上,必须在标本的照明光中,选择出特定波长的激发光,以产生荧光。四川手持式显微镜支架批发商
支架指施工现场为工人操作并解决垂直和水平运输而搭设的各种支架。建筑界的通用术语,指建筑工地上用在外墙、内部装修或层高较高无法直接施工的地方。中国在1949年前和50年代初期,施工脚手架都采用竹或木材搭设的方法。60年代起推广扣件式钢管脚手架。主要为了施工人员上下干活或周围安全网围护及高空安装构件等,说白了就是搭架子,脚手架制作材料通常有:竹、木、钢管或合成材料等。有些工程也用脚手架当模板使用,此外在广告业、市政、交通路桥、矿山等部门也普遍被使用。四川手持式显微镜支架批发商
深圳市三松机电有限公司位于福城街道章阁老村东区166号松源创新科技城D栋7楼。公司自成立以来,以质量为发展,让匠心弥散在每个细节,公司旗下电子显微镜支架,工业显微镜支架,光学配件,CNC加工深受客户的喜爱。公司将不断增强企业重点竞争力,努力学习行业知识,遵守行业规范,植根于仪器仪表行业的发展。在社会各界的鼎力支持下,持续创新,不断铸造***服务体验,为客户成功提供坚实有力的支持。
1.【VGA图形系统初探】
提示:可以将virtualbox虚拟机界面大小设置大一些。
1、设置背景色为白色
设置背景色为白色
前提条件:需要要将VGA显卡设置为图形模式,在boot中写,代码如下:
;;;;;;;;;;;;;;;;;;;;;;;;;;;设置VGA图形格式
mov al, 0x13
mov ah, 0x00
int 0x10
;;;;;;;;;;;;;;;;;;;;;;;;;;;
AH=0x00;
AL=模式:(省略了一些不重要的画面模式)
0x03:16位字符模式,80x25
0x12:VGA图形模式,640x480x4位彩色模式,独特的4面存储模式
0x13:VGA图形模式,320x200x8位彩色模式,调色板模式
0x6a:扩展VGA图形模式,800x600x4位彩色模式,独特的4面存储模式(有的显卡不支持这种模式)
返回值:无
我们暂且选择0x13模式,因为8位彩色模式可以使用256种颜色,这一点看来不错。
写显卡
; 导出函数
global write_mem8
[SECTION .text]
; ========================================================================
; void write_mem8(int addr, int data);
; ========================================================================
write_mem8:
mov ecx, [esp + 4] ; [esp + 4]中存放的是地址,将其读入ecx
mov al, [esp + 8] ; [esp + 8]中存放的是数据,将其读入al
mov [ecx], al
ret
c语言设置背景色位白色
void set_background_white(){
for(int i = 0xa0000; i<=0xaffff; i++){
write_mem8(i, 15);
}
}
2、设置背景为条纹图案
条纹背景
void set_background_stripe(){
for(int i = 0xa0000; i<=0xaffff; i++){
write_mem8(i, i & 0x0f);
}
}
c语言可以直接使用指针操作内存,不用借助于汇编!
char *p; // 用于BYTE类地址
short *p // 用于WORD类地址
int *p// 用于DWORD类地址
void set_background_stripe(){
char *p;
for(int i = 0xa0000; i<=0xaffff; i++){
p = (char *) i;
*p = i & 0x0f;
}
}
3、设置调色板,色号
这次使用的是320x200的8位颜色模式,色号使用8位(二进制)数,也就是只能使用0~255的数。
RGB使用6位16进制数,也就是24位(二进制)来指定颜色。
这个8位彩色模式,是由程序随意指定0~255的数字所对应的颜色的。
例如25号颜色对应#ffffff,26号颜色对应对应#123456,等,这种方式叫叫做调色板。(palette)
如果程序员不做任何设定,0号颜色就是#000000,15号颜色就是#ffffff。
c:初始化调色板
// 初始化调色板
void init_palette(){
// 我们只设置如下16种颜色就可以了
static unsigned char table_rgb[16*3] = {
0x00, 0x00, 0x00, // 0:黑
0xff, 0x00, 0x00, // 1:亮红
0x00, 0xff, 0x00, // 2:亮绿
0xff, 0xff, 0x00, // 3:亮黄
0x00, 0x00, 0xff, // 4:亮蓝
0xff, 0x00, 0xff, // 5:亮紫
0x00, 0xff, 0xff, // 6:浅亮蓝
0xff, 0xff, 0xff, // 7:白
0xc6, 0xc6, 0xc6, // 8:亮灰
0x84, 0x00, 0x00, // 9:暗红
0x00, 0x84, 0x00, // 10:暗绿
0x84, 0x84, 0x00, // 11:暗黄
0x00, 0x00, 0x84, // 12:暗青
0x84, 0x00, 0x84, // 13:暗紫
0x00, 0x84, 0x84, // 14:浅暗蓝
0x84, 0x84, 0x84, // 15:暗灰
};
set_palette(0, 15, table_rgb);
}
// 设置调色板
void set_palette(int start, int end, unsigned char *rgb){
int eflags = io_load_eflags(); // 记录中断许可标志的值
io_cli(); // 将中断许可标志置为0,禁止中断
io_out8(0x03c8, start);
for(int i = start; i <= end; i++){
io_out8(0x03c9, rgb[0] / 4);
io_out8(0x03c9, rgb[1] / 4);
io_out8(0x03c9, rgb[2] / 4);
rgb += 3;
}
io_store_eflags(eflags);
}
asm:依赖函数
; ========================================================================
; void io_out8(int port, int data);
; ========================================================================
io_out8:
mov edx, [esp + 4] ; port
mov al, [esp + 8] ; data
mov dx, al
ret
; ========================================================================
; int io_load_eflags();
; ========================================================================
io_load_eflags:
pushfd ; 指push eflags
pop eax ; 函数执行完毕后,如果返回值小于等于4字节,则会将值保存在寄存器eax中
ret
; ========================================================================
; void io_store_eflags(int eflags);
; ========================================================================
io_load_eflags:
mov eax, [esp + 4]
push eax
popfd ; 指pop eflags
ret
; ========================================================================
; void io_cli();
; ========================================================================
io_cli:
cli
ret
c语言函数返回值问题:
4、绘制矩形
画面上由320x200=64000个像素。
假设左上点的坐标是(0, 0),右下点的坐标是(319, 199),那么像素坐标(x,y)对应的VRAM地址为:
0xa0000 + x + y*320
效果
绘制函数
// 绘制矩形
void boxfill8(unsigned char *vram, int xsize, unsigned char c, int x0, int y0, int x1, int y1){
for(int y = y0; y <= y1; y++){
for(int x = x0; x <= x1; x++){
vram[y * xsize + x] = c;
}
}
}
调用
// 绘制矩形
char *p = (char *) 0xa0000;
boxfill8(p, 320, COL8_FF0000, 20, 20, 120, 120);
boxfill8(p, 320, COL8_00FF00, 70, 50, 170, 150);
boxfill8(p, 320, COL8_0000FF, 120, 80, 220, 180);
5、绘制界面
效果
// 绘制ui
void draw_ui(){
init_palette();
char *vram = (char *) 0xa0000;
const int xsize = 320;
const int ysize = 200;
boxfill8(vram, xsize, COL8_008484, 0, 0, xsize - 1, ysize - 29);
boxfill8(vram, xsize, COL8_C6C6C6, 0, ysize-28, xsize - 1, ysize - 28);
boxfill8(vram, xsize, COL8_FFFFFF, 0, ysize-27, xsize - 1, ysize - 27);
boxfill8(vram, xsize, COL8_C6C6C6, 0, ysize-26, xsize - 1, ysize - 1);
boxfill8(vram, xsize, COL8_FFFFFF, 3, ysize-24, 59, ysize -24);
boxfill8(vram, xsize, COL8_FFFFFF, 2, ysize-24, 2, ysize - 4);
boxfill8(vram, xsize, COL8_848484, 3, ysize- 4, 59, ysize - 4);
boxfill8(vram, xsize, COL8_848484, 59, ysize-23, 59, ysize - 5);
boxfill8(vram, xsize, COL8_000000, 2, ysize- 3, 59, ysize - 3);
boxfill8(vram, xsize, COL8_000000, 60, ysize-24, 60, ysize - 3);
boxfill8(vram, xsize, COL8_848484, xsize - 47, ysize- 24, xsize - 4, ysize - 24);
boxfill8(vram, xsize, COL8_848484, xsize - 47, ysize- 23, xsize -47, ysize - 4);
boxfill8(vram, xsize, COL8_FFFFFF, xsize - 47, ysize- 3, xsize - 4, ysize - 3);
boxfill8(vram, xsize, COL8_FFFFFF, xsize - 3, ysize- 24, xsize - 3, ysize - 3);
}