中南林业科技大学基于at89s52单片机的毫欧表电路设计
收藏
资源目录
压缩包内文档预览:(预览前20页/共32页)
编号:512682
类型:共享资源
大小:293.76KB
格式:RAR
上传时间:2015-11-11
上传人:QQ28****1120
认证信息
个人认证
孙**(实名认证)
辽宁
IP属地:辽宁
6
积分
- 关 键 词:
-
毕业设计
- 资源描述:
-
中南林业科技大学基于at89s52单片机的毫欧表电路设计,毕业设计
- 内容简介:
-
中南林业科技大学 涉外学院 基于 AT89S52单片机的毫欧表电路设计 学生学号: 20044749 学生姓名: 郭海 班 级 计算机一班 专业名称 计算机科学与技术 论文提交日期 2007年 05月 日 论文答辩日期 2007年 05月 18日 答辩委员会主席 评 阅 人 2007 年 05 月 18 日 nts 2 摘 要 基于 AT89S52 单片机的毫欧表设计是采用伏安法测量电阻。采用 TLC5615数模转换芯片和 LM358 运算放大器 及 三极管 TIP41 构成的压控恒流 源提拱恒定的电流。测量电阻时 可选择 的电流分别为 1mA, 10mA, 100mA。测量电阻的量程分别为 40.00、 4000m、 400.0m。测量的电压信号通过 LM358 运算放器放大 100 倍后经过 TLC1549 模数芯片传入单片机进行计算处理并在数码管上输出电阻值 ! 关键字: 毫欧表 压控恒流源 nts 3 目 录: 一 .总体方案设计: 4 二 .方案选择: 5 2.1.1 方案一 比较法测电阻: 5 2.1.2 方案二 替代法测电阻: 5 2.1.3 方案三 直流电桥测电阻 5 2.1.4 方案四 伏安法测电阻 6 2.2 压控恒流源方案: 6 2.2.1 方案一 6 2.2.2 方案二 6 2.2.3 方案三 6 三 .单元模块设计: 7 3.1 数控恒流源 7 3.2 电压放大模块设计 8 3.3 AD转换与单片机处理 9 3.4 DA转换 9 3.5 按键的输入及数码管的显示输出 9 四 .软件设计 10 4.1 主程序流程图 10 5.1 系统实现的功能, 11 5.2 测量电阻方法: 11 5.3 实际测试结果 12 5.4 对测理结果的分析: 14 六 .设计总结 15 七 .参考文献 16 八 .附: 17 8.1 电路仿真原理图 17 9.2 程序 : 18 nts 4 一 .总体方案设计: 采用伏安法测电阻,通以恒定的电流,测量电阻上的电压。因为 U R I 由于电阻为毫欧,如果电流为毫安的话,则所得的电压值很小,难以通过 ADC识别出来。可以采用大电流的方法和把电压信号放大的方法来使 ADC 芯片识别出来并由通过单片机计算得出电阻值。采用大电流的话,由于很多小电阻无法承受较大的电流,通过 电阻的电流较大时,产生的热量也多,会带来较大的误差。所以采用把电压信号放大的方法,把微小的电压信号放大后经过 AD 转换,把信号送入单片机,然后由单片机计算并显示出电阻值。 测量范围 测量电流 最大输出电压 电压放大 100 倍 40.00 1mA 40mV 4V 4000m 10 mA 40mV 4V 400.0m 100 mA 40mV 4V 上图为测试电阻的范围及测量时的电流: nts 5 二 .方案 选择 : 2.1 电阻测量方案 2.1.1 方案一 比较法测电阻: 在乙图中 ,K1 闭合 , K2 断开测得 U1;K1 断开, K2 闭合测得 U2, 使用条件 :在乙图中应保证 AB 间电压恒定 。上图中的比较法测量电阻值的阻值非常小时,电阻 R0 难以选取。并且要用电压表测量两处电阻的电压。其中的导体接触间的电阻也会对测量结果造成一定的误差,并且对电压表的要求高。没有采用此方案。 2.1.2 方案二 替代法测电阻: 步骤: K1 打开, K2 接 1,调节 R1 为最大,电阻箱 R0 为最大。 闭合 K1。调节 R1 使、指针指在 2/3 处,读数。 K2 接 2,保持 R1 不动,调节 R-0,使、读数不变。 RX=电阻箱读数。 条件: 被测量的部份电路电流或电压不变。 上图但不适合于测量小电阻。因为电阻箱的阻值一般都较大。测量的电阻精度低。 2.1.3 方案三 直流电桥测电阻 直流电桥又分直流单电桥和直流双电桥。 采用上面的两种方法时要用很多操作需要手动操作,并且对元件选取要求高,是通过数字电位器来改变需要的电阻参数,虽然可以达到数控的目的,但数字电位器的每一级步进电阻比较大,调节困难,需要采用数控电阻,用单片机处理计算杂复并且测量时操作不方便。 nts 6 2.1.4 方案 四 伏安法测电阻 采用伏安法测量电阻时, 恒流源电路产生 恒定的电流源通过被测电阻 Rx,只需要测量出 Rx上的电压大小,然后用 Rx U / I 即可算出电阻的阻值大小。方便单片机进行处理。实际操作起来相对也比较简单。方案四 ,操作简单,计算方便。精度比方案一和方案二高,但操作和计算比方安三更简单和方案。所以采用方案四伏安法测电阻。 2.2 压控恒流源方案: 2.2.1 方案一 I U/( R1+R2) ,若 R1R2,则电流 I 约为 I U/R1; 可以采用一个恒定的电压,然后除以一个大电阻,测试时由时所测的电阻很小,基本上可以看作电流是恒定的。但这种方案测量的电 阻阻值越大,电流变化较大,电流精度不高。 2.2.2 方案二 采用恒流二极管或者恒流三极管,精度比较高,但这种电路能实现的恒流范围很小,只能达到十几毫安,不能达到题目的要求。 2.2.3 方案三 压控恒流源,通过改变恒流源的外围电压,利用电压的大小来控制输出电流的大小。电压控制电路采用数控的方式,利用单片机送出数字量,经过 D/A 转换转变成模拟信号,再送到运算放大器和大功率三极管进行放大输出电流。该方案通过软件方法实现输出电流稳定,易于功能的实现,便于操作,故选择此方案。原理图如下 面的数控恒流源中 的原理图。 nts 7 三 .单元模块设计: 3.1 数控恒流源 数控恒流源为电阻测量提供恒定的电流。单片机由测量所需的电流而控制输出恒定电流的大小。 实际电路中采用的三极管为 TIP41,三极管本身在这里不具备控制电流大小的作用,但是起到驱动和扩流的作用。前面是一个电压跟随,后面一个负反馈。 R9 上的电压为输入的电压 Vin。 理论计算 I1=VR1/R1=(Vi-V+)/R1 ; I2=VR2/R2=(V+-Va)/R2 ; 因为 I+=0,得 I1 = I2 所以 Va=(V+-Vi)R2/R1+V+; I3=VR3/R3=V-/R1 ;I4=VR4/R4=(VO-V-)/R4 ; 因为 I-=0,得 I3 = I4 所以 VO= V- (R3/R4+1); nts 8 从而可得 R5 上电压为 UR5 VO - Va =( R4/R3) V- - ( R2/R1) V+ +(V-V+) + ( R2/R1) Vi , 若 R2=R1,R3=R4,且 V- V+ 则 UR5 Vi( 输入电压 ) 假设 I5=IL 可得 VA/RL VI/R5 , 由上式的 Va=(V+-V-)R2/R1+V+; 及R2=R1; 可得 ( V+ - V-) /RL Vi / R5 即 ( V+/V-) -1 RL/ R5; 当 V+R5, R3+R4RL,时可满足 RL 上电流恒定。 3.2 电压放大模块设计 需要把测量到的直流电压信号放大 100 倍后,即可传给 AD 芯片再由单片机处量。原理图如下 通过调节 R2 与 R1 的比值即可以改变电压放大倍数。 上图为 LM358 的 PDF 里提供的电路原理图,实际电路中采用的电阻 R21M , R1 由 3296 电位器构成,阻值调成 10K。 上图是采用的单个运算放大一百倍。也可以采用两个运算,每个放大十倍 。 实际电路制作过程中,上面两种方法都进行测试,发现采用单个运算放大一百倍效果相对要好。所以实际电路中是采用的单个运算放大 100 倍的方法。 nts 9 3.3 AD转换与单片机处理 电阻测量所取得的电压信号放大 100 倍后,通过 AD-IN 传入 ADC 转换芯片。再由单片机计算,用所得的电压除以测量时恒定的电流可得电阻的阻值大小,但此时的电阻阻值还不是实际所测得的电阻阻值,因为电压是放大一百倍后所得的。所以结果应缩小 100 倍即可得到真实的电阻阻值大小。 3.4 DA 转换 由单片机控制DAC5615 芯片分别产生40mV、 400mV、 4000mV 的电压即可获得需要测量的电流分别为 1mA (40mV/40)、 10mA (400mV/40)、 100mA (4000mV/40)。实际电路中只需要选择好相应的电阻测量范围即可。不需要手机选择测试电流,电流将由单片机控制电压控制电流源电路输出所需要的电流。 3.5 按键的输入及数码管的显示输出 采用了串行接口 8 位 LED 数码管及 64 键键盘智能控制芯片 HD7279 芯片来处理按键的输入及位数码管的输出显示。本电路只采用了 4 4 的按键及位数码管显示输出。 nts 10 四 .软件设计 4.1 主程序流程图 开始 初始化 延时等待 是否有按键 按键识别 调用相应的程序 YES NO YES NO 延时等待 按键说明 1: 1mA 电流测量电阻 2: 10mA 电流测量电阻 3: 100mA 电流 测量电阻 4: 显示测量电压值 5: 备用(清除显示) 6: 备用(清除显示) 7: 暂停时钟进入调整 8: 调整时钟的数值 9: 启动并显示时钟 0: 自动调零(测量值减去导线电值) 上: 产生正弦波 下: 产生方波 左: 产生 三角 波 右: 皮生 距齿 波 Enter:备用(清除显示) Esc: 备用(清除显示) nts 11 五 .系统功能,指标参数 5.1 系统实现的功能, ( 1) 电阻的测量,测量电阻范量为 0.1m 40。 (理论值可达到 0.1m) ( 2) 产生方波,正弦波,方波,锯齿波。 ( 3) 时钟的显示功能。并可调整时间。 ( 4) 测量 0-4V 间的直流电压值。 ( 5) 压控恒流源 输入 0-4V 的电压,产生恒定的电流为 0-100mA。 5.2 测量电阻方法: 用小鳄鱼夹接好电阻,选估计被测电阻的范围,再按下按键来选择测试的电流。其 中,在 100mA 电流 (按键 3)中设了自动调零技术。可以选用把测试导线直接短接后, 选按下数字键,再 按一下自动调零按键(数字 0)即可。测量出的电阻显示的是,测量值减去导线间的电阻值。 注意: 1 必须在测试之前 ,确定被测电阻可以安全流过最大测试电流 !尤其在使用 0.4 ( 100mA) 档时 ! 2 调零时,先把两根测试导线短接。按下要用的量程键(数字键 3)之后,再按下调零键(数字键 0)。此时,数码管会显示出当前导线间的电阻值一秒钟并保存。再按下量程键(数字键 3)即可进行测量。 nts 12 5.3 实际测试结果 被测电阻全部为四色坏的碳膜电阻。 0.24 、 2 、 2.2 、 3.9 由于测试时电阻有限,所以下面测试中部分电阻阻值是采用以上电阻串联或并联起来作为一个被测电阻。三个量程测试的数据分别如下: 1mA 电流的量程,测得电阻阻值如下表 量程 电阻标称值 测量电阻值 绝对误差 相对误差 % 1mA 40 1 0.99 0.01 1.00 1mA 40 2 2.11 0.11 5.50 1mA 40 2.2 2.06 0.14 6.36 1mA 40 3.9 3.88 0.02 0.51 1mA 40 4 4.04 0.04 1.00 1mA 40 6 6.28 0.28 4.67 1mA 40 8 8.45 0.45 5.62 1mA 40 10 10.56 0.56 5.60 1mA 40 12 12.88 0.88 7.33 1mA 40 14 13.94 0.06 0.43 1mA 40 16 16.34 0.34 2.13 1mA 40 18 18.82 0.82 4.56 1mA 40 20 20.74 0.74 3.70 1mA 40 22 22.78 0.78 3.55 平均 3.71 nts 13 10mA 电流的量程,测得电阻阻值如下表 量程 电阻标称值 测量电阻值 绝对误差 相对误差 % 10mA 4 0.12 0.12 0 0.00 10mA 4 0.24 0.24 0 0.00 10mA 4 0.48 0.508 0.028 5.83 10mA 4 0.72 0.768 0.048 6.67 10mA 4 1 1.024 0.024 2.40 10mA 4 2 2.052 0.052 2.60 10mA 4 2.2 2.216 0.016 0.73 10mA 4 3.9 3.928 0.028 0.72 10mA 4 4 4.048 0.048 1.20 平均 2.24 100mA 电流的量程,测得电阻阻值如下表 量程 电阻标称值 m 测量电阻值 m 绝对误差 相对误差 % 100mA 0.4 60 61.4 1.4 2.33 100mA 0.4 80 83.5 3.5 4.38 100mA 0.4 120 125.4 5.4 4.50 100mA 0.4 240 255.8 15.8 6.58 平均 4.45 nts 14 5.4 对测理结果的 分析: 1 在采用 1mA 电流测试时,当被测电阻小于 2 时,所得的测试结果平均比电阻标称值要小 0.23 。当被测的电阻大于 14 欧时,所得的测试结果平均比电阻标称值要大 1.38 。在编程中对上面问题进行了软件修正。 2 分析原因,当测量电流为 1mA,电阻小于 2 欧时,产生的电压也小于 2mV。由于 LM358 器件原因,而使得输出结果小 0.23 。被测电阻大于 14 欧时,所得结果偏大的原因,估计由时测试时的 14 ,16 ,18 ,20 ,22 的电阻都是由一单独阻值为 2 的碳膜电阻串联而成的。在两电阻间的接触处没有用电烙铁等工具焊接起来,而且直接用把电阻引脚绑定在一起。每个电阻连结处的电阻给测量结果带来的较大的偏差。 3 测试结果表明 ,所测得的 电 阻 在一定程度上 与电阻本身标称值相同 ,当工作 电流太小,或在比较大的电流范围时误差 有 所 增加。引起这些误差的因素是多方面的,主要由测量仪器的系统误差以及 电阻采用的是四环的碳 膜电阻受温度影响较大, 电流源工作在大电流时受温度影响所致。 4 本系统 如果采如精度更高,温度特性更好的电阻和导线,可提高测量的精度。 nts 15 六 .设计总结 在制作毫欧表的过程中,我深切的体会到电路理论与实际相结合的重要。以及用电脑软件仿真与电路理论及电路实际的不同。 自己制作过程是先实际再理论最后再实际的过程。 自己 最初制作的毫欧表是采用的是稳定的电压除以大电阻的恒流源方案。测量的结果不是很稳定。而且每次换量程时还需要手动改变电流,操作繁琐。后面打算单片机通过控制继电器来改变电流开关。需要占用较多的单片机资源。 而且成本增加。后面发现了压控恒流源方案来恒定电流,接着花了很长时间查资料学习及实验采用的压控恒流源的方法来提拱恒定的电流。在整个制作过程中,主要是离不开上学期电子培训课上老师所教的知识及提供的条件,让自己学到了更多的知识。其次是网上电子爱好者及电子类的论坛给了自己很大的帮助,在整个制作过程中所遇到的问题 大部分 是通过网络上虽互不认识但都爱好电子的电子爱好者给予的解答。 用途: 测量直流类 m数十 的小电阻 ,主要用于电动机 ,扬声器 ,继电器等线圈的直流电阻 ,由于它们的直流电阻数值不大 ,普通万用表实际很难 测量到准确读数 .使用毫欧表可以解决大部分这种测量 . nts 16 七 .参考文献 1:周尘 .单片机 C 语言轻松入门 .北京航空航一大学出版社 .2006 2:康华光 ,陈大钦编 .电子技术基本 .高等教育出版社 .2004 3:周润景 .张丽娜 .基于 PROTEUSR 的电路及单片机系统设计与仿真 .2006 4: /0606/2711houb.htm 杰龙电子 单片机毫欧 表 5: /blog/user_default.aspx?u=asyun&page=3 nts 17 八 .附: 8.1 电路仿真原理图 在 proteus 电路仿真软件中的仿真的压控恒流源电路原理图如下: 在 Multisim 9 电路仿真软件中的仿真的压控恒流源电路原理图如下: nts 18 9.2 程序 : #include #include /*函数声明 */ void write7279(unsigned char, unsigned char);/写入到 HD7279 unsigned char read7279(unsigned char); /从 HD7279读出 void send_byte(unsigned char); /发送一个字节 unsigned char receive_byte(void); /接收一个字 节 void delay10ms(unsigned char time); /延时程序 void short_delay(void); /短延时 unsigned int adc1549(void); /ADC TLC1549 的驱动程序 void DaConv(unsigned int DaDat); /DAC TLC5615 的驱动程序 unsigned int lubo(void); /滤波程序 void zhenxianbo(void); /正弦波 void sanjiaobo(void); /三角波 void juchibo(void); /锯齿波 void fangbo(void); /方波 void displaytime(); /显示时钟 void adc(void); /显示测量出的电压值 void resistance1mA(); /1mA 计算电阻值 void resistance10mA(); /10mA 计算电阻值 void resistance100mA(); /100mA 计算电阻值 void ABC(); / 计算导线间的电阻值 void overflow(unsigned char d3,unsigned char d2,unsigned char d1,unsigned char d0); / 溢出显示 1 /* HD7279A 指令 * #define CMD_RESET 0xa4 #define CMD_TEST 0xbf #define DECODE0 0x80 #define DECODE1 0xc8 #define CMD_READ 0x15 #define UNDECODE 0x90 #define RTL_CYCLE 0xa3 #define RTR_CYCLE 0xa2 #define RTL_UNCYL 0xa1 #define RTR_UNCYL 0xa0 #define ACTCTL 0x98 #define SEGON 0xe0 #define SEGOFF 0xc0 #define BLINKCTL 0x88 nts 19 /* 键盘按键代码 * #define one 0x3a #define two 0x39 #define three 0x38 #define four 0x32 #define five 0x31 #define six 0x30 #define seven 0x2a #define eight 0x29 #define nine 0x28 #define Esc 0x22 #define zero 0x21 #define Enter 0x20 #define up 0x3f #define left 0x37 #define right 0x2f #define down 0x27 #define uint unsigned int #define uchar unsigned char /* 变量及 I/O口定义 * unsigned char key_number,hour=0,minute=0,second=0; unsigned int tmr; unsigned int u1=0,u=0,res=0,DaDate; sbit cs=P03; / HD7279 sbit clk=P02; / HD7279 sbit dat=P00; / HD7279 sbit key=P01; / HD7279 sbit ad_clk = P22; /ADC1549 sbit ad_cs= P20; /ad sbit ad_dout= P21; /ad sbit DIN=P23; /DAC5615 sbit DaCS=P24; /da sbit DaSCLK=P25; /da /*正弦波数值表 */ void da5615(unsigned int); void fangbo(void); nts 20 void juchibo(void); void sanjiaobo(void); void zhenxianbo(void); void set_time (void); code unsigned char TAB= 0x80,0x83,0X86,0X89,0X8D,0X90,0X93,0X96,0X99,0X9C,0X9F,0XA2,0XA5,0XA8,0XAB,0XAE, 0XB1,0XB4,0XB7,0XBA,0XBC,0XBF,0XC2,0XC5,0XC7,0XCA,0XCC,0XCF,0XD1,0XD4,0XD6,0XD8, 0XDA,0XDD,0XDF,0XE1,0XE3,0XE5,0XE7,0XE9,0XEA,0XEC,0XEF,0XF1,0XF2,0XF3,0XF4,0XF5, 0XF6,0XF7,0XF8,0XF9,0XFA,0XFB,0XFC,0XFD,0XFE,0XFE,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFE,0XFE,0XFD,0XFC,0XFB,0XFA,0XF9,0XF8,0XF7,0XF6, 0XF5,0XF4,0XF2,0XF1,0XEF,0XEE,0XEC,0XEA,0XE9,0XE7,0XE5,0XE3,0XE1,0XDE,0XDD,0XDA, 0XD8,0XD6,0XD4,0XD1,0XCF,0XCC,0XCA,0XC9,0XC5,0Xc2,0XBF,0XBC,0XBA,0XB7,0XB4,0XB1, 0XAE,0XAB,0XA8,0XA5,0XA2,0X9F,0X9C,0X99,0X96,0X93,0X90,0X8D,0X89,0X86,0X83,0X80, 0X80,0X7C,0X79,0X76,0X72,0X6F,0X6C,0X69,0X66,0X63,0X60,0X5D,0X5A,0X57,0X55,0X51, 0X4E,0X4C,0X48,0X45,0X43,0X40,0X3D,0X3A,0X38,0X35,0X33,0X30,0X2E,0X2B,0X29,0X27, 0X25,0X22,0X20,0X1E,0X1C,0X1A,0X18,0X16,0X15,0X13,0X11,0X10,0X0E,0X0D,0X0B,0X0A, 0X09,0X08,0X07,0X06,0X05,0X04,0X03,0X02,0X02,0X01,0X00,0X00,0X00,0X00,0X00,0X00, 0X00,0X00,0X00,0X01,0X00,0X02,0X03,0X04,0X05,0X06,0X07,0X08,0X09,0X0A,0X0B,0X0D, nts 21 0X0E,0X10,0X11,0X13,0X15,0X16,0X18,0X1A,0X1C,0X1E,0X20,0X22,0X25,0X27,0X29,0X2B, 0X2E,0X30,0X33,0X35,0X38,0X3A,0X3D,0X40,0X43,0X45,0X48,0X4C,0X4E,0X51,0X55,0X57, 0X5A,0X5D,0X60,0X63,0X66,0X69,0X6C,0X6F,0X72,0X76,0X79,0X7C,0X80; main() unsigned char a,*p; while(1) for (tmr=0;tmr3)a=0; write7279(BLINKCTL,0xff); /清除闪烁设置 displaytime(); /显示时钟 DaConv(0); delay10ms(100); break; case eight: *p=*p+1; if(second59|minute59)*p=0; /当 分 或 秒 显示为 59时变为 0 if(hour23)*p=0; /当 时 显示为 23时变为 0 displaytime(); /显示时钟 delay10ms(100); DaConv(0);break; case nine: do EA=1; /开总中断 displaytime(); /显示时钟 delay10ms(100); DaConv(0); while(key);break; case up:do zhenxianbo(); /正弦波 while(key);break; nts 23 case left:do sanjiaobo(); /三角波 while(key);break; case right:do juchibo(); /锯齿波 while(key);break; case down:do fangbo(); /方波 while(key);break; /* 定时器 0中断 */ void timer0() interrupt 1 /定时器 0中断 static Count=0; /静态变量计数器 TH0=0xdc; TL0=0x00; Count+; if(Count=100) Count=0; second=second+1; /判断时间是否到 1s 了? if(second=60) second=0; minute+=1; if(minute=60) minute=0; hour+=1; if( hour=23 & minute=59 & second=59) second=0; minute=0; hour=0; /* 显示时钟 */ void displaytime() /显示时钟 write7279(DECODE0+1,second/10); /显示 秒的 十位 write7279(DECODE0+0,second%10); /显示 秒的 个位 write7279(DECODE0+2,10); write7279(DECODE0+4,minute/10); /显示 分的 十位 write7279(DECODE0+3,minute%10); /显示 分的 个位 write7279(DECODE0+5,10); write7279(DECODE0+7,hour/10); /显示 时的 十位 write7279(DECODE0+6,hour%10); /显示 时的 个位 nts 24 /* ADC 数码管显示转换后的电压值数值 */ void adc(void) unsigned char d0,d1,d2,d3; unsigned int a; u1=lubo(); a=u1200&a14000&a=3000) res=0; write7279(DECODE0+3,d3); / 第八位数码管 write7279(DECODE0+2,d2); / 第七位数码管 write7279(DECODE0+1,d1); / 第六位数码管 nts 27 write7279(DECODE0+0,d0); / 第五位数码管 else res=a; write7279(DECODE0+3,d3); / 第八位数码管 write7279(DECODE0+2,d2); / 第七位数码管 write7279(DECODE0+1,d1); / 第六位数码管 write7279(DECODE0+0,d0); / 第五位数码管 delay10ms(100); /*A/DC1549 转换子程序 * unsigned int adc1549(void) uchar i; ad_cs=0; ad_clk=0; ad_dout=1; u=0; for(i=0;i10;i+) /*read data */ ad_clk=0; short_delay(); u=u*2; if (ad_dout=1) u + ; ad_clk =1 ; /上升沿接受数据 short_delay(); ad_dout=1; ad_cs=1; return u; /*return ad data */ short_delay(); /*滤波程序 * unsigned int lubo(void) /滤波程序 unsigned char i; unsigned int a10,sum=0,value; nts 28 for(i=0;i10;i+) /取值 ai=adc1549(); short_delay(); for(i=0;i10;i+) /求和 sum=sum+ai; value=sum/10; /计算平均值 return value; /*TLC5615 转换子程序 * void DaConv(uint DaDat) /TLC5615的 驱动程序,命令: DAConv uchar i=0; DaCS=1; _nop_(); _nop_(); DIN=0; DaSCLK=0; DaCS=0; _nop_(); _nop_(); for(i=0;i12;i+) DaDat=_irol_(DaDat,1); if(DaDat&0x0400)!=0) DIN=1; else DIN=0; DaSCLK=1; _nop_(); _nop_(); DaSCLK=0; _nop_(); _nop_(); DaCS=1; DIN=0;
- 温馨提示:
1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
2: 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
3.本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

人人文库网所有资源均是用户自行上传分享,仅供网友学习交流,未经上传用户书面授权,请勿作他用。