版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
項目3液晶與點陣項目制作:廣告燈與萬年歷設計任務1.1單音階播放器任務一:簡單的字符顯示在液晶上顯示一個英文單詞,在8x8的點陣上點亮一個漢字。任務二:創(chuàng)意廣告燈制作8*8點陣顯示流動的文字、圖案等,滾動顯示一組字符(漢字),滾動方式自定。任務三:電子萬年歷制作液晶顯示時間和日期,能夠通過按鍵設置時間和日期,能夠掉電保存時間。任務3.1簡單字符顯示任務介紹液晶顯示是單片機系統(tǒng)的重要組成部分,屬于人機接口功能之一。掌握液晶顯示設計是單片機開發(fā)的基本要求。本任務包括兩個:在LCD1602液晶顯示簡單的字符和在16x16點陣上顯示一個漢字。圍繞該任務的設計,首先講解LCD1602液晶與點陣的相關(guān)知識以及keil軟件編譯錯誤信息等擴展知識。任務3.1簡單字符顯示任務介紹知識導入LCD1602液晶8*8點陣模塊Keil編譯出錯信息設計步驟應用測試任務3.1簡單字符顯示LCD1602LCD1602液晶能夠顯示兩行,每行16個字符。圖3-1、圖3-2是LCD1602液晶實物的正面和背面圖片。LCD1602液晶通常有14條引腳線或16條引腳線(多出的2條引腳線是背光電源線VCC(15腳)和地線GND(16腳)),引腳定義如表3-1所示。任務3.1簡單字符顯示任務介紹知識導入LCD1602液晶8*8點陣模塊Keil編譯出錯信息設計步驟應用測試引腳符號功能說明1VSS一般接地2VDD接電源(+5V)3V0液晶顯示器對比度調(diào)整端,接正電源時對比度最弱,接地電源時對比度最高(使用時可以通過一個10K的電位器調(diào)整對比度)。4RSRS為寄存器選擇,高電平1時選擇數(shù)據(jù)寄存器、低電平0時選擇指令寄存器。5R/WR/W為讀寫信號線,高電平(1)時進行讀操作,低電平(0)時進行寫操作。6EE(或EN)端為使能(enable)端,下降沿使能。7DB0底4位三態(tài)、雙向數(shù)據(jù)總線0位(最低位)8DB1底4位三態(tài)、雙向數(shù)據(jù)總線1位9DB2底4位三態(tài)、雙向數(shù)據(jù)總線2位10DB3底4位三態(tài)、雙向數(shù)據(jù)總線3位11DB4高4位三態(tài)、雙向數(shù)據(jù)總線4位12DB5高4位三態(tài)、雙向數(shù)據(jù)總線5位13DB6高4位三態(tài)、雙向數(shù)據(jù)總線6位14DB7高4位三態(tài)、雙向數(shù)據(jù)總線7位(最高位)(也是busyflag)15BLA(VCC)背光電源正極16BLK(GND)背光電源負極任務3.1簡單字符顯示LCD1602LCD1602的指令集,共11條指令,如表3-3所示。任務3.1簡單字符顯示任務介紹知識導入LCD1602液晶8*8點陣模塊Keil編譯出錯信息設計步驟應用測試序號指令RSR/WD7D6D5D4D3D2D1D01清屏指令00000000012光標歸位指令000000001*3進入模式設置指令00000001I/DS4顯示開關(guān)控制指令0000001DCB5設定顯示屏或光標移動方向指令000001S/CR/L**6功能設定指令00001DLNF**7設定CGRAM地址指令0001字符發(fā)生存貯器地址8設定DDRAM地址指令001顯示數(shù)據(jù)存貯器地址9讀取忙信號或AC地址指令01BF計數(shù)器地址10數(shù)據(jù)寫入DDRAM或CGRAM指令10要寫的數(shù)據(jù)內(nèi)容11從CGRAM或DDRAM讀出數(shù)據(jù)指令11讀出的數(shù)據(jù)內(nèi)容任務3.1簡單字符顯示8X8點陣常見LED點陣有4×4、4×8、5×7、5×8、8×8、16×16等多種規(guī)格。根據(jù)像素可分為單色、雙基色、三基色等。單色點陣只能顯示固定色彩如紅、綠、黃等單色,雙基色和三基色點陣顯示內(nèi)容的顏色由像素內(nèi)不同顏色發(fā)光二極管點亮組合方式?jīng)Q定,如紅綠都亮時可顯示黃色。任務3.1簡單字符顯示任務介紹知識導入LCD1602液晶8*8點陣模塊Keil編譯出錯信息設計步驟應用測試
任務3.1簡單字符顯示8x8點陣動態(tài)顯示假設X,Y為兩個8位寬的字節(jié)型數(shù)據(jù),X的每位對應LED模塊的8根列線X7-X0,同樣Y的每位對應LED模塊的8根行線Y7-Y0。示例中,Y叫行掃描線,在每個時刻只有一根線為“1”即有效行選通電平;X叫列數(shù)據(jù)線,其內(nèi)容就是點陣化的字模數(shù)據(jù)體現(xiàn)。任務3.1簡單字符顯示任務介紹知識導入LCD1602液晶8*8點陣模塊Keil編譯出錯信息設計步驟應用測試
(1)Y=0x01,X=0xFF,如圖3-5第一幀;(2)Y=0x02,X=0x87,如圖3-5第二幀;(3)Y=0x04,X=0xBB,如圖3-5第三幀;(4)Y=0x08,X=0xBB,如圖3-5第四幀;(5)Y=0x10,X=0x87,如圖3-5第五幀;(6)Y=0x20,X=0xBB,如圖3-5第六幀;(7)Y=0x40,X=0xBB,如圖3-5第七幀;(8)Y=0x80,X=0x87,如圖3-5第八幀;(9)跳到第(1)步循環(huán)。如果高速地進行(1)到(9)的循環(huán),且兩個步驟間的間隔時間小于1/24秒,由于視覺暫留,LED顯示屏上將呈現(xiàn)出一個完整的“B”字符。任務3.1簡單字符顯示Keil編譯出錯信息從keil出錯提示的目的來說,是為了便于開發(fā)者盡快定位問題代碼,所以大體掌握編程過程中的keil出錯提示信息對于提高keil使用效率也是非常重要的。下面是關(guān)于keil的出錯提示信息列表,供學習者參考。任務3.1簡單字符顯示任務介紹知識導入LCD1602液晶8*8點陣模塊Keil編譯出錯信息設計步驟應用測試
error1:Outofmemory內(nèi)存溢出error2:Identifierexpected缺標識符error3:Unknownidentifier未定義的標識符error4:Duplicateidentifier重復定義的標識符error5:Syntaxerror語法錯誤error6:Errorinrealconstant實型常量錯誤error7:Errorinintegerconstant整型常量錯誤error8:Stringconstantexceedsline字符串常量超過一行error9:Unexpectedendoffile文件非正常結(jié)束error10:Linetoolong行太長error11:Typeidentifierexpected未定義的類型標識符error12:Toomanyopenfiles打開文件太多error13:Invalidfilename無效的文件名error14:Filenotfound文件未找到error15:Diskfull磁盤滿error16:Invalidcompilerdirective無效的編譯命令error17:Toomanyfiles文件太多error18:Undefinedtypeinpointerdef指針定義中未定義類型error19:Variableidentifierexpected缺變量標識符error20:Errorintype類型錯誤error21:Structuretoolarge結(jié)構(gòu)類型太長error22:Setbasetypeoutofrange集合基類型越界error23:Filecomponentsmaynotbefilesorobjectsfile分量不能是文件或?qū)ο骵rror24:Invalidstringlength無效的字符串長度error25:Typemismatch類型不匹配error26:error27:Invalidsubrangebasetype無效的子界基類型error27:Lowerboundgreaterthanupperbound下界超過上界error28:Ordinaltypeexpected缺有序類型error29:Integerconstantexpected缺整型常量error30:Constantexpected缺常量error31:Integerorrealconstantexpected缺整型或?qū)嵭统A縠rror32:PointerTypeidentifierexpected缺指針類型標識符error33:Invalidfunctionresulttype無效的函數(shù)結(jié)果類型error34:Labelidentifierexpected缺標號標識符error35:BEGINexpected缺BEGINerror36:ENDexpected缺ENDerror37:Integerexpressionexpected缺整型表達式error38:Ordinalexpressionexpected缺有序類型表達式error39:Booleanexpressionexpected缺布爾表達式error40:Operandtypesdonotmatch操作數(shù)類型不匹配error41:Errorinexpression表達式錯誤error42:Illegalassignment非法賦值error43:Fieldidentifierexpected缺域標識符error44:Objectfiletoolarge目標文件太大error45:Undefinedexternal未定義的外部過程與函數(shù)error46:Invalidobjectfilerecord無效的OBJ文件格式error47:Codesegmenttoolarge代碼段太長error48:Datasegmenttoolarge數(shù)據(jù)段太長error49:DOexpected缺DOerror50:InvalidPUBLICdefinition無效的PUBLIC定義error51:InvalidEXTRNdefinition無效的EXTRN定義error52:ToomanyEXTRNdefinitions太多的EXTRN定義error53:OFexpected缺O(jiān)Ferror54:INTERFACEexpected缺INTERFACEerror55:Invalidrelocatablereference無效的可重定位引用error56:THENexpected缺THENerror57:TOorDOWNTOexpected缺TO或DOWNTOerror58:Undefinedforward提前引用未經(jīng)定義的說明error59:Invalidtypecast無效的類型轉(zhuǎn)換error60:Divisionbyzero被零除任務3.1簡單字符顯示Keil編譯出錯信息從keil出錯提示的目的來說,是為了便于開發(fā)者盡快定位問題代碼,所以大體掌握編程過程中的keil出錯提示信息對于提高keil使用效率也是非常重要的。下面是關(guān)于keil的出錯提示信息列表,供學習者參考。任務3.1簡單字符顯示任務介紹知識導入LCD1602液晶8*8點陣模塊Keil編譯出錯信息設計步驟應用測試
error61:Invalidfiletype無效的文件類型error62:Cannotreadorwritevariablesofthistype不能讀寫此類型變量error63:Pointervariableexpected缺指針類型變量error64:Stringvariableexpected缺字符串變量error65:Stringexpressionexpected缺字符串表達式error66:Circularunitreference單元UNIT部件循環(huán)引用error67:Unitnamemismatch單元名不匹配error68:Unitversionmismatch單元版本不匹配error69:Internalstackoverflow內(nèi)部堆棧溢出error70:Unitfileformaterror單元文件格式錯誤error71:IMPLEMENTATIONexpected缺IMPLEMENTATIONerror72:Constantandcasetypesdonotmatch常量和CASE類型不匹配error73:Recordorobjectvariableexpected缺記錄或?qū)ο笞兞縠rror74:Constantoutofrange常量越界error75:Filevariableexpected缺文件變量error76:Pointerexpressionexpected缺指針表達式error77:Integerorrealexpressionexpected缺整型或?qū)嵭捅磉_式error78:Labelnotwithincurrentblock標號不在當前塊內(nèi)error79:Labelalreadydefined標號已定義error80:Undefinedlabelinprecedingstatementpart在前面未定義標號error81:Invalid@argument無效的@參數(shù)error82:UNITexpected缺UNITerror83:";"expected缺“;”error84:":"expected缺“:”error85:","expected缺“,”error86:"("expected缺“(”error87:")"expected缺“)”error88:"="expected缺“=”error89:":="expected缺“:=”error90:"["or"(."Expected缺“[”或“(.”error91:"]"or".)"expected缺“]”或“.)”error92:"."expected缺“.”error93:".."expected缺“..”error94:Toomanyvariables變量太多error95:InvalidFORcontrolvariable無效的FOR循環(huán)控制變量error96:Integervariableexpected缺整型變量error97:Filesandproceduretypesarenotallowedhere該處不允許文件和過程類型error98:Stringlengthmismatch字符串長度不匹配error99:Invalidorderingoffields無效域順序error100:Stringconstantexpected缺字符串常量error101:Integerorrealvariableexpected缺整型或?qū)嵭妥兞縠rror102:Ordinalvariableexpected缺有序類型變量error103:INLINEerrorINLINE錯誤error104:Characterexpressionexpected缺字符表達式error105:Toomanyrelocationitems重定位項太多error106:Overflowinarithmeticoperation算術(shù)運算溢出error107:CASEconstantoutofrangeCASE常量越界error108:Errorinstatement表達式錯誤error109:Cannotcallaninterruptprocedure不能調(diào)用中斷過程error110:Mustbein8087modetocompilethis必須在8087模式編譯error111:Targetaddressnotfound找不到目標地址error112:Includefilesarenotallowedhere該處不允許INCLUDE文件error113:Noinheritedmethodsareaccessiblehere該處繼承方法不可訪問error114:Invalidqualifier無效的限定符error115:Invalidvariablereference無效的變量引用error116:Toomanysymbols符號太多error117:Statementparttoolarge語句體太長error118:Filesmustbevarparameters文件必須是變量形參error119:Toomanyconditionalsymbols條件符號太多error120:Misplacedconditionaldirective條件指令錯位任務3.1簡單字符顯示Keil編譯出錯信息從keil出錯提示的目的來說,是為了便于開發(fā)者盡快定位問題代碼,所以大體掌握編程過程中的keil出錯提示信息對于提高keil使用效率也是非常重要的。下面是關(guān)于keil的出錯提示信息列表,供學習者參考。任務3.1簡單字符顯示任務介紹知識導入LCD1602液晶8*8點陣模塊Keil編譯出錯信息設計步驟應用測試
error121:ENDIFdirectivemissing缺ENDIF指令error122:Errorininitialconditionaldefines初始條件定義錯誤error123:Headerdoesnotmatchpreviousdefinition和前面定義的過程或函數(shù)不匹配error124:Cannotevaluatethisexpression不能計算該表達式error125:Expressionincorrectlyterminated表達式錯誤結(jié)束error126:Invalidformatspecifier無效格式說明符error127:Invalidindirectreference無效的間接引用error128:Structuredvariablesarenotallowedhere該處不允許結(jié)構(gòu)變量error129:CannotevaluatewithoutSystemunit沒有System單元不能計算error130:Cannotaccessthissymbol不能存取符號error131:Invalidfloatingpointoperation無效的符號運算error132:Cannotcompileoverlaystomemory不能編譯覆蓋模塊至內(nèi)存error133:Pointerorproceduralvariableexpected缺指針或過程變量error134:Invalidprocedureorfunctionreference無效的過程或函數(shù)調(diào)用error135:Cannotoverlaythisunit不能覆蓋該單元error136:Fileaccessdenied不允許文件訪問error137:Objecttypeexpected缺對象類型error138:Localobjecttypesarenotallowed不允許局部對象類型error139:VIRTUALexpected缺VIRTUALerror140:Methodidentifierexpected缺方法標識符error141:Virtualconstructorsarenotallowed不允許虛構(gòu)造函數(shù)error142:Constructoridentifierexpected缺構(gòu)造函數(shù)標識符error143:Destructoridentifierexpected缺析構(gòu)函數(shù)標識符error144:Failonlyallowedwithinconstructors只能在構(gòu)造函數(shù)內(nèi)使用Fail標準過程error145:Invalidcombinationofopcodeandoperands操作數(shù)與操作符無效組合error146:Memoryreferenceexpected缺內(nèi)存引用指針error147:Cannotaddorsubtractrelocatablesymbols不能加減可重定位符號error148:Invalidregistercombination無效寄存器組合error149:286/287instructionsarenotenabled未激活286/287指令error150:Invalidsymbolreference無效符號指針error151:Codegenerationerror代碼生成錯誤error152:ASMexpected缺ASMerror153:Procedureorfunctionidentifierexpected缺過程或函數(shù)標識符error154:Cannotexportthissymbol不能輸出該符號error155:Duplicateexportname外部文件名重復error156:Executablefileheadertoolarge可執(zhí)行文件頭太長error157:Toomanysegments段太多任務3.1簡單字符顯示任務3.1簡單字符顯示任務介紹知識導入LCD1602液晶8*8點陣模塊Keil編譯出錯信息設計步驟應用測試該任務的要求較為簡單,包括兩個子任務:在LCD1602液晶上顯示一個英文單詞和在8x8點陣上顯示一個漢字。在設計的初期階段,學習者需要分析該任務的需求。作者提供如下的分析思路:兩個子任務是分開實現(xiàn)還是合并實現(xiàn)?(這個是比較關(guān)鍵的問題)LCD1602液晶如何與單片機連接?點陣如何與單片機連接?顯示什么英文單詞,什么漢字?任務3.1簡單字符顯示任務3.1簡單字符顯示任務介紹知識導入LCD1602液晶8*8點陣模塊Keil編譯出錯信息設計步驟應用測試該任務的要求較為簡單,包括兩個子任務:在LCD1602液晶上顯示一個英文單詞和在8x8點陣上顯示一個漢字。在設計的初期階段,學習者需要分析該任務的需求。作者提供如下的分析思路:兩個子任務是分開實現(xiàn)還是合并實現(xiàn)?(這個是比較關(guān)鍵的問題)LCD1602液晶如何與單片機連接?點陣如何與單片機連接?顯示什么英文單詞,什么漢字?任務3.1簡單字符顯示任務3.1簡單字符顯示任務介紹知識導入LCD1602液晶8*8點陣模塊Keil編譯出錯信息設計步驟應用測試該任務的要求較為簡單,包括兩個子任務:在LCD1602液晶上顯示一個英文單詞和在8x8點陣上顯示一個漢字。在設計的初期階段,學習者需要分析該任務的需求。作者提供如下的分析思路:兩個子任務是分開實現(xiàn)還是合并實現(xiàn)?(這個是比較關(guān)鍵的問題)LCD1602液晶如何與單片機連接?點陣如何與單片機連接?顯示什么英文單詞,什么漢字?任務3.1簡單字符顯示任務3.1簡單字符顯示任務介紹知識導入LCD1602液晶8*8點陣模塊Keil編譯出錯信息設計步驟應用測試該任務的要求較為簡單,包括兩個子任務:在LCD1602液晶上顯示一個英文單詞和在8x8點陣上顯示一個漢字。在設計的初期階段,學習者需要分析該任務的需求。作者提供如下的分析思路:兩個子任務是分開實現(xiàn)還是合并實現(xiàn)?(這個是比較關(guān)鍵的問題)LCD1602液晶如何與單片機連接?點陣如何與單片機連接?顯示什么英文單詞,什么漢字?程序代碼講解LCD1602字符顯示任務3.1簡單字符顯示程序代碼講解16x16點陣顯示任務3.1簡單字符顯示任務3.1簡單字符顯示任務3.1簡單字符顯示任務介紹知識導入LCD1602液晶8*8點陣模塊Keil編譯出錯信息設計步驟應用測試為什么沒有在LCD1602液晶上顯示漢字?這與選用的液晶有關(guān),有興趣的學習者可查詢一下帶中文顯示的液晶模塊。該任務的測試比較簡單。建議學習者思考如何制作一個簡單的液晶上電自檢功能?該功能就是檢查每個顯示點有沒有問題,該如何實現(xiàn)呢?任務3.2創(chuàng)意廣告燈制作任務介紹本任務的創(chuàng)意廣告燈也可以定義為電子廣告牌,通過LED點陣顯示流動的文字、圖案等創(chuàng)意。本任務的基本要求是利用任務一的LED點陣電路實現(xiàn)滾動顯示一組字符(漢字),滾動方式自定。在本任務的基本要求之上,學習者可以思考如何將蜂鳴器與LED點陣配合使用,在字符滾動時同步播放音樂(曲調(diào))。任務3.2創(chuàng)意廣告燈制作任務介紹知識導入C51程序編寫規(guī)范(二)單片機程序設計模板設計步驟應用測試任務3.2創(chuàng)意廣告燈制作任務3.2創(chuàng)意廣告燈制作任務介紹知識導入C51程序編寫規(guī)范(二)單片機程序設計模板設計步驟應用測試1,文件結(jié)構(gòu)單片機程序應注重模塊化設計。C51程序有兩種用戶文件:.c源文件和.h頭文件,每個程序模塊都應包含.c文件和.h頭文件。2,變量名與函數(shù)名一般通過下劃線或者大小寫結(jié)合的方法組合動詞和名詞構(gòu)成變量名或函數(shù)名。下面對比好的命名方法與不好的命名方法:好的:Delay100us();不好的:Yanshi();好的:init_devices();不好的:Chengxuchushihua();3,外部調(diào)用首先在模塊化程序的.h文件中定義extern//端口初始化externvoidport_init(void);//T2初始化voidtimer2_init(void);//各種參數(shù)初始化externvoidinit_devices(void);模塊化程序的.c文件中定義函數(shù)。任務3.2創(chuàng)意廣告燈制作任務3.2創(chuàng)意廣告燈制作任務介紹知識導入C51程序編寫規(guī)范(二)單片機程序設計模板設計步驟應用測試1,程序開始處的程序說明/*****************************************************程序名:編寫人:編寫時間:硬件支持:接口說明:修改日志:說明:/********************************************************/2,單片機SFR定義的頭文件#include<REG51.h>//通用89C51頭文件#include<REG52.h>//通用89C52頭文件#include<STC11Fxx.H>//STC11Fxx或STC11Lxx系列單片機頭文件#include<STC12C2052AD.H>//STC12Cx052或STC12Cx052AD系列單片機頭文件#include<STC12C5A60S2.H>//STC12C5A60S2系列單片機頭文件任務3.2創(chuàng)意廣告燈制作任務3.2創(chuàng)意廣告燈制作任務介紹知識導入C51程序編寫規(guī)范(二)單片機程序設計模板設計步驟應用測試3,更多庫函數(shù)頭定義#include<assert.h>//設定插入點#include<ctype.h>//字符處理#include<errno.h>//定義錯誤碼#include<float.h>//浮點數(shù)處理#include<fstream.h>//文件輸入/輸出#include<iomanip.h>//參數(shù)化輸入/輸出#include<iostream.h>//數(shù)據(jù)流輸入/輸出#include<limits.h>//定義各種數(shù)據(jù)類型最值常量#include<locale.h>//定義本地化函數(shù)#include<math.h>//定義數(shù)學函數(shù)#include<stdio.h>//定義輸入/輸出函數(shù)#include<stdlib.h>//定義雜項函數(shù)及內(nèi)存分配函數(shù)#include<string.h>//字符串處理#include<strstrea.h>//基于數(shù)組的輸入/輸出#include<time.h>//定義關(guān)于時間的函數(shù)#include<wchar.h>//寬字符處理及輸入/輸出#include<wctype.h>//寬字符分類#include<intrins.h> //51基本運算(包括_nop_空函數(shù))任務3.2創(chuàng)意廣告燈制作任務3.2創(chuàng)意廣告燈制作任務介紹知識導入C51程序編寫規(guī)范(二)單片機程序設計模板設計步驟應用測試4,常用定義聲明sfr【自定義名】=【SFR地址】;//按字節(jié)定義SFR中的存儲器名。例:sfrP1=0x90;sbit【自定義名】=【系統(tǒng)位名】;//按位定義SFR中的存儲器名。例:sbitAdd_Key=P3^1;bit【自定義名】;//定義一個位(位的值只能是0或1)例:bitLED;#define【代替名】【原名】//用代替名代替原名。例:#defineLEDP1unsignedchar【自定義名】;//定義一個0~255的整數(shù)變量。例:unsignedchara;unsignedint【自定義名】;//定義一個0~65535的整數(shù)變量。例:unsignedinta;任務3.2創(chuàng)意廣告燈制作任務3.2創(chuàng)意廣告燈制作任務介紹知識導入C51程序編寫規(guī)范(二)單片機程序設計模板設計步驟應用測試5,定義常量和變量的存放位置的關(guān)鍵字data 字節(jié)尋址片內(nèi)RAM,片內(nèi)RAM的128字節(jié)(例:dataunsignedchara;)bdata 可位尋址片內(nèi)RAM,16字節(jié),從0x20到0x2F(例:bdataunsignedchara;)idata 所有片內(nèi)RAM,256字節(jié),從0x00到0xFF(例:idataunsignedchara;)pdata 片外RAM,256字節(jié),從0x00到0xFF(例:pdataunsignedchara;)xdata 片外RAM,64K字節(jié),從0x00到0xFFFF(例:xdataunsignedchara;)code ROM存儲器,64K字節(jié),從0x00到0xFFFF(例:codeunsignedchara;)任務3.2創(chuàng)意廣告燈制作任務3.2創(chuàng)意廣告燈制作任務介紹知識導入C51程序編寫規(guī)范(二)單片機程序設計模板設計步驟應用測試6,選擇、循環(huán)語句if(1){//為真時語句}Else{//否則時語句}--------------------------6,選擇、循環(huán)語句while(1){//為真時內(nèi)容}--------------------------do{//先執(zhí)行內(nèi)容}while(1);--------------------------6,選擇、循環(huán)語句switch(a){ case0x01: //為真時語句
break; case0x02: //為真時語句
break; default: //冗余語句
break;}--------------------------6,選擇、循環(huán)語句--------------------------for(;;){//循環(huán)語句}--------------------------任務3.2創(chuàng)意廣告燈制作任務3.2創(chuàng)意廣告燈制作任務介紹知識導入C51程序編寫規(guī)范(二)單片機程序設計模板設計步驟應用測試7,主函數(shù)模板/****************************************************函數(shù)名:主函數(shù)調(diào)用:無參數(shù):無返回值:無結(jié)果:程序開始處,無限循環(huán)備注:/*********************************************************/voidmain(void){ //初始程序
while(1){ //無限循環(huán)程序
}}/*************************************************************/任務3.2創(chuàng)意廣告燈制作任務3.2創(chuàng)意廣告燈制作任務介紹知識導入C51程序編寫規(guī)范(二)單片機程序設計模板設計步驟應用測試8,中斷處理函數(shù)模板/**************************************************************函數(shù)名:中斷處理函數(shù)調(diào)用:無參數(shù):無返回值:無結(jié)果:備注:/********************************************************/voidname(void)interrupt1using1{ //處理內(nèi)容}/************************************************************/【中斷入口說明】interrupt0外部中斷0(ROM入口地址:0x03)interrupt1定時/計數(shù)器中斷0(ROM入口地址:0x0B)interrupt2外部中斷1(ROM入口地址:0x13)interrupt3定時/計數(shù)器中斷1(ROM入口地址:0x1B)interrupt4UART串口中斷(ROM入口地址:0x23)(更多的中斷依單片機型號而定,ROM中斷入口均相差8個字節(jié))任務3.2創(chuàng)意廣告燈制作任務3.2創(chuàng)意廣告燈制作任務介紹知識導入C51程序編寫規(guī)范(二)單片機程序設計模板設計步驟應用測試9,普通函數(shù)框架/*********************************************************函數(shù)名:調(diào)用:參數(shù):無返回值:無結(jié)果:備注:/***************************************************/voidname(void){//函數(shù)內(nèi)容}/************************************************************/任務3.2創(chuàng)意廣告燈制作任務3.2創(chuàng)意廣告燈制作任務介紹知識導入C51程序編寫規(guī)范(二)單片機程序設計模板設計步驟應用測試10,延時函數(shù)/**********************************************************函數(shù)名:毫秒級CPU延時函數(shù)調(diào)用:DELAY_MS(?);參數(shù):1~65535(參數(shù)不可為0)返回值:無結(jié)果:占用CPU方式延時與參數(shù)數(shù)值相同的毫秒時間備注:應用于1T單片機時i<600,應用于12T單片機時i<125/******************************************************************/voidDELAY_MS(unsignedinta){ unsignedinti; while(--a!=0){ for(i=0;i<600;i++); }}/****************************************************************/任務3.2創(chuàng)意廣告燈制作任務3.2創(chuàng)意廣告燈制作任務介紹知識導入C51程序編寫規(guī)范(二)單片機程序設計模板設計步驟應用測試11,定時/計數(shù)器函數(shù)-----------------------------------------------------------------------------M1 M0 方式 說明0 0 0 13位T/C,由TL低5位和TH的8位組成13位計數(shù)器0 1 1 16位T/C,TL和TH共16位計數(shù)器1 0 2 8位T/C,TL用于計數(shù),當TL溢出時將TH中的值自動寫入TL1 1 3 兩組8位T/C-----------------------------------------------------------------------------/**************************************************************函數(shù)名:定時/計數(shù)器初始化函數(shù)調(diào)用:T_C_init();參數(shù):無返回值:無結(jié)果:設置SFR中T/C1和(或)T/C0相關(guān)參數(shù)備注:本函數(shù)控制T/C1和T/C0,不需要使用的部分可用//屏蔽/***************************************************************/voidT_C_init(void){ TMOD=0x11;//高4位控制T/C1 EA=1; //中斷總開關(guān)
TH1=0xFF;//16位計數(shù)寄存器T1高8位(寫入初值)
TL1=0xFF;//16位計數(shù)寄存器T1低8位
ET1=1;//T/C1中斷開關(guān)
TR1=1;//T/C1啟動開關(guān)
//TH0=0x3C;//16位計數(shù)寄存器T0高8位
//TL0=0xB0;//16位計數(shù)寄存器T0低8位(0x3CB0=50mS延時)
//ET0=1;//T/C0中斷開關(guān)
//TR0=1;//T/C0啟動開關(guān)}/***********************************************************/任務3.2創(chuàng)意廣告燈制作任務3.2創(chuàng)意廣告燈制作任務介紹知識導入C51程序編寫規(guī)范(二)單片機程序設計模板設計步驟應用測試11,定時/計數(shù)器函數(shù)/***************************************************************函數(shù)名:定時/計數(shù)器1中斷處理函數(shù)調(diào)用:【T/C1溢出后中斷處理】參數(shù):無返回值:無結(jié)果:重新寫入16位計數(shù)寄存器初始值,處理用戶程序備注:必須允許中斷并啟動T/C本函數(shù)方可有效,重新寫入初值需和T_C_init函數(shù)一致/**************************************************************/voidT_C1(void)interrupt3using3{ //切換寄存器組到3 TH1=0x3C;//16位計數(shù)寄存器T1高8位(重新寫入初值)
TL1=0xB0;//16位計數(shù)寄存器T1低8位(0x3CB0=50mS延時)
//函數(shù)內(nèi)容}/******************************************************函數(shù)名:定時/計數(shù)器0中斷處理函數(shù)調(diào)用:【T/C0溢出后中斷處理】參數(shù):無返回值:無結(jié)果:重新寫入16位計數(shù)寄存器初始值,處理用戶程序備注:必須允許中斷并啟動T/C本函數(shù)方可有效,重新寫入初值需和T_C_init函數(shù)一致/**********************************************************/voidT_C0(void)interrupt1using1{ //切換寄存器組到1 TH0=0x3C;//16位計數(shù)寄存器T0高8位(重新寫入初值)TL0=0xB0;//16位計數(shù)寄存器T0低8位(0x3CB0=50mS延時)
//函數(shù)內(nèi)容}/**************************************************************/任務3.2創(chuàng)意廣告燈制作任務3.2創(chuàng)意廣告燈制作任務介紹知識導入C51程序編寫規(guī)范(二)單片機程序設計模板設計步驟應用測試12,外部中斷INT函數(shù)/***********************************************************函數(shù)名:外部中斷INT初始化函數(shù)調(diào)用:INT_init();參數(shù):無返回值:無結(jié)果:啟動外部中斷INT1、INT0中斷,設置中斷方式備注:/**********************************************************/voidINT_init(void){ EA=1; //中斷總開關(guān)
EX1=1;//允許外部中斷1中斷
EX0=1;//允許外部中斷0中斷
IT1=1;//1:下沿觸發(fā)0:低電平觸發(fā)
IT0=1;//1:下沿觸發(fā)0:低電平觸發(fā)}/****************************************************/任務3.2創(chuàng)意廣告燈制作任務3.2創(chuàng)意廣告燈制作任務介紹知識導入C51程序編寫規(guī)范(二)單片機程序設計模板設計步驟應用測試12,外部中斷INT函數(shù)/********************************************************函數(shù)名:外部中斷INT1中斷處理程序調(diào)用:【外部引腳INT1中斷處理】參數(shù):無返回值:無結(jié)果:用戶處理外部中斷信號備注:/********************************************************************/voidINT_1(void)interrupt2using2{//切換寄存器組到2 //用戶函數(shù)內(nèi)容} /*****************************************************************//*********************************************************************函數(shù)名:外部中斷INT0中斷處理程序調(diào)用:【外部引腳INT0中斷處理】參數(shù):無返回值:無結(jié)果:用戶處理外部中斷信號備注:/***************************************************************/voidINT_0(void)interrupt0using2{//切換寄存器組到2 //用戶函數(shù)內(nèi)容} 任務3.2創(chuàng)意廣告燈制作任務3.2創(chuàng)意廣告燈制作任務介紹知識導入C51程序編寫規(guī)范(二)單片機程序設計模板設計步驟應用測試13,UART串口函數(shù)/*****************************************************************函數(shù)名:UART串口初始化函數(shù)調(diào)用:UART_init();參數(shù):無返回值:無結(jié)果:啟動UART串口接收中斷,允許串口接收,啟動T/C1產(chǎn)生波特率(占用)備注:振蕩晶體為12MHz,PC串口端設置【4800,8,無,1,無】/***********************************************************/voidUART_init(void){ EA=1;//允許總中斷(如不使用中斷,可用//屏蔽)
ES=1;//允許UART串口的中斷
TMOD=0x20; //定時器T/C1工作方式2 SCON=0x50; //串口工作方式1,允許串口接收(SCON=0x40時禁止串口接收)
TH1=0xF3; //定時器初值高8位設置
TL1=0xF3; //定時器初值低8位設置
PCON=0x80; //波特率倍頻(屏蔽本句波特率為2400)
TR1=1; //定時器啟動}/******************************************************************/任務3.2創(chuàng)意廣告燈制作任務3.2創(chuàng)意廣告燈制作任務介紹知識導入C51程序編寫規(guī)范(二)單片機程序設計模板設計步驟應用測試13,UART串口函數(shù)/*********************************************************************函數(shù)名:UART串口初始化函數(shù)調(diào)用:UART_init();參數(shù):無返回值:無結(jié)果:啟動UART串口接收中斷,允許串口接收,啟動T/C1產(chǎn)生波特率(占用)備注:振蕩晶體為11.0592MHz,PC串口端設置【19200,8,無,1,無】/********************************************************************/voidUART_init(void){ EA=1;//允許總中斷(如不使用中斷,可用//屏蔽)
ES=1;//允許UART串口的中斷
TMOD=0x20; //定時器T/C1工作方式2 SCON=0x50; //串口工作方式1,允許串口接收(SCON=0x40時禁止串口接收)
TH1=0xFD; //定時器初值高8位設置
TL1=0xFD; //定時器初值低8位設置
PCON=0x80; //波特率倍頻(屏蔽本句波特率為9600)
TR1=1; //定時器啟動}/******************************************************************/任務3.2創(chuàng)意廣告燈制作任務3.2創(chuàng)意廣告燈制作任務介紹知識導入C51程序編寫規(guī)范(二)單片機程序設計模板設計步驟應用測試13,UART串口函數(shù)/************************函數(shù)名:UART串口接收中斷處理函數(shù)調(diào)用:【SBUF收到數(shù)據(jù)后中斷處理】參數(shù):無返回值:無結(jié)果:UART串口接收到數(shù)據(jù)時產(chǎn)生中斷,用戶對數(shù)據(jù)進行處理(并發(fā)送回去)備注:過長的處理程序會影響后面數(shù)據(jù)的接收/**********************************************************/voidUART_R(void)interrupt4using1{//切換寄存器組到1 unsignedcharUART_data;//定義串口接收數(shù)據(jù)變量
RI=0; //令接收中斷標志位為0(軟件清零)
UART_data=SBUF; //將接收到的數(shù)據(jù)送入變量UART_data
//用戶函數(shù)內(nèi)容(用戶可使用UART_data做數(shù)據(jù)處理)
//SBUF=UART_data; //將接收的數(shù)據(jù)發(fā)送回去(刪除//即生效)
//while(TI==0); //檢查發(fā)送中斷標志位
//TI=0; //令發(fā)送中斷標志位為0(軟件清零)} /*****************************************************/任務3.2創(chuàng)意廣告燈制作任務3.2創(chuàng)意廣告燈制作任務介紹知識導入C51程序編寫規(guī)范(二)單片機程序設計模板設計步驟應用測試13,UART串口函數(shù)/**************************************************************函數(shù)名:UART串口接收CPU查尋語句(非函數(shù)體)調(diào)用:將下面內(nèi)容放入主程序參數(shù):無返回值:無結(jié)果:循環(huán)查尋接收標志位RI,如有收到數(shù)據(jù)則進入if(RI==1){}備注:/********************unsignedcharUART_data;//定義串口接收數(shù)據(jù)變量if(RI==1){ //接收中斷標志位為1時
UART_data=SBUF; //接收數(shù)據(jù)SBUF為單片機的接收發(fā)送緩沖寄存器
RI=0; //令接收中斷標志位為0(軟件清零)
//用戶函數(shù)內(nèi)容(用戶可使用UART_data做數(shù)據(jù)處理)
//SBUF=UART_data; //將接收的數(shù)據(jù)發(fā)送回去(刪除//即生效)
//while(TI==0); //檢查發(fā)送中斷標志位
//TI=0; //令發(fā)送中斷標志位為0(軟件清零)}/****************************************************/任務3.2創(chuàng)意廣告燈制作任務3.2創(chuàng)意廣告燈制作任務介紹知識導入C51程序編寫規(guī)范(二)單片機程序設計模板設計步驟應用測試13,UART串口函數(shù)/*******************************************************函數(shù)名:UART串口發(fā)送函數(shù)調(diào)用:UART_T(?);參數(shù):需要UART串口發(fā)送的數(shù)據(jù)(8位/1字節(jié))返回值:無結(jié)果:將參數(shù)中的數(shù)據(jù)發(fā)送給UART串口,確認發(fā)送完成后退出備注:/************************************************************/voidUART_T(unsignedcharUART_data){//定義串口發(fā)送數(shù)據(jù)變量
SBUF=UART_data; //將接收的數(shù)據(jù)發(fā)送回去
while(TI==0); //檢查發(fā)送中斷標志位
TI=0; //令發(fā)送中斷標志位為0(軟件清零)}/******************************************************/任務3.2創(chuàng)意廣告燈制作任務介紹知識導入LCD1602液晶8*8點陣模塊Keil編譯出錯信息設計步驟應用測試任務3.2創(chuàng)意廣告燈制作程序代碼講解任務3.2創(chuàng)意廣告燈制作使用LED點陣顯示流動的漢字是很多店面常用的廣告牌,這個任務所實現(xiàn)的功能也是屬于電子廣告牌一類,但與實際可用的產(chǎn)品還是有一定差距。主要是人機接口方面還有不足,不能方便的修改顯示信息。該任務顯示的漢字是固定的,不能隨意修改的。學習者可以思考如何擴充該電子廣告牌的功能,已達到能夠隨意輸入要顯示的內(nèi)容。作者的思路是將該電子廣告牌系統(tǒng)通過串口與電腦相連,電腦上面使用串口輸入軟件,將所要顯示的字符和方式通過串口發(fā)送給單片機,單片機控制點陣,根據(jù)要求進行顯示。有興趣的學習者可參考本書的最后一個項目(串口通信),可以想辦法將該任務與串口通信的任務融合到一起,實現(xiàn)一個具有實用性功能的電子廣告牌。任務3.2創(chuàng)意廣告燈制作任務介紹知識導入LCD1602液晶8*8點陣模塊Keil編譯出錯信息設計步驟應用測試任務3.2創(chuàng)意廣告燈制作任務3.3電子萬年歷制作任務介紹萬年歷是一個使用非常普遍的單片機開發(fā)項目,該項目所使用外部資源是一個時鐘芯片和掉電存儲器。該任務制作時需要了解時鐘芯片的工作原理以及時鐘芯片與單片機的連線類型(比如iic、spi、單總線等)。該任務要求能夠?qū)崿F(xiàn)液晶顯示時間和日期,能夠通過按鍵設置時間和日期,能夠掉電保存時間(即關(guān)機后時依舊記時)。該任務的目的是引導學習者熟悉時鐘芯片、外部存儲器的使用。任務3.3電子萬年歷制作任務介紹知識導入I2C總線及數(shù)據(jù)傳輸SPI總線及數(shù)據(jù)傳輸單總線及數(shù)據(jù)傳輸設計步驟應用測試任務3.3電子萬年歷制作IIC總線介紹IIC(Inter-IntegratedCircuit)總線是由PHILIPS公司開發(fā)的兩線式串行總線,用于連接微控制器及其外圍設備。IIC總線產(chǎn)生于80年代,最初為音頻和視頻設備開發(fā),如今主要在服務管理中使用。IIC總線是由數(shù)據(jù)線SDA和時鐘SCL構(gòu)成的串行總線,可發(fā)送和接收數(shù)據(jù)。在CPU與被控IC之間、IC與IC之間進行雙向傳送,最高傳送速率100kbps。IIC總線在傳送數(shù)據(jù)過程中共有三種類型信號,分別是開始信號、結(jié)束信號和應答信號。開始信號:SCL為高電平時,SDA由高電平向低電平跳變,開始傳送數(shù)據(jù)。結(jié)束信號:SCL為低電平時,SDA由低電平向高電平跳變
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 初中生物干旱脅迫對光合作用生理指標的影響實驗設計課題報告教學研究課題報告
- 2025年施秉縣馬號鎮(zhèn)中心衛(wèi)生院公開招聘編外工作人員備考題庫附答案詳解
- 2025年將樂縣關(guān)于公開招聘緊缺急需專業(yè)新任教師備考題庫參考答案詳解
- 2025年同濟大學海洋與地球科學學院“同濟”號智能海洋科考船實驗探測員招聘備考題庫附答案詳解
- 水墨中國風教育教學模板
- 2025年貴州興義市消防救援大隊招錄專職消防員招錄備考題庫有答案詳解
- 2025年長治十三中招聘代課教師備考題庫及參考答案詳解一套
- 2025年鹽城經(jīng)濟技術(shù)開發(fā)區(qū)部分單位公開招聘合同制工作人員7人備考題庫及一套答案詳解
- 2025年溫嶺市溫中雙語學校招聘(編外)教師備考題庫及完整答案詳解一套
- 湖北鐵道運輸職業(yè)學院(武漢鐵路技師學院)專項公開招聘工作人員20人備考題庫及答案詳解1套
- 寧夏調(diào)味料項目可行性研究報告
- GRR計算表格模板
- 長沙市長郡雙語實驗學校人教版七年級上冊期中生物期中試卷及答案
- 馬克思主義經(jīng)典著作選讀智慧樹知到課后章節(jié)答案2023年下四川大學
- 金庸短篇小說《越女劍》中英文對照版
- 2023年洛陽市洛龍區(qū)政務中心綜合窗口人員招聘筆試題庫及答案解析
- GB/T 19867.1-2005電弧焊焊接工藝規(guī)程
- GB/T 16102-1995車間空氣中硝基苯的鹽酸萘乙二胺分光光度測定方法
- GB/T 15171-1994軟包裝件密封性能試驗方法
- 醫(yī)院轉(zhuǎn)院證明樣本圖片(范文四篇)
- 外科護理學期末試卷3套18p
評論
0/150
提交評論