j激光测距传感器代码
AMADA激光G代码讲解

G代码列表本机床由各种G代码及M代码来控制。
以下为G代码列表。
有关M代码信息参看第1-7页。
代码用途类别G00 快速移动运动G01 直线切割运动G02 圆弧CW 运动G03 圆弧CCW 运动G04 静止通用G09 精确停止运动G10 吸盘卸下上料装置G20,G21 选择英制/公制坐标坐标,尺寸G24 穿孔激光G25,G27(用于LC-α)重复定位通用G31 辅助气体选择通用G32 Z轴跟踪传感器ON 专项G33 取消Z轴跟踪传感器专项G40 取消激光光束路径补偿激光光束补偿G41 路径“LEFT”激光光束路径补偿激光光束补偿G42 路径“RIGHT”激光光束路径补偿激光光束补偿G50 返回零点通用G53 设置机床坐标系坐标、尺寸G61 精确停止检查模式运动G64 仿形切割模式运动G65(FO)调用副程序专项G75,G76 多个宏的再调用多用途G77(LC-θ)测量探针的坐标旋转通用G90 绝对编程坐标,尺寸G91 增量编程坐标,尺寸G92 建立坐标系坐标,尺寸G93 原点偏移值坐标,尺寸G95 利用参数调用程序专项G96 模态程序调用专项G97 取消模态程序调用专项G98 多工件设置多用途G107 管子插补(用于可选择旋转台)专项G111 正方形/长方形孔G112 圆形/长圆形孔G113 单D/双D 孔G114 多边形孔G115 弧形切槽(半径端面)孔G116 弧形切槽(平端面)孔G120(LC-θ)测量探针坐标,尺寸G121,G122 HS加工角检测专项G126 螺栓排列(BHC)模板G128 对角线(LAA)模板G129 弧(ARC)模板G130 轴回零专项G136 网格排列X(GRD-X)模板G137 网格排列Y(GRD-Y)模板G140 OVS孔检测专项G141 OVS扩展功能专项G149 取消OVS 专项G150 定制比例/旋转专项G160(LC-θ)间隔弧插补运动G161 间隔角半径插入专项G162 取消间隔角半径专项G163 3D坐标转换专项G164 取消3D坐标转换专项G165 3D转换专项G166 取消3D转换专项G173 U-轴长度补偿专项M代码列表M代码用途类别M00 程序停止通用M代码M02 程序结束通用M代码M10,M11(LC-α)工件夹紧/松开专项M20-M29(LC-α)可检测材料厚度专项M30 结束程序并返回程序开始处通用M代码M33(LC-β/LC-α)吸盘装载/工件上料上下料装置M34(LC-β)板式卸料上下料装置M55(LC-β)取消镜像上下料装置M65(LC-α)储备功能上下料装置M80,M81(LC-α)工件槽开/关通用M代码M96 调用副程序通用M代码M97 结束副程序通用M代码M99(用于FO)结束副程序通用M代码M100 激光模式ON 激光M101 激光模式OFF 激光M102 材料指定激光M103 穿孔模式,启动切割模式激光M104 取消切割模式激光M150,M151,M152(FO) 队列代码通用M代码M180(LC-α)循环工件槽通用M代码M707,M772-M774 更换吸盘上下料装置M720,M721 传感器ON/OFF 激光M722,M723,M727 跟踪传感器校准激光M758 光束ON 激光M790,M791(LC-β)吸盘安装上下料装置M792,M793(LC-β)吸盘安装销子上下料装置机床布置图LC-α与LC-β机床为混合光路系统,可使板材沿X轴方向运动,而激光切割头沿Y轴方向运动。
Arduino的光敏传感器和超声波测距传感器测试代码

Arduino的光敏传感器和超声波测距传感器测试代码光敏传感器测试代码使⽤的是⼀个未知名4pin模块, 4pin依次为Vcc, Gnd, DO, AO, 板载⼀个可调电阻以及⼀个LED, 调节电阻⼤⼩, 可以控制LED亮灭和DO输出变化对光亮的灵敏度. AO是模拟输出, 将AO接⾄A5⼝.#define AD5 A5 //定义模拟⼝A5#define LED 13 //定义数字⼝13int intensity = 0;//光照度数值void setup() {pinMode(LED, OUTPUT);Serial.begin(9600);}void loop() {intensity = analogRead(AD5);Serial.print("Intensity = ");Serial.println(intensity);if (intensity > 200) {digitalWrite(LED, LOW);} else {digitalWrite(LED, HIGH);}delay(500); // 500ms}超声波测距传感器测试代码超声波测距使⽤的是4pin的HC-SR04模块, 4pin依次为Vcc, Trig, Echo, Gnd, 将Trig和Echo分别接开发板的7和6脚const int TrigPin = 7;const int EchoPin = 6;float cm;void setup() {Serial.begin(9600);pinMode(TrigPin, OUTPUT);pinMode(EchoPin, INPUT);}void loop() {digitalWrite(TrigPin, LOW); //低⾼低电平发⼀个短时间脉冲去TrigPindelayMicroseconds(2);digitalWrite(TrigPin, HIGH);delayMicroseconds(10);digitalWrite(TrigPin, LOW);cm = pulseIn(EchoPin, HIGH); //回波时间Serial.print("Echo:");Serial.print(cm);cm = (int(cm * 100.0 / 58.0)) / 100.0; //保留两位⼩数Serial.print(" Distance:");Serial.print(cm);Serial.print("cm");Serial.println();delay(1000);}。
传感器代码大全【干货合集】

传感器是一种检测装置,能感受到被测量的信息,并能将感受到的信息,按一定规律变换成为电信号或其他所需形式的信息输出,以满足信息的传输、处理、存储、显示、记录和控制等要求。
知道了什么是传感器,那么传感器的代码(代号)大家了解多少呢。
代号:依次为主称(传感器)被测量—转换原理—序号①主称——传感器代号C。
②被测量—用一个或两个汉语拼音的第一个大写字母标记。
③转换原理——用一个或两个汉语拼音的第一个大写字母标记。
④序号——用一个阿拉伯数字标记,厂家自定,用来表征产品设计特性、性能参数、产品系列等。
若产品性能参数不变,仅在局部有改动或变动时,其序号可在原序号后面顺序地加注大写字母A、B、C等,(其中I、Q不用)例:应变式位移传感器:C WY-YB-20光纤压力传感器:C Y-GQ-2常用被测量代码表:被测量被测量简称代号被测量被测量简称代号加速度加加速度亮度细胞膜电位磁加加加胞电磁透磁强AAAADBDC电流电场强度电压色度谷氨酸电强色谷氨红外呼流DLDQDYEGA冲击磁透率磁场强度磁通量胆固醇呼吸频率转速生物化学需氧量硬度线加速度心电[ 图]线速度心音角度角加速度磁通胆固呼吸生氧线加心电线速角角加肌电角速[ 气] 密[ 液] 密马赫粘CJCOCQCTDCHPHSHYIIAIDISIYJJA温度照度红外光呼吸流量() 离子活[ 浓] 度声压图像温度[ 体] 温物位位移位置血血液电解质活[ 浓]血电血容血速压[ 膀] 压[ 胃] 压[ 颅] 压[ 食] 压眼电浊紫光真空H +Na +HHDHGHL()H[N]SYTXW[T]WWWWYWZXXDXL肌电[ 图]可见光角速度角位移力露点力矩流量离子密度[ 气体] 密度[ 液体] 密度脉搏马赫数表面粗糙度脑电厚葡糖气热通视电射量蚀厚JDJGJSJWLLDLJLLLZM[Q]M[Y]MMBMHMZ血流血气血容量血流速度血型压力膀胱内压胃肠内压颅内压食道压力[ 分] 压[ 绝] 压[ 微] 压[ 差] 压[ 血] 压Cl -O 2COXQXRXSXXY[B]Y[E]Y[L]Y?敎?潒慭n[S]Y[F]Y[U]Y[W]Y[C]Y[X]Y粘度脑电[ 图]扭矩厚度pH 值葡萄糖气体热通量热流速度视网膜电[ 图]水分射线剂量烧蚀厚度射线NNDNJO(H)PTQRTRLSSDSFSLSOSX眼电[ 图]迎角应力液位浊度振动紫外光重量( 稳重)真空度噪声姿态氢离子活[ 浓] 度钠离子活[ 浓] 度氯离子活YDYJYLYWZZDZGZLZKZSZT[H]H[N]D[Na]H[N]D[CL]H[N]D[O][ 浓] 度氧分压一氧化碳分压[CO]常用转换原理代码表:转换原理转换原理简称代号转换原理转换原理简称代号电解变压器磁电催化场效应管差压磁阻电磁电导场效电化电涡多普电位浮簧光光化AJBYCDCHCUCYCZDCDD光发射感应霍耳晶体管激光晶体振子克拉克电池酶[ 式]声表面波光射晶管晶振克池面波热释微生选择GSGYHEIGJGJZKCMMB电感电化学单结电涡流超声多普勒电容电位器电阻热导浮子- 干簧(核)辐射浮子光学式光电光伏DGDHDJDODPORDWDZEDFHFSFZGGDGF免疫热电热释电热电丝(超)声波伺服涡街微生物涡轮离子选择电板谐振应变压电压阻拆射MYRDRHRSSBSFWJWSWUXJXZYBYDYZZE光化学光导光纤GHGOGQ阻抗转子ZKZZ传感器的特性:(1)传感器的动态性。
北理工激光测距实验1实验报告,含代码

激光脉冲测距实验报告——第七组一、实验目的通过学习激光脉冲测距的工作原理;了解激光脉冲测距系统的组成;搭建室模拟激光脉冲测距系统进展正确测距,为今后的工程设计奠定理论根底和工程实践根底。
二、实验原理激光脉冲测距与雷达测距在原理上是完全一样的,如图2.1所示。
在测距点激光发射机向被测目标发射激光脉冲,光脉冲穿过大气到达目标,其中一小局部激光经目标反射后返回测距点,并被测距机上的探测系统接收。
测出从激光发射时刻到反射光被接收时刻之间的时间间隔t,根据光速,即可求出被测目标的距离R 为式中c为光速。
真空中的光速是一个准确的物理常数c0=2.99792458 * 108m/s海平面或近地面的平均大气折射率n为n =1.000275266故近地面大气中的光速c为c=2.9971×108m/s可见,激光测距机的任务就是准确地测定时间间隔t。
当不考虑大气中光速的微小变化时,测距精度ΔR主要是由测时精度Δt确定的实际脉冲激光测距机中是利用时钟晶体振荡器和脉冲计数器来测定时间间隔t的。
时钟晶体振荡器用于产生固定频率的电脉冲振荡,脉冲计数器的作用是对晶振产生的电脉冲个数进展计数。
设晶体振荡器产生的电脉冲频率为f,则脉冲间隔fT1=。
假设从激光脉冲发出时刻脉冲计数器开场计数,到反射光被接收时刻停顿计数,设这段时间脉冲计数器共计得脉冲个数为m,则可计算出被测目标的距离为相应的测距精度为可见,脉冲激光测距机的测距精度由晶振的频率决定。
常用军用激光测距仪的晶振频率有15MHz、30MHz、75MHz和150MHz等,与其相对应的测距精度分别为±l0m、±5m、±2m和±lm。
晶振的频率愈高,测距精度就愈高,但随之而来的,不仅是计数器的技术难度增加,而且要求激光脉冲的宽度愈窄,激光器的难度也增加。
对脉冲测距系统,计数器的“开门〞信号是由取出—小局部发射激光脉冲经光电探测器转换成电信号形成的,计数器的“关门〞信号则是由目标激光回波到达测距机经光电探测器转换成电信号形成的。
激光测距传感使用手册

激光测距传感使用手册前言尊敬的客户:衷心的感谢您选择了深圳市南方测控技术有限公司的激光测距传感器!为了让您更好的使用本激光测距传感器与防止意外事故的发生,请您在使用本激光测距传感器前仔细的阅读本说明书。
本说明书的版权归属深圳市南方测控技术有限公司所有,如在不影响本激光测距传感器整体性能的前提下所作的修改或更新,恕不另行通知。
激光测距传感器系统说明术语解释➢激光测距:利用激光对目标的距离进行准确测定。
激光测距一般采用两种方式来测量距离:脉冲法和相位法。
➢脉冲激光测距:基于激光脉冲反射时差法原理,测距仪器发射出的激光经被测量目标反射后,激光束被测距仪器接收,测距仪器记录激光往返的时间。
光速和往返时间的乘积的一半,就是测距仪器和被测量物体之间的距离。
➢激光测距传感器:为工业测量之产品,采用工业标准设计、生产和检测,可在线24小时连续实施测量,有的可以多台组网测试。
➢激光安全等级:国际上对激光有统一的分类,激光器分为四类(Class1、Class2、Class3、Class4)。
Class1激光器对人是安全的,Class2激光器对人有较轻的伤害,Class3以上的激光器对人有严重伤害,使用时需特别注意,避免对人眼直射。
➢Class2激光器:指激光器的出口光功率小于1mw,一般认为对人的眼睛是安全的,正常暴露在这种激光器的光束下不会对眼睛的视网膜造成永久性的伤害。
尽管此种激光器是安全的,但也不能长时间的直视激光光束。
如偶尔照射到人眼还不至于引起伤害,但连续观察激光束时能损伤眼睛。
此是对第二级激光器的最重要控制措施。
➢系统概述LPS系列激光测距传感器是一种功能强大的测量精确、无接触式的工业用距离测量设备,它可广泛地被集成用于各种工业用途的控制和监测系统上。
使用图例如下:LPS系列激光测距传感器是一款使用方便的工业应用激光测距仪表,特别为交通、炼钢、仓储、建筑、码头等需要自动进行距离和位置控制的应用而设计研发,具有很高地实用性。
激光测距模块说明书

相位激光测距模块技术参数:测量范围:0.045-D(D是最大量程)目前模块有D=40,D=70,D=80,D=100等规格分辨率:0.01毫米(0.00001米)测量精度(标准差):±2.mm(10米内)大于10米计算公式±2+0.05*(D-10),D是距离距离单位:m激光类型:620-690nm激光等级:Ⅱ级,<1mW(二级安全)单次测量时间:0.25秒在距离m处光斑直径:6mm@10m,工作温度:-0~+40℃贮存温度:-20~+60℃重量:约60g尺寸(长×宽×厚):4.8cmX3.7cmX1.8cm供电电压:DC3v-3.3vIO电压:TTL电平兼容3v-5v电压在室内基本无需反光板,近距离内使用黑色目标也可测距,例如黑色皮质钱包表面,室外如果量程内返回无反射则请使用反光板配合.**在恶劣环境下如:阳光过于强烈,环境温度波动太大,反射面效果比较弱,系统电压多高或者过低,测量距离会比较近,结果可能会出现较大误差,此种情况建议配合使用目标反射板****模块使用禁止超出标注的电气范围,使用不符合规定的供电电压可能会损坏模块,5vIO直接相连请设置为若驱动,如果为AVR或者STC单片机,请串联1K欧姆限流电阻**通信接口:模块采用TTL串口进行数据交换,通信速率高达115k(波特率115200)只打开激光,但不测量,可用于瞄准目标(激光打开后自动超时关闭)指令表:指令一览表指令内容应答备注启动单次测量$00022123&确认确认后跟测量数据开灯$0003260130&确认+命令重复开启连续测量$00022426&确认停止连续测量$0003260029&确认+命令重复指令确认$00023335&这是从机的确认指令最后7位是0001643没信号距离太远或激光头发射或接收头被遮挡最后7位是0001542距离太近终止连续测量$00022123&确认+命令重复可以使用单次测量指令在连续测量过成功,终止测量关闭激光$00022123&确认模块不设置休眠模式,如需关闭激光可以使用单次测量指令指令使用建议:1.激光开启,一般用于打开激光后帮助瞄准目标2.单次测量,进行一次测量,建议测距前瞄准目标3.连续测量,用于扫过一个平面或者立体面,如墙角,模块每次返回的数据均包含本次测量距离,最大值,最小值等,并在每个值前面有3位字符用来标记本条数据是否有效4.停止测量,模块未设置低功耗模式,激光打开后不自动关闭,如需要关闭激光,可以发送一次单次测距指令收发数据示例:开启激光:直接开启激光但不测距一般用于人工瞄准如将模块安装到某些设备上进行特定范围内的测距,则本指令可以省略主机发$0003260130&,模块回复确认+指令重复(中间没有+号)$00023335&$0003260130&确认指令重复单次测量模式:单次测量模式需要保证激光照射点在目标表面,如果测距之前不确定激光是否能指向目标表面请执行”开激光”指令主机发$00022123&模块回复$00023335&+测量数据,测量数据解析示例用户在读取单次测量模式的数据时,可以以$判断作为数据头,&作为数据尾(数据10字节应答+18字节测量数据)蓝色共10位(第0-9位):从机在单次测量模式下的应答绿色共7位(第20-27)第:表示距离,7位中的前两位表示整数部分,后5位表示小数部分其余字段保留以备扩展$00023335&$0006210000008916&00.08916米单次测距模式的调试截图-------------------------------------------------------------------------------------------1,模式1的错误码错误码错误原因错误响应时间$00023335&$0006210000001542&距离太近从指令发出到返回错误码大约5秒$00023335&$0006210000001643&未收到回波从指令发出到返回错误码大约5秒$00023335&$0006210000001744&反射过强从指令发出到返回错误码大约5秒$00023335&$0006210000001845&环境光过强从指令发出到返回错误码大约5秒连续测量模式连续测量模式下主机发送一个连续测距指令模块可以执行101(501次连续测量),模块每次返回的数据均包含本次测量距离,最大值,最小值等,并在每个值前面有3位字符用来标记本条数据是否有效,如果测距中出现错误(遮挡到激光发射口,透镜,或者距离太近)会输出错误码,并将测量计数置为9999,并终止本次连续测距,模块在连续测距模式下,每5次测量会关闭激光并重新打开一次,此模式一般用于慢速扫过一个平面或者立体面,如墙角,从而得到最大值和最小值,也可用于实时测距,一次触发百次测量减轻cpu负担,并提高测量速度连续测量模式的数据解析测量数据长度为38字节蓝色(第1-6位)共6位:保留以备未来扩展红色(第7-10位)共4位:测量次数计数,最后一次测量或者出错终止测量时,测量次数计数器等于9999,则本条数据可以忽略,或重发批量测距数据,以用于不间断连续测距黑色(第11-13位)共3位:本次测量测距是否有效,后面意义相同粉红(第14-18位)共5位:本次测量距离浅蓝(第22-26位)共5位:最大值绿色(第30-37)共7位第:表示距离,7位中的前两位表示整数部分,后5位表示小数部分主机发$00022426&模块先给一个10字节应答$00023335&然后返回测距数据,实际模块返回的数据如下图,注意第一次回传测量数据会在前面带一个响应,直接丢弃即可,参考截图中的第一行数据解析示例:$001624000100004855000048550000485550&第1次04.855米最大04.855米最小04.855米(第一次测量三个值一致) $001624001000000136000048550000013627&第10次00.136米最大04.855米最小04.855米$001624049800004830000048310000012121&第498次04.830米最大04.831米最小00.121米$001624999900004830000048310000012117&最后一次,本次数据可舍弃错误的代码示例$001624000100118297001182970011829711&第1次测量数据无效,错误代码18值模式2的错误码模式2连续测量中模块连续返回N次数据,用户可以用$作为数据头,&作为数据尾错误码原因错误响应时间说明$001624999900000015000 000000000000053&距离太从指令发出到返回错误码大约5秒如果连续测量中出现错误,测量会被停止,测量次数计数器(数据的第7到第10位)会自动设置为9999,启动新的一次测量会冲1开始计$001624999900000016000 000000000000054&未收到回波从指令发出到返回错误码大约5秒其余的情况测量数据小于00.045米都是测量错误,附录:外观尺寸和接口:端口电压功能备注VCC3-3.3V模块供电大于3.3v会烧坏GND模块电源地TXD3v-5v模块数据发送引脚可以直接5v单片机相连,推挽输出类型的io要加限流电阻,入不确定请用3.3v单片机相连RXD3v-5v模块接收数据引脚可以直接5v单片机相连,推挽输出类型的io要加限流电阻,入不确定请用3.3v单片机相连Fpc0.5mm8p翻盖式注意事项:用户禁止自行打开本模块或者焊接本模块上的任何器件,禁止将模块直视太阳将模块接触液体用酒精或者有机溶剂擦拭镜头用收或其他物体直接擦拭镜头采用额定电压以外的供电电压。
传感器代号

颅内压
食道压力
[分]压
[绝]压
[微]压
[差]压
[血]压
眼电[图]
迎角
应力
液位
浊度
振动
紫外光
重量(稳重)
真空度
噪声
姿态
氢离子活[浓]度
钠离子活[浓]度
氯离子活[浓]度
氧分压
一氧化碳分压
电强
色
谷氨
红外
呼流
活[浓]
血电
血容
血速
压
[膀]压
[胃]压
[颅]压
[食]压
眼电
浊
紫光
真空
H+
Na+
Cl-
O2
CO
转换原理
转换原理简称
代号
转换原理
转换原理简称
代号
电解
变压器
磁电
催化
场效应管
差压
磁阻
电磁
电导
电感
电化学
单结
电涡流
超声多普勒
电容
电位器
电阻
热导
浮子-干簧
(核)辐射
浮子
光学式
光电
光伏
光化学
光导
光纤
场效
电化
电涡
多普
电位
浮簧
光
光化
AJ
BY
CD
CH
CU
CY
CZ
DC
DD
DG
DH
DJ
DO
DP
OR
DW
DZ
ED
FH
FS
HP
HS
HY
I
IA
ID
IS
IY
某型手持激光测距机几种错误代码故障检排

某型手持激光测距机几种错误代码故障检排发表时间:2016-08-16T16:14:10.920Z 来源:《低碳地产》2015年第16期作者:孙永清[导读] 某型手持激光测距机在出现故障时,机内显示器会显示几种错误代码。
现将这几种错误代码进行分析,供有关维修人员借鉴。
孙永清中国人民解放军南京3304工厂维修中心江苏南京 210000 某型手持激光测距机在出现故障时,机内显示器会显示几种错误代码。
现将这几种错误代码进行分析,供有关维修人员借鉴。
故障现象一:在对目标进行激光测距的过程中,机内显示器中显示系统错误代码“FF 2”。
故障原因分析:错误代码“FF 2”表示手持激光测距机无高压产生。
该故障可能产生的原因有以下几点:⑴操作手在测距过程中触发按钮开关按下的持续时间<1秒;⑵高速电压比较器的D1(LM119H)故障;⑶开关管V20、V21(3DK2B)故障;⑷高频小功率晶体管V19(3CG966)故障。
故障排除:a)首先检查测距过程中触发按钮开关按下的持续时间,一般要求≥1s,如果时间≤1s,就重新操作一次;b)按下充电按钮,D1的4脚接地,用示波器检测到D1的1脚输出应为高电平,若不为高电平则更换D1;c)若D1的1脚输出为高电平,这时V21(3DK2B)应导通,若不导通则更换V21(3DK2B);d)若V21导通,则V19(3CG966)应导通,若不导通则更换V19。
故障现象二:在对目标进行激光测距的过程中,机内显示器中显示系统错误代码“FF 3或FF 4”。
故障原因分析:错误代码“FF 3”表示测距机+9V产生异常;错误代码“FF 4”表示测距机-9V产生异常。
该故障可能产生的原因有以下几点:⑴变压器T2故障;⑵三极管V24、V25、(3DK14E)的故障;⑶稳压模块N5(CW79L09)有故障;⑷稳压模块N6(CW78L06)的故障。
故障排除:a)用示波器探头检测变压器T2-12和T2-10的两个检测点,应有输出周期为125us、±15V的两组周期信号,若检测不到这两组信号,则更换T2;b)用示波器应能检测到经整流管V30~V33(IN4148)和V26~V29(IN4148)后的直流脉冲信号,若没有该信号则更换整流管V30~V33或V26~V29中损坏的器件;c)用万用表检测N6(CW78L09)的输出端是否有+9V,若没有则更换N6;d)用万用表检测N5(CW79L09)的输出端是否有-9V,若没有则更换N5。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
#include <REG52.h>
#include <INTRINS.h>
unsigned char code displaybit[]={0xfe,0xfd,0xfb,0xf7,
0xef,0xdf,0xbf,0x7f};
unsigned char code displaycode[]={0x3f,0x06,0x5b,0x4f,
0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0x77,0x7c,
0x39,0x5e,0x79,0x71,0x00,0x40}; unsigned char code dotcode[32]={0,3,6,9,12,16,19,22,
25,28,31,34,38,41,44,48,
50,53,56,59,63,66,69,72,
75,78,81,84,88,91,94,97};
unsigned char displaycount;
unsigned char displaybuf[8]={16,16,16,16,16,16,16,16};
unsigned char timecount;
unsigned char readdata[8];
sbit DQ=P3^7;
bit sflag;
bit resetpulse(void)
{
unsigned char i;
DQ=0;
for(i=255;i>0;i--);
DQ=1;
for(i=60;i>0;i--);
return(DQ);
for(i=200;i>0;i--);
}
void writecommandtods18b20(unsigned char command) {
unsigned char i;
unsigned char j;
for(i=0;i<8;i++)
{
if((command & 0x01)==0)
{
DQ=0;
for(j=35;j>0;j--);
DQ=1;
}
else
{
DQ=0;
for(j=2;j>0;j--);
DQ=1;
for(j=33;j>0;j--);
}
command=_cror_(command,1);
}
}
unsigned char readdatafromds18b20(void) {
unsigned char i;
unsigned char j;
unsigned char temp;
temp=0;
for(i=0;i<8;i++)
{
temp=_cror_(temp,1);
DQ=0;
_nop_();
_nop_();
DQ=1;
for(j=10;j>0;j--);
if(DQ==1)
{
temp=temp | 0x80;
}
else
{
temp=temp | 0x00;
}
for(j=200;j>0;j--);
}
return(temp);
}
void main(void)
{
TMOD=0x01;
TH0=(65536-4000)/256;
TL0=(65536-4000)%256;
ET0=1;
EA=1;
while(resetpulse());
writecommandtods18b20(0xcc); writecommandtods18b20(0x44);
TR0=1;
while(1)
{
;
}
}
void t0(void) interrupt 1 using 0
{
unsigned char x;
unsigned int result;
TH0=(65536-4000)/256;
TL0=(65536-4000)%256;
if(displaycount==2)
{
P0=displaycode[displaybuf[displaycount]] | 0x80;
}
else
{
P0=displaycode[displaybuf[displaycount]];
}
P2=displaybit[displaycount];
displaycount++;
if(displaycount==8)
{
displaycount=0;
}
timecount++;
if(timecount==150)
{
timecount=0;
while(resetpulse());
writecommandtods18b20(0xcc);
writecommandtods18b20(0xbe);
readdata[0]=readdatafromds18b20();
readdata[1]=readdatafromds18b20();
for(x=0;x<8;x++)
{
displaybuf[x]=16;
}
sflag=0;
if((readdata[1] & 0xf8)!=0x00)
{
sflag=1;
readdata[1]=~readdata[1];
readdata[0]=~readdata[0];
result=readdata[0]+1;
readdata[0]=result;
if(result>255)
{
readdata[1]++;
}
}
readdata[1]=readdata[1]<<4; readdata[1]=readdata[1] & 0x70; x=readdata[0];
x=x>>4;
x=x & 0x0f;
readdata[1]=readdata[1] | x;
x=2;
result=readdata[1];
while(result/10)
{
displaybuf[x]=result%10;
result=result/10;
x++;
}
displaybuf[x]=result;
if(sflag==1)
{
displaybuf[x+1]=17;
}
x=readdata[0] & 0x0f;
x=x<<1;
displaybuf[0]=(dotcode[x])%10;
displaybuf[1]=(dotcode[x])/10;
while(resetpulse());
writecommandtods18b20(0xcc);
writecommandtods18b20(0x44);
}
}。