單片機(jī)作為該電路的主要控制器芯片,是整個(gè)系統(tǒng)核心部分,主要負(fù)責(zé)控制LED燈的亮滅變化的速度以及變化效果。89c51單片機(jī)共有32個(gè)I/O口,能夠滿足32個(gè)流水燈的設(shè)計(jì)需求;另外80c51具有4k字節(jié)的FLASH閃存和128字節(jié)的RAM,編寫的程序很小,非常能夠滿足設(shè)計(jì)的需求;除此之外,89c51單片機(jī)還具有靈活性高且廉價(jià)的特點(diǎn),綜合考慮,選擇89c51芯片作為設(shè)計(jì)的方案。
2、LED燈控制方式的比較與選擇方案一:采用位操作的方式對(duì)32個(gè)i/o口進(jìn)行操作
方案二:采用總線的方式對(duì)32個(gè)i/o口進(jìn)行操作
由于采用位操作的方式,還需要聲明32個(gè)i/o口,另外在寫程序的時(shí)候語句較多,過程繁瑣;而采用總線操作的方式,則不需要聲明i/o口,與位操作相比,采用總線的方式在程序編寫時(shí)能用很少的語句實(shí)現(xiàn)相同的功能效果;所以,選擇方案二,即采用總線操作的方式對(duì)32個(gè)i/o口操作。
3、硬件設(shè)計(jì)心形流水燈設(shè)計(jì)所需的系統(tǒng)應(yīng)該具有:由32個(gè)發(fā)光二極管組成的顯示電路、由晶振和電容組成的時(shí)鐘電路、電源、復(fù)位電路即軟件部分。心形流水燈的硬件設(shè)計(jì)框圖如圖1-3.1所示
單片機(jī)內(nèi)有一個(gè)由反相放大器所構(gòu)成的振蕩電路, XTAL1 和 XTAL2 分別為振蕩電路的輸入端和輸出端。 在 XTAL1 和 XTAL2 引腳上外接石英晶體和微調(diào)電容構(gòu)成并聯(lián)振蕩回路。晶振頻率設(shè)置為 11.0592MHZ, 作用是產(chǎn)生時(shí)鐘信號(hào)。 單片機(jī)晶振提供的時(shí)鐘頻率越高,那么單片機(jī)運(yùn)行速度就越快,單片接的一切指令的執(zhí)行都是建立在單片機(jī)晶振提供的時(shí)鐘頻率紙上。電容值為 30pF, 可以起到頻率微調(diào)作用。時(shí)鐘電路如圖2-1.1所示:
當(dāng)輸入連續(xù)兩個(gè)機(jī)器周期以上高電平時(shí)為有效,用來完成單片機(jī)的復(fù)位初始值操作,復(fù)位后程序計(jì)數(shù)器PC=0000H,即復(fù)位后將從程序儲(chǔ)存器的0000H單元讀取第一條指令碼,通俗的講,就是單片機(jī)重新開始命令,防止程序走偏。復(fù)位電路如圖2-2.1所示:
單片機(jī)的 P0 口為 8 位的漏極開路的雙向 I/O 口,當(dāng) P0口作為普通的 I/O 口使用時(shí),需要上拉電阻,這時(shí)為準(zhǔn)雙向口。 P1 、P2、 P3 都為 8位的準(zhǔn)雙向口,具有內(nèi)部上拉電阻。圖 6 為顯示電路,單片機(jī) I/O 口一對(duì)一直接控制 LED 燈,顯示電路中的 32 個(gè)電阻既為上拉電阻,也起到電路分壓作用,防止燒壞元器件。顯示電路如圖2-3.1所示
本次課程設(shè)計(jì),我們采用Keil軟件進(jìn)行C語言編程。Keil軟件是美國Keil Software公司開發(fā)的,它適合 WindowsXP、Win7 等系統(tǒng),具有可視化操作界面,使用方便簡單,并且支持 C51 語言、匯編語言以及兩者混合編程等多種方式的單片機(jī)設(shè)計(jì),KeilC51 在兼容標(biāo)準(zhǔn) C 語言的基礎(chǔ)上,又增加了很多與 51系列單片機(jī)硬件相關(guān)的編譯特性,其生成的程序代碼運(yùn)行的速度快,所需的存儲(chǔ)器空間小。
Keil 軟件已被完全集成到一個(gè)功能強(qiáng)大的全新環(huán)境中,該開發(fā)環(huán)境集成了文件編譯處理、編譯鏈接、項(xiàng)目管理、工具引用、和仿真軟件模擬器等多種功能。 Keil 軟件具有豐富的庫函數(shù),同時(shí)也帶有功能強(qiáng)大的集成開發(fā)調(diào)試工具,可以自動(dòng)識(shí)別所編寫程序的語法錯(cuò)誤,編譯效率也很高, 能將源文件編譯為二進(jìn)制機(jī)器語言代碼,其軟件調(diào)試仿真功能也很強(qiáng)大,能通過單步、設(shè)置斷點(diǎn)等功能讓編程者了解 CPU 正在進(jìn)行的程序,并能監(jiān)控各變量以及各寄存器是否符合編程者的要求。
2、程序編寫設(shè)計(jì)單片機(jī)的應(yīng)用系統(tǒng)由硬件和軟件組成,在硬件原理圖搭建完成上電之后,暫時(shí)還不能看到流水燈循環(huán)點(diǎn)亮的現(xiàn)象,還需要編寫程序控制單片機(jī)管腳電平的高低變化,來實(shí)現(xiàn) LED 燈的各種亮滅功能。其程序流程圖3-2.1如圖所示:
例如,先將 P0、P1、P2、P3 全部置 1,即通入高電平,用 16 進(jìn)制表示為 0XFF,則 32個(gè) LED 燈全部處于熄滅狀態(tài)。然后給 P0 口賦值0X7F,即只有 P0.0 處于低電平時(shí),LED1 燈點(diǎn)亮。使用延時(shí)函數(shù) delay,并設(shè)置延時(shí)時(shí)間為0.2秒,延時(shí)時(shí)間一到 P0 口的值就變?yōu)?0X3F, 即 P0.0和 P0.1都為高電平, LED2 也開始點(diǎn)亮,如此循環(huán) P0口控制的8 個(gè) LED 燈全部點(diǎn)亮,
當(dāng)高電平變?yōu)榈碗娖綍r(shí), LED 燈熄滅。P1、P2、P3 口控制的 LED燈閃亮和熄滅原理同 P0 口一樣,所以就可以看到 LED 燈的流水效果了。
圖3-2.1程序設(shè)計(jì)流程圖
3、程序調(diào)試在程序編寫好了之后,需要連接工程并編譯,經(jīng)過反復(fù)的檢查、編譯、調(diào)試,程序沒有錯(cuò)誤后,最后獲得目標(biāo)代碼 Hex文件。將程序代碼文件調(diào)入 Proteus軟件,進(jìn)行電路功能仿真,并根據(jù)仿真結(jié)果進(jìn)行程序的修改和完善。所以程序的調(diào)試就顯得至關(guān)重要。其中,將每個(gè)閃爍的部分都寫成一個(gè)子函數(shù),直接在主函數(shù)中調(diào)用即可實(shí)現(xiàn)閃爍的花樣和效果,各子函數(shù)與主函數(shù)的結(jié)構(gòu)框圖如圖3-3.1所示:
在各部分電路設(shè)計(jì)的基礎(chǔ)上,按照總體電路圖在 Proteus上一一進(jìn)行器件選擇,并連接。將電路連接好后,為各個(gè)器件選擇合適的參數(shù),然后調(diào)入已編譯好的目標(biāo)代碼Hex 文件,啟動(dòng)仿真。根據(jù) LED 燈是否發(fā)亮,判斷所設(shè)計(jì)的電路是否可以實(shí)現(xiàn) 32 個(gè) LED燈依次點(diǎn)亮、依次熄滅、對(duì)角閃亮、對(duì)角熄滅、間隔閃亮、間隔熄滅等多種功能。電路仿真的結(jié)果為 32 個(gè) LED 燈依次發(fā)亮、依次熄滅,并可以實(shí)現(xiàn)多種亮滅功能。
wangsonghu 發(fā)表于 2019-4-5 02:52
很高興能夠幫到你,當(dāng)然可以借鑒
歡迎光臨 (http://www.torrancerestoration.com/bbs/) | Powered by Discuz! X3.1 |