升降旗控制系统报告_第1页
升降旗控制系统报告_第2页
升降旗控制系统报告_第3页
升降旗控制系统报告_第4页
升降旗控制系统报告_第5页
已阅读5页,还剩26页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、精选优质文档-倾情为你奉上升 降 旗 控 制 系 统设计报告摘 要升降旗控制系统是以单片机STC89C51为控制核心的自动控制系统。该系统由主控制器、键盘输入模块、液晶显示模块、电机、电机驱动模块、语音模块、时钟芯片DS1302、存储电路等部分构成。该系统能够实现国旗的自动升降控制、在指定位置自动停止、在上下极限位置具有防超限功能、升降旗的时间与国歌的演奏时间吻合。除此之外本系统还可通过键盘上的数字按键,预置国旗在旗杆上的停止位置;键盘上设置了升降旗的时间调整按键,可以调整升降旗的速度;使用液晶显示屏可以直观的看到升、降旗的高度变化过程及工作时间;使用编码器进行高度测量,其控制精度上可以达到毫

2、米级。关键词:单片机 自动控制 电机驱动模块 语音模块 DS1302目 录一、前言近些年来,随着奥运会及各种大型国际赛事的开展,升旗仪式已成为一个必备的环节。以往的手动升国旗,无论升旗手有多么熟练,都难免出错,比如在国歌刚刚奏完时,旗子升到顶端。升半旗时,也很难目测到是否到了旗杆的2/3处。随着电子技术的飞速发展,市面上已陆续出现许多自动控制升降旗的产品。二、方案的选择与论证1.1 主控制器模块的选择方案一:采用FPGA作为系统主控制器,功能强大,速度快,体积小,稳定性好,但是价格较贵,不符合节能、环保的要求。方案二:采用STC12C5A60S2单片机,指令代码完全兼容传统的8051,并且速度

3、快8-12倍。内部集成MAX810专用复位电路,2路PWM,8路高速10位A/D转换(250K/s,即25万次/秒),适用于电机控制,强干扰场合。由以上两种方案可以看出,以STC12C5A60S2为核心可以方便地实现对各个部分的控制和外接,而FPGA的高速处理能力得不到充分发挥且价格较贵,所以我们选择方案二。1.2 电机的选择方案一:采用步进电机,既可以实现对速度的精密控制,又可以实现不同高度停止的要求。但是步进电机的价格较贵,对外围电路的要求较高,且其程序中数据运算较为复杂。方案二:采用直流电机加一定比例的减速器,通过换用不同的减速器来实现旗帜升降速度的控制,同时在旗杆的顶部、底部和2/3处

4、设置3个传感器,从而达到旗子在杆顶、杆底及2/3处的自动停止控制。优点是价格低廉,且易于操作,但精度难以控制和提高。比较以上两种方案,选择方案二。1.3 电机驱动方案的选择方案一:采用电阻网络或数字电位器调整电动机的分压,从而达到调速的目的。在前段并联一个电容可以使电动机缓慢加速,避免突然加速对系统的冲击和轮子打滑。缺点是电阻网络只能实现有级调速,而数字电阻的元器件价格比较昂贵。一般电动机的电阻很小,但电流很大;分压不仅会降低效率,而且需要人工手动调节电位器,非常不方便。方案二:采用由达林顿管组成的H型PWM电路。用单片机控制达林顿管使之工作在占空比可调的开关状态,精确调整电动机转速。这种电路

5、工作在管子的饱和截止模式下,效率高;H型电路保证了可以简单地实现转速和方向的控制;电子开关的速度很快,稳定性也极强,是一种广泛采用的PWM调速技术。但是不能够精确的控制步矩和速度,故不采用此方案。方案三:采用电机控制专用芯片L298。L298是恒压恒流双H桥集成电机芯片,使用L298芯片,可精确控制步距和速度,可以大大简化驱动电路。基于上述理论分析,选择方案三。1.4 键盘和数码管接口方案的选择方案一:采用键盘、显示接口芯片8279来扩展,优点是单个芯片就能完成键盘输入和LED显示控制两种功能。缺点是该芯片与单片机的连接是并行的,占用单片机I/O口较多。方案二:采用HD7279A芯片,HD72

6、79A是串行接口8位LED数码管及64键键盘智能控制芯片,优点是与单片机的连接时串行连接,占用的I/O口数目很少。比较以上两种方案,由于系统资源有限,故选择方案二。1.5 语音芯片的选择 方案一:采用语音芯片ISD1420。该芯片采用CMOS技术,内含振荡器、话筒前置放大、自动增益控制、防混淆滤波器、平滑滤波器、扬声器驱动及EEPROM。优点是外围电路简单,音质好、功耗低,缺点是其录放音时间短,只有8到20秒。方案二:采用语音芯片APR9600,它具有抗断电、音质好、噪音低,使用方便。录音时间为60s,掉电可保存信息,信息可保存100年。由于国歌播放所需时间为43秒,因此选择方案二。1.6 显

7、示方式的选择方案一:采用LED 数码管显示旗帜所在的高度以及升降旗所用的时间,本实验中需要用到6只LED数码管进行动态显示才可以达到要求。采用LED的优点是亮度高,价格便宜,寿命长,缺点是只能显示数字和一些简单的字符。方案二:采用LCD液晶显示,优点是显示内容丰富,功耗低。比较以上两种方案,选择方案二。1.7 时钟方案的选择在本系统测试及数据分析中,需要记录升降旗的时间。方案一:采用传统的数据记录方式:隔时采样或定时采样,没有具体的时间记录,因此只能记录数据而无法准确记录其出现的时间;方案二:采用单片机计时,一方面需要采用计数器,占用硬件资源,另一方面需要设置中断、查询等,同样耗费单片机的资源

8、。方案三:采用DS1302时钟芯片,该芯片使用简单,接口容易,与单片机的接口少。比较以上方案,选择方案三。三、硬件电路设计2.1 系统整体设计思路 通过键盘模块可以进行功能设定,将数据信息传送给单片机。LCD模块用来显示数据信息。单片机连接电机驱动模块来驱动电机来实现国旗的上升和下降。语音模块只有旗子从杆的底部向上升到顶部的时候才播放,其他时刻不播放。存储电路用来存储旗子高度和已用时间的,从而保证单片机掉电后,在重新上电时LCD所显示的数据不变。图2-1 系统结构框图2.2 主控制器模块STC12C5A60S2单片机的指令代码完全兼容传统8051,而且速度快8-12倍。内部集成MAX810专用

9、复位电路,2路PWM,8路高速10位A/D转换,针对电机控制,强干扰场合。其内部资源非常丰富,具有8K ROM,1280字节RAM,有36个I/O口,比8051单片机要多出4个,4个16位定时器,7路外部中断I/O,内部集成MAX810专用复位电路 ,外部晶振12M以下时,复位脚可直接接1K电阻到地。主控制器模块如电2-2所示。图2-2 主控制器电路2.3 电机驱动模块通过驱动电路控制电机的正转和反转,实现旗帜的上升和下降。直流电机的驱动采用L293电机专用驱动芯片。PWM信号由单片机的硬件产生,使用非常方便。由于电路总体并不复杂,驱动电路的控制输入端也可不经光耦合隔离,直接与单片机引脚相连。

10、L293的1、2、7、9、10、15四个引脚接单片机上,L293的3、6、11、14接到直流电机上。通过对单片机的编程就可以实现两个直流电机的PWM调速以及正反转等功能。图2-3 电机驱动电路系统要求43秒重物运动180cm,在电机转速为30转/分钟时,要求电机轴承直径为3.82cm,现有30转/分钟直流电机直径3.11cm,直径太小,达不到设计要求;在电机转速为60转/分钟时,要求电机轴承直径为1.91cm,现有60转/分钟直流电机直径2.5cm,可通过调节占空比来调速,能达到设计要求,所以选用60转/分钟的直流电机。2.4 语音模块APR9600采用串行控制方式,它仅需要两个单片机I/O口

11、来控制所有的语音段录放,而且段数可以足够多,每段也没有时间限制。置MSEL1、MSEL2均为0,LS1为录音话筒,LS2为播放喇叭。图2-4 APR9600串行控制电路图2.5 存储电路本系统采用常用的可以在线读写的EEPROM芯片AT240C2。芯片的容量是2Kbit,它的第5、6脚分别是SDA、SCL,第七脚WP的含义是写保护,当WP为高电平时,芯片具有写保护功能,芯片数据只能被读出,而被保护部分不能写入数据。A0、A1、A2的含义比较特殊,它们所提供的功能根据型号不同有所改变。本系统中A0、A1、A2接地,SDA、SCL与单片机I/O口连接。图2-5 24C02电路图2.6 时钟电路本系

12、统实时时钟电路采用DS1302时钟芯片,用来记录升降旗的时间。其电路连接图如下:图2-6 时钟电路1脚为电源供电管脚,2脚和3脚为32.768KHz晶振管脚,4脚为GND,I/O为数据输入/输出引脚,SCLK为串行时钟,RST为复位脚。DS1302内含有一个实时时钟/日历和31字节静态RAM,通过简单的串行接口与单片机进行通信。实时时钟/日历电路提供秒、分、时、日、月、年的信息,每月的天数和闰年的天数可自动调整,时钟操作可通过AM/PM指示决定采用24或1小时格式。DS1302与单片机之间能简单地采用同步串行的方式进行通信,仅需用到三个端口线:(1)RST(复位),(2)I/O(数据线),(3

13、)SCLK(串行时钟)。主电源与备用电源的双电源引脚,双电源可以自动切换。2.7 LCD12864显示电路本系统采用LCD12864显示旗帜所在的高度和升降旗的时间,单片机与LCD12864的连接为串行连接方式,LCD12864的第5、6、7脚分别与单片机的P2.0、P2.1、P2.2角相连,DB0-DB7引脚悬空,采取这种方式可以节省单片机的I/O口。LCD12864是 点阵的汉字图形液晶显示模块,可显示汉字及图形,内置8129个中文汉字、128个字符及点阵显示RAM。可与CPU直接接口。外观尺寸:mm视域尺寸:mm逻辑工作电压:4.55.5V 图2-7 LCD12864显示电路四、软件设计

14、及参数计算3.1 主程序设计本系统的主程序思路为开机后先初始化,再检测有否有按键,当按下上升键后,判断是否到达最高点,如果未到达最高点,调用上升子程序,否则进入等待状态,重新判断按键值。当按下下降键和半旗键时,程序思路和按下上升键时类似。主程序流程图如图3-1所示。图3-1 3.2 按键控制子程序设计自动控制升降旗系统的按键有16个,是本系统的重要组成部分,系统采用的是矩阵式键盘。键盘具有输入密码,指定系统功能的作用。程序流程图如图3-2。 图3-2 图3-33.3 掉电数据处理程序设计要求关掉电源以后,重新上电时,数据高度显示不变,系统采用了AT24C系列的EEPROM芯片24C02来进行掉

15、电数据处理,AT24C系列的存储器具有接口少的优点。掉电数据处理程序设计思路如图3-3。 五、系统测试4.1 测试仪器为了使自动升降旗系统达到预定的精度,便于软、硬件联调,本次测试采用1.8cm高的短旗杆对系统进行了测试,测试时用秒表计量时间,用米尺测量高度,从而有效的验证了本系统的控制精度。本系统在制作过程中用到的仪器设备清单如下表4-1。表4-1序号名称型号数量2十米卷尺精度0.001m13秒表精度0.01s14PC机惠普15数字万用表D79205A16示波器GWINSTEK GDS-110217电源发生器GWINSTEK GPS-2303C14.2 指标测试该系统已经具备了题目要求的基本

16、功能和部分发挥功能,通过测试,系统基本完成了对h(旗子的高度)、t(所用时间)、v(电机的速度)3项基本参数的测量,并完成了h和t的显示,误差范围都未超出题目要求。表4-2 LCD显示升旗时的时间和高度测试顺序时间(s)旗子的高度(cm)143180243180343180443180543180六、结论本系统的制作完成了所有的基本功能和部分发挥功能,系统能够自动控制升旗和降旗,升旗时,在旗杆的最高端自动停止;降旗时,在最低端自动停止。经测试,升旗的时间与国歌演奏的时间完成吻合43秒。存储电路能够存储旗子所在的高度和升旗所用的时间,LCD12864能够显示旗帜所在高度,并且误差不大于2厘米。七

17、、参考文献1 马立修,潘金凤、姜淳琳、孙丰刚等.自动控制升降旗系统的设计.实用电子制作.2006.2 张友德.单片机微型机原理、应用与实验.复旦大学出版社,2000.3 李朝青.单片机原理及接口技术.北京航空航天大学出版社,1996.4 胡汉才等. 单片机原理及接口技术.清华大学出版社,2000.5 张友德,赵志英,涂时亮.单片机微型机原理应用与实验(第三版).复旦大学出版社,2000年6 李群芳等.单片微型计算机与接口技术.电子工业出版社,2001.7 何立民.单片机应用文集(1).北京航空航天大学出版社,1991.8 何立民.单片机应用文集(2).北京航空航天大学出版社,1992.9 孙涵

18、芳等.单片机的原理与应用.北京航空航天大学出版社,1989.10 徐爱钧等.单片机高级语言C51应用程序设计.电子工业出版社,1998.11 徐德民等.最新C语言程序设计.电子工业出版社,1990.七、附录附录1 LCD程序清单#include<reg52.h>#include<intrins.h>#define Line_1 1#define Line_2 2#define Line_3 3#define Line_4 4sbit LCD_CS=P20;sbit LCD_STD=P21;sbit LCD_SCLK=P22;#define Glitter_ON 0x0f

19、#define Glitter_OFF 0X0C#define Clear_Screen 0x01 void LCD12864_Delay(unsigned char x)unsigned char y,z;for(y=0;y<x;y+)for(z=0;z<50;z+);void GPIO_LCD12864_Init()LCD_CS=0;LCD_STD=0;LCD_SCLK=0;void SPI_Write(unsigned char Data)unsigned char i=0;/*LCD_CS=0; /not use it in spi mode in LCD12864LCD_

20、SCLK=0;_nop_();_nop_();LCD_CS=1;_nop_();_nop_(); */for(i=0;i<8;i+)LCD_SCLK=0;if(Data&0x80)=0x80)LCD_STD=1;elseLCD_STD=0;_nop_();_nop_();_nop_();_nop_();LCD_SCLK=1;Data<<=1;_nop_();_nop_();_nop_();_nop_();/LCD_CS=0;void LCD12864_Cmd_Write(unsigned char Cmd)unsigned char Byte1=0,Byte2=0,B

21、yte3=0;Byte1=0xf8; /1111 1000,look at the pdf about the spi mode in LCD12864Byte2=(Cmd&0xf0);Byte3=(Cmd&0x0f)<<4);GPIO_LCD12864_Init();LCD_CS=1; /enable the spi mode_nop_();_nop_();SPI_Write(Byte1);SPI_Write(Byte2);SPI_Write(Byte3);LCD_CS=0;void LCD12864_Date_Write(unsigned char Data)

22、unsigned char Byte1=0,Byte2=0,Byte3=0;Byte1=0xfa;Byte2=(Data&0xf0);Byte3=(Data&0x0f)<<4);GPIO_LCD12864_Init();LCD_CS=1; /enable the spi modeSPI_Write(Byte1);SPI_Write(Byte2);SPI_Write(Byte3);LCD_CS=0;/*void Put_Char(uint8 Line,uint8 Add,uint8 Char) switch(Line) case 1: Add=0x80|Add; br

23、eak; case 2: Add=0x90|Add; break; case 3: Add=0x88|Add; break; case 4: Add=0x98|Add; break; default: break; LCD12864_Cmd_Write(Add); LCD12864_Date_Write(Char);/*void Put_String(uint8 Line,uint8 Add,uint8 *String) uint8 Line_Table5=0x00,0x80,0x90,0x88,0x98; uint8 address=0,offset=0; switch(Line) case

24、 1: address=Line_Table1|Add; break; case 2: address=Line_Table2|Add; break; case 3: address=Line_Table3|Add; break; case 4: address=Line_Table4|Add; break; default: break; LCD12864_Cmd_Write(address); offset = Add*2; /understand about it do if(offset=16) /pay attention why it should be 16 LCD12864_C

25、md_Write(Line_Table+Line); offset = 0; LCD12864_Date_Write(*String); String+; offset+; while(*String!='0');/*void Put_Number(uint8 Line,uint8 Add,uint16 Num,uint8 Length) uint8 Line_Table5=0x00,0x80,0x90,0x88,0x98; uint8 address=0; switch(Line) case 1: address=Line_Table1|Add; break; case 2:

26、 address=Line_Table2|Add; break; case 3: address=Line_Table3|Add; break; case 4: address=Line_Table4|Add; break; default: break; LCD12864_Cmd_Write(address); switch(Length) case 1: LCD12864_Date_Write(Num+48); break; case 2: LCD12864_Date_Write(Num/10+48); LCD12864_Date_Write(Num%10+48); break; case

27、 3: LCD12864_Date_Write(Num/100+48); LCD12864_Date_Write(Num%100/10+48); LCD12864_Date_Write(Num%10+48); break; default: break; /*the time display structure is fixed .we can only change it in the codevoid Put_Time(uint8 Line,uint8 Add,uint8 *Time_Buffer) uint8 Line_Table5=0x00,0x80,0x90,0x88,0x98; u

28、int8 address=0; switch(Line) case 1: address=Line_Table1|Add; break; case 2: address=Line_Table2|Add; break; case 3: address=Line_Table3|Add; break; case 4: address=Line_Table4|Add; break; default: break; LCD12864_Cmd_Write(address); LCD12864_Date_Write(*Time_Buffer/10+48); LCD12864_Date_Write(*Time

29、_Buffer%10+48); /*void Address_Control(uint8 Line,uint8 Add,uint8 Glitter) switch(Line) case 1: Add=0x80|Add; break; case 2: Add=0x90|Add; break; case 3: Add=0x88|Add; break; case 4: Add=0x98|Add; break; default: break; LCD12864_Cmd_Write(Add); LCD12864_Delay(20); LCD12864_Cmd_Write(Glitter); */void

30、 LCD12864_Init()LCD12864_Cmd_Write(0x00);LCD12864_Delay(20);LCD12864_Cmd_Write(0x01);LCD12864_Delay(2);LCD12864_Cmd_Write(0x02);LCD12864_Delay(2);LCD12864_Cmd_Write(0x06);LCD12864_Delay(2);LCD12864_Cmd_Write(0x0c);main()LCD12864_Init(); LCD12864_Date_Write('a''a''a''a'

31、;'a''a''a''a''a''a''a''a''a''a''a''a''a''a''a'); while(1);附录2 HD7279模块清单#include"HD7279.h"void HD7279_Delay(uint8 x) for( ;x>0;x-) _nop_();_nop_(); void Single_Cmd_Wri

32、te(uint8 Cmd) uint8 i; HD7279_CS = 0; HD7279_CLK = 0; HD7279_Delay(4); for(i=0;i<8;i+) if(Cmd&0x80)=0x80) HD7279_DATA = 1; else HD7279_DATA = 0; HD7279_Delay(4); HD7279_CLK = 1; Cmd<<=1; HD7279_Delay(4);HD7279_CLK = 0; HD7279_CS = 1;void Complex_Cmd_Write(uint8 Cmd,uint8 Date) uint8 i;

33、HD7279_CS = 0; HD7279_CLK = 0; HD7279_Delay(4); for(i=0;i<8;i+) if(Cmd&0x80)=0x80) HD7279_DATA = 1; else HD7279_DATA = 0; HD7279_Delay(4); HD7279_CLK = 1; Cmd<<=1; HD7279_Delay(4); HD7279_CLK = 0; HD7279_CLK = 0; for(i=0;i<8;i+) if(Date&0x80)=0x80) HD7279_DATA = 1; else HD7279_DA

34、TA = 0; HD7279_Delay(4); HD7279_CLK = 1; Date<<=1; HD7279_Delay(4); HD7279_CLK = 0; HD7279_CS = 1;uint8 Read_Keyboard(uint8 Cmd) uint8 i,temp; HD7279_CS = 0; HD7279_CLK = 0; /it is a must to have HD7279_CLK = 0; HD7279_Delay(4); for(i=0;i<8;i+) if(Cmd&0x80)=0x80) HD7279_DATA = 1; else H

35、D7279_DATA = 0; HD7279_Delay(4); HD7279_CLK = 1; Cmd<<=1; HD7279_Delay(4);HD7279_CLK = 0; HD7279_CLK = 0; HD7279_DATA = 1; /realease the bus HD7279_Delay(4); for(i=0;i<8;i+) HD7279_CLK = 1; temp<<=1; /when the HD7279_CLK is low HD7279_Delay(4); HD7279_CLK = 0; /location 1 if(HD7279_DA

36、TA=1) temp|=0x01; /pay attention to it /HD7279_CLK = 0; HD7279_Delay(4); /the key value can be sampled / HD7279_CLK = 0; /location 2 ,both location 1 and location 2 is ok in other's board. I donnot know the reason. HD7279_CS = 1; return temp;/date displayvoid Display_Write(uint8 Bit,uint8 Date,u

37、int8 Dcode_Way) uint8 Cmd; if(Dcode_Way=0) Cmd=load_decode0|Bit; Complex_Cmd_Write(Cmd,Date);/glitter displayvoid Glitter_Control(uint8 Bit) Complex_Cmd_Write(glitter,Bit);void Display_line(uint8 Date) Complex_Cmd_Write(line_light,Date);/number display/this program can only display the number while

38、length is less tan 4/so the biggest start_bit shoud be 6void Number_Write(uint8 Start_Bit,uint8 Length,uint8 Num) switch(Length) case 1 : Display_Write(Start_Bit,Num,0); break; case 2 : Display_Write(Start_Bit,Num/10,0); Display_Write(Start_Bit-1,Num%10,0); break; case 3 : Display_Write(Start_Bit,Nu

39、m/100,0); Display_Write(Start_Bit-1,Num%100/10,0); Display_Write(Start_Bit-2,Num%10,0); default : break; /a very useful programuint8 Key_Value_Read() static uint8 key_state=0,Key_Final_Value = 0; uint8 Key_Value=0; switch(key_state) case 0: Key_Value = Read_Keyboard(read_key); if(Key_Value=255) key_

40、state = 0; else key_state = 1; Key_Final_Value = 0; break; case 1: Key_Value = Read_Keyboard(read_key); if(Key_Value=255) key_state = 0; else key_state = 2; Key_Final_Value = Key_Value; break; case 2: Key_Value = Read_Keyboard(read_key); if(Key_Value!=255) Key_Final_Value = 0; key_state = 2; else ke

41、y_state = 0; break; default: break; return Key_Final_Value;附录3 PWM调速程序清单#include<stc12c5a.h>#include<intrins.h>#include"LCD12864.h"#define uchar unsigned char#define uint unsigned int/新一代 1T 8051系列 单片机PCA/PWM 特殊功能寄存器/ 7 6 5 4 3 2 1 0 Reset Value/*sfr CCON = 0xD8; /PCA 控制寄存器。 CF

42、 CR - - - - CCF1 CCF0 00xx,xx00/-sbit CF = CCON7; /PCA计数器溢出标志,由硬件或软件置位,必须由软件清0。sbit CR = CCON6; /1:允许 PCA 计数器计数, 必须由软件清0。/-/-sbit CCF1 = CCON1; /PCA 模块1 中断标志, 由硬件置位, 必须由软件清0。sbit CCF0 = CCON0; /PCA 模块0 中断标志, 由硬件置位, 必须由软件清0。/-sfr CMOD = 0xD9; /PCA 工作模式寄存器。 CIDL - - - CPS2 CPS1 CPS0 ECF 0xxx,x000/*CID

43、L: idle 状态时 PCA 计数器是否继续计数, 0: 继续计数, 1: 停止计数。CPS2: PCA 计数器脉冲源选择位 2。CPS1: PCA 计数器脉冲源选择位 1。CPS0: PCA 计数器脉冲源选择位 0。 CPS2 CPS1 CPS0 0 0 0 系统时钟频率 fosc/12。 0 0 1 系统时钟频率 fosc/2。 0 1 0 Timer0 溢出。 0 1 1 由 ECI/P3.4 脚输入的外部时钟,最大 fosc/2。 1 0 0 系统时钟频率, Fosc/1 1 0 1 系统时钟频率/4,Fosc/4 1 1 0 系统时钟频率/6,Fosc/6 1 1 1 系统时钟频率

44、/8,Fosc/8ECF: PCA计数器溢出中断允许位, 1-允许 CF(CCON.7) 产生中断。*/-/*sfr CL = 0xE9; /PCA 计数器低位 0000,0000sfr CH = 0xF9; /PCA 计数器高位 0000,0000/-/ 7 6 5 4 3 2 1 0 Reset Valuesfr CCAPM0 = 0xDA; /PCA 模块0 PWM 寄存器 - ECOM0 CAPP0 CAPN0 MAT0 TOG0 PWM0 ECCF0 x000,0000sfr CCAPM1 = 0xDB; /PCA 模块1 PWM 寄存器 - ECOM1 CAPP1 CAPN1 MAT1 TOG1 PWM1 ECCF1 x000,0000/ECOMn = 1:允许比较功能。/CAPPn = 1:允许上升沿触发捕捉功能。/CAPNn = 1:允许下降沿触发捕捉功能。/MATn = 1:当匹配情况发生时, 允许 CCON 中的 CCFn 置位。/TOGn = 1:当匹配情况发生时, CEXn 将翻转。/PWMn = 1:将 CEXn 设置为 PWM 输出。/ECCFn = 1:允许 CCON 中的 CCFn 触发中断。/ECOMn CAPPn CAPNn MATn TOGn

温馨提示

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

评论

0/150

提交评论