第一篇:輸出EXCEL總結(jié)1.1
歡迎隨時(shí)補(bǔ)充其他內(nèi)容!
* Developed By : 甄曉達(dá) * Create Date : 2009-2-1
本文檔內(nèi)容:
一、模板的下載(可參考最后面的實(shí)例程序)
二、關(guān)于EXCEL輸出 1.基本步驟
2.其他關(guān)于EXCEL表操作的補(bǔ)充說明
三、實(shí)例程序
四、關(guān)于CALL METHOD DOCUMENT->*的補(bǔ)充說明
五、關(guān)于VBA與ABAP代碼的說明
獲得EXCEL表的方式:
1.建立某格式文件
call function 'GUI_DOWNLOAD' 例: L_FULLPATH = 'C:Documents and Settingszxd桌面hello.xls'.CALL FUNCTION 'GUI_DOWNLOAD' “根據(jù)文件路徑建立文件 EXPORTING
FILENAME = L_FULLPATH FILETYPE = 'BIN' TABLES
DATA_TAB = L_MIME.注:路徑選擇也可以通過宏實(shí)現(xiàn),用此種方法建立的EXCEL表只有一個(gè)SHEET!
2.用SMW0存儲(chǔ)的模板用
CALL FUNCTION 'SAP_OI_LOAD_MIME_DATA'下載
一、模板的下載(可參考最后面的實(shí)例程序)
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.”下載模板時(shí)需要初始化的內(nèi)容 START-OF-SELECTION.L_FULLPATH = ‘C:SHIYAN’.“用FUNCTION選擇文件地點(diǎn)寫入L_FULLPATH也可 PERFORM OPEN_DOC USING L_FULLPATH.” L_FULLPATH為文件存儲(chǔ)的路徑,C或者字符串都行,子程序里會(huì)人為的修改成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存儲(chǔ)的路徑保存下載的模板,不打開也能保存!
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
二、關(guān)于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個(gè)一般為必然會(huì)用到的變量,下面的變量可以在用到時(shí)再做定義 V_RANGE TYPE OLE2_OBJECT, “選中區(qū)域 V_COLUMN TYPE OLE2_OBJECT, “選中列
V_BORDERS TYPE OLE2_OBJECT.“選中區(qū)域的邊框 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'.”創(chuàng)建Excel對(duì)象
CALL METHOD OF V_EXCEL 'Workbooks' = V_BOOK.“ excel createwbook
CALL METHOD OF V_BOOK 'Open' = V_BOOK EXPORTING
#1 = PA_PATH.”文件存儲(chǔ)的路徑,字符串,C類型應(yīng)該也可以,沒有試驗(yàn) “注:也可以新建一個(gè)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.”將已經(jīng)打開的EXCEL表設(shè)置可見
第三步:打開EXCEL表其中的一個(gè)SHEET并修改SHEET名 V_SHEET_NUMBER = 1.“打開EXCEL表第一個(gè)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一樣,輸出數(shù)據(jù)同樣可以是SHEET名也可以是數(shù)字
* EXPORTING * #1 = 'Sheet3'.CALL METHOD OF V_SHEET 'ACTIVATE'.”顯示當(dāng)前選擇的SHEET,如不寫此句顯示SHEET為第一個(gè)SHEET,不過下面的其他操作仍然只是對(duì)被選擇的SHEET有效
SET PROPERTY OF V_SHEET 'NAME' = 'SHIYAN'.“此語句可以修改選擇的SHEET名
*想新建SHEET可以調(diào)用下面的語句,注意下面第一條語句不能指定SHEET,否則不能添加成功(意即目前只能添加SHEET到最前面)
* CALL METHOD OF V_BOOK 'WORKSHEETS' = TMPSHEET.* CALL METHOD OF TMPSHEET 'ADD'.第四步:往EXCEL表里填寫內(nèi)容
CALL METHOD OF V_SHEET 'Cells' = V_CELL EXPORTING
#1 = L_ROW ”寫入的行號(hào)
#2 = L_COL.“寫入的列號(hào)
SET PROPERTY OF V_CELL 'Value' = SY-DATUM.”SY-DATUM為填寫的內(nèi)容 第五步:保存并釋放SAP對(duì)EXCEL的鏈接
SET PROPERTY OF V_EXCEL 'DisplayAlerts' = 0.“不顯示警告提示,如不加此句,保存文件時(shí)會(huì)彈出“當(dāng)前位置以有名為*的文件,是否?”的詢問對(duì)話框,加上此句則直接保存 CALL METHOD OF V_BOOK 'SAVEAS' ”保存EXCEL文本文件(如果需要保存修改的SHEET命,得用V_EXCEL
EXPORTING #1 = PA_FULLPATH.CALL METHOD OF V_BOOK 'Exit' = V_BOOK.“此句作用尚不明確!不寫沒發(fā)現(xiàn)影響 FREE OBJECT V_EXCEL.FREE OBJECT V_SHELL.?? 2.其他關(guān)于EXCEL表操作的補(bǔ)充說明:
2.1調(diào)用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輸入列號(hào)求得列字母表示(自編宏,HR項(xiàng)目組用,其他如沒有自己寫吧??)
CALL FUNCTION 'ZHRIS_GET_EXCEL_COLUMN'
EXPORTING
P_COLUMN = L_INT IMPORTING
F_COLUMN = COL.例:輸入L_INT = 5 輸出 COL = ‘e’.2.3調(diào)整列寬度與行高及插入行
DATA V_COLUMN TYPE OLE2_OBJECT.DATA V_ROWS TYPE OLE2_OBJECT.*--調(diào)整列寬度
CALL METHOD OF V_EXCEL 'Columns' = V_COLUMN ”選定列 EXPORTING
#1 = ‘1:5’.“修改1-5列
SET PROPERTY OF V_COLUMN 'ColumnWidth' = 30.”要調(diào)整的寬度 *--調(diào)整行寬度
CALL METHOD OF V_EXCEL 'ROWS' = V_ROWS EXPORTING
#1 = 1.“行號(hào)
SET PROPERTY OF V_ROWS 'rowheight' = 50.CALL METHOD OF V_ROWS 'Insert'.”插入一行 注:行高會(huì)影響到所有行,設(shè)置單獨(dú)的行高方法待查!
2.4 獲得當(dāng)前EXCEL表的SHEET數(shù)量 DATA SHEETCOUNT TYPE I.CALL METHOD OF V_EXCEL 'WORKSHEETS' = V_SHEET.“ worksheet
得到活動(dòng)的 GET PROPERTY OF V_SHEET 'COUNT' = SHEETCOUNT.”得到sheet數(shù)量
WRITE SHEETCOUNT.2.5 獲得當(dāng)前打開的SHEET名稱(需執(zhí)行打開SHEET操作后才能執(zhí)行)DATA SHEETNAME TYPE STRING.GET PROPERTY OF V_SHEET 'NAME' = SHEETNAME.“此語句用來獲得當(dāng)前打開的SHEET名稱
2.6 復(fù)制SHEET DATA MODELSHEET TYPE OLE2_OBJECT.DATA TMPSHEET TYPE OLE2_OBJECT.CALL METHOD OF V_EXCEL 'WORKSHEETS' = MODELSHEET ” 要復(fù)制的SHEET EXPORTING #1 = 'Sheet2'.CALL METHOD OF V_EXCEL 'WORKSHEETS' = TMPSHEET EXPORTING #1 = 'Sheet3'.CALL METHOD OF MODELSHEET 'COPY' “ 復(fù)制MODELSHEET 放到TMPSHEET前
EXPORTING #1 = TMPSHEET.” 如不加此項(xiàng)則建立一個(gè)新表存儲(chǔ)SHEET
2.7 隱藏格線
DATA ACTIVEWINDOW TYPE OLE2_OBJECT.CALL METHOD OF V_EXCEL 'ACTIVEWINDOW' = ACTIVEWINDOW.“得到活動(dòng)窗口對(duì)象 SET PROPERTY OF ACTIVEWINDOW 'DISPLAYGRIDLINES' = 0.”隱藏格線(虛線)注:不要用V_SHEET,可能會(huì)導(dǎo)致輸出數(shù)據(jù)不正常,原因不明,新定義一個(gè)比較保險(xiǎn)。
2.8 選中EXCEL表某區(qū)域并做操作
CALL METHOD OF V_SHEET 'range' = V_RANGE “設(shè)定操作范圍
EXPORTING #1 = 'a3' #2 = 'B5'.CALL METHOD OF V_RANGE 'Select' NO FLUSH.” 選擇設(shè)定區(qū)域
CALL METHOD OF V_RANGE 'ClearContents'.“清空內(nèi)容
SET PROPERTY OF V_RANGE 'MergeCells' = 1.”合并單元格
SET PROPERTY OF V_RANGE 'HorizontalAlignment' = 2.“設(shè)定對(duì)齊方式(1:無對(duì)齊 2:左對(duì)齊 3:居中 4:右對(duì)齊)
SET PROPERTY OF V_RANGE 'ShrinkToFit' = 0.”取消自動(dòng)縮小字體 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.“單元格內(nèi)容自動(dòng)換行
2.9 移動(dòng)SHEET DATA V_MOVE TYPE OLE2_OBJECT.CALL METHOD OF V_EXCEL 'WORKSHEETS' = V_SHEET ”選擇要移動(dòng)的SHEET
EXPORTING #1 = 'Sheet1'.CALL METHOD OF V_EXCEL 'WORKSHEETS' = V_MOVE “選擇移動(dòng)到的位置
EXPORTING #1 = 'Sheet3'.CALL METHOD OF V_SHEET 'Move' ”移動(dòng) V_SHEET 到 V_MOVE 左邊
EXPORTING #1 = V_MOVE.三、實(shí)例程序
用下載模板的實(shí)例程序:
EXCEL各功能操作試驗(yàn)程序:
四、關(guān)于CALL METHOD DOCUMENT的補(bǔ)充說明(其他用法請(qǐng)見二下載模板的說明)
1.用下面這個(gè)METHOD可以直接打開下載的模板
CALL METHOD DOCUMENT->OPEN_DOCUMENT_FROM_TABLE EXPORTING
DOCUMENT_SIZE = DOC_SIZE DOCUMENT_TABLE = DOC_TABLE[] 2.用下面這個(gè)METHOD可以調(diào)用下載模板的動(dòng)態(tài)宏 MACRO = 'Macro2'.“宏名稱
CALL METHOD DOCUMENT->EXECUTE_MACRO EXPORTING
MACRO_STRING = macro ”調(diào)用宏的名稱 * NO_FLUSH = ' '
PARAM1 = param1 “各參數(shù)值(用到幾個(gè)打開幾個(gè))* PARAM10 = * PARAM11 = * PARAM12 =
PARAM2 = param2 PARAM3 = param4 PARAM4 = param3 * PARAM5 = * PARAM6 = * PARAM7 = * PARAM8 = * PARAM9 =
PARAM_COUNT = 4 ”要傳進(jìn)的參數(shù)數(shù)量 * SCRIPT_NAME = * IMPORTING
* ERROR = error * RETCODE = * CHANGING
* ERROR_STRING = * RETVALUE =.注1:EXCEL和WORD里寫宏最簡單的方法便是錄制,錄宏的方法如下:執(zhí)行菜單命令“工具—>宏—>錄制新宏”開始錄制,按照步驟把想實(shí)現(xiàn)的功能操作一遍,完畢后點(diǎn)擊停止按鈕,再根據(jù)是否需要傳遞參數(shù)等要求修改一下錄制好的宏即可。
最左邊的注2:一般輸出數(shù)據(jù)到WORD的話可能會(huì)用到郵件合并功能,郵件合并功能的設(shè)置方法如下:(可以參考程序ZHRIS_PAFM024模板的用法)
將excel中的人員信息表作為數(shù)據(jù)源。在word中建立一個(gè)主文檔,設(shè)計(jì)排版出一個(gè)空白的履歷表,不變的那部分內(nèi)容先填好,如“姓名”、“年齡”、“學(xué)歷”等。
執(zhí)行菜單命令“工具—信函與郵件—顯示郵件合并工具欄”調(diào)出郵件合并工具欄。點(diǎn)擊“打開數(shù)據(jù)源”按鈕(左起第2個(gè)圖標(biāo)),在打開的對(duì)話框中找到并打開人員信息excel表,選擇存有人員信息的那個(gè)工作表即可。
確定后退回word主界面,點(diǎn)擊履歷表“姓名”后面的空白單元格,然后點(diǎn)擊“插入域”按鈕(左起第6個(gè)圖標(biāo)),打開插入合并域?qū)υ捒?,選擇“姓名”項(xiàng),單擊“插入”,最后單擊“關(guān)閉”退出。這時(shí),會(huì)發(fā)現(xiàn)履歷表“姓名”后面的單元格中出現(xiàn)“《姓名》”字樣,這就是合并域的所謂占位符了。依此類推,為其他項(xiàng)目插入相應(yīng)的合并域。點(diǎn)擊“查看合并數(shù)據(jù)”(標(biāo)有“ABC”的圖標(biāo)),你會(huì)發(fā)現(xiàn)所有占位符都被替換成真實(shí)的數(shù)據(jù)了,單擊工具欄上的左、右方向按鈕,可以快速瀏覽所有的履歷,如未發(fā)現(xiàn)問題,可單擊“合并到新文檔”按鈕(倒數(shù)第4個(gè)圖標(biāo)),從彈出對(duì)話框中選擇“全部”記錄,確定即可生成一個(gè)全新的word文檔,每個(gè)人的履歷都被放在一個(gè)單獨(dú)的頁面,打印出來即可。
注3:當(dāng)錄制向WORD插入照片的宏時(shí),會(huì)遇到無法設(shè)定鼠標(biāo)位置的問題,用下面一個(gè)方法可以解決:(適合只需要插入一張照片的宏,多張照片需另想辦法??)
宏的第一步先寫插入照片的代碼,在插入語句代碼前加上Application.GoBack語句(對(duì)應(yīng)操作SHIFT+F5)。返回模板將鼠標(biāo)放在要插入照片的位置上,點(diǎn)擊保存按鈕(必須有修改過內(nèi)容,文件不能處于已保存狀態(tài)),然后關(guān)閉模板文件即可。
SHIFT+F5的作用:在初打開文件未做任何操作時(shí)使用可以使鼠標(biāo)回到上一次保存文件時(shí)的位置。注4:補(bǔ)充一個(gè)VBA宏命令:
修改另存為時(shí)默認(rèn)的文件名:(文件名用動(dòng)態(tài)從字段中取到的值)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 & “月工資勞務(wù)費(fèi)審批單”
五、關(guān)于VBA與ABAP代碼的說明(以下內(nèi)容純屬個(gè)人理解,歡迎隨時(shí)修正!)
OFFICE宏命令編程用到VISUAL BASIC,ABAP語言用程序?qū)崿F(xiàn)OFFICE的各項(xiàng)功能其實(shí)也是調(diào)用(或者是實(shí)現(xiàn)?不是特別清楚=,.=)了VB語言而已,那么接下來就講如何通過OFFICE錄制的宏轉(zhuǎn)化為ABAP語言代碼。
以EXCEL相關(guān)內(nèi)容舉例:
要想操作EXCEL就得知道想要操作的對(duì)象,是整個(gè)EXCEL表,還是
第二篇:STM32 PWM輸出總結(jié)
學(xué)習(xí)后發(fā)現(xiàn)stm32的定時(shí)器功能確實(shí)很強(qiáng)大,小總結(jié)一下方便以后使用的時(shí)候做參考。Stm32定時(shí)器一共分為三種:tim1和tim8是高級(jí)定時(shí)器,6和7是基本定時(shí)器,2—5是通用定時(shí)器。從名字就可以看得出來主要功能上的差異。今天我主要是用定時(shí)器做pwm輸出,所以總結(jié)也主要是針對(duì)pwm方面的。
先大致說下通用和高級(jí)定時(shí)器的區(qū)別。通用的可以輸出四路pwm信號(hào)互不影響。高級(jí)定時(shí)器可以輸出三對(duì)互補(bǔ)pwm信號(hào)外加ch4通道,也就是一共七路。
所以這樣算下來stm32一共可以生成4*5+7*2=30路pwm信號(hào)。接下來還有功能上的區(qū)別:通用定時(shí)器的pwm信號(hào)比較簡單,就是普通的調(diào)節(jié)占空比調(diào)節(jié)頻率(別的不常用到的沒去深究);高級(jí)定時(shí)器的還帶有互補(bǔ)輸出功能,同時(shí)互補(bǔ)信號(hào)可以插入死區(qū),也可以使能剎車功能,從這些看來高級(jí)定時(shí)器的pwm天生就是用來控制電機(jī)的。
Pwm輸出最基本的調(diào)節(jié)就是頻率和占空比。頻率當(dāng)然又和時(shí)鐘信號(hào)扯上了關(guān)系。高級(jí)定時(shí)器是掛接到APB2上,而通用定時(shí)器是掛接到APB1上的。APB1和APB2的區(qū)別就要在于時(shí)鐘頻率不同。APB2最高頻率允許72MH,而APB1最高頻率為36MHZ。這樣是不是通用定時(shí)器只最高36MHZ頻率呢,不是的;通用定時(shí)器時(shí)鐘信號(hào)完整的路線應(yīng)該是下面這樣的: AHB(72mhz)→APB1分頻器(默認(rèn)2)→APB1時(shí)鐘信號(hào)(36mhz)→倍頻器(*2倍)→通用定時(shí)器時(shí)鐘信號(hào)(72mhz)。
在APB1和定時(shí)器中間的倍頻器起到了巨大的作用,假如紅色字體的“APB1分頻器”假如不為1(默認(rèn)是2),倍頻器會(huì)自動(dòng)將APB1時(shí)鐘頻率擴(kuò)大2倍后作為定時(shí)器信號(hào)源,這個(gè)它內(nèi)部自動(dòng)控制的不用配置。設(shè)置這個(gè)倍頻器的目的很簡單就是在APB1是36mhz的情況下通用定時(shí)器的頻率同樣能達(dá)到72mhz。我用的庫函數(shù)直接調(diào)用函數(shù)SystemInit();這個(gè)函數(shù)之后時(shí)鐘配置好了:通用定時(shí)器和高級(jí)定時(shí)器的時(shí)鐘現(xiàn)在都是72mhz(你也可以自己再配置一下RCC讓他的頻率更低,但是不能再高了)。定時(shí)器接下來還有一個(gè)分頻寄存器:TIMX_PSC經(jīng)過他的分頻后,才是定時(shí)器計(jì)數(shù)的頻率。所以真正的時(shí)鐘頻率應(yīng)該是72mhz/(TIMX_PSC-1),我們?cè)O(shè)為tim_frepuency下面還會(huì)用到。
stm32的時(shí)鐘頻率弄得確實(shí)是很饒人的,所以關(guān)鍵就是先要把思路理清楚。時(shí)鐘的頻率弄好了下面終于可以開說重點(diǎn)PWM了。當(dāng)然還少不了頻率:pwm主要就是控制頻率和占空比的:這兩個(gè)因素分別通過兩個(gè)寄存器控制:TIMX_ARR和TIMX_CCRX。ARR寄存器就是自動(dòng)重裝寄存器,也就是計(jì)數(shù)器記到這個(gè)數(shù)以后清零再開始計(jì),這樣pwm的頻率就是tim_frequency/(TIMX_ARR-1)。在計(jì)數(shù)時(shí)會(huì)不停的和CCRX寄存器中的數(shù)據(jù)進(jìn)行比較,如果小于的話是高電平或者低電平,計(jì)數(shù)值大于CCRX值的話電平極性反相。所以這也就控制了占空比。
下面是定時(shí)器1的配置代碼:
GPIO_InitTypeDef GPIO_InitStructure2;
TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;
TIM_OCInitTypeDef TIM_OCInitStructure;
TIM_BDTRInitTypeDef TIM_BDTRInitStructure;
//第一步:配置時(shí)鐘
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;
//設(shè)置為復(fù)用浮空輸出
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;
//設(shè)置為復(fù)用浮空輸出
GPIO_Init(GPIOB,&GPIO_InitStructure2);
//第三步,定時(shí)器基本配置
TIM_TimeBaseStructure.TIM_Period=1000-1;
// 自動(dòng)重裝載寄存器的值
TIM_TimeBaseStructure.TIM_Prescaler=72-1;
// 時(shí)鐘預(yù)分頻數(shù)
TIM_TimeBaseStructure.TIM_ClockDivision=TIM_CKD_DIV1;// 采樣分頻
TIM_TimeBaseStructure.TIM_CounterMode=TIM_CounterMode_Up;//向上計(jì)數(shù)
TIM_TimeBaseStructure.TIM_RepetitionCounter=0;//重復(fù)寄存器,用于自動(dòng)更新pwm占空比
TIM_TimeBaseInit(TIM1, &TIM_TimeBaseStructure);
//第四步pwm輸出配置
TIM_OCInitStructure.TIM_OCMode=TIM_OCMode_PWM2;
//設(shè)置為pwm1輸出模式
TIM_OCInitStructure.TIM_Pulse=500;
//設(shè)置占空比時(shí)間
TIM_OCInitStructure.TIM_OCPolarity=TIM_OCPolarity_Low;
//設(shè)置輸出極性
TIM_OCInitStructure.TIM_OutputState=TIM_OutputState_Enable;
//使能該通道輸出
//下面幾個(gè)參數(shù)是高級(jí)定時(shí)器才會(huì)用到,通用定時(shí)器不用配置
TIM_OCInitStructure.TIM_OCNPolarity=TIM_OCNPolarity_High;
//設(shè)置互補(bǔ)端輸出極性
TIM_OCInitStructure.TIM_OutputNState=TIM_OutputNState_Enable;//使能互補(bǔ)端輸出
TIM_OCInitStructure.TIM_OCIdleState=TIM_OCIdleState_Reset;
//死區(qū)后輸出狀態(tài)
TIM_OCInitStructure.TIM_OCNIdleState=TIM_OCNIdleState_Reset;//死區(qū)后互補(bǔ)端輸出狀態(tài)
TIM_OC1Init(TIM1,&TIM_OCInitStructure);
//按照指定參數(shù)初始化
//第五步,死區(qū)和剎車功能配置,高級(jí)定時(shí)器才有的,通用定時(shí)器不用配置
TIM_BDTRInitStructure.TIM_OSSRState = TIM_OSSRState_Disable;//運(yùn)行模式下輸出選擇
TIM_BDTRInitStructure.TIM_OSSIState = TIM_OSSIState_Disable;//空閑模式下輸出選擇
TIM_BDTRInitStructure.TIM_LOCKLevel = TIM_LOCKLevel_OFF;
//鎖定設(shè)置
TIM_BDTRInitStructure.TIM_DeadTime = 0x90;
//死區(qū)時(shí)間設(shè)置
TIM_BDTRInitStructure.TIM_Break = TIM_Break_Disable;
//剎車功能使能
TIM_BDTRInitStructure.TIM_BreakPolarity = TIM_BreakPolarity_High;//剎車輸入極性
TIM_BDTRInitStructure.TIM_AutomaticOutput = TIM_AutomaticOutput_Enable;//自動(dòng)輸出使能
TIM_BDTRConfig(TIM1,&TIM_BDTRInitStructure);
//第六步,使能端的打開
TIM_OC1PreloadConfig(TIM1, TIM_OCPreload_Enable);//使能TIMx在CCR1上的預(yù)裝載寄存器
TIM_ARRPreloadConfig(TIM1, ENABLE);
//使能TIMx在ARR上的預(yù)裝載寄存器
TIM_Cmd(TIM1,ENABLE);
//打開TIM2
//下面這句是高級(jí)定時(shí)器才有的,輸出pwm必須打開
TIM_CtrlPWMOutputs(TIM1, ENABLE);
//pwm輸出使能,一定要記得打開
TIM_OC1PreloadConfig(),TIM_ARRPreloadConfig();這兩個(gè)函數(shù)控制的是ccr1和arr的預(yù)裝在使能,使能和失能的區(qū)別就是:使能的時(shí)候這兩個(gè)局存期的讀寫需要等待有更新事件發(fā)生時(shí)才能被改變(比如計(jì)數(shù)溢出就是更新時(shí)間)。失能的時(shí)候可以直接進(jìn)行讀寫而沒有延遲。另外在運(yùn)行當(dāng)中想要改變pwm的頻率和占空比調(diào)用:TIM_SetAutoreload()TIM_SetCompare1()這兩個(gè)函數(shù)就可以了。
第三篇:文化輸出
西方有人認(rèn)為中國到二十一世紀(jì)初葉將成為經(jīng)濟(jì)大國,甚至是軍事大國,其實(shí)中國從本質(zhì)上說是一個(gè)文化大國,最有可能對(duì)人類文明做出貢獻(xiàn)的是中國文化,二十一世紀(jì)將是中國文化的世紀(jì)?!玖w林
茍日新,日日新,又日新?!薄疤煨薪?,君子以自強(qiáng)不息?!边@既是中華民族的先哲通過觀察宇宙萬物提出的重要思想,也深刻揭示了中華民族自強(qiáng)不息的民族精神,因此成為中國的千年傳世格言。——胡錦濤
中國,近五十年發(fā)展迅速的發(fā)展中國家,其經(jīng)濟(jì)高速發(fā)展之下更是帶動(dòng)起文化的發(fā)展和內(nèi)在歷史人文的挖掘。從《舌尖上的中國》到日常的影視作品,甚至日常生活中用到的家居產(chǎn)品,都帶著中國人文的精神烙印。一些傳統(tǒng)的、歷史的、帶有人文色彩的產(chǎn)品逐漸從歷史中走出,帶著新時(shí)代的歷史使命,重新煥發(fā)出新的色彩。
2017年7月27日,作為建軍90周年獻(xiàn)禮片,《戰(zhàn)狼2》登陸國內(nèi)各大院線。影片以中國海外撤僑真實(shí)事件為背景,講述中國退伍軍人冷鋒在非洲戰(zhàn)亂地區(qū)不顧個(gè)人安危營救同胞和異國難民的英雄故事。上映以來,幾乎場場爆滿,憑借良好口碑產(chǎn)生的“自來水效應(yīng)”,《戰(zhàn)狼2》接連打破國內(nèi)多項(xiàng)電影票房紀(jì)錄。
2018年2月16日在中國內(nèi)地上映[2] ;3月1日在中國香港上映《紅海行動(dòng)》
該片體現(xiàn)出了中國軍人的英雄氣概與大國崛起的精神氣度,把中國軍事題材影片推向新的高度。它沒有把單打獨(dú)斗式的個(gè)人英雄主義當(dāng)作當(dāng)代中國海軍官兵的精神制高點(diǎn),而是把鏡頭的焦點(diǎn)對(duì)準(zhǔn)了集體的力量。其情感邏輯、動(dòng)作邏輯的精細(xì)把控,和現(xiàn)代藝術(shù)技術(shù)手段的創(chuàng)造性運(yùn)用,使得整個(gè)撤僑和戰(zhàn)爭場面的宣言,尤其是危急出兵、突圍營救人質(zhì),最后的追擊等場面,拍出了身臨其境的真實(shí)感和攝人心魂的震撼效果。
電影工業(yè)化往往是文化輸出的重要手段,隨著中國國力的日漸強(qiáng)盛以及國際影響力的不斷擴(kuò)大,世界渴望中國聲音。從戰(zhàn)狼類型片構(gòu)建的價(jià)值觀,可以管窺中國正在醞釀和試圖對(duì)外輸出的國際關(guān)系觀:軟弱無力的政府軍、摻雜恐怖主義的反政府武裝、撤僑行動(dòng)以及我國與他國政府合作構(gòu)成軍事行動(dòng)的必要條件共同構(gòu)建一個(gè)相同的主題,那就是中國作為國際秩序的主導(dǎo)國家,對(duì)于國際責(zé)任的承擔(dān)和克制,即天下體系的重構(gòu)。
“文運(yùn)同國運(yùn)相牽,文脈同國脈相連?!睆膽?zhàn)狼2到紅海行動(dòng),從電影工業(yè)化到文化輸出,中國開始尋求對(duì)新型國際關(guān)系的思考。這是文化自信的必然體現(xiàn),更是中國作為國際秩序主導(dǎo)者的責(zé)任與擔(dān)當(dāng)。
其實(shí),文化輸出,我們可不是只有電影,隨著綜合國力的發(fā)展,文化產(chǎn)業(yè)也開始成為了我國經(jīng)濟(jì)發(fā)展中的一支重要力量。很多優(yōu)秀的文化產(chǎn)品都已經(jīng)走出了國門,讓歪國人們也領(lǐng)略到了一把中國文化的魅力。
以前談到中國的文化產(chǎn)品,無非是一些國畫書法、剪紙紡織這些傳統(tǒng)手藝上面。外國人對(duì)于中國的認(rèn)知也只是停留在這些習(xí)以為常傳統(tǒng)符號(hào)上。
而現(xiàn)在,在流行文化上,我們也開始嶄露頭角。如今中國處在高速的現(xiàn)代化進(jìn)程中,人們對(duì)未來充滿了憧憬,科幻小說也隨之興起。中國的科幻小說《三體》、《北京折疊》獲得科幻藝術(shù)屆最高獎(jiǎng)“雨果獎(jiǎng)”、“星云獎(jiǎng)”。并且在海外暢銷,中國科幻也贏得了世界目光的青睞,開始了進(jìn)軍世界市場的征途。除了科幻之外,也有越來越多的中國當(dāng)代文學(xué)擺在了歐美發(fā)達(dá)地區(qū)的書店里。
電子游戲產(chǎn)業(yè)同樣是一個(gè)文化輸出的全新的領(lǐng)域,經(jīng)歷了數(shù)年的厚積薄發(fā)后,一批優(yōu)秀中國的游戲作品也贏得了世界的認(rèn)可。在海外最大的電子游戲銷售平臺(tái)上,眾多國產(chǎn)游戲好評(píng)如潮。“中國制造”的手機(jī)游戲也能夠在超過100個(gè)國家進(jìn)入應(yīng)用程序銷售榜前十名,甚至成為了引導(dǎo)世界手機(jī)游戲市場的風(fēng)向標(biāo)。
中國在“新時(shí)代”文化輸出國家實(shí)施的措施主要有三點(diǎn)。
1:補(bǔ)齊短板精準(zhǔn)扶貧,現(xiàn)代公共文化服務(wù)體系建設(shè)邁上新臺(tái)階
黨的十八大以來,在以習(xí)近平同志為核心的黨中央堅(jiān)強(qiáng)領(lǐng)導(dǎo)下,廣大文化工作者堅(jiān)定文化自信,堅(jiān)守中華文化立場,堅(jiān)持以人民為中心的工作導(dǎo)向,推動(dòng)社會(huì)主義核心價(jià)值觀和中華優(yōu)秀傳統(tǒng)文化廣泛弘揚(yáng)。
公共文化服務(wù)體系建設(shè)制度框架初步建立。公共文化服務(wù)保障法、公共圖書館法相繼施行,明確了各級(jí)政府在公共文化服務(wù)中的主導(dǎo)地位,為公共文化服務(wù)體系建設(shè)提供了強(qiáng)有力的法制保障。
2:讓主旋律更響亮、正能量更強(qiáng)勁,文藝創(chuàng)作精益求精文化產(chǎn)業(yè)蓬勃發(fā)展
《戰(zhàn)狼2》《芳華》《無問西東》《唐人街探案2》《紅海行動(dòng)》等不同類型的國產(chǎn)影片接連成為“爆款”,業(yè)內(nèi)專家認(rèn)為,市場的“井噴式”繁榮,得益于創(chuàng)作水平的不斷提升。
精益求精搞創(chuàng)作,力爭把最好的精神食糧奉獻(xiàn)給人民。五年來,我國文藝園地百花競放、碩果累累,呈現(xiàn)出繁榮發(fā)展的生動(dòng)景象:《平凡的世界》《海棠依舊》《北平無戰(zhàn)事》《人民的名義》《白鹿原》等電視劇熱播,《朗讀者》《國家寶藏》《經(jīng)典詠流傳》等多檔文化節(jié)目引發(fā)觀眾情感共鳴;現(xiàn)代京劇《西安事變》、豫劇《焦裕祿》、評(píng)劇《母親》、湘劇《月亮粑粑》、話劇《麻醉師》等一大批弘揚(yáng)社會(huì)主義核心價(jià)值觀的優(yōu)秀作品,引導(dǎo)人們求真、崇善、向美,讓主旋律更響亮,正能量更強(qiáng)勁。
3:堅(jiān)持創(chuàng)造性轉(zhuǎn)化、創(chuàng)新性發(fā)展,優(yōu)秀傳統(tǒng)文化煥發(fā)新活力
紀(jì)錄片《我在故宮修文物》、電視節(jié)目《中國詩詞大會(huì)》等熱播,成為現(xiàn)象級(jí)節(jié)目;文化遺產(chǎn)走出博物館,通過文化創(chuàng)意產(chǎn)品開發(fā)走入百姓家;非物質(zhì)文化遺產(chǎn)插上“共享經(jīng)濟(jì)”“體驗(yàn)經(jīng)濟(jì)”翅膀,開辟出產(chǎn)業(yè)發(fā)展新天地??近年來,優(yōu)秀傳統(tǒng)文化逐漸融入人民生產(chǎn)生活,重新煥發(fā)生機(jī)活力。
相信未來會(huì)與更多的國產(chǎn)電視劇,電影會(huì)火出國門。我們也期待中國的影視作品,能夠克服重重難關(guān),逐漸成為中國的文化名片,傳遞更多的中國聲音,向世界闡釋更多具有中國特色、體現(xiàn)中國精神、蘊(yùn)藏中國智慧的優(yōu)秀文化。
第四篇:字符串輸出格式
printf的格式控制的完整格式:
%-0m.nl或h格式字符
下面對(duì)組成格式說明的各項(xiàng)加以說明:
①%:表示格式說明的起始符號(hào),不可缺少。
②-:有-表示左對(duì)齊輸出,如省略表示右對(duì)齊輸出。
③0:有0表示指定空位填0,如省略表示指定空位不填。
④m.n:m指域?qū)?,即?duì)應(yīng)的輸出項(xiàng)在輸出設(shè)備上所占的字符數(shù)。
n指精度,用于說明輸出的實(shí)型數(shù)的小數(shù)位數(shù)。為指定n時(shí),隱含的精度為n=6位。
⑤l或h:l對(duì)整型指long型,對(duì)實(shí)型指double型。h用于將整型的格式字符修正為short型。
格式小結(jié):
(1)最常用的格式是%d,含義是以10進(jìn)制形式打印一個(gè)整數(shù)。
如果輸出的整數(shù)是負(fù)數(shù),則輸出的第一個(gè)字符就是-號(hào)。
%d:按整型數(shù)據(jù)的實(shí)際長度輸出。
%md:m為指定的輸出字段的寬度。如果數(shù)據(jù)的位數(shù)小于m,則左端補(bǔ)以空格,若大于m,則按實(shí)際位數(shù)輸出。
%ld:輸出長整型數(shù)據(jù)。
(2)%u格式與%d格式類似,只不過要求打印無符號(hào)10進(jìn)制整數(shù)。
以無符號(hào)十進(jìn)制形式輸出整數(shù)。
對(duì)長整型可以用“%lu”格式輸出。同樣也可以指定字段寬度用“%mu”格式輸出。
(3)%o格式請(qǐng)求輸出8進(jìn)制整數(shù),以無符號(hào)八進(jìn)制形式輸出整數(shù)。
對(duì)長整型可以用“%lo”格式輸出。同樣也可以指定字段寬度用“%mo”格式輸出。
(4)%x和%X格式請(qǐng)求輸出16進(jìn)制整數(shù)。
%x格式中用小寫字母a,b,c,d,e,f來表示10到15之間的數(shù),以無符號(hào)十六進(jìn)制形式輸出整數(shù)。
對(duì)長整型可以用“%lx”格式輸出。同樣也可以指定字段寬度用“%mx”格式輸出。%X格式中用大寫字母A,B,C,D,E,F來表示10到15之間的數(shù)
共同點(diǎn):8進(jìn)制和16進(jìn)制整數(shù)總是作為無符號(hào)數(shù)處理的。
(5)%s格式用于打印字符串,與之對(duì)應(yīng)的參數(shù)應(yīng)該是一個(gè)字符指針,待輸出的字符始于該指針?biāo)赶虻牡刂?,直到出現(xiàn)一個(gè)空字符('