第一篇:STM32 PWM输出总结
学习后发现stm32的定时器功能确实很强大,小总结一下方便以后使用的时候做参考。Stm32定时器一共分为三种:tim1和tim8是高级定时器,6和7是基本定时器,2—5是通用定时器。从名字就可以看得出来主要功能上的差异。今天我主要是用定时器做pwm输出,所以总结也主要是针对pwm方面的。
先大致说下通用和高级定时器的区别。通用的可以输出四路pwm信号互不影响。高级定时器可以输出三对互补pwm信号外加ch4通道,也就是一共七路。
所以这样算下来stm32一共可以生成4*5+7*2=30路pwm信号。接下来还有功能上的区别:通用定时器的pwm信号比较简单,就是普通的调节占空比调节频率(别的不常用到的没去深究);高级定时器的还带有互补输出功能,同时互补信号可以插入死区,也可以使能刹车功能,从这些看来高级定时器的pwm天生就是用来控制电机的。
Pwm输出最基本的调节就是频率和占空比。频率当然又和时钟信号扯上了关系。高级定时器是挂接到APB2上,而通用定时器是挂接到APB1上的。APB1和APB2的区别就要在于时钟频率不同。APB2最高频率允许72MH,而APB1最高频率为36MHZ。这样是不是通用定时器只最高36MHZ频率呢,不是的;通用定时器时钟信号完整的路线应该是下面这样的: AHB(72mhz)→APB1分频器(默认2)→APB1时钟信号(36mhz)→倍频器(*2倍)→通用定时器时钟信号(72mhz)。
在APB1和定时器中间的倍频器起到了巨大的作用,假如红色字体的“APB1分频器”假如不为1(默认是2),倍频器会自动将APB1时钟频率扩大2倍后作为定时器信号源,这个它内部自动控制的不用配置。设置这个倍频器的目的很简单就是在APB1是36mhz的情况下通用定时器的频率同样能达到72mhz。我用的库函数直接调用函数SystemInit();这个函数之后时钟配置好了:通用定时器和高级定时器的时钟现在都是72mhz(你也可以自己再配置一下RCC让他的频率更低,但是不能再高了)。定时器接下来还有一个分频寄存器:TIMX_PSC经过他的分频后,才是定时器计数的频率。所以真正的时钟频率应该是72mhz/(TIMX_PSC-1),我们设为tim_frepuency下面还会用到。
stm32的时钟频率弄得确实是很饶人的,所以关键就是先要把思路理清楚。时钟的频率弄好了下面终于可以开说重点PWM了。当然还少不了频率:pwm主要就是控制频率和占空比的:这两个因素分别通过两个寄存器控制:TIMX_ARR和TIMX_CCRX。ARR寄存器就是自动重装寄存器,也就是计数器记到这个数以后清零再开始计,这样pwm的频率就是tim_frequency/(TIMX_ARR-1)。在计数时会不停的和CCRX寄存器中的数据进行比较,如果小于的话是高电平或者低电平,计数值大于CCRX值的话电平极性反相。所以这也就控制了占空比。
下面是定时器1的配置代码:
GPIO_InitTypeDef GPIO_InitStructure2;
TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;
TIM_OCInitTypeDef TIM_OCInitStructure;
TIM_BDTRInitTypeDef TIM_BDTRInitStructure;
//第一步:配置时钟
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA|
RCC_APB2Periph_GPIOB|RCC_APB2Periph_TIM1,ENABLE);
//第二步,配置goio口
/********TIM1_CH1 引脚配置*********/
GPIO_InitStructure2.GPIO_Pin=GPIO_Pin_8;
GPIO_InitStructure2.GPIO_Speed=GPIO_Speed_50MHz;
GPIO_InitStructure2.GPIO_Mode=GPIO_Mode_AF_PP;
//设置为复用浮空输出
GPIO_Init(GPIOA,&GPIO_InitStructure2);
/*********TIM1_CH1N 引脚配置********/
GPIO_InitStructure2.GPIO_Pin=GPIO_Pin_13;
GPIO_InitStructure2.GPIO_Speed=GPIO_Speed_50MHz;
GPIO_InitStructure2.GPIO_Mode=GPIO_Mode_AF_PP;
//设置为复用浮空输出
GPIO_Init(GPIOB,&GPIO_InitStructure2);
//第三步,定时器基本配置
TIM_TimeBaseStructure.TIM_Period=1000-1;
// 自动重装载寄存器的值
TIM_TimeBaseStructure.TIM_Prescaler=72-1;
// 时钟预分频数
TIM_TimeBaseStructure.TIM_ClockDivision=TIM_CKD_DIV1;// 采样分频
TIM_TimeBaseStructure.TIM_CounterMode=TIM_CounterMode_Up;//向上计数
TIM_TimeBaseStructure.TIM_RepetitionCounter=0;//重复寄存器,用于自动更新pwm占空比
TIM_TimeBaseInit(TIM1, &TIM_TimeBaseStructure);
//第四步pwm输出配置
TIM_OCInitStructure.TIM_OCMode=TIM_OCMode_PWM2;
//设置为pwm1输出模式
TIM_OCInitStructure.TIM_Pulse=500;
//设置占空比时间
TIM_OCInitStructure.TIM_OCPolarity=TIM_OCPolarity_Low;
//设置输出极性
TIM_OCInitStructure.TIM_OutputState=TIM_OutputState_Enable;
//使能该通道输出
//下面几个参数是高级定时器才会用到,通用定时器不用配置
TIM_OCInitStructure.TIM_OCNPolarity=TIM_OCNPolarity_High;
//设置互补端输出极性
TIM_OCInitStructure.TIM_OutputNState=TIM_OutputNState_Enable;//使能互补端输出
TIM_OCInitStructure.TIM_OCIdleState=TIM_OCIdleState_Reset;
//死区后输出状态
TIM_OCInitStructure.TIM_OCNIdleState=TIM_OCNIdleState_Reset;//死区后互补端输出状态
TIM_OC1Init(TIM1,&TIM_OCInitStructure);
//按照指定参数初始化
//第五步,死区和刹车功能配置,高级定时器才有的,通用定时器不用配置
TIM_BDTRInitStructure.TIM_OSSRState = TIM_OSSRState_Disable;//运行模式下输出选择
TIM_BDTRInitStructure.TIM_OSSIState = TIM_OSSIState_Disable;//空闲模式下输出选择
TIM_BDTRInitStructure.TIM_LOCKLevel = TIM_LOCKLevel_OFF;
//锁定设置
TIM_BDTRInitStructure.TIM_DeadTime = 0x90;
//死区时间设置
TIM_BDTRInitStructure.TIM_Break = TIM_Break_Disable;
//刹车功能使能
TIM_BDTRInitStructure.TIM_BreakPolarity = TIM_BreakPolarity_High;//刹车输入极性
TIM_BDTRInitStructure.TIM_AutomaticOutput = TIM_AutomaticOutput_Enable;//自动输出使能
TIM_BDTRConfig(TIM1,&TIM_BDTRInitStructure);
//第六步,使能端的打开
TIM_OC1PreloadConfig(TIM1, TIM_OCPreload_Enable);//使能TIMx在CCR1上的预装载寄存器
TIM_ARRPreloadConfig(TIM1, ENABLE);
//使能TIMx在ARR上的预装载寄存器
TIM_Cmd(TIM1,ENABLE);
//打开TIM2
//下面这句是高级定时器才有的,输出pwm必须打开
TIM_CtrlPWMOutputs(TIM1, ENABLE);
//pwm输出使能,一定要记得打开
TIM_OC1PreloadConfig(),TIM_ARRPreloadConfig();这两个函数控制的是ccr1和arr的预装在使能,使能和失能的区别就是:使能的时候这两个局存期的读写需要等待有更新事件发生时才能被改变(比如计数溢出就是更新时间)。失能的时候可以直接进行读写而没有延迟。另外在运行当中想要改变pwm的频率和占空比调用:TIM_SetAutoreload()TIM_SetCompare1()这两个函数就可以了。
第二篇:输出EXCEL总结1.1
欢迎随时补充其他内容!
* Developed By : 甄晓达 * Create Date : 2009-2-1
本文档内容:
一、模板的下载(可参考最后面的实例程序)
二、关于EXCEL输出 1.基本步骤
2.其他关于EXCEL表操作的补充说明
三、实例程序
四、关于CALL METHOD DOCUMENT->*的补充说明
五、关于VBA与ABAP代码的说明
获得EXCEL表的方式:
1.建立某格式文件
call function 'GUI_DOWNLOAD' 例: L_FULLPATH = 'C:Documents and Settingszxd桌面hello.xls'.CALL FUNCTION 'GUI_DOWNLOAD' “根据文件路径建立文件 EXPORTING
FILENAME = L_FULLPATH FILETYPE = 'BIN' TABLES
DATA_TAB = L_MIME.注:路径选择也可以通过宏实现,用此种方法建立的EXCEL表只有一个SHEET!
2.用SMW0存储的模板用
CALL FUNCTION 'SAP_OI_LOAD_MIME_DATA'下载
一、模板的下载(可参考最后面的实例程序)
1用FUNCTION: SAP_OI_LOAD_MIME_DATA下载:
INCLUDE OFFICEINTEGRATIONINCLUDE.DATA: FACTORY TYPE REF TO I_OI_DOCUMENT_FACTORY, RETCODE TYPE T_OI_RET_STRING, LINK_SERVER TYPE REF TO I_OI_LINK_SERVER.DATA: DOC_SIZE TYPE I, DOC_FORMAT(100), DOC_TYPE(100)VALUE 'Word.Document.8', DOC_TABLE LIKE W3MIME OCCURS 0, DOCUMENT TYPE REF TO I_OI_DOCUMENT_PROXY, IS_CLOSED TYPE I.DATA L_FULLPATH TYPE STRING.INITIALIZATION.PERFORM INIT_FACTORY.”下载模板时需要初始化的内容 START-OF-SELECTION.L_FULLPATH = ‘C:SHIYAN’.“用FUNCTION选择文件地点写入L_FULLPATH也可 PERFORM OPEN_DOC USING L_FULLPATH.” L_FULLPATH为文件存储的路径,C或者字符串都行,子程序里会人为的修改成C类型,如果此处定义为C类型则子程序里不用再做变换
FORM INIT_FACTORY.IF FACTORY IS INITIAL.CALL METHOD C_OI_FACTORY_CREATOR=>GET_DOCUMENT_FACTORY IMPORTING
FACTORY = FACTORY RETCODE = RETCODE.IF RETCODE NE C_OI_ERRORS=>RET_OK.EXIT.ENDIF.CALL METHOD FACTORY->START_FACTORY EXPORTING
R3_APPLICATION_NAME = SY-SYSID IMPORTING
RETCODE = RETCODE.CALL METHOD C_OI_ERRORS=>SHOW_MESSAGE EXPORTING
TYPE = 'E'.CALL METHOD FACTORY->GET_LINK_SERVER IMPORTING
LINK_SERVER = LINK_SERVER RETCODE = RETCODE.CALL METHOD C_OI_ERRORS=>SHOW_MESSAGE EXPORTING
TYPE = 'W'.CALL METHOD LINK_SERVER->START_LINK_SERVER IMPORTING
RETCODE = RETCODE.CALL METHOD C_OI_ERRORS=>SHOW_MESSAGE EXPORTING
TYPE = 'W'.ELSE.CALL METHOD LINK_SERVER->STOP_LINK_SERVER IMPORTING
RETCODE = RETCODE.ENDIF.“factory IS INITIAL.ENDFORM.” INIT_FACTORY
FORM OPEN_DOC USING L_FULLPATH.DATA: OBJECT_ID(20).CLEAR OBJECT_ID.DATA: DIZHI(100)TYPE C.DIZHI = L_FULLPATH.OBJECT_ID = 'ZHRIS087A'.CALL FUNCTION 'SAP_OI_LOAD_MIME_DATA'
EXPORTING
OBJECT_ID = OBJECT_ID IMPORTING
DATA_SIZE = DOC_SIZE DOCUMENT_FORMAT = DOC_FORMAT DOCUMENT_TYPE = DOC_TYPE TABLES
DATA_TABLE = DOC_TABLE EXCEPTIONS
OBJECT_NOT_FOUND = 1 INTERNAL_ERROR =
2OTHERS = 3.IF SY-SUBRC NE 0.MESSAGE ID SY-MSGID TYPE 'E' NUMBER SY-MSGNO WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.ENDIF.IF DOC_SIZE NE 0.CALL METHOD FACTORY->GET_DOCUMENT_PROXY EXPORTING
DOCUMENT_TYPE = DOC_TYPE IMPORTING
DOCUMENT_PROXY = DOCUMENT RETCODE = RETCODE.CALL METHOD C_OI_ERRORS=>SHOW_MESSAGE EXPORTING
TYPE = 'E'.“ 打开下载的模板(注:不CALL METHOD不能正常打开
CALL METHOD DOCUMENT->PLAY_DOCUMENT_FROM_TABLE EXPORTING
DOCUMENT_TABLE = DOC_TABLE[] DOCUMENT_SIZE = DOC_SIZE NO_FLUSH = 'X'
IMPORTING
RETCODE = RETCODE.” 按DIZHI存储的路径保存下载的模板,不打开也能保存!
CALL METHOD DOCUMENT->SAVE_COPY_AS EXPORTING
FILE_NAME = DIZHI NO_FLUSH = 'X' PROMPT_USER = ' '
IMPORTING
RETCODE = RETCODE.CALL METHOD C_OI_ERRORS=>SHOW_MESSAGE EXPORTING
TYPE = 'E'.PERFORM CLOSE_DOC.PERFORM CLOSE_FACTORY.ELSE.MESSAGE 'No document selected' TYPE 'E'.ENDIF.ENDFORM.“ OPEN_DOC
FORM CLOSE_DOC.IF NOT DOCUMENT IS INITIAL.CALL METHOD DOCUMENT->IS_DESTROYED IMPORTING
RET_VALUE = IS_CLOSED.IF IS_CLOSED IS INITIAL.CALL METHOD DOCUMENT->CLOSE_DOCUMENT EXPORTING DO_SAVE = 'X'
IMPORTING
RETCODE = RETCODE.CALL METHOD C_OI_ERRORS=>SHOW_MESSAGE EXPORTING
TYPE = 'E'.ENDIF.CALL METHOD DOCUMENT->RELEASE_DOCUMENT EXPORTING
NO_FLUSH = ' '
IMPORTING
RETCODE = RETCODE.FREE DOCUMENT.ENDIF.ENDFORM.” CLOSE_DOC
FORM CLOSE_FACTORY.IF NOT LINK_SERVER IS INITIAL.CALL METHOD LINK_SERVER->STOP_LINK_SERVER IMPORTING
RETCODE = RETCODE.FREE LINK_SERVER.ENDIF.IF NOT FACTORY IS INITIAL.CALL METHOD FACTORY->STOP_FACTORY IMPORTING
RETCODE = RETCODE.FREE FACTORY.ENDIF.ENDFORM.“ CLOSE_FACTORY
二、关于EXCEL输出 1.基本步骤:
第一步:定义变量: TYPE-POOLS OLE2.DATA: V_EXCEL TYPE OLE2_OBJECT, “excel 表
V_SHEET TYPE OLE2_OBJECT, “EXCEL 表中的SHEET V_BOOK TYPE OLE2_OBJECT, V_CELL TYPE OLE2_OBJECT, “SHEET 中的单元格
注:上面定义的4个一般为必然会用到的变量,下面的变量可以在用到时再做定义 V_RANGE TYPE OLE2_OBJECT, “选中区域 V_COLUMN TYPE OLE2_OBJECT, “选中列
V_BORDERS TYPE OLE2_OBJECT.“选中区域的边框 DATA: V_SHEET_NUMBER TYPE I, PA_PATH TYPE STRING, L_ROW TYPE I, L_COL TYPE I, 第二步:打开已存在的EXCEL模板
CREATE OBJECT V_EXCEL 'Excel.Application'.”创建Excel对象
CALL METHOD OF V_EXCEL 'Workbooks' = V_BOOK.“ excel createwbook
CALL METHOD OF V_BOOK 'Open' = V_BOOK EXPORTING
#1 = PA_PATH.”文件存储的路径,字符串,C类型应该也可以,没有试验 “注:也可以新建一个EXCEL:call method of v_books 'Add' = v_book.IF SY-SUBRC <> 0.MESSAGE 'Open file failed!' TYPE 'E'.STOP.ENDIF.SET PROPERTY OF V_EXCEL 'Visible' = 1.”将已经打开的EXCEL表设置可见
第三步:打开EXCEL表其中的一个SHEET并修改SHEET名 V_SHEET_NUMBER = 1.“打开EXCEL表第一个SHEET
CALL METHOD OF V_BOOK 'Sheets' = V_SHEET ”打开EXCEL的SHEET
EXPORTING #1 = PA_SHEET_NUMBER.* CALL METHOD OF V_EXCEL 'WORKSHEETS' = V_SHEET “效果和上面SHEETS一样,输出数据同样可以是SHEET名也可以是数字
* EXPORTING * #1 = 'Sheet3'.CALL METHOD OF V_SHEET 'ACTIVATE'.”显示当前选择的SHEET,如不写此句显示SHEET为第一个SHEET,不过下面的其他操作仍然只是对被选择的SHEET有效
SET PROPERTY OF V_SHEET 'NAME' = 'SHIYAN'.“此语句可以修改选择的SHEET名
*想新建SHEET可以调用下面的语句,注意下面第一条语句不能指定SHEET,否则不能添加成功(意即目前只能添加SHEET到最前面)
* CALL METHOD OF V_BOOK 'WORKSHEETS' = TMPSHEET.* CALL METHOD OF TMPSHEET 'ADD'.第四步:往EXCEL表里填写内容
CALL METHOD OF V_SHEET 'Cells' = V_CELL EXPORTING
#1 = L_ROW ”写入的行号
#2 = L_COL.“写入的列号
SET PROPERTY OF V_CELL 'Value' = SY-DATUM.”SY-DATUM为填写的内容 第五步:保存并释放SAP对EXCEL的链接
SET PROPERTY OF V_EXCEL 'DisplayAlerts' = 0.“不显示警告提示,如不加此句,保存文件时会弹出“当前位置以有名为*的文件,是否„”的询问对话框,加上此句则直接保存 CALL METHOD OF V_BOOK 'SAVEAS' ”保存EXCEL文本文件(如果需要保存修改的SHEET命,得用V_EXCEL
EXPORTING #1 = PA_FULLPATH.CALL METHOD OF V_BOOK 'Exit' = V_BOOK.“此句作用尚不明确!不写没发现影响 FREE OBJECT V_EXCEL.FREE OBJECT V_SHELL.„„ 2.其他关于EXCEL表操作的补充说明:
2.1调用EXCEL表宏
CALL METHOD OF V_EXCEL 'WORKSHEETS' = V_SHEET EXPORTING #1 = 'SHEET1'.CALL METHOD OF H_SHEET 'ACTIVATE'.CALL METHOD OF EXCEL 'RUN' EXPORTING #1 = 'ZMACRO1'.2.2输入列号求得列字母表示(自编宏,HR项目组用,其他如没有自己写吧„„)
CALL FUNCTION 'ZHRIS_GET_EXCEL_COLUMN'
EXPORTING
P_COLUMN = L_INT IMPORTING
F_COLUMN = COL.例:输入L_INT = 5 输出 COL = ‘e’.2.3调整列宽度与行高及插入行
DATA V_COLUMN TYPE OLE2_OBJECT.DATA V_ROWS TYPE OLE2_OBJECT.*--调整列宽度
CALL METHOD OF V_EXCEL 'Columns' = V_COLUMN ”选定列 EXPORTING
#1 = ‘1:5’.“修改1-5列
SET PROPERTY OF V_COLUMN 'ColumnWidth' = 30.”要调整的宽度 *--调整行宽度
CALL METHOD OF V_EXCEL 'ROWS' = V_ROWS EXPORTING
#1 = 1.“行号
SET PROPERTY OF V_ROWS 'rowheight' = 50.CALL METHOD OF V_ROWS 'Insert'.”插入一行 注:行高会影响到所有行,设置单独的行高方法待查!
2.4 获得当前EXCEL表的SHEET数量 DATA SHEETCOUNT TYPE I.CALL METHOD OF V_EXCEL 'WORKSHEETS' = V_SHEET.“ worksheet
得到活动的 GET PROPERTY OF V_SHEET 'COUNT' = SHEETCOUNT.”得到sheet数量
WRITE SHEETCOUNT.2.5 获得当前打开的SHEET名称(需执行打开SHEET操作后才能执行)DATA SHEETNAME TYPE STRING.GET PROPERTY OF V_SHEET 'NAME' = SHEETNAME.“此语句用来获得当前打开的SHEET名称
2.6 复制SHEET DATA MODELSHEET TYPE OLE2_OBJECT.DATA TMPSHEET TYPE OLE2_OBJECT.CALL METHOD OF V_EXCEL 'WORKSHEETS' = MODELSHEET ” 要复制的SHEET EXPORTING #1 = 'Sheet2'.CALL METHOD OF V_EXCEL 'WORKSHEETS' = TMPSHEET EXPORTING #1 = 'Sheet3'.CALL METHOD OF MODELSHEET 'COPY' “ 复制MODELSHEET 放到TMPSHEET前
EXPORTING #1 = TMPSHEET.” 如不加此项则建立一个新表存储SHEET
2.7 隐藏格线
DATA ACTIVEWINDOW TYPE OLE2_OBJECT.CALL METHOD OF V_EXCEL 'ACTIVEWINDOW' = ACTIVEWINDOW.“得到活动窗口对象 SET PROPERTY OF ACTIVEWINDOW 'DISPLAYGRIDLINES' = 0.”隐藏格线(虚线)注:不要用V_SHEET,可能会导致输出数据不正常,原因不明,新定义一个比较保险。
2.8 选中EXCEL表某区域并做操作
CALL METHOD OF V_SHEET 'range' = V_RANGE “设定操作范围
EXPORTING #1 = 'a3' #2 = 'B5'.CALL METHOD OF V_RANGE 'Select' NO FLUSH.” 选择设定区域
CALL METHOD OF V_RANGE 'ClearContents'.“清空内容
SET PROPERTY OF V_RANGE 'MergeCells' = 1.”合并单元格
SET PROPERTY OF V_RANGE 'HorizontalAlignment' = 2.“设定对齐方式(1:无对齐 2:左对齐 3:居中 4:右对齐)
SET PROPERTY OF V_RANGE 'ShrinkToFit' = 0.”取消自动缩小字体 GET PROPERTY OF V_RANGE 'borders' = V_BORDERS NO FLUSH.“加边框
SET PROPERTY OF V_BORDERS 'linestyle' = '1' NO FLUSH.”框线格式 SET PROPERTY OF V_RANGE 'WrapText' = 1.“单元格内容自动换行
2.9 移动SHEET DATA V_MOVE TYPE OLE2_OBJECT.CALL METHOD OF V_EXCEL 'WORKSHEETS' = V_SHEET ”选择要移动的SHEET
EXPORTING #1 = 'Sheet1'.CALL METHOD OF V_EXCEL 'WORKSHEETS' = V_MOVE “选择移动到的位置
EXPORTING #1 = 'Sheet3'.CALL METHOD OF V_SHEET 'Move' ”移动 V_SHEET 到 V_MOVE 左边
EXPORTING #1 = V_MOVE.三、实例程序
用下载模板的实例程序:
EXCEL各功能操作试验程序:
四、关于CALL METHOD DOCUMENT的补充说明(其他用法请见二下载模板的说明)
1.用下面这个METHOD可以直接打开下载的模板
CALL METHOD DOCUMENT->OPEN_DOCUMENT_FROM_TABLE EXPORTING
DOCUMENT_SIZE = DOC_SIZE DOCUMENT_TABLE = DOC_TABLE[] 2.用下面这个METHOD可以调用下载模板的动态宏 MACRO = 'Macro2'.“宏名称
CALL METHOD DOCUMENT->EXECUTE_MACRO EXPORTING
MACRO_STRING = macro ”调用宏的名称 * NO_FLUSH = ' '
PARAM1 = param1 “各参数值(用到几个打开几个)* PARAM10 = * PARAM11 = * PARAM12 =
PARAM2 = param2 PARAM3 = param4 PARAM4 = param3 * PARAM5 = * PARAM6 = * PARAM7 = * PARAM8 = * PARAM9 =
PARAM_COUNT = 4 ”要传进的参数数量 * SCRIPT_NAME = * IMPORTING
* ERROR = error * RETCODE = * CHANGING
* ERROR_STRING = * RETVALUE =.注1:EXCEL和WORD里写宏最简单的方法便是录制,录宏的方法如下:执行菜单命令“工具—>宏—>录制新宏”开始录制,按照步骤把想实现的功能操作一遍,完毕后点击停止按钮,再根据是否需要传递参数等要求修改一下录制好的宏即可。
最左边的注2:一般输出数据到WORD的话可能会用到邮件合并功能,邮件合并功能的设置方法如下:(可以参考程序ZHRIS_PAFM024模板的用法)
将excel中的人员信息表作为数据源。在word中建立一个主文档,设计排版出一个空白的履历表,不变的那部分内容先填好,如“姓名”、“年龄”、“学历”等。
执行菜单命令“工具—信函与邮件—显示邮件合并工具栏”调出邮件合并工具栏。点击“打开数据源”按钮(左起第2个图标),在打开的对话框中找到并打开人员信息excel表,选择存有人员信息的那个工作表即可。
确定后退回word主界面,点击履历表“姓名”后面的空白单元格,然后点击“插入域”按钮(左起第6个图标),打开插入合并域对话框,选择“姓名”项,单击“插入”,最后单击“关闭”退出。这时,会发现履历表“姓名”后面的单元格中出现“《姓名》”字样,这就是合并域的所谓占位符了。依此类推,为其他项目插入相应的合并域。点击“查看合并数据”(标有“ABC”的图标),你会发现所有占位符都被替换成真实的数据了,单击工具栏上的左、右方向按钮,可以快速浏览所有的履历,如未发现问题,可单击“合并到新文档”按钮(倒数第4个图标),从弹出对话框中选择“全部”记录,确定即可生成一个全新的word文档,每个人的履历都被放在一个单独的页面,打印出来即可。
注3:当录制向WORD插入照片的宏时,会遇到无法设定鼠标位置的问题,用下面一个方法可以解决:(适合只需要插入一张照片的宏,多张照片需另想办法„„)
宏的第一步先写插入照片的代码,在插入语句代码前加上Application.GoBack语句(对应操作SHIFT+F5)。返回模板将鼠标放在要插入照片的位置上,点击保存按钮(必须有修改过内容,文件不能处于已保存状态),然后关闭模板文件即可。
SHIFT+F5的作用:在初打开文件未做任何操作时使用可以使鼠标回到上一次保存文件时的位置。注4:补充一个VBA宏命令:
修改另存为时默认的文件名:(文件名用动态从字段中取到的值)Dim l_month As Integer Dim l_year As Integer l_month=ActiveDocument.MailMerge.DataSource.DataFields(“MONTH”).Value l_year = ActiveDocument.MailMerge.DataSource.DataFields(“YEAH”).Value ActiveDocument.SaveAs FileName:=l_year & “年” & l_month & “月工资劳务费审批单”
五、关于VBA与ABAP代码的说明(以下内容纯属个人理解,欢迎随时修正!)
OFFICE宏命令编程用到VISUAL BASIC,ABAP语言用程序实现OFFICE的各项功能其实也是调用(或者是实现?不是特别清楚=,.=)了VB语言而已,那么接下来就讲如何通过OFFICE录制的宏转化为ABAP语言代码。
以EXCEL相关内容举例:
要想操作EXCEL就得知道想要操作的对象,是整个EXCEL表,还是
第三篇:文化输出
西方有人认为中国到二十一世纪初叶将成为经济大国,甚至是军事大国,其实中国从本质上说是一个文化大国,最有可能对人类文明做出贡献的是中国文化,二十一世纪将是中国文化的世纪。——季羡林
苟日新,日日新,又日新。”“天行健,君子以自强不息。”这既是中华民族的先哲通过观察宇宙万物提出的重要思想,也深刻揭示了中华民族自强不息的民族精神,因此成为中国的千年传世格言。——胡锦涛
中国,近五十年发展迅速的发展中国家,其经济高速发展之下更是带动起文化的发展和内在历史人文的挖掘。从《舌尖上的中国》到日常的影视作品,甚至日常生活中用到的家居产品,都带着中国人文的精神烙印。一些传统的、历史的、带有人文色彩的产品逐渐从历史中走出,带着新时代的历史使命,重新焕发出新的色彩。
2017年7月27日,作为建军90周年献礼片,《战狼2》登陆国内各大院线。影片以中国海外撤侨真实事件为背景,讲述中国退伍军人冷锋在非洲战乱地区不顾个人安危营救同胞和异国难民的英雄故事。上映以来,几乎场场爆满,凭借良好口碑产生的“自来水效应”,《战狼2》接连打破国内多项电影票房纪录。
2018年2月16日在中国内地上映[2] ;3月1日在中国香港上映《红海行动》
该片体现出了中国军人的英雄气概与大国崛起的精神气度,把中国军事题材影片推向新的高度。它没有把单打独斗式的个人英雄主义当作当代中国海军官兵的精神制高点,而是把镜头的焦点对准了集体的力量。其情感逻辑、动作逻辑的精细把控,和现代艺术技术手段的创造性运用,使得整个撤侨和战争场面的宣言,尤其是危急出兵、突围营救人质,最后的追击等场面,拍出了身临其境的真实感和摄人心魂的震撼效果。
电影工业化往往是文化输出的重要手段,随着中国国力的日渐强盛以及国际影响力的不断扩大,世界渴望中国声音。从战狼类型片构建的价值观,可以管窥中国正在酝酿和试图对外输出的国际关系观:软弱无力的政府军、掺杂恐怖主义的反政府武装、撤侨行动以及我国与他国政府合作构成军事行动的必要条件共同构建一个相同的主题,那就是中国作为国际秩序的主导国家,对于国际责任的承担和克制,即天下体系的重构。
“文运同国运相牵,文脉同国脉相连。”从战狼2到红海行动,从电影工业化到文化输出,中国开始寻求对新型国际关系的思考。这是文化自信的必然体现,更是中国作为国际秩序主导者的责任与担当。
其实,文化输出,我们可不是只有电影,随着综合国力的发展,文化产业也开始成为了我国经济发展中的一支重要力量。很多优秀的文化产品都已经走出了国门,让歪国人们也领略到了一把中国文化的魅力。
以前谈到中国的文化产品,无非是一些国画书法、剪纸纺织这些传统手艺上面。外国人对于中国的认知也只是停留在这些习以为常传统符号上。
而现在,在流行文化上,我们也开始崭露头角。如今中国处在高速的现代化进程中,人们对未来充满了憧憬,科幻小说也随之兴起。中国的科幻小说《三体》、《北京折叠》获得科幻艺术届最高奖“雨果奖”、“星云奖”。并且在海外畅销,中国科幻也赢得了世界目光的青睐,开始了进军世界市场的征途。除了科幻之外,也有越来越多的中国当代文学摆在了欧美发达地区的书店里。
电子游戏产业同样是一个文化输出的全新的领域,经历了数年的厚积薄发后,一批优秀中国的游戏作品也赢得了世界的认可。在海外最大的电子游戏销售平台上,众多国产游戏好评如潮。“中国制造”的手机游戏也能够在超过100个国家进入应用程序销售榜前十名,甚至成为了引导世界手机游戏市场的风向标。
中国在“新时代”文化输出国家实施的措施主要有三点。
1:补齐短板精准扶贫,现代公共文化服务体系建设迈上新台阶
党的十八大以来,在以习近平同志为核心的党中央坚强领导下,广大文化工作者坚定文化自信,坚守中华文化立场,坚持以人民为中心的工作导向,推动社会主义核心价值观和中华优秀传统文化广泛弘扬。
公共文化服务体系建设制度框架初步建立。公共文化服务保障法、公共图书馆法相继施行,明确了各级政府在公共文化服务中的主导地位,为公共文化服务体系建设提供了强有力的法制保障。
2:让主旋律更响亮、正能量更强劲,文艺创作精益求精文化产业蓬勃发展
《战狼2》《芳华》《无问西东》《唐人街探案2》《红海行动》等不同类型的国产影片接连成为“爆款”,业内专家认为,市场的“井喷式”繁荣,得益于创作水平的不断提升。
精益求精搞创作,力争把最好的精神食粮奉献给人民。五年来,我国文艺园地百花竞放、硕果累累,呈现出繁荣发展的生动景象:《平凡的世界》《海棠依旧》《北平无战事》《人民的名义》《白鹿原》等电视剧热播,《朗读者》《国家宝藏》《经典咏流传》等多档文化节目引发观众情感共鸣;现代京剧《西安事变》、豫剧《焦裕禄》、评剧《母亲》、湘剧《月亮粑粑》、话剧《麻醉师》等一大批弘扬社会主义核心价值观的优秀作品,引导人们求真、崇善、向美,让主旋律更响亮,正能量更强劲。
3:坚持创造性转化、创新性发展,优秀传统文化焕发新活力
纪录片《我在故宫修文物》、电视节目《中国诗词大会》等热播,成为现象级节目;文化遗产走出博物馆,通过文化创意产品开发走入百姓家;非物质文化遗产插上“共享经济”“体验经济”翅膀,开辟出产业发展新天地„„近年来,优秀传统文化逐渐融入人民生产生活,重新焕发生机活力。
相信未来会与更多的国产电视剧,电影会火出国门。我们也期待中国的影视作品,能够克服重重难关,逐渐成为中国的文化名片,传递更多的中国声音,向世界阐释更多具有中国特色、体现中国精神、蕴藏中国智慧的优秀文化。
第四篇:字符串输出格式
printf的格式控制的完整格式:
%-0m.nl或h格式字符
下面对组成格式说明的各项加以说明:
①%:表示格式说明的起始符号,不可缺少。
②-:有-表示左对齐输出,如省略表示右对齐输出。
③0:有0表示指定空位填0,如省略表示指定空位不填。
④m.n:m指域宽,即对应的输出项在输出设备上所占的字符数。
n指精度,用于说明输出的实型数的小数位数。为指定n时,隐含的精度为n=6位。
⑤l或h:l对整型指long型,对实型指double型。h用于将整型的格式字符修正为short型。
格式小结:
(1)最常用的格式是%d,含义是以10进制形式打印一个整数。
如果输出的整数是负数,则输出的第一个字符就是-号。
%d:按整型数据的实际长度输出。
%md:m为指定的输出字段的宽度。如果数据的位数小于m,则左端补以空格,若大于m,则按实际位数输出。
%ld:输出长整型数据。
(2)%u格式与%d格式类似,只不过要求打印无符号10进制整数。
以无符号十进制形式输出整数。
对长整型可以用“%lu”格式输出。同样也可以指定字段宽度用“%mu”格式输出。
(3)%o格式请求输出8进制整数,以无符号八进制形式输出整数。
对长整型可以用“%lo”格式输出。同样也可以指定字段宽度用“%mo”格式输出。
(4)%x和%X格式请求输出16进制整数。
%x格式中用小写字母a,b,c,d,e,f来表示10到15之间的数,以无符号十六进制形式输出整数。
对长整型可以用“%lx”格式输出。同样也可以指定字段宽度用“%mx”格式输出。%X格式中用大写字母A,B,C,D,E,F来表示10到15之间的数
共同点:8进制和16进制整数总是作为无符号数处理的。
(5)%s格式用于打印字符串,与之对应的参数应该是一个字符指针,待输出的字符始于该指针所指向的地址,直到出现一个空字符(' ')才终止。%s:例如:printf(“%s”, “CHINA”)输出“CHINA”字符串(不包括双引号)。%ms:输出的字符串占m列,如字符串本身长度大于m,则突破获m的限制,将字符串全部输出。若串长小于m,则左补空格。
%-ms:如果串长小于m,则在m列范围内,字符串向左靠,右补空格。
%m.ns:输出占m列,但只取字符串中左端n个字符。这n个字符输出在m列的右侧,左补空格。
%-m.ns:其中m、n含义同上,n个字符输出在m列范围的左侧,右补空格。如果n>m,则自动取n值,即保证n个字符正常输出。
(6)%c格式用于打印单个字符:例如:
printf(“%c”,c);等价于 putchar(c);
(7)%g,%f和%e这三个格式用于打印浮点值。
%g格式用于打印那些不需要按列对齐的浮点数特别有用。其作用有二: 一,去掉该数尾多余的零(没有达到六位的数)
二,保留六位有效数字(多余六位的)
%e格式用于打印浮点数时,一律显示地使用指数形式:例如:输出圆周率时是:
3.141593e+00
两者的区别:
%g格式打印出的数是总共6位有效数字
%e格式打印出小数点后的6位有效数字
%f禁止使用指数形式来表示浮点数。因此圆周率输出为:3.141593
(但注意它的精度要求:也是小数点后6位有效数字)
(8)%%格式用于打印一个%字符。
(9)%E和%G只是在输出时用大写字母(E)代替了小写字母(e)
⑦f格式:用来输出实数(包括单、双精度),以小数形式输出。有以下几种用法:
%f:不指定宽度,整数部分全部输出并输出6位小数。
%m.nf:输出共占m列,其中有n位小数,如数值宽度小于m左端补空格。%-m.nf:输出共占n列,其中有n位小数,如数值宽度小于m右端补空格。⑧e格式:以指数形式输出实数。可用以下形式:
%e:数字部分(又称尾数)输出6位小数,指数部分占5位或4位。
%m.ne和%-m.ne:m、n和”-”字符含义与前相同。此处n指数据的数字部分的小数位数,m表示整个输出数据所占的宽度。
⑨g格式:自动选f格式或e格式中较短的一种输出,且不输出无意义的零。/*******************************************************************/ unsigned int i=295;
printf(“%dn”,i);
295
Press any key to continue
(1).可以在“%”和字母之间插进数字表示最大场宽。
例如: %2d 表示输出3位整型数, 不够2位右对齐。
例如: %5d 表示输出3位整型数, 不够5位右对齐。
例如: %10d 表示输出3位整型数, 不够10位右对齐。
unsigned int i=295;
printf(“%2dn”,i);
printf(“%5dn”,i);
printf(“%10dn”,i);
295
295
295
Press any key to continue
(2).补0或者其它
例如: %02d 表示输出3位整型数, 不够2位右对齐,补0。
例如: %05d 表示输出3位整型数, 不够5位右对齐,补0。
例如: %010d 表示输出3位整型数, 不够10位右对齐,补0。
unsigned int i=295;
printf(“%02dn”,i);
printf(“%05dn”,i);
printf(“%010dn”,i);
295
00295
0000000295
Press any key to continue
(3).负数
int i=-295;
printf(“%02dn”,i);
printf(“%05dn”,i);
printf(“%010dn”,i);
-295
-0295
-000000295
Press any key to continue
(4).可以控制输出左对齐或右对齐, 即在“%”和字母之间加入一个“-” 号可 说明输出为左对齐, 否则为右对齐。
unsigned int i=295;
printf(“%-02dn”,i);
printf(“%-05dn”,i);
printf(“%-010dn”,i);
295
295
295
Press any key to continue
(5).可以在“%”和字母之间加小写字母l, 表示输出的是长型数。
例如: %ld 表示输出long整数
%lf 表示输出double浮点数
(6).%9.2f 表示输出场宽为9的浮点数, 其中小数位为2, 整数位为6, 小数点占一位, 不够9位右对齐。
例如: %6.9s 表示显示一个长度不小于6且不大于9的字符串。若大于9, 则第9个字符以后的内容将被删除./*
unsigned int i=295;
printf(“%dn”,i);
printf(“%1dn”,i);
printf(“%09dn”,i);
printf(“%09dn”,(unsigned char)i);
printf(“%9dn”,(unsigned char)i);
printf(“%-9dn”,(unsigned char)i);
*/
/*
295
295
000000295
000000039
Press any key to continue
*/
/*******************************************************************/ 对于m.n的格式还可以用如下方法表示(例)
int m=10,n=5;
char ch[]=“abcdefghijklmnopqrst”;
printf(“%*.*sn”,m,n,ch);//输出为abcde
前边的*定义的是总的宽度,后边的定义的是输出的个数,分别对应外面的参数m和n。
我想这种方法的好处是可以在语句之外对参数m和n赋值,从而控制输出格式 /*******************************************************************/ “%08lxn”,4byte
“%04xn”,2byte
“%-2.2BX”,1byte
第五篇:视频输出格式教案
视频输出格式教案
——视频输出格式的选择
一、授课班级:2010教育技术学
二、教学目标:
1、通过教学让学生明白如何选择的输出格式,如何根据实际情况选择合适的视频输出格式。
2、使学生对学习教育技术产生兴趣,激发学生呢过学习的动机。
三、教学方法和手段:多媒体教学,讲授法。
四、授课时长:10分钟
五、教学内容:视频的输出格式回顾,以及视频输出格式的选择讲解
六、教学过程:
(一)新内容引入:在之前的学习中我们已经学过了音频的输出格式和视频的输出格式,在纷乱复杂的视频输出格式中,在稀奇古怪的客户要求中,如何选择合适的视频输出格式就成为我们必须要掌握的技能了,今天就让我们了解一下视频输出格式的选择方法。
(二)提问:那么现在大家根据以往的学习经验和上网经验 告诉我,你们所知道的视频输出格式有哪些?
(三)讲解:常用的视频输出格式有: MPG、WMV、MOV、FLV、DVD、AVI、MP4、视频格式输出,可以从以下几个方面来进行分析讨论:
1、视频质量
2、视频体积
3、视频播放兼容性
视频质量和视频体积是一对矛盾体,就像是一架飞机的两个翅膀,只有尽量平衡飞机才能飞起来,视频的体积和质量也一样,但是完美的平衡是很难达到的,所以我们所能做的就是让他们尽可能的符合我们的需要。
那么这个格式的选择到底根据什么来决定呢?
1、根据客户需要
很好理解,客户需要什么样的格式,我们就给他什么样的格式,在这里,往往有一些约定俗成的模版可以套用,比如,客户需要在DVD机器上播放,那么,我们一般的渲染格式就会选择MPG容器格式,MPG-2编码、2、根据再编辑需要
再编辑,就是我们以后可能有需要用作素材的可能,这个前提下,低压缩率,高质量是我们的输出前提,这个时候我们基本不考虑体积的大小,只要不是太过
分的大小,都是我们可以接受的。
3、根据播放的场合需要
播放的场合,不同的场合播放也有不同的需求,DVD,投影仪,一般需要质量都比较高,网络相对质量较低,且对格式有一定要求,本地电影往往则可以达到最好质量。有时候客户会提出不符合实际操作可行性的要求,这就需要我们对各种格式、各种编码有一定的了解,并且对客户提出改善的建议。(1)本地播放包含硬盘播放:
推荐MPG,WMV,MOV,优点:视频本身的质量能够得到最大限度的保证,(2)网络流媒体播放:
推荐WMV,FLV(有些格式需要其他软件转换),优点:这两种格式是现今网络应用最多的视频格式。
(3)DVD影碟机或者投影仪播放:
这个不用多说了,标准PAL制或者NTSC制DVD格式就行。
(4)可再编辑高质量格式:
一般选择AVI,MOV,MPG格式,这里就说到了之前的质量和体积的关系(前面两个体积很大,不建议新手使用),我们一般既希望得到一个完美的高清晰度的视频,又不希望它太大导致磁盘没有空间来存放。
(5)移动设备格式: MP4(不适于编辑)
根据实际的需要,就像我们专业的软件,会声会影建议使用MPEG-2的输出格式,用会声会影做视频选取mpeg2格式视频是非常清晰的,而且这种格式的视频可以刻录成DVD视频光盘,兼容新很好,一般的机器都可以播放。