宿舍管理系統(tǒng)的設(shè)計與實現(xiàn)及基于51單片機(jī)的信號發(fā)生器的設(shè)計_第1頁
宿舍管理系統(tǒng)的設(shè)計與實現(xiàn)及基于51單片機(jī)的信號發(fā)生器的設(shè)計_第2頁
宿舍管理系統(tǒng)的設(shè)計與實現(xiàn)及基于51單片機(jī)的信號發(fā)生器的設(shè)計_第3頁
宿舍管理系統(tǒng)的設(shè)計與實現(xiàn)及基于51單片機(jī)的信號發(fā)生器的設(shè)計_第4頁
宿舍管理系統(tǒng)的設(shè)計與實現(xiàn)及基于51單片機(jī)的信號發(fā)生器的設(shè)計_第5頁
已閱讀5頁,還剩36頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)

文檔簡介

承德石油高等??茖W(xué)校計算機(jī)與信息工程系課程設(shè)計說明書課程名稱:《數(shù)據(jù)結(jié)構(gòu)與程序設(shè)計》課程設(shè)計設(shè)計題目:宿舍管理系統(tǒng)的設(shè)計與實現(xiàn)班級:軟件學(xué)號:姓名:手機(jī):指導(dǎo)教師:學(xué)期:成績評定二0年七月四日摘要二十一世紀(jì)的今天,已經(jīng)是計算機(jī)的時代。計算機(jī)已經(jīng)進(jìn)入了現(xiàn)代社會的各個領(lǐng)域,計算機(jī)世界日新月異地發(fā)展著,在Microsoft公司的Windows操作系統(tǒng)被成千上萬的用戶所使用的今天,開發(fā)Windows下的圖形用戶界面程序?qū)τ趶V大的程序員來說已經(jīng)成為一件刻不容緩的事。開發(fā)數(shù)據(jù)庫程序已經(jīng)一個重要的領(lǐng)域,如今,各種數(shù)據(jù)庫的開發(fā)出不窮,而C語言以其完美的界面,方便的操作,強(qiáng)大的功能在各種數(shù)據(jù)庫開發(fā)獨(dú)樹一幟。作為微軟公司的重點(diǎn)產(chǎn)品,C語言具有其它數(shù)據(jù)庫開發(fā)所無法比擬的優(yōu)勢,它易學(xué)易用,因此得到了廣大軟件開發(fā)人員及計算機(jī)愛好者的青睞,成為了人們的得力助手。過去的單位一般都用人工來管理信息,這樣既不方便又容易發(fā)生錯誤,還占用了大量的人員和物資,現(xiàn)在這些已經(jīng)成為過去,用計算機(jī)來管理可以非常容易的實現(xiàn)這些要求。關(guān)鍵詞:C語言,計算機(jī)目錄摘要 2目錄 31引言 31.1設(shè)計目的和意義 31.2問題描述與分析 41.3設(shè)計環(huán)境 42總體設(shè)計(或概要設(shè)計) 52.1需求概述 52.2軟件結(jié)構(gòu) 52.3程序邏輯 53詳細(xì)設(shè)計(或模塊設(shè)計) 63.1錄入模塊、統(tǒng)計模塊 63.2修改模塊 74系統(tǒng)實現(xiàn) 84.1數(shù)據(jù)結(jié)構(gòu)定義 84.2功能函數(shù)設(shè)計 94.3程序?qū)崿F(xiàn) 95總結(jié) 125.1收獲與體會 125.2不足與改進(jìn) 126參考文獻(xiàn) 12附 121引言1.1設(shè)計目的和意義1.目的通過本次課程設(shè)計,強(qiáng)化上級動手能力,在理論和實踐的基礎(chǔ)上進(jìn)一步鞏固

《數(shù)據(jù)結(jié)構(gòu)》課程的學(xué)習(xí)內(nèi)容,掌握工程軟件設(shè)計的基本方法。

熟悉C語言的基本內(nèi)容從而掌握C語言的基本知識以及了解C程序的基本編寫及運(yùn)行;了解程序的分模塊編寫并對程序的每個模塊進(jìn)行詳細(xì)的設(shè)計并且能理解一般C語言編寫的程序。

熟悉C程序設(shè)計的開發(fā)環(huán)境及C程序的調(diào)試過程。2.意義通過本課程設(shè)計,強(qiáng)化上機(jī)動手能力,使學(xué)生在理論和實踐的基礎(chǔ)上進(jìn)一步鞏固《數(shù)據(jù)結(jié)構(gòu)》課程學(xué)習(xí)的內(nèi)容,掌握工程軟件設(shè)計的基本方法。通過這次實習(xí)練習(xí),可以更進(jìn)一步的熟悉所學(xué)的知識,還可以加強(qiáng)和鞏固知識。長達(dá)兩周的上機(jī)練習(xí),為我們提供了很好的編程環(huán)境。更好的了解編程的意義,為將來參加實踐活動以及以后的畢業(yè)設(shè)計打下堅實的基礎(chǔ)。1.2問題描述與分析據(jù)了解,我校宿管科是管理學(xué)生住宿、出勤、衛(wèi)生、紀(jì)律等方面的后勤部門,屬于后勤集團(tuán)的一部分。住宿方面,他們主管住宿學(xué)生登記,在新生入學(xué)時,一般由新生持入學(xué)通知書來辦理各種入學(xué)手續(xù),然后再拿學(xué)校財務(wù)部門開具的收據(jù)到所在校區(qū)宿舍服務(wù)公司辦理登記手續(xù)。這些大量的登記數(shù)據(jù)形成數(shù)據(jù)庫。在衛(wèi)生和出勤(早操)檢查方面,有紀(jì)律檢查部的人員定期來檢查,檢查結(jié)果交送宿舍服務(wù)公司處理,然后再送交各院系。如有違紀(jì)人員,則先交值班室處理然后交各院系,使情況輕重決定是否交給自律委員會處理。在硬件設(shè)施(如:桌子、凳子、床)方面,如果有壞掉的,到各個樓的值班室來報修,填一張報修表,然后持保修表到所在校區(qū)后勤集團(tuán)相關(guān)服務(wù)部門辦理報修事宜。同時,如有物品要分發(fā),樓里值班室應(yīng)通知各寢室長來值班室領(lǐng)取,值班室有自己的倉庫,分發(fā)情況要上報。各樓值班室的登記數(shù)據(jù)自己保存,以方便學(xué)生家長查找學(xué)生。在社會飛速發(fā)展的今天,用計算機(jī)來管理宿舍信息是發(fā)展必然趨勢,又因為宿舍種類和學(xué)生的不斷增加,對于管理造成了困難。以往的宿舍管理方法,查詢速度慢,管理困難,容易丟失數(shù)據(jù),已經(jīng)不適合現(xiàn)在的要求。為克服宿舍管理的困難,和查詢的不便。采用計算機(jī)來管理宿舍和學(xué)生的信息,大大提高了查詢的速度,節(jié)約了人力和物力資源,達(dá)到了預(yù)期的要求,于是我們便起草了這份設(shè)計。1.3設(shè)計環(huán)境硬件環(huán)境:

PC機(jī)

內(nèi)存

256M;硬盤40G

軟件環(huán)境:

操作系統(tǒng):windows

xp

sp2

編輯環(huán)境:Visual

C/C++6.0

word20032總體設(shè)計(或概要設(shè)計)2.1需求概述該程序是由C語言編寫的一個宿舍管理查詢軟件,本程序在MicrosoftVisualC++6.0下運(yùn)行,其主要功能是實現(xiàn)對學(xué)生信息的錄入、添加、刪除、修改、查詢、統(tǒng)計。其中查詢可以分別以姓名、學(xué)號、宿舍號為關(guān)鍵字查詢學(xué)生信息。統(tǒng)計可以分別以學(xué)號、宿舍號、性別、班級、專業(yè)為關(guān)鍵字進(jìn)行統(tǒng)計,并且輸出信息按學(xué)號大小從小到大輸出。2.2軟件結(jié)構(gòu)軟件系統(tǒng)的結(jié)構(gòu)圖主函數(shù)主函數(shù)密碼模塊錄入模塊添加模塊修改模塊刪除模塊查詢模塊統(tǒng)計模塊退出系統(tǒng)學(xué)號姓名宿舍性別年齡專業(yè)返回班級按姓名按學(xué)號按宿舍返回按性別按學(xué)號按宿舍返回按班級按專業(yè)2.3程序邏輯函數(shù)之間調(diào)用關(guān)系圖主函數(shù)主函數(shù)main()刪除函數(shù)delete_message()錄入函數(shù)input_message()統(tǒng)計函數(shù)census_message()添加函數(shù)append_message()排序函數(shù)sortmessage()密碼函數(shù)cipher()修改函數(shù)revise_message()查詢函數(shù)find_message()3詳細(xì)設(shè)計(或模塊設(shè)計)3.1錄入模塊、統(tǒng)計模塊輸入姓名輸入班級輸入宿舍輸入姓名輸入班級輸入宿舍輸入學(xué)號輸入性別輸入年齡輸入專業(yè)是否繼續(xù)錄入結(jié)束NY輸入統(tǒng)計方式功能選擇選1選4選6選2選3選5按學(xué)號按宿舍按性別按班級按專業(yè)結(jié)束返回主頁是是是是是是否否否否否3.2修改模塊輸入要修改學(xué)生的姓名輸入要修改學(xué)生的姓名功能選擇選1選7選4選8選2選3選5選6修改學(xué)號修改姓名修改班級修改宿舍修改性別修改年齡修改專業(yè)是否繼續(xù)結(jié)束返回主頁是是是是是是是是否否否否否否否4系統(tǒng)實現(xiàn)4.1數(shù)據(jù)結(jié)構(gòu)定義程序中數(shù)據(jù)主要是學(xué)生信息,具體屬于類型如下:tructst_messagecharname[20];/*學(xué)生姓名*/chardorm[7];/*宿舍號*/charnum[10];/*學(xué)號*/charsex[5];/*性別*/charage[4];/*年齡*/charmajor[20];/*專業(yè)*/charclasss[8];/*班級*/4.2功能函數(shù)設(shè)計第一密碼模塊:調(diào)用cipher(),進(jìn)行管理者的注冊與登錄操作。第二錄入模塊:調(diào)用input_message(),對住宿學(xué)生信息進(jìn)行錄入。第三添加模塊:調(diào)用append_message(),對新來學(xué)生信息進(jìn)行添加錄入。第四修改模塊:調(diào)用revise_message(),對需修改學(xué)生的信息進(jìn)行修改。第五刪除模塊:調(diào)用delete_message(),對某一學(xué)生信息進(jìn)行刪除操作。第六查詢模塊:調(diào)用find_message(),分別以姓名、學(xué)號、宿舍號對學(xué)生信息進(jìn)行查詢。第七統(tǒng)計模塊:調(diào)用census_message(),分別以學(xué)號、宿舍號、性別、班級、專業(yè)方式對學(xué)生信息進(jìn)行統(tǒng)計,并按學(xué)號由小到大輸出。4.3程序?qū)崿F(xiàn)登陸界面主頁界面錄入界面修改頁面統(tǒng)計頁面調(diào)試情況1、測試數(shù)據(jù)對功能1(密碼系統(tǒng)測試)的測試:先注冊賬號密碼分別為:1,1,然后退出程序進(jìn)行登錄測試。輸入一組錯誤賬號密碼系統(tǒng)顯示“輸入的賬號或密碼有誤,請重新輸入!”。在輸入正確密碼,系統(tǒng)顯示“登陸成功”并進(jìn)入主界面。對功能2(錄入學(xué)生信息)的測試:按照先后順序分別輸入學(xué)生信息:學(xué)號姓名班級宿舍號性別年齡專業(yè)03091002張三090113#401男20通信工程03091001李四090213#401男20計算機(jī)對功能3(添加學(xué)生信息)的測試:按照先后順序分別輸入學(xué)生信息:學(xué)號姓名班級宿舍號性別年齡專業(yè)03091004王紅090114#401女20通信工程03091003李娜090214#401女20計算機(jī)對功能4(修改學(xué)生信息)的測試:輸入要修改學(xué)生的姓名:王五,系統(tǒng)顯示“該學(xué)生信息不存在”。輸入修改學(xué)生姓名:張三,系統(tǒng)顯示出該學(xué)生信息。選擇修改學(xué)號為:03091005,系統(tǒng)顯示出修改后的學(xué)生信息。對功能5(刪除學(xué)生信息)的測試:輸入要刪除學(xué)生的學(xué)號:03091001,系統(tǒng)顯示“該學(xué)生信息不存在”。輸入要刪除的學(xué)生的學(xué)號:03091005,系統(tǒng)顯示出該學(xué)生信息。選擇刪除該學(xué)生信息。對功能6(查詢學(xué)生信息)的測試:查詢宿舍號為14#401的信息,系統(tǒng)顯示為:學(xué)號姓名班級宿舍號性別年齡專業(yè)03091003李娜090214#401女20計算機(jī)03091004王紅090114#401女20通信工程對功能7(統(tǒng)計學(xué)生信息)的測試:選擇按學(xué)號統(tǒng)計,系統(tǒng)顯示為:學(xué)號姓名班級宿舍號性別年齡專業(yè)03091002張三090113#401男20通信工程03091003李娜090214#401女20計算機(jī)03091004王紅090114#401女20通信工程學(xué)生總?cè)藬?shù)3人,其中男生1人,女生2人。對功能8(退出系統(tǒng))的測試:選擇退出系統(tǒng),程序關(guān)閉。5總結(jié)5.1收獲與體會通過這次的課程設(shè)計,讓我們學(xué)到了很多在書本上無法學(xué)到的東西。也讓我們加深理解了實踐和理論的區(qū)別,這一次的具體實踐更讓我們發(fā)現(xiàn)了很多的不足之處,當(dāng)那些以往沒有注意到的知識漏洞以及操作經(jīng)驗的缺乏這樣徹底的展現(xiàn)在我們面前時,我們才認(rèn)識到學(xué)好計算機(jī)要重視實踐操作,不僅僅是學(xué)習(xí)數(shù)據(jù)結(jié)構(gòu),其它的計算機(jī)方面的知識都要重在實踐,讀萬卷書,不如行萬里路。一直以來我們都把重心放在書本上以及那些抽象的知識點(diǎn)概念上面,而因為這次的課程設(shè)計,我們翻閱了很多書籍以及查閱了大量的資料,也讓我們懂得如何將理論和實踐相統(tǒng)一,也試著從各個角度去分析一個系統(tǒng)軟件所需要具備的各種功能以及我們該如何運(yùn)用所學(xué)的知識和技巧去實現(xiàn)它。在這次課程設(shè)計中,我們體會到要想開發(fā)應(yīng)該系統(tǒng)軟件其實不僅需要相當(dāng)?shù)膶I(yè)技術(shù)知識,還要有相當(dāng)嚴(yán)謹(jǐn)縝密的思維能力,盡量減少系統(tǒng)存在各種漏洞的可能性,也許我們這一次完成的課程設(shè)計還遠(yuǎn)遠(yuǎn)不夠成熟,但我相信,我們會在今后的工作、學(xué)習(xí)中認(rèn)真總結(jié)經(jīng)驗教訓(xùn),扎扎實實的認(rèn)真思考,勤于實踐,將每一次的工作任務(wù)完成的更好!5.2不足與改進(jìn)程序有他的不足之處,比如密碼不能回顯“*”,這樣很容易造成密碼的丟失??梢栽诿艽a模塊中改為回顯“*”形式,并且可以對密碼進(jìn)行算法加密,這樣更能確保信息的安全。6參考文獻(xiàn)(1)《數(shù)據(jù)結(jié)構(gòu)課程設(shè)計案例教程》馬巧梅人民郵電出版社2012-8-1(2)《C程序設(shè)計(第三版)》,譚浩強(qiáng),清華大學(xué)出版社,2005。(3)《數(shù)據(jù)結(jié)構(gòu)》(C語言版),嚴(yán)蔚敏,清華大學(xué)出版社,2003。附無通信工程學(xué)院課程設(shè)計說明書題目信號發(fā)生器的設(shè)計課程名稱單片機(jī)原理及應(yīng)用A專業(yè)電子信息工程目錄一、課程設(shè)計目的二、課程設(shè)計任務(wù)三、課程設(shè)計要求四、課程設(shè)計思路五、課程設(shè)計軟件仿真結(jié)果截圖六、課程設(shè)計體會七、主要參考文獻(xiàn)八、附錄:源程序代碼課程設(shè)計目的:在學(xué)習(xí)《單片機(jī)原理及應(yīng)用A》課程的基礎(chǔ)上,進(jìn)一步深入理解MCS-51單片機(jī)的結(jié)構(gòu)、工作原理和應(yīng)用技術(shù),提高單片機(jī)控制系統(tǒng)設(shè)計、研發(fā)的能力;按照教學(xué)計劃的要求,利用一周時間,綜合應(yīng)用所學(xué)知識,設(shè)計具有一定功能的小型單片機(jī)控制系統(tǒng),培養(yǎng)學(xué)生一定的自學(xué)能力和獨(dú)立分析問題、解決問題的能力,要求學(xué)生能通過獨(dú)立思考、查閱工具書、參考文獻(xiàn),提出自己的設(shè)計方案,找出設(shè)計中遇到問題的解決途徑。課程設(shè)計要求:1、整個課程設(shè)計的各個環(huán)節(jié)都要自己動手。2、通過TLC5615串行D/A轉(zhuǎn)換芯片完成信號發(fā)生器設(shè)計,經(jīng)由示波器觀察信號波形;3、采用C語言編程實現(xiàn);4、其他要求參見“nKDE-51單片機(jī)實驗教學(xué)系統(tǒng)實驗指導(dǎo)書;5、基本任務(wù)為必做項目,附加任務(wù)為選做項目;6、對課程設(shè)計進(jìn)行總結(jié),撰寫課程設(shè)計說明書。三、課程設(shè)計任務(wù):1、基本任務(wù):利用nKDE-51單片機(jī)實驗教學(xué)系統(tǒng)上的硬件資源,實現(xiàn)信號發(fā)生器的功能。2、附加任務(wù):通過鍵盤(1)選擇輸出信號的波形;(2)調(diào)整幅度、頻率等參數(shù)。3、工作量要求:(1)設(shè)計的硬件電路圖與程序流程圖;(2)源程序代碼;(3)系統(tǒng)運(yùn)行結(jié)果符合課程設(shè)計要求。四、課程設(shè)計思路:TLC56151、TLC5615芯片結(jié)構(gòu):TLC5615引腳功能:DIN:串行數(shù)據(jù)輸入端OUTSCLKSCLK:串行時鐘輸入端REFinCSCS:片選端,低電平有效DINOUT:DAC模擬電壓輸出端DOUTREFin:基準(zhǔn)輸入端2、TLC5615芯片工作原理:TLC5615由16位轉(zhuǎn)換寄存器、控制邏輯、10位DAC寄存器、上電復(fù)位、DAC、外部基準(zhǔn)放大器、基準(zhǔn)電壓倍增器等部分組成。TLC5615通過固定增益為2的運(yùn)放緩沖電阻串接網(wǎng)絡(luò),把10位數(shù)字?jǐn)?shù)據(jù)轉(zhuǎn)換成模擬電壓。上電時,內(nèi)部電路吧10DAC寄存器復(fù)位至全0,其輸出具有與基準(zhǔn)輸入相同的極性。(1)數(shù)據(jù)輸入。由于DAC是12位寄存器,所以在寫入10位數(shù)據(jù)后,最低2位寫入2個“0”。(2)輸出緩沖器。輸出緩沖器具有滿電源電壓幅度輸出,它帶有短路保護(hù)并能驅(qū)動有100pF負(fù)載電容的2kΩ負(fù)載。(3)外部基準(zhǔn)。外部基準(zhǔn)電壓輸入經(jīng)過緩沖,使得DAC輸入電阻與代碼無關(guān)。因此,REFin的輸入電阻為10MΩ,輸入電容典型值為5pF,它們與輸入代碼無關(guān)。基準(zhǔn)電壓決定DAC的滿度輸出。(4)邏輯接口。邏輯輸入端可使用TTL或CMOS邏輯電平。使用滿電源電壓幅度時,CMOS邏輯可得到最小的功耗。使用TTL邏輯電平是,功耗需求增加約2倍。(5)串行時鐘和更新速率。TLC5615的最大串行時鐘頻率近似為14MHz。通常,數(shù)字更新速率受片選周期的限制。對于滿度輸入階躍跳變,10位DAC的建立時間約為12.5μs,這把更新頻率限制在80KHz。當(dāng)片選信號為低電平時,輸入數(shù)據(jù)讀入16bit移位寄存器。SCLK輸入的上升沿把數(shù)據(jù)移入輸入寄存器,接著,CS的上升沿把數(shù)據(jù)傳送至DAC寄存器,當(dāng)CS為高電平時,輸入的數(shù)據(jù)不能由時鐘同步送入輸入寄存器。所有CS的跳變應(yīng)發(fā)生在SCLK輸入為低電平時。DIN只需要輸入12位數(shù)據(jù),DIN輸入的12位數(shù)據(jù)中,前10位為TLC5615輸入的D/A轉(zhuǎn)換數(shù)據(jù),并且輸入時,高位在前,低位在后,后2位必須寫入為0的2位數(shù)值,因為TLC5615的DAC輸入鎖存器為12位寬。總流程圖:開始開始鍵盤掃描(確定是否改變頻率、幅度)鍵盤掃描(確定是否改變頻率、幅度)檢測按鍵,確定輸出波形檢測按鍵,確定輸出波形程序編譯及軟件仿真電路原理圖:元器件列表:元器件名稱所屬類型AT89C51MicroprocessorICSCRYSTAL晶振MisecllaneousCAP電容CapacitorRESPACK-8ResistorCAP電容CapacitorSWITCH按鍵Switches&relaysTLC5615C(L)DDataConvertersLM016L液晶顯示Display五、課程設(shè)計軟件仿真結(jié)果截圖:1、按下三角波鍵示波器輸出三角波,同時液晶屏上顯示“sanjiaobo”按下“鋸齒波”鍵示波器輸出三角波,同時液晶屏上顯示“juchibo”按下“方波”鍵示波器輸出三角波,同時液晶屏上顯示“fangbo”按下“正弦波”鍵示波器輸出三角波,同時液晶屏上顯示“sine”當(dāng)無任何鍵按下時示波器輸出直線,同時液晶屏上顯示“wave”6、顯示字符“三”:課程設(shè)計體會:本次課程設(shè)計我做的是信號發(fā)生器,參考相關(guān)書籍和老師給的程序,很快就把三角波、鋸齒波、方波、正弦波四種波形顯示出來了。后面就是波形顯示切換和在液晶屏上顯示對應(yīng)波形說明的問題。在老師同學(xué)和自己的努力下,在原程序上利用IF語句和SWITCH語句實現(xiàn)了波形按鍵切換功能,即想要顯示方波按下“方波”鍵即可。另外我們這組還在LCM1602液晶屏上顯示出了漢字,通過參考資料加上自己對漢字顯示原理的理解,最終在液晶屏上顯示出漢字“三”,雖然只是簡單的“三”,但是過程是相當(dāng)不容易。這次課程設(shè)計很有趣,讓我實實在在收獲了不少東西,知道了DA轉(zhuǎn)換和LCM1602顯示的原理,尤其是在LCM1602漢字的顯示原理。這次課程設(shè)計也提高了我的編程能力和同學(xué)的合作能力。主要參考文獻(xiàn):1、《nKDE51單片機(jī)實驗教學(xué)系統(tǒng)實驗指導(dǎo)書》南京郵電大學(xué),2011年2、《單片機(jī)原理與應(yīng)用及C51程序設(shè)計》(第2版),謝維成等編著,清華大學(xué)出版社,2009年3、《單片機(jī)原理及應(yīng)用》(第2版),李建忠,西安電子科技大學(xué)出版社,2008年4、《基于protues的51系列單片機(jī)設(shè)計與仿真》侯玉寶陳忠平李成群等編著,電子工業(yè)出版社八、源程序代碼:LCM1602.H#ifndefLCM1602_h#defineLCM1602_h#defineBUSYFLAG 0x80#defineBLINK 0x01#defineNOBLINK 0x00unsignedcharLCMReadState(void);voidLCMDelay(int);voidLCMWriteCmd(unsignedchar);voidLCMWriteData(unsignedchar);voidLCMClear(void);voidLCMInit(void);voidLCMGotoXY(unsignedchar,unsignedchar);voidLCMDisplayChar(unsignedchar,unsignedchar,unsignedchar);voidLCMDisplayString(unsignedchar,unsignedchar,unsignedchar*);voidLCMBlink(unsignedchar,unsignedchar,unsignedchar);#endifBOXING.H#include<reg51.h>#include<stdio.h>#include<intrins.h>#include<LCM1602.h>#defineOSC 22118400#defineBAUDRATE 9600sbit DIN=P1^4; //串行數(shù)據(jù)輸入端sbit SCK=P1^5; //串行時鐘輸入端sbit CS=P1^6; //DA片選端sbit S0 =P2^0; //三角波sbit S1 =P2^1; // 鋸齒波sbit S2 =P2^2; // 方波波sbit S3 =P2^3; // 正弦波//正弦波unsignedcharcodetype[256]={ 0x80,0x83,0x86,0x89,0x8c,0x90,0x93,0x96,0x99,0x9c,0x9f,0xa2,0xa5,0xa8,0xab,0xae,0xb1,0xb3,0xb6,0xb9,0xbc,0xbf,0xc1,0xc4,0xc7,0xc9,0xcc,0xce,0xd1,0xd3,0xd5,0xd8,0xda,0xdc,0xde,0xe0,0xe2,0xe4,0xe6,0xe8,0xea,0xeb,0xed,0xef,0xf0,0xf1,0xf3,0xf4,0xf5,0xf6,0xf8,0xf9,0xfa,0xfa,0xfb,0xfc,0xfd,0xfd,0xfe,0xfe,0xfe,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xfe,0xfe,0xfe,0xfd,0xfd,0xfc,0xfb,0xfa,0xfa,0xf9,0xf8,0xf6,0xf5,0xf4,0xf3,0xf1,0xf0,0xef,0xed,0xeb,0xea,0xe8,0xe6,0xe4,0xe2,0xe0,0xde,0xdc,0xda,0xd8,0xd5,0xd3,0xd1,0xce,0xcc,0xc9,0xc7,0xc4,0xc1,0xbf,0xbc,0xb9,0xb6,0xb3,0xb1,0xae,0xab,0xa8,0xa5,0xa2,0x9f,0x9c,0x99,0x96,0x93,0x90,0x8c,0x89,0x86,0x83,0x80,0x7d,0x7a,0x77,0x74,0x70,0x6d,0x6a,0x67,0x64,0x61,0x5e,0x5b,0x58,0x55,0x52,0x4f,0x4d,0x4a,0x47,0x44,0x41,0x3f,0x3c,0x39,0x37,0x34,0x32,0x2f,0x2d,0x2b,0x28,0x26,0x24,0x22,0x20,0x1e,0x1c,0x1a,0x18,0x16,0x15,0x13,0x11,0x10,0x0f,0x0d,0x0c,0x0b,0x0a,0x08,0x07,0x06,0x06,0x05,0x04,0x03,0x03,0x02,0x02,0x02,0x01,0x01,0x00,0x00,0x00,0x01,0x01,0x02,0x02,0x02,0x03,0x03,0x04,0x05,0x06,0x06,0x07,0x08,0x0a,0x0b,0x0c,0x0d,0x0f,0x10,0x11,0x13,0x15,0x16,0x18,0x1a,0x1c,0x1e,0x20,0x22,0x24,0x26,0x28,0x2b,0x2d,0x2f,0x32,0x34,0x37,0x39,0x3c,0x3f,0x41,0x44,0x47,0x4a,0x4d,0x4f,0x52,0x55,0x58,0x5b,0x5e,0x61,0x64,0x67,0x6a,0x6d,0x70,0x74,0x77,0x7a,0x7d};voidDAConvert(unsignedintda) //并行轉(zhuǎn)串行{ inti; da<<=2; da&=0xFFC; SCK=0; CS=0; for(i=0;i<12;i++) { if(da&0x800) DIN=1; elseDIN=0; SCK=1; SCK=0; da<<=1; } CS=1; SCK=1; DIN=1;}voidDelay(unsignedintt){unsignedinti;while(t--){for(i=0;i<100;i++);}}voidling(){ LCMClear(); LCMDisplayString(1,5,"wave"); while(1) {DAConvert(0); if(S0==0||S1==0||S2==0||S3==0)break; }}voidsanjiaobo(){ LCMClear(); LCMDisplayString(1,2,"sanjiaobo"); while(1) {unsignedinti; for(i=0;i<256;i++) {DAConvert(i);} for(i=256;i>0;i--) {DAConvert(i);} if(S0==1)break;}} voidjuchibo(){ LCMClear(); LCMDisplayString(1,2,"juchibo"); while(1) { unsignedinti; for(i=0;i<256;i++) {DAConvert(i);} if(S1==1)break;}} voidfangbo(){ LCMClear(); LCMDisplayString(1,2,"fangbo"); while(1) { DAConvert(40); Delay(50); DAConvert(0); Delay(50); if(S2==1)break;} }voidsine(){ LCMClear(); LCMDisplayString(1,5,"sine"); while(1) { unsignedchari; DAConvert(type[i]); i++; if(S3==1)break;} }voidboxing(void){ intkey=0; while(1){ if(S0==1&&S1==1&&S2==1&&S3==1)key=0; if(S0==0)key=1; if(S1==0)key=2; if(S2==0)key=3; if(S3==0)key=4; switch(key) {case0:ling(); break; case1:sanjiaobo(); break; case2:juchibo(); break; case3:fangbo(); break; case4:sine(); break; }} } LCM1602.C#include<reg51.h>#include<intrins.h>#include<LCM1602.H>#include<boxing.h>#defineBUSYFLAG 0x80#defineBLINK 0x01#defineNOBLINK 0x00#defineLCM_DB P0sbitLCM_RS =P1^0;sbitLCM_RW =P1^1;sbitLCM_E =P1^2;sbitLCM_BLC =P1^3;unsignedintdataDelayConst=140;/******************************************************************************函數(shù)名:LCMDelay功能:通過循環(huán)的方式延時參數(shù):int,表示要延時的毫秒數(shù)******************************************************************************/voidLCMDelay(intms){ unsignedinti,cnt; cnt=DelayConst*ms; for(i=0;i<cnt;i++);}/******************************************************************************函數(shù)名:LCMReadState功能:查詢LCM的忙標(biāo)志/當(dāng)前AC地址返回:BYTE,最高bit為1表示忙,為0表示閑******************************************************************************/unsignedcharLCMReadState(void){ unsignedcharstate; LCM_E=0; LCM_RS=0; LCM_RW=1; LCM_E=1; _nop_(); _nop_(); state=LCM_DB; LCM_E=0; returnstate;}/*******************************************************************************函數(shù)名:LCMClear功能:清屏*******************************************************************************/voidLCMClear(void){ LCMDelay(1); LCM_E=0; LCM_RS=0; LCM_RW=0; LCM_DB=0x01; LCM_E=1; _nop_(); _nop_(); LCM_E=0; LCMDelay(1);}/*******************************************************************************函數(shù)名:LCMWriteCmd功能:向LCM寫入控制字參數(shù):BYTE,命令字節(jié)。寫入前不判斷忙表示(因為初始化過程中不能判斷)*******************************************************************************/voidLCMWriteCmd(unsignedcharcmd){ LCMDelay(1); LCM_E=0; LCM_RS=0; LCM_RW=0; LCM_DB=cmd; LCM_E=1; _nop_(); _nop_(); LCM_E=0;}/******************************************************************************函數(shù)名:LCMWriteData功能:向LCM寫入數(shù)據(jù)參數(shù):BYTE,將要寫入的數(shù)據(jù)******************************************************************************/voidLCMWriteData(unsignedchardc){ while(LCMReadState()&BUSYFLAG); LCM_RS=1; LCM_RW=0; LCM_DB=dc; LCM_E=1; _nop_(); _nop_(); LCM_E=0;}/******************************************************************************函數(shù)名:LCMInit功能:初始化LCM參數(shù):DWORD,晶振頻率(Hz),供計算延時常數(shù)******************************************************************************/voidLCMInit(void){ LCMDelay(60); //延時60ms,等待LCM復(fù)位 LCMWriteCmd(0x38); //功能設(shè)置:8位接口,2行,5x7字符點(diǎn)陣 LCMDelay(5); //延時 LCMWriteCmd(0x38); //第二次 LCMDelay(1); //延時 LCMWriteCmd(0x38); //此后可以通過監(jiān)測忙標(biāo)志判斷指令執(zhí)行情況 while(LCMReadState()&BUSYFLAG); LCMWriteCmd(0x08); //關(guān)閉顯示 while(LCMReadState()&BUSYFLAG); LCMWriteCmd(0x01); //清屏 while(LCMReadState()&BUSYFLAG); LCMWriteCmd(0x06); //顯示地址自動增量,整體不移位 while(LCMReadState()&BUSYFLAG); LCMWriteCmd(0x0e); //開顯示,開光標(biāo),不閃爍 while(LCMReadState()&BUSYFLAG);}/******************************************************************************函數(shù)名:LCMGotoXY功能:移動光標(biāo)到X行,Y列參數(shù):BYTE,x表示行(0,1),y表示列(橫向,取值0~0x0f)******************************************************************************/voidLCMGotoXY(unsignedcharx,unsignedchary) //x:行(0~1)y:列(0~F){ unsignedcharcmd; if(x==0) { cmd=0x80|y; } else { cmd=0x80|0x40|y;//(第1行第0列為40H開始) } LCMWriteCmd(cmd); while(LCMReadState()&BUSYFLAG);}/******************************************************************************函數(shù)名:LCMDisplayString功能:從指定的位置開始顯示字符串參數(shù):x表示行(0,1),y表示列(橫向,取值0~0x0f),*str為指向?qū)⒁@示的字符串的指針******************************************************************************/voidLCMDisplayString(unsignedcharx,unsignedchary,unsignedchar*str){ unsignedcharptr; ptr=0; while(*(str+ptr)!=0) { LCMDisplayChar(x,(y+ptr),*(str+ptr)); ptr++; }}#include<reg51.h>#include<stdio.h>#defineBUSYFLAG 0x80#defineBLINK 0x01#defineNOBLINK 0x00#defineOSC 22118400unsignedcharucTH,ucTL,Ticks;//*****************************************************************************//函數(shù)名:T0ISR//功能:50ms中斷服務(wù)程序//*****************************************************************************voidT0ISR(void)interrupt1{ TH0=ucTH; TL0=ucTL; TR0=1; Ticks++; if(Ticks==20) { Ticks=0; LCM_BLC=0;

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論