单片机与欧姆表

上传人:回**** 文档编号:122517290 上传时间:2022-07-20 格式:DOC 页数:39 大小:346.50KB
收藏 版权申诉 举报 下载
单片机与欧姆表_第1页
第1页 / 共39页
单片机与欧姆表_第2页
第2页 / 共39页
单片机与欧姆表_第3页
第3页 / 共39页
资源描述:

《单片机与欧姆表》由会员分享,可在线阅读,更多相关《单片机与欧姆表(39页珍藏版)》请在装配图网上搜索。

1、基于AT89S52单片机的毫欧表电路设计中南林业科技大学涉外学院 郭海 下载本文所波及到的protel格式电路图:有关的ic资料,有关源程序! 摘 要基于AT89S52单片机的毫欧表设计是采用伏安法测量电阻。采用TLC5615数模转换芯片和LM358运算放大器及三极管TIP41构成的压控恒流源提拱恒定的电流。测量电阻时可选择的电流分别为1mA,10mA,100mA。测量电阻的量程分别为40.00、4000m、400.0m。测量的电压信号通过LM358运算放器放大100倍后通过TLC1549模数芯片传入单片机进行计算解决并在数码管上输出电阻值!核心字:毫欧表压控恒流源 目 录:一.总体方案设计:

2、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 四.软件设计11 4.1 主程序流程图11 5.1 系统实现的功能,12 5.2 测量电阻措施:12 5.3 实际测试成果13 5.4 对测理成果的分析:15 六.设计总

3、结16 七.参照文献17 八.附:18 8.1 电路仿真原理图18 9.2 程序: 19 一.总体方案设计:采用伏安法测电阻,通以恒定的电流,测量电阻上的电压。由于URI由于电阻为毫欧,如果电流为毫安的话,则所得的电压值很小,难以通过ADC辨认出来。可以采用大电流的措施和把电压信号放大的措施来使ADC芯片辨认出来并由通过单片机计算得出电阻值。采用大电流的话,由于诸多小电阻无法承受较大的电流,通过电阻的电流较大时,产生的热量也多,会带来较大的误差。因此采用把电压信号放大的措施,把微小的电压信号放大后通过AD转换,把信号送入单片机,然后由单片机计算并显示出电阻值。测量范畴测量电流最大输出电压电压放

4、大100倍40.001mA40mV4V4000m10 mA40mV4V400.0m100 mA40mV4V上图为测试电阻的范畴及测量时的电流:下载本文所波及到的protel格式电路图:有关的ic资料,有关源程序!二.方案选择:2.1电阻测量方案2.1.1 方案一 比较法测电阻: 在乙图中,K1闭合,K2断开测得U1;K1断开,K2闭合测得U2,使用条件:在乙图中应保证AB间电压恒定。上图中的比较法测量电阻值的阻值非常小时,电阻R0难以选用。并且要用电压表测量两处电阻的电压。其中的导体接触间的电阻也会对测量成果导致一定的误差,并且对电压表的规定高。没有采用此方案。2.1.2 方案二 替代法测电阻

5、环节:K1打开,K2接1,调节R1为最大,电阻箱R0为最大。闭合K1。调节R1使、指针指在2/3处,读数。K2接2,保持R1不动,调节R-0,使、读数不变。RX=电阻箱读数。条件:被测量的部份电路电流或电压不变。上图但不适合于测量小电阻。由于电阻箱的阻值一般都较大。测量的电阻精度低。2.1.3 方案三 直流电桥测电阻直流电桥又分直流单电桥和直流双电桥。采用上面的两种措施时要用诸多操作需要手动操作,并且对元件选用规定高,是通过数字电位器来变化需要的电阻参数,虽然可以达到数控的目的,但数字电位器的每一级步进电阻比较大,调节困难,需要采用数控电阻,用单片机解决计算杂复并且测量时操作不以便。2.1.4

6、 方案四 伏安法测电阻 采用伏安法测量电阻时,恒流源电路产生恒定的电流源通过被测电阻Rx,只需要测量出Rx上的电压大小,然后用RxU / I 即可算出电阻的阻值大小。以便单片机进行解决。实际操作起来相对也比较简朴。方案四,操作简朴,计算以便。精度比方案一和方案二高,但操作和计算比方安三更简朴和方案。因此采用方案四伏安法测电阻。2.2 压控恒流源方案2.2.1 方案一 IU/(R1+R2),若R1R2,则电流I约为IU/R1;可以采用一种恒定的电压,然后除以一种大电阻,测试时由时所测的电阻很小,基本上可以看作电流是恒定的。但这种方案测量的电阻阻值越大,电流变化较大,电流精度不高。2.2.2 方案

7、二 采用恒流二极管或者恒流三极管,精度比较高,但这种电路能实现的恒流范畴很小,只能达到十几毫安,不能达到题目的规定。2.2.3 方案三压控恒流源,通过变化恒流源的外围电压,运用电压的大小来控制输出电流的大小。电压控制电路采用数控的方式,运用单片机送出数字量,通过D/A转换转变成模拟信号,再送到运算放大器和大功率三极管进行放大输出电流。该方案通过软件措施实现输出电流稳定,易于功能的实现,便于操作,故选择此方案。原理图如下面的数控恒流源中的原理图。三.单元模块设计:3.1 数控恒流源数控恒流源为电阻测量提供恒定的电流。单片机由测量所需的电流而控制输出恒定电流的大小。实际电路中采用的三极管为TIP4

8、1,三极管自身在这里不具有控制电流大小的作用,但是起到驱动和扩流的作用。前面是一种电压跟随,背面一种负反馈。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);从而可得R5上电压为UR5VO - Va =(R4/R3)V- - (R2/R1)V+ +(V-V+)+ (R2/R1)Vi ,若R2=R1,R3=R4,

9、且 V-V+ 则UR5Vi(输入电压)假设I5=IL 可得 VA/RLVI/R5 ,由上式的Va=(V+-V-)R2/R1+V+;及R2=R1;可得 (V+ - V-)/RLVi / R5 即(V+/V-)-1 RL/ R5;当V+Vi 和RLR5, R3+R4RL,时可满足RL上电流恒定。3.2 电压放大模块设计需要把测量到的直流电压信号放大100倍后,即可传给AD芯片再由单片机处量。原理图如下 通过调节R2与R1的比值即可以变化电压放大倍数。上图为LM358的PDF里提供的电路原理图,实际电路中采用的电阻R21M,R1由3296电位器构成,阻值调成10K。上图是采用的单个运算放大一百倍。也

10、可以采用两个运算,每个放大十倍。实际电路制作过程中,上面两种措施都进行测试,发现采用单个运算放大一百倍效果相对要好。因此实际电路中是采用的单个运算放大100倍的措施。3.3 AD转换与单片机解决电阻测量所获得的电压信号放大100倍后,通过AD-IN传入ADC转换芯片。再由单片机计算,用所得的电压除以测量时恒定的电流可得电阻的阻值大小,但此时的电阻阻值还不是实际所测得的电阻阻值,由于电压是放大一百倍后所得的。因此成果应缩小100倍即可得到真实的电阻阻值大小。3.4 DA转换由单片机控制DAC5615芯片分别产生40mV、400mV、4000mV的电压即可获得需要测量的电流分别为1mA (40mV

11、/40)、10mA (400mV/40)、100mA (4000mV/40)。实际电路中只需要选择好相应的电阻测量范畴即可。不需要手机选择测试电流,电流将由单片机控制电压控制电流源电路输出所需要的电流。3.5 按键的输入及数码管的显示输出采用了串行接口8位LED数码管及64键键盘智能控制芯片HD7279芯片来解决按键的输入及位数码管的输出显示。本电路只采用了44的按键及位数码管显示输出。四.软件设计4.1 主程序流程图 五.系统功能,指标参数5.1 系统实现的功能(1) 电阻的测量,测量电阻范量为0.1m40。(理论值可达到0.1m)(2) 产生方波,正弦波,方波,锯齿波。(3) 时钟的显示功

12、能。并可调节时间。(4) 测量0-4V间的直流电压值。(5) 压控恒流源 输入0-4V的电压,产生恒定的电流为0-100mA。5.2 测量电阻措施用小鳄鱼夹接好电阻,选估计被测电阻的范畴,再按下按键来选择测试的电流。其中,在100mA电流(按键3)中设了自动调零技术。可以选用把测试导线直接短接后,选按下数字键,再按一下自动调零按键(数字0)即可。测量出的电阻显示的是,测量值减去导线间的电阻值。注意:1,必须在测试之前,拟定被测电阻可以安全流过最大测试电流!特别在使用 0.4 (100mA)档时! 2,调零时,先把两根测试导线短接。按下要用的量程键(数字键3)之后,再按下调零键(数字键0)。此时

13、,数码管会显示出目前导线间的电阻值一秒钟并保存。再按下量程键(数字键3)即可进行测量。5.3 实际测试成果被测电阻所有为四色坏的碳膜电阻。0.24、2、2.2、3.9由于测试时电阻有限,所如下面测试中部分电阻阻值是采用以上电阻串联或并联起来作为一种被测电阻。三个量程测试的数据分别如下:1mA电流的量程,测得电阻阻值如下表量程电阻标称值测量电阻值绝对误差相对误差 %1mA 4010.990.011.00 1mA 4022.110.115.50 1mA 402.22.060.146.36 1mA 403.93.880.020.51 1mA 4044.040.041.00 1mA 4066.280.

14、284.67 1mA 4088.450.455.62 1mA 401010.560.565.60 1mA 401212.880.887.33 1mA 401413.940.060.43 1mA 401616.340.342.13 1mA 401818.820.824.56 1mA 402020.740.743.70 1mA 402222.780.783.55 平均3.71 10mA电流的量程,测得电阻阻值如下表量程电阻标称值测量电阻值绝对误差相对误差 %10mA 40.120.1200.00 10mA 40.240.2400.00 10mA 40.480.5080.0285.83 10mA 4

15、0.720.7680.0486.67 10mA 411.0240.0242.40 10mA 422.0520.0522.60 10mA 42.22.2160.0160.73 10mA 43.93.9280.0280.72 10mA 444.0480.0481.20 平均2.24 100mA电流的量程,测得电阻阻值如下表量程电阻标称值m测量电阻值m绝对误差相对误差 %100mA 0.46061.41.42.33 100mA 0.48083.53.54.38 100mA 0.4120125.45.44.50 100mA 0.4240255.815.86.58 平均4.45 5.4 对测理成果的分析

16、1 在采用1mA电流测试时,当被测电阻不不小于2时,所得的测试成果平均比电阻标称值要小0.23。当被测的电阻不小于14欧时,所得的测试成果平均比电阻标称值要大1.38。在编程中对上面问题进行了软件修正。2 分析因素,当测量电流为1mA,电阻不不小于2欧时,产生的电压也不不小于2mV。由于LM358器件因素,而使得输出成果小0.23。被测电阻不小于14欧时,所得成果偏大的因素,估计由时测试时的14,16,18,20,22的电阻都是由一单独阻值为2的碳膜电阻串联而成的。在两电阻间的接触处没有用电烙铁等工具焊接起来,并且直接用把电阻引脚绑定在一起。每个电阻连结处的电阻给测量成果带来的较大的偏差。3

17、测试成果表白,所测得的电阻在一定限度上与电阻自身标称值相似,当工作电流太小,或在比较大的电流范畴时误差有所增长。引起这些误差的因素是多方面的,重要由测量仪器的系统误差以及电阻采用的是四环的碳膜电阻受温度影响较大,电流源工作在大电流时受温度影响所致。4 本系统如果采如精度更高,温度特性更好的电阻和导线,可提高测量的精度。六.设计总结在制作毫欧表的过程中,我深切的体会到电路理论与实际相结合的重要。以及用电脑软件仿真与电路理论及电路实际的不同。自己制作过程是先实际再理论最后再实际的过程。自己最初制作的毫欧表是采用的是稳定的电压除以大电阻的恒流源方案。测量的成果不是很稳定。并且每次换量程时还需要手动变

18、化电流,操作繁琐。背面打算单片机通过控制继电器来变化电流开关。需要占用较多的单片机资源。并且成本增长。背面发现了压控恒流源方案来恒定电流,接着花了很长时间查资料学习及实验采用的压控恒流源的措施来提拱恒定的电流。在整个制作过程中,重要是离不开上学期电子培训课上教师所教的知识及提供的条件,让自己学到了更多的知识。另一方面是网上电子爱好者及电子类的论坛给了自己很大的协助,在整个制作过程中所遇到的问题大部分是通过网络上虽互不结识但都爱好电子的电子爱好者予以的解答。用途:测量直流类m数十 的小电阻,重要用于电动机,扬声器,继电器等线圈的直流电阻,由于它们的直流电阻数值不大,一般万用表实际很难测量到精确读

19、数.使用毫欧表可以解决大部分这种测量.七.参照文献1:周尘.单片机C语言轻松入门.北京航空航一大学出版社.2:康华光,陈大钦编.电子技术基本.高等教育出版社.3:周润景.张丽娜.基于PROTEUSR的电路及单片机系统设计与仿真.4: 杰龙电子 单片机毫欧表5: 八.附:8.1 电路仿真原理图在proteus电路仿真软件中的仿真的压控恒流源电路原理图如下:在Multisim 9电路仿真软件中的仿真的压控恒流源电路原理图如下:9.2 程序:#include #includevoid write7279(unsigned char, unsigned char);/写入到HD7279unsigned

20、 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(vo

21、id);/滤波程序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 cha

22、r 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 AC

23、TCTL 0x98#define SEGON 0xe0#define SEGOFF 0xc0#define BLINKCTL 0x88/* 键盘按键代码*#define one 0x3a#definetwo 0x39#definethree 0x38#definefour 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

24、 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; / HD7279sbit clk=P02; / HD7279sbit dat=P00; / HD7279sbit key=P01; / HD7279s

25、bit ad_clk =P22; /ADC1549sbit ad_cs=P20; /adsbit ad_dout=P21; /adsbit DIN=P23;/DAC5615 sbit DaCS=P24;/dasbit DaSCLK=P25;/davoid da5615(unsigned int);void fangbo(void);void juchibo(void);void sanjiaobo(void);void zhenxianbo(void);void set_time (void);code unsigned char TAB= 0x80,0x83,0X86,0X89,0X8D,0

26、X90,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, 0X

27、FF,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

28、,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,

29、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, 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,0

30、X60,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时变为0if(hour23)*p=0;/当 时显示为23时变为0 displaytime();

31、/显示时钟delay10ms(100); DaConv(0);break;case nine: doEA=1;/开总中断 displaytime();/显示时钟 delay10ms(100); DaConv(0);while(key);break;case up:dozhenxianbo();/正弦波 while(key);break;case left:dosanjiaobo();/三角波 while(key);break;case right:do juchibo();/锯齿波 while(key);break;case down:do fangbo();/方波 while(key);br

32、eak; /* 定期器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 display

33、time()/显示时钟 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);/显示 时的 个位

34、/* ADC数码管显示转换后的电压值数值*/void adc(void) unsigned char d0,d1,d2,d3; unsigned int a; u1=lubo();a=u1200&a14000&a40770)a=a-1380;/修正电阻值 当电阻值不小于14欧姆时,显示成果为测量值减去1.38欧d3=a/10000;d2=a/1000%10;d2=d2|0x80; /显示小数点d1=a/100%10;d0=a/10%10;overflow(d3,d2,d1,d0);/* 10mA 计算电阻值*/void resistance10mA() unsigned char d0,d1,

35、d2,d3;unsigned int a; u1=lubo();a=u12; /* a=u1*4; */d3=a/1000;d2=a/100%10;d1=a/10%10;d0=a%10;overflow(d3,d2,d1,d0);/* 100mA 计算电阻值*/void resistance100mA() unsigned char d0,d1,d2,d3; unsigned int a; u1=lubo();a=u12; if(a!=4092) a=a-res;d3=a/1000;d2=a/100%10;d1=a/10%10; d1=d1|0x80; /显示小数点 d0=a%10;write

36、7279(DECODE0+7,d3);/ 第八位数码管write7279(DECODE0+6,d2);/ 第七位数码管write7279(DECODE0+5,d1); / 第六位数码管write7279(DECODE0+4,d0); / 第五位数码管 elsewrite7279(DECODE0+7,1); / 超过范转显示1 write7279(DECODE0+6,0x0f);/ 第七位数码管空write7279(DECODE0+5,0x0f); / 第六位数码管空write7279(DECODE0+4,0x0f); / 第五位数码管空/* 溢出显示1*/void overflow(unsig

37、ned char d3,unsigned char d2,unsigned char d1,unsigned char d0) if(d3=4 & d1=9)/ 超过范转显示1 write7279(DECODE0+7,1); / 超过范转显示1 write7279(DECODE0+6,0x0f);/ 第七位数码管空write7279(DECODE0+5,0x0f); / 第六位数码管空write7279(DECODE0+4,0x0f); / 第五位数码管空 else write7279(DECODE0+7,d3);/ 第八位数码管write7279(DECODE0+6,d2);/ 第七位数码管

38、write7279(DECODE0+5,d1); / 第六位数码管write7279(DECODE0+4,d0); / 第五位数码管 /* 计算导线间的电阻值*/void ABC() unsigned int a; unsigned char d0,d1,d2,d3; a=lubo();a=a=3000)res=0; write7279(DECODE0+3,d3);/ 第八位数码管 write7279(DECODE0+2,d2);/ 第七位数码管 write7279(DECODE0+1,d1); / 第六位数码管 write7279(DECODE0+0,d0); / 第五位数码管 elsere

39、s=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+) ad_clk=0; short_delay(); u=u*2; if (ad_dout=1)

40、 u + ; ad_clk =1 ; /上升沿接受数据short_delay(); ad_dout=1; ad_cs=1; return u; short_delay(); /*滤波程序*unsigned int lubo(void)/滤波程序unsigned char i; unsigned int a10,sum=0,value; for(i=0;i10;i+)/取值 ai=adc1549(); short_delay(); for(i=0;i10;i+) /求和 sum=sum+ai; value=sum/10;/计算平均值 return value; /*TLC5615转换子程序*vo

41、id 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; DaSCLK=0;void send_byte(

42、unsigned char out_byte)/发送一种命令字 unsigned char i;clk=0;cs=0;short_delay();for (i=0;i8;i+) clk=0; if (out_byte&0x80) dat=1; else dat=0;clk=1;short_delay();out_byte=out_byte*2; dat=1;unsigned char receive_byte(void) /接受一种命令字 unsigned char i, in_byte; cs=0; clk=0; dat=1; /设为输入状态 short_delay();for (i=0;i

43、8;i+) clk=0;in_byte=in_byte*2;clk=1;if (dat=1)in_byte=in_byte|0x01; dat=1;/cs=1;return (in_byte);void write7279(unsigned char cmd, unsigned char dta) send_byte (cmd); send_byte (dta);cs=1;unsigned char read7279(unsigned char command) send_byte(command);cs=1;return(receive_byte(); void short_delay(vo

44、id) /短延时 unsigned char i;for (i=0;i8;i+);/ * n*10ms 延时*void delay10ms(unsigned char time)unsigned char i;unsigned int j;for(i=0;itime;i+) for(j=0;j0x390;j+); void fangbo(void)uint j;delay10ms(100); while(key) for(j=0;j2;j+) if(j1) DaConv(0x0fff); else DaConv(0x0000); void juchibo(void)uint i,j; i=0;

45、 j=0; delay10ms(100); while(key) if(i500) i=i+30; /周期 j=j+3; /幅值 DaConv(j*40); else i=0; j=0; void sanjiaobo(void)uint i,j,k; i=0; j=0; delay10ms(100); while(key) for(i=0;i1;i+) /周期 if(j200) k=200; j=j+10; DaConv(j*10); else if(k1) j=0; else DaConv(k*10); k=k-10; void zhenxianbo(void)uint i;delay10ms(100); while(key) for(i=0;i253;i+)DaConv(TABi*6); SCRSCR

展开阅读全文
温馨提示:
1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
2: 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
3.本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!