版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
基于PWM限制的LED灯光系统设计【摘要】本设计介绍了一种以STC单片机为核心的LED灯光限制系统,主要采纳PWM技术,及UART通讯技术。PWM是一种特别成熟的技术,目前已经广泛应用于调速,调光系统,而UART通讯是单片机最为常用的一种通讯方式。具体介绍单片机限制电路,通讯布线,PWM电路,及PWM限制设计,给出了系统软件设计方案。【关键词】PWM;STC单片机;UART通讯一、引言目前很多的灯光限制系统只是简洁的实现限制灯的亮暗依次及亮暗的时间,这类简洁的限制方式广泛地应用在灯光广告中,电路板一般采纳限制核心电路加上口线扩展电路及输出驱动电路组成,但是这类电路在组成大矩阵的LED显示时,存在布线困难等问题,在出现故障时维护比较困难,须要先查布线线路上是否存在故障,然后再查电路驱动板是否存在问题,一旦出现问题需更换布线线路或驱动电路板,维护费用较高。本设计提出基于PWM限制的LED灯光系统设计,系统采纳单片机STC12C2052为核心的PWM限制电路系统,采纳UART通讯方式,布线简洁,运用数据间隔检测方式接收UART数据包,适应不同波特率下的应用,采纳数据间隔接收数据可以牢靠地接收到一个完整的数据包,不管数据包是否有数据头,解决了协议不同的麻烦,定义的数据比较短,数据接受更为牢靠。二、电路原理及特点(一)电路系统框图本设计的灯光系统框图如下图2-1:直流12V集中供电开关电源UART总线直流12V集中供电开关电源UART总线LED4LED3LED2LED1...PWMnPWM4PWM3PWM2PWM1...从限制板n从限制板4从限制板3从限制板2从限制板1主限制板LED4LED3LED2LED1...PWMnPWM4PWM3PWM2PWM1...从限制板n从限制板4从限制板3从限制板2从限制板1主限制板图2-1PWM限制LED系统的系统框图本设计的灯光系统主要由1个主限制和9个从限制板(1个主限制板最多可限制256个从限制板)及开关电源组成。供电方式采纳由开关直流电源+12V集中供电。主限制板实现对各个从限制板的PWM输出值限制、限制灯的亮暗次序刚好间限制,主限制板与从限制板的连线方式采纳通用的UART通讯方式。从限制板主要实现并执行主限制发送过来的PWM值,由自身所带的PWM输出管脚输出限制值来驱动LED,进行灯的亮度限制及亮暗限制。(二)电路系统原理图图2-2电路系统原理图本设计通过开关电源把市电220V沟通电转变为12V的直流电源集中供电,然后从接口端子(J1)输入。因为考虑到大工程时LED显示矩阵越大,功耗固定状况下,电压越小,电流就越大,布线的线就要求越粗,不利于整体布线,而且+5V电压很小,抗干扰实力很差。因此在每个限制板上加上独立的电源电路有利于开关电源输出线路的布线可选择细的线,而且经过二次稳压后的+5V电源更加稳定,所以每个限制板都由电源电路和主限制电路组成。限制电路采纳单片机STC12C2052作为限制核心。主限制板与从限制板连线即主限制板的TXD发送脚接到从限制板的RXD脚。(三)电路组成及其原理图2-3电源电路原理图1.电源电路图2-3为灯光系统的电源电路原理图。电源电路图主要由以下几个部分组成:a.DC直流电源输入接口端子(J1),主要实现+12V直流电源的输入连接[1]。b.二极管IN4148(D1)作用为直流防逆向。c.电解电容E1和E2运用在电源低频干扰滤波。瓷片电容C1和C2运用在电压较高频段的干扰滤波。d.三端稳压集成芯片7805,供应+5V的电源。电路工作过程如下:从J1电源输入接口端输入+12V直流电压,在直流电源输入的正负端没有接错状况下,电源电压可以经过防逆二极管后电源电压降为8.3V~14.3V,通过输入滤波电容E1和C1滤除电源输入的干扰信号后,经三端稳压管7805稳压,E2和C2输出滤波,输出一个稳定的+5V直流电源。图2-4主限制电路原理图2.主限制电路图2-4为主限制电路原理图,主要有以下几个部分构成:a.STC12C2052单片机有以下特点:指令与8051完全兼容,但是比一般的单片机体积更小、价格更便宜,速度更快。宽电压工作范围(3.5V~5V),带两路的PWM管脚及RC震荡器,具有2K字节程序存储空间,同时芯片内部集成硬件看门狗电路可以极大的提高程序运行的稳定性。具有硬件SPI接口便利与各种SPI器件的接口,程序调试可以通过ISP在线编程方式实现。每一个I/O口都可以可设置四重模式口线的驱动实力均可达到20MA,同时又可以在超低功耗工作下工作。b.晶振电路由Y1,C3,C4构成,Y1晶振采纳11.0592MHZ,使软件波特率计算误差小,C3,C4起谐振的作用。复位电路采纳简洁的RC复位电路,主要由E3和R2组成。STC12C2052的复位管脚在高电平常单片机产生复位。C5是去耦汲取电容,汲取单片机芯片工作时产生的尖峰电压[2]。c.PWM输出LED电路由R2和D2构成,将STC12C2052的P3.7管脚设置为PWM工作方式,通过R2(1K)限流电阻后驱动D2(LED)(P3.7输出为低电平常候LED灯亮)。d.地址设置电路主要由拨码开关S1组成,实现从机的地址设置。单片机开机后程序自动从P1口读入设置值作为从机的通讯地址,地址采纳二机制编码方式,P1口有八根口线,可以最多产生256个地址。本设计只用到P1.4、P1.5、P1.6、P1.7管脚设置地址(最多产生16个从机地址)其中P1.4脚为最低位,P1.7脚为最高位。设置2到10号从机地址分别为02H,03H,04H,05H,06H...0AH。三、设计过程运用到主要技术(一)UART技术一般通讯中可以采纳同步通讯和异步通讯两种方式[3],本设计UART通讯运用异步通讯方式。为了进行异步通讯首先通讯双方的通讯速度(通讯波特率)要相同,这样接收到的数据才能正确,不同波特率接收到的数据将会产生偏移,致使数据接受错误。1.波特率设置由于本设计的LED硬件系统对速度的要求并不高,为了与51系列单片机的速度相兼容,便于波特率及其他速度计算,也将STC12C2052的工作频率也设置为12分频。通信波特率的设置为4800BPS,4800BPS进行测试过这样的波特率在10m下可以比较牢靠地进行数据接收.在更高的速度下,接收数据的错误率将会增加。用定时器T1的模式2来产生波特率应通过下式来计算TH1的装入值:波特率Bps=(2^SMOD/32)*(Fosc/12*(256-TH1))(3-1)Bps表示波特率,Fosc表示外接晶振频率[4]。2.初始化串口和T0中断流程结束开启串行口中断允许接受中断SCON=50PCON=0开启EA中断开启T0定时器清除T0中断标T1工作在模式2TH0=50USTL0=50US设置T0最高优先级中断从PI口读出本机地址起先结束开启串行口中断允许接受中断SCON=50PCON=0开启EA中断开启T0定时器清除T0中断标T1工作在模式2TH0=50USTL0=50US设置T0最高优先级中断从PI口读出本机地址起先开启T0中断开启T0中断图3-1初始化串口和T0中断a.STC12C2052的P1口中读出从机地址(ReadMy_ADDR)。b.T0为最高优先级中断(IP=0X22)。由于T0是作为数据包的间隔定时检测中运用,在程序中必需保证T0中断的精确性,所以设置为最高优先级。c.设置T0为工作模式2,设置T0定时为50US(TH0=50US,TL0=50US)。d.T1工作在模式2,这种方式可实现每隔预定时间发出限制信号,特殊适合于串行口波特率发生器的运用[5]。e.清除T0中断标记(TF0=0)。f.开启T0中断(EF0=1)。g.开启T0定时器(TR0=1)。h.开启中断(EA=1)。i.PCON=0,波特率不倍增,正常工作方式。j.SCON设为50,工作在模式1下,10位UART。数据位为8位,一个起始位,一个停止位[6]。REN为1,允许接受数据。k.允许接受中断。l.开启串行口中断。(二)数据间隔传输 返回数据间隔检测收到一个字节数据?总中断次数=40(40*50us=2ms)开启50us定时收到下一个字节数据?总中断次数为零数据包接收完成总中断-1返回数据间隔检测收到一个字节数据?总中断次数=40(40*50us=2ms)开启50us定时收到下一个字节数据?总中断次数为零数据包接收完成总中断-150us中断程序50us中断程序 Y Yy一y总中断次数为零?Y Yy一y总中断次数为零?NN图3-2数据间隔传输流程在本设计的UART通讯中采纳了数据间隔传输。设计中要传输的数据包是4个字节,包括55H数据头(加了数据头增加了数据传输抗干扰实力),地址,PWM限制值,校验值。主机发送的时候将55H数据头与地址,PWM限制值相异或产生校验值。从机收到完整的数据包后,先推断地址是否是本机地址,然后把地址值和PWM限制值还有数据头异或再推断是否和接收到的校验值相等,假如与校验值相等正确则接收到的数据是正确,进行PWM灯限制输出.否则数据错误不进行PWM灯限制输出,在通讯中加入数据校验提高了数据通信的牢靠性。数据间隔检测,在异步通信中数据包里的字节之间间隔时间不超过一个字节传输时间,即t=1/波特率,我们用的是4800波特率,T=1/4800≈2MS,在数据传送过程中假如字节间的间隔小于2MS我们认为接收到的数据是在同一个数据包中的.当在2MS时间里没有收到下个字节的数据,我们就认为这个数据包传输完毕.这样按数据包分开数据,避开了从机在接收数据包错误导致功能出错,提高了功能实现的稳定性和牢靠性.具体软件的实现方法是,将T0设置为模式2定时方式,定时的时间为50us,当接收到一个字节后,将T0的总中断次数设置为40次同时T0开启定时,每中断一次假如总中断次数大与零,则总中断次数减始终到接收到下一个字节的数据,我们取出总中断次数假如不为0(两个字节时间间隔小于2MS),我们就认为数据包还没有接收完成,须要接着检测本字节与下个字节的时间间隔.假如取出总中断次数假如为0,说明数据包接收完毕,可进行下一步的数据解析。(三)PWM技术PWM技术脉宽调制(PWM)是利用微处理器的数字输出来对模拟电路进行限制的一种特别有效的技术,它广泛应用在从测量、通信到功率限制与变换的很多领域中[7]。PWM技术是一种对模拟信号电平进行数字编码的方法。通过高辨别率计数器的运用,方波的占空比被调制用来对一个具体模拟信号的电平进行编码。PWM信号仍旧是数字的,因为在给定的任何时刻,满幅值的直流供电要么完全有(ON),要么完全无(OFF)。电压或电流源是以一种通(ON)或断(OFF)的重复脉冲序列被加到模拟负载上去的。通的时候即是直流供电被加到负载上的时候,断的时候即是供电被断开的时候。只要带宽足够,任何模拟值都可以运用PWM进行编码。PWM技术的一个优点是从处理器到被控系统信号都是数字形式的,无需进行数模转换。让信号保持为数字形式可将噪声影响降到最小。噪声只有在强到足以将逻辑1变更为逻辑0或将逻辑0变更为逻辑1时,也才能对数字信号产生影响。对噪声反抗实力的增加是PWM相对于模拟限制的另外一个优点,而且这也是在某些时候将PWM用于通信的主要缘由。从模拟信号转向PWM可以极大地延长通信距离。在接收端,通过适当的RC或LC网络可以滤除调制高频方波并将信号还原为模拟形式[8]。因此本设计利用PWM技术的特点进行对LED灯的电压大小限制,达到灯光亮度变更的效果。本设计的STC12C2052中有两个PWM管脚(PWM0,PWM1),为了软件设计简洁在硬件设计中只用到一个PWM0(P3.7口线),采纳单片机硬件PWM输出的波形稳定,只须要变更PWM值就可以变更输出的脉冲宽度,限制幅度特别便利。STC12C2052中PWM管脚可调脉冲宽度输出模式原理如下图3-3:EPCnHCCPnHEPCnLCCPnLEPCnHCCPnHEPCnLCCPnL(0,CL)<(EPCnl,CCAPnL)(0,CL)>=(EPCnl,CCAPnL)输出0输出1PWMn9-BITcomparator0CLEnableCLoverflowECOMnCAPPnCAPNnMATnTOGnPWMnECCFnCCAPMnn=0,1,2,31000010由于全部模块共用仅有的PCA定时器,所以他们的输出频率相同。各个模块的输出占空比是独立变更的,与运用的捕获寄存器(EPCNL,CCAPNL)有关。由图3-3可知,当CLSFR的值小于(EPCNL,CCAPNL)时,输出为低,当PCACLSFR的值等于或大于(EPCNL,CCPANL)时,输出为高。当CL的值由FF变为00溢出时,(EPCNH,CCAPNH)的内容装载到(EPCNL,CCAPNL)中。这样就可实现无干扰的更新PWM。要使能PWM模式,模块CCAPMN寄存器的PWMN和ECOMN位必需置位[9]。依据以上原理通过以下公式可以算出PWM电压值。F=Fosc/12(3-2)(VCC/256)*调制后脉宽=PWM电压值(3-3)在公式3-2中,由于设置PCA定时器的频率为晶振的12分频,所以PWM输入的频率为Fosc/12。在公式3-3中,由于PWM是八位的,在固定周期内可以认为把VCC分成256个等分,输出电压的幅度约为输出的PWM值乘以vcc/256。2.LED灯限制系统中的PWM流程:CCAPM0=42CL=0CH=0CCON=0起先设置COMD=80CCAPM0=42CL=0CH=0CCON=0起先设置COMD=80清除PWM输出清除PWM输出EPCA_LVD=1EPCA_LVD=1打开PCA计数器打开PCA计数器结束结束图3-4初始化PWM流程a.设置时钟模式为Fosc/12,空闲下不计数。COMD是PCA模式寄存器(PWM和PCA共用寄存器),当COMD的限制字CPS1、CPS0(第2、1位)同设为0时就是12分频,其中限制字CIDL(第7位)是计数器阵列空闲限制:当CIDL=0时,空闲模式下PCA计数器接着工作,CIDL=1时,空闲模式下PCA计数器停止工作。因此COMD=80。b.清除中断标记和计数器溢出标记。CCON是PCA限制寄存器,它的限制字CF(第7位)是PCA计数器阵列溢出标记,CR(第6位)是PCA计数器阵列运行限制位,该位通过软件置位,用来启动PCA计数器阵列计数。CF,CR通过软件清零,因此CCON=0。c.计数器值清零(CL=0,CH=0)。d.设置PCA为PWM方式通道为PWM0,即P3.7输出。CCAPMn代表用到PWMn管脚输出,本次设计只用到PWM0,因此我们就设置CCAPM0。CCAPMn是PCA比较/捕获模块寄存器,其中限制字ECOMn(第6位)功能是使能比较器,当ECOMn=1时,使能比较器功能。限制字PWMn(第1位)是脉宽调整模式,当PWMn=1时,使能CEXn脚用作脉宽调整输出,因此CCAPM0=42。e.清除PWM输出。f.开PCA中断(EPCA_LVD=1)[10]。g.EA=1,开中断。h.打开PCA计数器,CR=1(Fosc/12输入),结束。四、实物制作调试和测试数据分析实际制作实物时,理论上认为电源是近距离输入,干扰会小,省去了三端稳压管7805输入端的电容E1和C1。输出端的电容E2改用容量20uF的电解电容,理论上一样能达到预期的效果。在主电路中省去RC复位电路,干脆采纳ST12C2052内部集成自带的RC复位电路。LED灯接的1K欧姆限流电阻改为470欧姆的电阻,目的是为了增加LED的亮度。后来考虑到增加UART通信的稳定性,增加了驱动三极管,利用三极管共集电极的特性,降低输出阻抗,提高输入阻抗,使主机发送数据的电流增大,从机接受数据的电流减小,从而使主机能驱动更多的从机。实物焊接好后,起先下载芯片程序。用STC单片机ISP下载器,通过软件STC-ISP.EXE下载主机程序到主机芯片STC12C2052中,下载从机程序到从机芯片STC12C2052中,然后把芯片插入底座中。插上电源后,发觉各从机LED灯根本没有输出。经过细致分析最有可能产生的缘由是由于通讯不正常各从机没有接收到主机发送的PWM限制吩咐,所以从机没有执行PWM限制输出。运用示波器查看主限制板的TXD输出信号脚,发觉通讯输出信号正常,但是通讯的波特率较慢。于是经过一段时间的调试,发觉问题是在设定STC-ISP.EXE软件时,时钟源必需设定为外部晶体或时钟。起初是设为内部RC震荡器,由于内部RC震荡器的误差较大并不适合在通讯中运用,导致了芯片无法正常工作。程序下载胜利后,插上电源,LED灯起先了循环变更。第一步从一号灯起先到十号灯逐个亮起,灯全部亮3秒后,接着灯全灭,如此循环5次。其次步从一号灯起先直到十号灯,每个灯的亮度都以渐亮形式变更,每个灯设定了四种亮度,后一个灯比前一个灯快一个步长的亮度,整体给人灯光波浪型流淌的感觉,循环几次后全部灯亮起,一会后灯全灭。第三部从十号灯起先到一号灯逐个亮起,灯全部亮起3秒后,接着灯全灭,如此循环5次。第四部从十号灯起先直到一号灯每个灯的亮度都以渐亮形式变更,每个灯设定了四种亮度,后一个灯比前一个灯快一个步长的亮度,循环几次后全部灯亮起,一会后灯全灭。测试后第一部和第三步循环出现问题,不是每个灯都亮,有的时候循环起先,某些灯就亮了,或者某些灯被跳过没有亮起。其次和第四步没有了渐暗的显示。表4-1测试结果记录1测试第几部循环循环次数第1步第3步1循环起先前5号灯先亮循环起先前4号灯先亮而循环起先后10号灯不亮2正常循环起先前5号灯先亮而循环起先后6号灯不亮3循环起先前3号灯先亮而循环起先后9号灯不亮正常4循环起先前9号灯先亮而循环起先后7号灯先亮循环起先前9号灯和10号灯先亮5循环起先后6号灯不亮正常表4-2测试结果记录2第几部循环第2步第4步测试结果每个灯以渐亮形式变更,后一号灯比前一号灯快一个步长,整体给人水流淌的感觉。没有预期的每个灯渐暗的显示。每个灯以渐亮形式变更,前一号灯比后一号灯快一个步长,整体给人水流淌的感觉。没有预期的每个灯渐暗的显示。经分析,出现表4-1和表4-2结果的可能缘由有:a.设计时认为电源是近距离输入,干扰会小很多,就省掉了三端稳压管7805输入端的滤波,使电源输出信号不够稳定,又由于采纳UART通讯方式TTL电平抗干扰较差,所以造成从机接收数据时候受到干扰。b.为了提高UART的稳定性,增加了驱动三极管后,出现了其他的问题。在宏晶科技的网站里有建议在主限制板后加一个密彻斯特反向驱动器74HC14,在从机接收端再加一个密彻斯特反向驱动器74HC14。c.软件部分的问题,当时设置波特率为9600BPS,出现从机很难接受到信号的现象,9600BPS以上的波特率就使数据传输更加不稳定。理论上波特率设置为4800BPS比较稳定,但还是出现从机接受数据不稳定的问题。应当设置比4800BPS更低的波特率。虽然有问题还没得到解决,但从调试过程中已经胜利实现PWM的LED灯的亮度限制。五、结束语本设计在程序上已经可以胜利完成PWM的灯光亮度的限制,由STC12C2052限制的PWM的硬件调幅技术实现简洁,调整敏捷。从硬件设计来看,硬件设计比较简洁,主要是软件PWM限制和UART通讯。同时硬件设计还存在一些不足之处,由于UART采纳驱动发送,发送距离有所增加,但是不适于用超长距离的通讯限制。与通用的灯光系统相比新的灯光系统限制上多了PWM调整灯的亮度输出,可以限制灯的渐明渐暗过程,布线与维护简洁,只在某个灯损坏时候,只须要更换相应的从限制板将更换上去的从机地址设置为损坏的从机地址就可以正常工作,同时布线只须要几根线,更换较为简洁。但是相对于原来的灯光系统还存在一个主要的问题,由于每一个从机都须要有一个STC12C2052限制接受数据,造成在比较大的阵列LED中运用成本较高的问题,对于这个问题,可以重新更改软件和硬件,使得STC单片机的PWM管脚都全部运用上去,就STC12C2052单片机有两路的PWM输出假如将两路的PWM都运用上,那么一个从机板上就可以限制两个LED灯的亮度调整从而节约一半的硬件成本。参考文献[1]郝文化.ProtelDXP电路原理图与PCB设计[M].北京:机械工业出版社,2004,127-301.[2]谢嘉奎.电子线路(第五版)[M].北京:高等教化出版社,2001,105-130.[3]何立民.MCS-51单片机应用系统设计[M].北京:北京航空航天高校出版社,1995,45-66.[4]何立民.单片机中级教程:原理与应用[M].北京:北京航空航天高校出版社,2002,77-95.[5]://w8-04/438813p17.htm[6]3.htm[7][8][9]STC12C5410AD系列单片机器件手册[EB/OL].宏晶科技,2007,75-82.[10]龚运新.单片机C语言开发技术[M].北京:清华高校出版社,2006,100-123.LEDLightingSystemDesignBasedontheControlofPWMElectronicandInformationEngineeringDepartmentMajorofElectronicInformationEngineeringXiaoyiWangInstructorYinghongLiu【Abstract】ThisdesignintroducesonekindofLEDlightingcontrolsystemasthecoretoSTCsinglechipmicrocomputer.ItmainlyusesPWMtechnologyandUARTcommunicationtechnology.PWMisonekindofverymaturetechnology,whichnowiswidelyusedinSpeed,dimmingsystem.UARTcommunicationisonekindofcommunicationMeanswhichisusedthemostcommonly.Thedesignintroducesthesinglechipcontrolcircuits,communicationscabling,PWMcircuit,andPWMcontroldesignindetail,anditalsogivestheProgrammeofsystemsoftware.【Keywords】PWM,STCsinglechipmicrocomputer,UARTcommunication.附件一、主限制程序#include "..\..\pwm\include\upwm.h"#include "..\..\Public\include\public.h"main(){ PcaPwmInit(); SetMyBause(); InitUart(); while(1) { #ifdefKONGCONTRLMAIN Main_PullContrl(); #endif#ifdef KONGCONTRLSLAVER{if(GetUartData()==0) { PwmOut(UartReceviceBuf[2]); Delayms(20); } } #endif }}附件二、公共部分程序#include <intrins.h>#include"../../UserDef.h"#ifdefUSE_PUBLIC_8BITCRC //8位CRC计算程序unsignedcharCrcCmp(unsignedchar*buf,unsignedcharlen){ unsignedcharcrcount=0,i; for(i=0;i<len;i++) crcount=crcount^buf[i]; returncrcount;}#endif#ifdef USE_PUBLIC_DELAYvoidDelayms(unsignedinttime) //延时函数{ unsignedintdataj; unsignedintdatai; for(i=0;i<time;i++) for(j=0;j<600;j++) _nop_();}#endif附录三、UART通讯程序#include"../../UserDef.h"#include"..\include\uartdef.h"#include"..\include\stc12c2052ad.h"#include "..\..\Public\include\public.h"#defineCrystal221184002 //定义晶体频率22.1184MHZ#define SysClkTick12 //定义系统指令周期?#define Base_50us256-((50*Crystal)/(SysClkTick*1000000l)) //50us溢出时间基准//UART接收缓冲单元unsignedcharidata UartReceviceBuf[MAXBUF];unsignedchar Receive_Num=0; //接收的字节数unsignedchar Send_Num=0; //发送的字节数 unsignedchar Send_Ok =0; //已经发送的字节数//间隔时间定时器间隔值unsignedchar T0Delay_Count=0x16;//时间间隔unsignedchar Comm_Time;#ifdefKONGCONTRLMAIN//主机unsignedchar Slave_Addr;#endif//UART发送缓冲unsignedcharidataUartSend_Buf[MAXBUF];unsignedchar My_Addr;//口线初始化,并且读出设置的地址值void ReadMy_Addr(void){ P1M0=0; P1M1=0;#ifdefKONGCONTRLMAIN My_Addr=1; #else { My_Addr=P1; My_Addr=My_Addr>>4; } #endif} //初始化串口,T0中断void InitUart(){ ReadMy_Addr(); IP= 0X02; //将定时器0中断设置为最高级别中断 TMOD= 0x22; //T1,T0initialB00100001 TH0=Base_50us; //设置定时初值 TL0=Base_50us; TF0=0; //清除中断T0标记 ET0=1; //使能T0中断 TR0=1; //计时起先 EA=1; PCON=0x0; //UART串口初始化程序 SCON=0x50; REN=1; //serialportreceivebegin ES=1; //允许串口中断} //波特率设置程void SetMyBause(void) {AUXR=AUXR&0x3F; //设置为12T方式 TH1=BAUSE4800; TL1=BAUSE4800; TR1=1;}//定时器中断函数,用以实现定现定时功能Time_IntVal(void)interrupt1using2{TF0=0;if(Comm_Time>1) Comm_Time--;}//中断处理程序voidIntComm()interrupt4using1{ if(RI) { RI=0; ES=0; if(!Comm_Time) { Comm_Time=T0Delay_Count; Receive_Num=0; } if((Receive_Num<MAXBUF)&&(Comm_Time!=1)) { UartReceviceBuf[Receive_Num]=SBUF; Receive_Num++; Comm_Time=T0Delay_Count; } }if(TI) { TI=0; if(Send_Ok<Send_Num) SBUF=UartSend_Buf[Send_Ok++]; else { Send_Num=0; Send_Ok=0; } }ES=1;}//主机程序处理部分#ifdef KONGCONTRLMAIN//3.串口发送程序unsignedcharSendComm(unsignedcharlen){ unsignedinttimeout=0;if(len>MAXBUF) return-1;if(Send_Ok!=0) { while(Send_Ok!=0) { timeout++; if(timeout>=1000) { Send_Ok=0; Send_Num=0; return1; } } return1; }Send_Num=len; SBUF=UartSend_Buf[0]; ES=1; Send_Ok=1; return0; }//外部引用extern voidPwmOut(unsignedcharpwmin);bit Maxout_Flag; //公共运用变量//计算下一台机器的PWM宽度void GetPwidth(unsignedchar*pwidth,unsignedcharmode){ unsignedcharpwmin; unsignedcharstepwidth;pwmin=*pwidth;if(pwmin<=MINPLUEWIDTH) Maxout_Flag=0; else { if(pwmin>=MAXPLUEWIDTH) Maxout_Flag=1; }if(mode==0) stepwidth=STEPWIDTH; else stepwidth=STEPWIDTH1; if(Maxout_Flag) pwmin=pwmin-stepwidth; else pwmin=pwmin+stepwidth;*pwidth=pwmin;} void PollOut1(unsignedcharmode){ unsignedchari; unsignedcharpwmin; Maxout_Flag=0; if(mode==0) { pwmin=MAXPLUEWIDTH;; PwmOut(pwmin); Delayms(DELAYTIME3); Slave_Addr=STARADDR; for(i=STARADDR;i<(STARADDR+DAULTMACHINENUM);i++) { UartSend_Buf[0]=0x55; UartSend_Buf[1]=Slave_Addr; UartSend_Buf[2]=MAXPLUEWIDTH;; UartSend_Buf[3]=CrcCmp(UartSend_Buf,3); SendComm(4); Delayms(DELAYTIME3); Slave_Addr++; }}else{ pwmin=MAXPLUEWIDTH;; Slave_Addr=STARADDR+DAULTMACHINENUM-1; for(i=STARADDR;i<(STARADDR+DAULTMACHINENUM);i++) { UartSend_Buf[0]=0x55; UartSend_Buf[1]=Slave_Addr; UartSend_Buf[2]=MAXPLUEWIDTH;; UartSend_Buf[3]=CrcCmp(UartSend_Buf,3); SendComm(4); Delayms(DELAYTIME3); Slave_Addr--; } PwmOut(pwmin);}}//轮训显示void PollOut(unsignedcharmode){ unsignedchari; unsignedcharj; unsignedcharpwmin; Maxout_Flag=0;if(mode==0) { for(j=0;j<LOOPTIME;j++) { pwmin=j*STEPWIDTH+MINPLUEWIDTH; PwmOut(pwmin); Delayms(DELAYTIME); Slave_Addr=STARADDR; GetPwidth(&pwmin,0); for(i=STARADDR;i<(STARADDR+DAULTMACHINENUM);i++) { UartSend_Buf[0]=0x55; UartSend_Buf[1]=Slave_Addr; UartSend_Buf[2]=pwmin; UartSend_Buf[3]=CrcCmp(UartSend_Buf,3); SendComm(4); Delayms(DELAYTIME); Slave_Addr++; GetPwidth(&pwmin,0); } } } else { for(j=0;j<LOOPTIME;j++) { pwmin=j*STEPWIDTH+MINPLUEWIDTH; Slave_Addr=STARADDR+DAULTMACHINENUM-1; for(i=STARADDR;i<(STARADDR+DAULTMACHINENUM);i++) { UartSend_Buf[0]=0x55; UartSend_Buf[1]=Slave_Addr; UartSend_Buf[2]=pwmin; UartSend_Buf[3]=CrcCmp(UartSend_Buf,3); SendComm(4); Delayms(DELAYTIME); Slave_Addr--; GetPwidth(&pwmin,0); }PwmOut(pwmin); } } } //LED灯全灭处理程序void LedOutDa
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 商业物业租赁协议
- 长沙市二手房美食环绕合同
- 饲料行业业务员聘用合同范本
- 传媒公司摄影师合同
- 油罐车驾驶员雇佣合同书
- 饮料业特种垃圾管理办法
- 户外教育气球施放安全指南
- 肯德基运营管理
- 急性高原性肺水肿护理
- 2024年销售会计年终工作总结
- 昆明理工大学《自然语言处理》2022-2023学年第一学期期末试卷
- 陈义小学进城务工人员随迁子女入学工作制度和措施
- 部编版六年级道德与法治上册第9课《知法守法 依法维权》精美课件(第2课时)
- 小儿急腹症观察和护理
- 统编版七年级上学期期末考试语文试卷(含答案)
- 《长江电力财务分析》课件
- 2023年中国铁路武汉局集团有限公司招聘大专(高职)学历笔试真题
- 中考英语复习听说模拟训练(一)课件
- 公立医院创新管理薪酬激励方案
- 药品经营使用和质量监督管理办法2024年宣贯培训课件
- 旅社承包合同样本
评论
0/150
提交评论