第一篇:?jiǎn)纹瑱C(jī)課程設(shè)計(jì)報(bào)告LCD顯示溫度
《單片機(jī)原理與應(yīng)用》
課程設(shè)計(jì)報(bào)告
題 目:LCD數(shù)字式溫度濕度測(cè)量計(jì) 專(zhuān) 業(yè):自動(dòng)化 班 級(jí):A1332 學(xué) 號(hào):10 姓 名:曾志勇 指導(dǎo)老師:查兵
2016-06-08
目 錄
1.設(shè)計(jì)題目、要求及分工..................................1 1.1.設(shè)計(jì)要求.........................................1 1.2.分工.............................................1 2.系統(tǒng)設(shè)計(jì)方案論證與選擇................................1 3.系統(tǒng)硬件電路設(shè)計(jì)......................................1 3.1.單片機(jī)的選擇......................................1 3.2.溫度傳感器電路的設(shè)計(jì)..............................2 3.3.LCD1602顯示設(shè)計(jì)..................................3 4.系統(tǒng)軟件設(shè)計(jì)..........................................4 4.1.主程序...........................................4 4.2.讀出溫度子程序....................................6 5.系統(tǒng)仿真調(diào)試結(jié)果記錄及分析...........................11 6.總結(jié).................................................13 參考文獻(xiàn)................................................14
設(shè)計(jì)題目、要求及分工
1.1.設(shè)計(jì)要求
(1)熟悉掌握單片機(jī)的中斷,定時(shí)器及各并行口的應(yīng)用;(2)熟悉掌握單片機(jī)溫度濕度的測(cè)量方法;(3)利用溫度傳感器及單片機(jī)完成對(duì)溫度的檢測(cè);(4)掌握將檢測(cè)的溫度信號(hào)轉(zhuǎn)換為數(shù)碼管顯示的數(shù)字信號(hào);
(5)設(shè)計(jì)一個(gè)簡(jiǎn)單數(shù)字溫度計(jì),能夠測(cè)量通常環(huán)境下的溫度,能夠?qū)崿F(xiàn)零下溫度的測(cè)量,能夠測(cè)量小數(shù),精度為0.01度。
1.2.分工
經(jīng)過(guò)我和隊(duì)友的商討,為了能最大發(fā)揮各自的長(zhǎng)處。我主要負(fù)責(zé)程序的編寫(xiě)與單片機(jī)的調(diào)試。他主要負(fù)責(zé)一些相關(guān)資料文獻(xiàn)的查找與課程設(shè)計(jì)報(bào)告。
1.系統(tǒng)設(shè)計(jì)方案論證與選擇
在日常生活和生產(chǎn)中,我們經(jīng)常要測(cè)量環(huán)境的溫度濕度,傳統(tǒng)的測(cè)量方式采用水銀溫度計(jì)和干濕球濕度計(jì)查算法,存在著誤差大,操作使用不便等問(wèn)題,采用工業(yè)級(jí)測(cè)量?jī)x表價(jià)格昂貴。采用AT89C51和溫度傳感器等構(gòu)成的LCD數(shù)字式溫度濕度測(cè)量計(jì)精度高且價(jià)格便宜。
由于本設(shè)計(jì)是測(cè)溫電路,可以使用一只溫度傳感器DS18B20,此傳感器,可以很容易直接讀取被測(cè)溫度值,進(jìn)行A/D轉(zhuǎn)換,將數(shù)據(jù)傳入80C51單片機(jī)中,單片機(jī)處理后,通過(guò)LED顯示出當(dāng)前實(shí)測(cè)溫度。
2.系統(tǒng)硬件電路設(shè)計(jì)
2.1.單片機(jī)的選擇
單片80C51具有低電壓供電和體積小等特點(diǎn),四個(gè)端口只需要兩個(gè)口就能滿足電路系統(tǒng)的設(shè)計(jì)需要,很適合便攜手持式產(chǎn)品的設(shè)計(jì)使用系統(tǒng)。
本次設(shè)計(jì)需要注意的幾個(gè)端口: P0口(39—32):是一組8位漏極開(kāi)路行雙向I/O口,也既地址/數(shù)據(jù)總線復(fù)用口。可作為輸出口使用時(shí),每位可吸收電流的方式驅(qū)動(dòng)8個(gè)TTL邏輯電路,對(duì)端口寫(xiě)“1”可作為高阻抗輸入輸入端用。在訪問(wèn)外部數(shù)據(jù)存儲(chǔ)器時(shí),這組口線分時(shí)轉(zhuǎn)換地址(低8位)和數(shù)據(jù)總線復(fù)用,在訪問(wèn)期間激活內(nèi)部上拉電阻。在Flash編程時(shí),PO口接收指令字節(jié),而在程序校驗(yàn)時(shí),輸出指令字節(jié),校驗(yàn)時(shí),要求接上拉電阻。P3口(10—17):是一組帶有內(nèi)部上拉電阻的8位雙向I/O口,P1的輸入緩沖級(jí)可驅(qū)動(dòng)(吸收或輸出電流)4個(gè)TTL邏輯門(mén)電路。對(duì)P3口寫(xiě)入“1”時(shí),它們被內(nèi)部上拉電阻拉高并可作為輸出端口。作輸出端口時(shí),被外部拉低的P3口將用上拉電阻輸出電流。
2.2.溫度傳感器電路的設(shè)計(jì)
DS18B20溫度傳感器是美國(guó)DALLAS半導(dǎo)體公司最新推出的一種改進(jìn)型智能溫度傳感器,與傳統(tǒng)的熱敏電阻等測(cè)溫元件相比,它能直接讀出被測(cè)溫度,并且可根據(jù)實(shí)際要求通過(guò)簡(jiǎn)單的編程實(shí)現(xiàn)9~12位的數(shù)字值讀數(shù)方式。
64位ROM的結(jié)構(gòu)開(kāi)始8位是產(chǎn)品類(lèi)型的編號(hào),接著是每個(gè)器件的惟一的序號(hào),共有48位,最后8位是前面56位的CRC檢驗(yàn)碼,這也是多個(gè)DS18B20可以采用一線進(jìn)行通信的原因。溫度報(bào)警觸發(fā)器TH和TL,可通過(guò)軟件寫(xiě)入戶報(bào)警上下限。DS18B20溫度傳感器的內(nèi)部存儲(chǔ)器還包括一個(gè)高速暫存RAM和一個(gè)非易失性的可電擦除的EERAM。高速暫存RAM的結(jié)構(gòu)為8字節(jié)的存儲(chǔ)器,結(jié)構(gòu)如圖2.3所示。頭2個(gè)字節(jié)包含測(cè)得的溫度信息,第3和第4字節(jié)TH和TL的拷貝,是易失的,每次上電復(fù)位時(shí)被刷新。第5個(gè)字節(jié),為配置寄存器,它的內(nèi)容用于確定溫度值的數(shù)字轉(zhuǎn)換分辨率。DS18B20工作時(shí)寄存器中的分辨率轉(zhuǎn)換為相應(yīng)精度的溫度數(shù)值。該字節(jié)各位的定義:低5位一直為1,TM是工作模式位,用于設(shè)置DS18B20在工作模式還是在測(cè)試模式,DS18B20出廠時(shí)該位被設(shè)置為0,用戶要去改動(dòng),R1和R0決定溫度轉(zhuǎn)換的精度位數(shù),來(lái)設(shè)置分辨率S18B20溫度轉(zhuǎn)換的時(shí)間比較長(zhǎng),而且分辨率越高,所需要的溫度數(shù)據(jù)轉(zhuǎn)換時(shí)間越長(zhǎng)。因此,在實(shí)際應(yīng)用中要將分辨率和轉(zhuǎn)換時(shí)間權(quán)衡考慮。溫度傳感器18B20匯編程序,采用器件默認(rèn)的12位轉(zhuǎn)化,最大轉(zhuǎn)化時(shí)間750微秒,可以將檢測(cè)到的溫度直接顯示到80C51的兩個(gè)數(shù)碼管上。
高速暫存RAM的第6、7、8字節(jié)保留未用,表現(xiàn)為全邏輯1。第9字節(jié)讀出前面所有8字節(jié)的CRC碼,可用來(lái)檢驗(yàn)數(shù)據(jù),從而保證通信數(shù)據(jù)的正確性。
當(dāng)DS18B20接收到溫度轉(zhuǎn)換命令后,開(kāi)始啟動(dòng)轉(zhuǎn)換。轉(zhuǎn)換完成后的溫度值就以16位帶符號(hào)擴(kuò)展的二進(jìn)制補(bǔ)碼形式存儲(chǔ)在高速暫存存儲(chǔ)器的第1、2字節(jié)。單 片機(jī)可以通過(guò)單線接口讀出該數(shù)據(jù),讀數(shù)據(jù)時(shí)低位在先,高位在后,數(shù)據(jù)格式以0.0625℃/LSB式表示。
當(dāng)符號(hào)位S=0時(shí),表示測(cè)得的溫度值為正值,可以直接將二進(jìn)制位轉(zhuǎn)換為十進(jìn)制;當(dāng)符號(hào)位S=1時(shí),表示測(cè)得的溫度值為負(fù)值,要先將補(bǔ)碼變成原碼,再計(jì)算十進(jìn)制數(shù)值。表2是一部分溫度值對(duì)應(yīng)的二進(jìn)制溫度數(shù)據(jù)。
DS18B20完成溫度轉(zhuǎn)換后,就把測(cè)得的溫度值與RAM中的TH、TL字節(jié)內(nèi)容作比較。若T>TH或T<TL,則將該器件內(nèi)的報(bào)警標(biāo)志位置位,并對(duì)主機(jī)發(fā)出的報(bào)警搜索命令做出響應(yīng)。因此,可用多只DS18B20同時(shí)測(cè)量溫度并進(jìn)行報(bào)警搜索。
在64位ROM的最高有效字節(jié)中存儲(chǔ)有循環(huán)冗余檢驗(yàn)碼(CRC)。主機(jī)ROM的前56位來(lái)計(jì)算CRC值,并和存入DS18B20的CRC值作比較,以判斷主機(jī)收到的ROM數(shù)據(jù)是否正確。
另外,由于DS18B20單線通信功能是分時(shí)完成的,它有嚴(yán)格的時(shí)隙概念,因此讀寫(xiě)時(shí)序很重要。系統(tǒng)對(duì)DS18B20的各種操作按協(xié)議進(jìn)行。操作協(xié)議為:初使化DS18B20(發(fā)復(fù)位脈沖)→發(fā)ROM功能命令→發(fā)存儲(chǔ)器操作命令→處理數(shù)據(jù)。
圖 2-1 溫度傳感器電路
2.3.LCD1602顯示設(shè)計(jì)
圖 2-2 LCD顯示電路圖
LCD1602顯示流程:
圖3-3 流程圖
3.系統(tǒng)軟件設(shè)計(jì)
3.1.主程序
主程序的主要功能是負(fù)責(zé)溫度的實(shí)時(shí)顯示、讀出并處理DS18B20的測(cè)量溫度值。溫度測(cè)量每1s進(jìn)行一次。主程序流程圖如圖4.1所示:
#include
//初始化LCD1602
//寫(xiě)地址 80表示初始地址 LcdWriteCom(0x88);LcdWriteData('C');while(1){ LcdDisplay(Ds18b20ReadTemp());Delay1ms(1000);//1s鐘刷一次 // } }
/* 函數(shù)名 : LcdDisplay()* 函數(shù)功能
: LCD顯示讀取到溫度/ void LcdDisplay(int temp)//lcd顯示
{ unsigned char datas[] = {0, 0, 0, 0, 0};//定義數(shù)組
float tp;if(temp< 0)
//當(dāng)溫度值為負(fù)數(shù)
{
LcdWriteCom(0x80);
//寫(xiě)地址 80表示初始地址 LcdWriteData('-');//顯示負(fù)
temp=temp-1;
temp=~temp;
tp=temp;
temp=tp*0.0625*100+0.5;} else {
LcdWriteCom(0x80);
LcdWriteData('+');
tp=temp;
temp=tp*0.0625*100+0.5;
} datas[0] = temp / 10000;datas[1] = temp % 10000 / 1000;datas[2] = temp % 1000 / 100;datas[3] = temp % 100 / 10;datas[4] = temp % 10;LcdWriteCom(0x82);
//寫(xiě)地址 80表示初始地址
LcdWriteData('0'+datas[0]);//百位 LcdWriteCom(0x83);
//寫(xiě)地址 80表示初始地址
LcdWriteData('0'+datas[1]);//十位 LcdWriteCom(0x84);
//寫(xiě)地址 80表示初始地址
LcdWriteData('0'+datas[2]);//個(gè)位 LcdWriteCom(0x85);
//寫(xiě)地址 80表示初始地址 //顯示 ‘.’
//寫(xiě)地址 80表示初始地址 LcdWriteData('.');LcdWriteCom(0x86);
LcdWriteData('0'+datas[3]);//顯示小數(shù)點(diǎn) LcdWriteCom(0x87);
//寫(xiě)地址 80表示初始地址
} LcdWriteData('0'+datas[4]);//顯示小數(shù)點(diǎn)
圖 3-1主程序流程圖
3.2.讀出溫度子程序
讀出溫度子程序的主要功能是讀出RAM中的9字節(jié)。在讀出時(shí)必須進(jìn)行CRC 校驗(yàn),校驗(yàn)有錯(cuò)時(shí)不能進(jìn)行溫度數(shù)據(jù)的改寫(xiě)。讀出溫度子程序流程圖如下圖所示:
#include“temp.h” void Delay1ms(uint y){ uint x;
} uchar Ds18b20Init(){
uchar i;DSPORT = 0;i = 70;
//將總線拉低480us~960us for(;y>0;y--){ for(x=110;x>0;x--);} while(i--);//延時(shí)642us DSPORT = 1;
//然后拉高總線,如果DS18B20做出反應(yīng)會(huì)將在15us~60us后總線拉低
} void Ds18b20WriteByte(uchar dat)i = 0;while(DSPORT)//等待DS18B20拉低總線 {
} return 1;//初始化成功 i++;if(i>5)//等待>5MS { } Delay1ms(1);return 0;//初始化失敗 { uint i, j;for(j=0;j<8;j++)
{
DSPORT = 0;i++;DSPORT = dat & 0x01;//然后寫(xiě)入一個(gè)數(shù)據(jù),從最低位開(kāi)始 i=6;while(i--);//延時(shí)68us,持續(xù)時(shí)間最少60us DSPORT = 1;
//然后釋放總線,至少1us給總線恢復(fù)時(shí)間才能接 //每寫(xiě)入一位數(shù)據(jù)之前先把總線拉低1us 著寫(xiě)入第二個(gè)數(shù)值
} uchar Ds18b20ReadByte(){
uchar byte, bi;uint i, j;for(j=8;j>0;j--){
DSPORT = 0;//先將總線拉低1us i++;DSPORT = 1;//然后釋放總線 i++;i++;//延時(shí)6us等待數(shù)據(jù)穩(wěn)定
bi = DSPORT;//讀取數(shù)據(jù),從最低位開(kāi)始讀取
/*將byte左移一位,然后與上右移7位后的bi,注意移動(dòng)之后移掉 } dat >>= 1;那位補(bǔ)0。*/ byte =(byte >> 1)|(bi << 7);
} i = 4;//讀取完之后等待48us再接著讀取下一個(gè)數(shù)
while(i--);
}
return byte;void Ds18b20ChangTemp(){
Ds18b20Init();Delay1ms(1);Ds18b20WriteByte(0xcc);
//跳過(guò)ROM操作命令
Ds18b20WriteByte(0x44);//溫度轉(zhuǎn)換命令
//等待轉(zhuǎn)換成功,而如果你是一直刷著的話,就不// Delay1ms(100);用這個(gè)延時(shí)了 } void Ds18b20ReadTempCom(){ Ds18b20Init();
} int Ds18b20ReadTemp(){ int temp = 0;
命令
tml = Ds18b20ReadByte();tmh = Ds18b20ReadByte();temp = tmh;temp <<= 8;Delay1ms(1);Ds18b20WriteByte(0xcc);//跳過(guò)ROM操作命令 Ds18b20WriteByte(0xbe);//發(fā)送讀取溫度命令
uchar tmh, tml;Ds18b20ChangTemp();Ds18b20ReadTempCom();
//先寫(xiě)入轉(zhuǎn)換命令
//然后等待轉(zhuǎn)換完后發(fā)送讀取溫度
//讀取溫度值共16位,先讀低字節(jié) //再讀高字節(jié)
} temp |= tml;return temp;讀出溫度子程序 讀出溫度子程序的主要功能是讀出RAM中的9字節(jié)。在讀出時(shí)須進(jìn)行CRC校驗(yàn),校驗(yàn)有錯(cuò)時(shí)不進(jìn)行溫度數(shù)據(jù)的改寫(xiě)。得出溫度子程序流程圖如下圖所示。
圖 3-2
溫度轉(zhuǎn)換命令子程序 溫度轉(zhuǎn)換命令子程序主要是發(fā)溫度轉(zhuǎn)換開(kāi)始命令。當(dāng)采用12位分辨率時(shí),轉(zhuǎn)換時(shí)間約為750ms。在本程序設(shè)計(jì)中,采用1s顯示程序延時(shí)法等待轉(zhuǎn)換的完成。溫度轉(zhuǎn)換命令子程序流程圖如下圖所示。
圖 3-2
4.系統(tǒng)仿真調(diào)試結(jié)果記錄及分析
硬件調(diào)試比較簡(jiǎn)單,首先檢查電感的焊接是否正確,然后可用萬(wàn)用表測(cè)試或通電檢測(cè)。軟件調(diào)試可以先編寫(xiě)顯示程序并進(jìn)行硬件的正確性檢驗(yàn),然后分別進(jìn)行主程序、讀出溫度子程序、溫度轉(zhuǎn)換命令子程序、計(jì)算溫度子程序和現(xiàn)實(shí)數(shù)據(jù)刷新子程序等的編程及調(diào)試 由于DS18B20與單片機(jī)采用串行數(shù)據(jù)傳送,因此,對(duì)DS18B20進(jìn)行讀/寫(xiě)編程時(shí)必須嚴(yán)格地保證讀/寫(xiě)時(shí)序;否則將無(wú)法讀取測(cè)量結(jié)果。
電路Isis仿真測(cè)試
燒寫(xiě)程序至單片機(jī):
液晶顯示室溫為+28.06度 用手觸摸DS18B20,發(fā)現(xiàn)溫度上升為+32.75度,證明溫度傳感正常工作。
5.總結(jié)
這次課程設(shè)計(jì),主要是以STC89C51單片機(jī)為核心的,對(duì)溫度的檢測(cè)與顯示進(jìn)行了簡(jiǎn)單的設(shè)計(jì)與闡述。因沒(méi)有濕度傳感器模塊,所以未進(jìn)行濕度檢測(cè)。本次課程設(shè)計(jì)可以說(shuō)是軟硬結(jié)合,又以硬件為主。當(dāng)今科技發(fā)展迅速,單片機(jī)開(kāi)發(fā)有著光明的前景。由于單片機(jī)經(jīng)濟(jì)實(shí)用、開(kāi)發(fā)簡(jiǎn)便等特點(diǎn)依然在工業(yè)控制、家電等領(lǐng)域占據(jù)了廣泛的市場(chǎng)。所以我選擇這樣的設(shè)計(jì)課題,并且能通過(guò)此次設(shè)計(jì)來(lái)提高自己軟件編制和硬件電路設(shè)計(jì)的能力。在我完成這次課程設(shè)計(jì)的過(guò)程中,當(dāng)看到自己將專(zhuān)業(yè)知識(shí)用于解決實(shí)際的問(wèn)題時(shí),那份成就感和喜悅感是難以形容的。在這次實(shí)際的編程以及調(diào)試程序過(guò)程中,我發(fā)現(xiàn)自己學(xué)很多課本以外的東西。光靠自己在書(shū)本上所學(xué)過(guò)的這點(diǎn)知識(shí)是遠(yuǎn)遠(yuǎn)不夠的,真正地認(rèn)識(shí)到了工作就是學(xué)習(xí)的道理。尤其是對(duì)于編程來(lái)說(shuō),需要硬件的功底,也需要軟件的能力。當(dāng)程序有一點(diǎn)點(diǎn)錯(cuò)誤時(shí),將使整個(gè)程序無(wú)效,需要自己靜下心來(lái)發(fā)現(xiàn)錯(cuò)誤,改正錯(cuò)誤,一次又一次得進(jìn)行調(diào)試,鍛煉了沉著踏實(shí)的心態(tài)。
通過(guò)這次對(duì)數(shù)字溫度計(jì)的設(shè)計(jì)與制作,讓我們了解了設(shè)計(jì)電路的程序,也讓我們了解了關(guān)于數(shù)字溫度計(jì)的原理與設(shè)計(jì)理念,要設(shè)計(jì)一個(gè)電路總要先用仿真,仿真成功之后才實(shí)際接線的。
但是最后的成品卻不一定與仿真時(shí)完全一樣,因?yàn)椋趯?shí)際接線中有著各種各樣的條件制約著。并且,在仿真中無(wú)法成功的電路接法,在實(shí)際中因?yàn)樾酒旧淼奶匦远軌虺晒ΑK裕谠O(shè)計(jì)時(shí)應(yīng)考慮兩者的差異,從中找出最適合的設(shè)計(jì)方法。
通過(guò)這次學(xué)習(xí),讓我們對(duì)各種電路都有了大概的了解,所以說(shuō),坐而言不如立而行,對(duì)于這些電路還是應(yīng)該自己動(dòng)手實(shí)際操作才會(huì)有深刻理解。從這次的課程設(shè)計(jì)中,我真正的意識(shí)到,在以后的學(xué)習(xí)中,要理論聯(lián)系實(shí)際,把我們所學(xué)的理論知識(shí)應(yīng)用到實(shí)際當(dāng)中,學(xué)習(xí)單機(jī)片機(jī)更是如此,程序只有在經(jīng)常寫(xiě)和讀的過(guò)程中才能提高,這就是我在這次課程設(shè)計(jì)中的最大收獲。這次課程設(shè)計(jì)對(duì)我來(lái)說(shuō)是一次比較全面的、富有創(chuàng)造性和探索性的鍛煉,令我深有感觸,對(duì)于我今后的學(xué)習(xí)、工作和生活都將是受益非淺。
參考文獻(xiàn)
(1)江世明.單片機(jī)原理與應(yīng)用.上海交通大學(xué)出版社.2013;(2)朱清慧.電子線路設(shè)計(jì)、制版與仿真.清華大學(xué)出版社.2011.6;
(3)黃同成.程序設(shè)計(jì)基礎(chǔ)與教程(C語(yǔ)言).湖南人民出版社.2011.12;
(4)王東峰等.單片機(jī)C語(yǔ)言應(yīng)用100例[M].北京電子工業(yè)出版社,2009;
(5)陳海宴.51單片機(jī)原理及應(yīng)用[M].北京航空航天大學(xué)出版社.2010;
(6)胡漢才.單片機(jī)原理及接口技術(shù)[M].北京清華大學(xué)出版社.1996;
(7)高稚允,高岳.光電檢測(cè)技術(shù)[M].北京國(guó)防工業(yè)出版社.1983;
第二篇:?jiǎn)纹瑱C(jī)數(shù)碼管顯示課程設(shè)計(jì)
單片機(jī)數(shù)碼管顯示課程設(shè)計(jì)
目錄引言...............設(shè)計(jì)任務(wù)和要求.............1
2.1 設(shè)計(jì)目的............1
2.2 設(shè)計(jì)意義............1總原理圖及主要模塊的流程圖......1
3.1 總原理圖及元器件清單..............1
3.2 主要流程圖..........1性能測(cè)試與分析.............35 結(jié)論與心得..........4致謝...........4
參考文獻(xiàn).............4
單片機(jī)數(shù)碼管顯示課程設(shè)計(jì)引言
從上世紀(jì)70年代第一批單片機(jī)問(wèn)世,短短二三十年時(shí)間,單片機(jī)技術(shù)已經(jīng)成為計(jì)算機(jī)技術(shù)的一個(gè)重要分支,廣泛運(yùn)用到工業(yè)控制、儀器、儀表、消費(fèi)產(chǎn)品,汽車(chē)、辦公自動(dòng)化和通信等領(lǐng)域。因此,單片機(jī)技術(shù)已經(jīng)成為電子、測(cè)控、自動(dòng)化、通信等許多工科專(zhuān)業(yè)學(xué)生的必備技能。
我用AT89C51芯片來(lái)設(shè)計(jì)一個(gè)簡(jiǎn)單的數(shù)碼管顯示。此設(shè)計(jì)給出了源代碼,通過(guò)仿真測(cè)試,其性能指標(biāo)達(dá)到了設(shè)計(jì)要求。
關(guān)鍵詞:?jiǎn)纹瑱C(jī),AT89C51,數(shù)碼管設(shè)計(jì)任務(wù)和要求
2.1 設(shè)計(jì)目的1.學(xué)習(xí)基本理論在實(shí)踐中綜合運(yùn)用的初步經(jīng)驗(yàn),掌握模擬電路設(shè)計(jì)的基本方法、設(shè)計(jì)步驟,培養(yǎng)綜合設(shè)計(jì)與調(diào)試能力。
2.了解AT89C51這個(gè)芯片的使用和性能指標(biāo)測(cè)試方法。
3.培養(yǎng)實(shí)踐技能,提高分析和解決實(shí)際問(wèn)題的能力。
2.2 設(shè)計(jì)意義
為了更好地熟悉和掌握單片機(jī)的基本功能和編程,掌握數(shù)碼管動(dòng)態(tài)掃描顯示原理及實(shí)現(xiàn)方法。自我動(dòng)態(tài)掃描顯示電路驅(qū)動(dòng)程序的編寫(xiě)方法。通過(guò)課程設(shè)計(jì),達(dá)到理論與實(shí)際應(yīng)用相結(jié)合,提高學(xué)生對(duì)微機(jī)硬件結(jié)構(gòu)的軟件設(shè)計(jì)方法的理解,使學(xué)生能夠根據(jù)實(shí)際應(yīng)用,初步實(shí)現(xiàn)硬件及軟件的設(shè)計(jì),對(duì)硬件開(kāi)發(fā)有更深層的認(rèn)識(shí),為今后打軟硬件開(kāi)發(fā),打下堅(jiān)實(shí)的基礎(chǔ)。總原理圖及及主要模塊的流程圖
3.1 總原理圖及元器件清單
(1)我用Proteus 7 professional來(lái)畫(huà)出我設(shè)計(jì)的總原理圖,如圖3-1。
如圖3-1
此電路圖就用到AT89C51這個(gè)芯片,和一個(gè)數(shù)碼管。
3.2 主要流程圖(四號(hào)宋體加粗)
1.主程序的流程圖
圖3.2-1主流程圖
2.子程序的流程圖
圖3.2-2子流程圖性能測(cè)試與分析
主程序和子程序都存放在AT89C51單片機(jī)中。主程序的功能是:顯示數(shù)字。子程序的功能有:延時(shí)。程序代碼:
ORG 0000H;初始化
LJMP START;轉(zhuǎn)入主程序
ORG 0010H;初始化
START:
CLR P2.7;P2.7←00H
MOVR0,#00H;R0←00H
MOV R2,#10;R2←10
MAIN:
MOV DPTR,#TAB;DPTR←TAB
MOV A,R0;A←(RO)
MOVC A,@A+DPTR;A←((A)+(DPTR))
MOV P0,A;P0←(A)
LCALL DELAY;調(diào)用延時(shí)程序
INC R0;RO←(R0)+1
DJNZR2,MAIN;判斷
JMP START;循環(huán)
DELAY:;延時(shí)程序
MOV R3,#11
D1: MOV R4,#100
D2: MOV R5,#100
DJNZ R5,$
DJNZ R4,D2
DJNZ R3,D1
RET
TAB:
DB 00101000B;0
DB 11101011B;1
DB 00110010B;2
DB 10100010B;3
DB 11100001B;4
DB 10100100B;5
DB 00100100B;6
DB 11101010B;7
DB 00100000B;8
DB 10100000B;9
END
我用Proteus 7 professional 軟件來(lái)測(cè)試我設(shè)計(jì)的電路圖。當(dāng)運(yùn)行時(shí),數(shù)碼管顯示0。如圖4-1。
圖4-1
當(dāng)221ms后,數(shù)碼管顯示1。如圖
4-2.圖4-2
我的程序是一個(gè)循環(huán)的,一直到顯示9,之后又重新開(kāi)始顯示0。在此不一一列出來(lái)。
為了能在實(shí)際在到應(yīng)用,我用開(kāi)發(fā)板來(lái)驗(yàn)證我所設(shè)計(jì)的電路圖。其結(jié)果如下:
圖4-3顯示1
圖4-4顯示8
從仿真的結(jié)果可以看出,我的設(shè)計(jì)是滿足我設(shè)計(jì)的要求的。結(jié)論與心得
通過(guò)單片機(jī)課程設(shè)計(jì),我不僅加深了對(duì)單片機(jī)理論的理解,將理論很好地應(yīng)用到實(shí)際當(dāng)中去,而且我還學(xué)會(huì)了如何去培養(yǎng)我們的創(chuàng)新精神,從而不斷地戰(zhàn)勝自己,超越自己。創(chuàng)新,是要我們學(xué)會(huì)將理論很好地聯(lián)系實(shí)際,并不斷地去開(kāi)動(dòng)自己的大腦,從為人類(lèi)造福的意愿出發(fā),做自己力所能及的,別人卻沒(méi)想到的事。使之不斷地戰(zhàn)勝別人,超越前人。同時(shí),更重要的是,我在這一設(shè)計(jì)過(guò)程中,學(xué)會(huì)了堅(jiān)持不懈,不輕易言棄。設(shè)計(jì)過(guò)程,也好比是我們?nèi)祟?lèi)成長(zhǎng)的歷程,常有一些不如意,也許這就是在對(duì)我們提出了挑戰(zhàn),勇敢過(guò),也戰(zhàn)勝了,勝利的鐘聲也就一定會(huì)為我們而敲響。
這個(gè)設(shè)計(jì)過(guò)程中,我遇到過(guò)許多次失敗的考驗(yàn),就比如,我在軟件上仿真軟件上能實(shí)現(xiàn)其功能,但是把它寫(xiě)進(jìn)開(kāi)發(fā)板就無(wú)法運(yùn)行,我不停地找原因。最后我找到了答案,這樣我明白,做設(shè)計(jì)不但是軟件可以運(yùn)行,用在硬件上一樣是那么重要的。我做的這個(gè)設(shè)計(jì)主要是用AT89C51這個(gè)芯片來(lái)實(shí)現(xiàn),這個(gè)芯片具有很多優(yōu)點(diǎn),程序簡(jiǎn)單易讀,結(jié)構(gòu)清楚,最重要的是成本低。很適合我們學(xué)生用來(lái)學(xué)生。在做這個(gè)設(shè)計(jì)的過(guò)程中,我也了解到了自己的不足,在日后的學(xué)習(xí)中,我還需加倍努力學(xué)習(xí)。
參考文獻(xiàn))
[1]梁炳東.單片機(jī)原理與應(yīng)用。北京:人民郵電出版社,2009
[2]
[3]http://wenku.baidu.com/album/view/702db2c7aa00b52acfc7cae7
致謝(小三號(hào) 宋體 加粗)
在此次課程設(shè)計(jì)中,我遇到不懂的問(wèn)題,老師和同學(xué)都幫我,讓我把問(wèn)題順利地得到解決,最后完成此次課程設(shè)計(jì)報(bào)告。從中我學(xué)到了很多東西,在此,謝謝我的老師和同學(xué),感謝你們?cè)谖矣龅诫y題的時(shí)候幫我解答。
第三篇:LCD電子鐘程序(廣工單片機(jī)課程設(shè)計(jì))
#include
#define uchar unsigned char
#define uint unsigned int
#define KEY_IO P3
#define LCD_IO P0
sbit LCD_RS = P2^0;
sbit LCD_RW = P2^1;
sbit LCD_EN = P2^2;
sbit SPK = P1^2;
sbit LED = P2^4;
sbit KEY_0 = P3^7;
sbit KEY_1 = P3^6;
sbit KEY_2 = P3^5;
sbit KEY_3 = P3^4;
bit new_s, modify = 0;
char t0, sec = 0, min = 0, hour = 0;
char code LCD_line1[] = “I LOVE U”;
char code LCD_line2[] = “Timer: 00:00:00 ”;char Timer_buf[] = “00:00:00”;
char a,b,c,k = 0;
//--------------------void delay(uint z)
{
uintx, y;
for(x = z;x > 0;x--)
for(y = 100;y > 0;y--);
}//--------------------void W_LCD_Com(uchar com)//寫(xiě)指令 {
LCD_RS = 0;
LCD_IO = com;// LCD_RS和R/W都為低電平時(shí),寫(xiě)入指令
LCD_EN = 1;delay(5);LCD_EN = 0;//用EN輸入一個(gè)高脈沖 }
//--------------------void W_LCD_Dat(uchar dat)//寫(xiě)數(shù)據(jù)
{LCD_RS = 1;LCD_IO = dat;// LCD_RS為高、R/W為低時(shí),寫(xiě)入數(shù)據(jù)LCD_EN = 1;delay(5);LCD_EN = 0;//用EN輸入一個(gè)高脈沖 }
//--------------------void W_LCD_STR(uchar *s)//寫(xiě)字符串 {while(*s)W_LCD_Dat(*s++);}
//--------------------
void W_BUFF(void)//填寫(xiě)顯示緩沖區(qū)
{Timer_buf[7] = sec % 10 + 48;Timer_buf[6] = sec / 10 + 48;Timer_buf[4] = min % 10 + 48;Timer_buf[3] = min / 10 + 48;Timer_buf[1] = hour % 10 + 48;Timer_buf[0] = hour / 10 + 48;W_LCD_STR(Timer_buf);}
//--------------------
uchar read_key(void){ucharx1, x2;KEY_IO = 255;x1 = KEY_IO;if(x1!= 255){delay(100);x2 = KEY_IO;if(x1!= x2)return 255;while(x2!= 255)x2 = KEY_IO;if else if(x1 == 0xbf)return 1;else if(x1 == 0xdf)return 2;else if(x1 == 0xef)return 3;else if(x1 == 0xf7)return 4;}return 255;} //--------------------
void Init(){LCD_RW = 0;W_LCD_Com(0x38);delay(50);W_LCD_Com(0x0c);W_LCD_Com(0x06);W_LCD_Com(0x01);W_LCD_Com(0x80);W_LCD_STR(LCD_line1);W_LCD_STR(LCD_line2);
TMOD = 0x01;//T0定時(shí)方式1TH0 = 0x4c;TR0 = 1;//啟動(dòng)T0
PT0 = 1;//高優(yōu)先級(jí), 以保證定時(shí)精度
ET0 = 1;EA = 1;}
//--------------------
void main(){uint i, j;uchar Key;Init();while(1){//
if(new_s){ //如果出現(xiàn)了新的一秒, 修改時(shí)間
new_s = 0;sec++;sec %= 60;if(!sec){min++;min %= 60;if(!min){ hour++;hour %= 24;}}W_BUFF();//寫(xiě)顯示
W_LCD_Com(0xc0 + 7);(x1 == 0x7f)return 0;W_LCD_Com(0xC0);
//
if(!sec &&!min){ //整點(diǎn)報(bào)時(shí)
for(i = 0;i < 200;i++){SPK = 0;for(j = 0;j < 100;j++);SPK = 1;for(j = 0;j < 100;j++);} }} //Key = read_key();//讀出按鍵
switch(Key){//分別處理四個(gè)按鍵
case0: if(KEY_0){min++;min %= 60;W_BUFF();break;}case1: if(KEY_1){hour++;hour %= 24;W_BUFF();break;}case2: if(KEY_2){ a=sec;b=min;c=hour;sec = 0, min = 0, hour = 0;}case3: if(KEY_3){sec=a+sec;if(sec>60){sec=sec-60;min++;}min=b+min;if(min>60){min=min-60;hour++;}hour=c+hour;if(hour>24){hour=hour-24;} }} }} //--------------------
void timer0(void)interrupt 1//T0中斷函數(shù), 50ms執(zhí)行一次{TH0 = 0x4c;t0++;t0 %= 20;//20, 一秒鐘if(t0 == 0){new_s = 1;LED = ~LED;}if(modify)LED = 0;} K0分加一 K1時(shí)加一 K2秒表開(kāi)始
K3秒表結(jié)束,恢復(fù)正常時(shí)間!
第四篇:?jiǎn)纹瑱C(jī)16點(diǎn)陣漢字顯示課程設(shè)計(jì)
一、前言
1.1設(shè)計(jì)制作產(chǎn)品的背景、目的及設(shè)計(jì)要求
本項(xiàng)目為16x16點(diǎn)陣漢字顯示“新年快樂(lè)”的設(shè)計(jì),首先將本次實(shí)訓(xùn)的電路圖在仿真軟件上繪制完成,將點(diǎn)陣文件存入ROM,形成漢字編碼,再進(jìn)行相關(guān)轉(zhuǎn)換,以新編碼提取相應(yīng)的點(diǎn)陣漢字顯示。將相應(yīng)編碼代入運(yùn)行程序,進(jìn)行調(diào)試和準(zhǔn)備。
1.2分工情況、工作計(jì)劃及本人所承擔(dān)工作
1.周一 1~4 進(jìn)行分組,選題 和軟件的安裝 2.周二 1~4 進(jìn)行電路的設(shè)計(jì)及程序編寫(xiě) 3.周三 1~4 進(jìn)行電路的設(shè)計(jì)及程序編寫(xiě) 4.周四 1~4 進(jìn)行說(shuō)明書(shū)的填寫(xiě) 5.周五 1~4 答辯
本人在本次課程設(shè)計(jì)中承擔(dān)電路圖的繪制及相關(guān)程序的編寫(xiě)與調(diào)試。
1.3本課題的設(shè)計(jì)重點(diǎn)及難點(diǎn)
本次課程設(shè)計(jì)重點(diǎn)在于單片機(jī)控制系統(tǒng)程序采用單片機(jī)匯編語(yǔ)言進(jìn)行編輯,通過(guò)編程控制各顯示點(diǎn)對(duì)應(yīng)LED陽(yáng)極和陰極端的電平,就可以有效的控制各顯示點(diǎn)的亮滅。而其中的難點(diǎn)就在于運(yùn)行程序的編寫(xiě)及相關(guān)漢字的點(diǎn)陣數(shù)據(jù),這種顯示字符的點(diǎn)陣數(shù)據(jù)可以自行編寫(xiě),也可以標(biāo)準(zhǔn)字庫(kù)中提取。
在進(jìn)行課題設(shè)計(jì)時(shí)需要熟練掌握相關(guān)電路軟件及編程軟件的使用,編寫(xiě)程序時(shí)需掌握一定的C語(yǔ)言邏輯關(guān)系的運(yùn)用。在電路圖的繪制時(shí)需要清楚的了解各個(gè)電路設(shè)備的功能及用途。
二、實(shí)訓(xùn)內(nèi)容
2.1實(shí)訓(xùn)原理
本設(shè)計(jì)應(yīng)用的掃描方法為水平方向(X方向)掃描。
每一個(gè)字由16行16列的點(diǎn)陣形成顯示,即每個(gè)字均由256個(gè)點(diǎn)陣來(lái)表示,我們可以把每一個(gè)點(diǎn)理解為一個(gè)像素。一般我們使用的16×16的點(diǎn)陣宋體字庫(kù),即所謂的16×16,是每一個(gè)漢字在縱橫各16點(diǎn)的區(qū)域內(nèi)顯示的。漢字庫(kù)從該位置起的32字節(jié)信息記錄了該字的字模信息。事實(shí)上這個(gè)漢字屏不僅可以顯示漢字,也可以顯示在256像素范圍內(nèi)的任何圖形。
上半部分第一列完成之后,繼續(xù)掃描下半部分的第一列,為了接線的方便,我們?nèi)栽O(shè)計(jì)成由上往下的掃描方式,即從A8向A15方向掃描,按照這個(gè)方法,繼續(xù)進(jìn)行下面的掃描,一共掃描32個(gè)8位,可以得出漢字。
2.2硬件設(shè)計(jì) 2.3軟件設(shè)計(jì)
#include for(j=q;j<32+q;j++) { P1=sm[t]; P0=seg[j]; j++; P2=seg[j]; delay(50);t--; if(t==0) t=16;} q=q+32; if(q==128) q=0;} } 三.結(jié)論 3.1 實(shí)訓(xùn)過(guò)程中遇到的問(wèn)題及解決措施 在本次實(shí)驗(yàn)中,我組在制作的16x16點(diǎn)陣顯示漢字“新年快樂(lè)”的課程設(shè)計(jì)中,首先在使用單片機(jī)仿真軟件找尋相關(guān)設(shè)備時(shí)沒(méi)有找到16x16的點(diǎn)陣設(shè)備,繼而用四個(gè)8x8的點(diǎn)陣排列組合予以替代。 依據(jù)相關(guān)教材及指導(dǎo)教師的參考和建議,我組對(duì)于本次設(shè)計(jì)的電路圖采用了通用模板設(shè)計(jì)。 此次課程設(shè)計(jì)的運(yùn)行程序是我組在設(shè)計(jì)中的最大難點(diǎn),后經(jīng)多方查資料及參考詢問(wèn),我組找到了相應(yīng)漢字在點(diǎn)陣中的排序規(guī)律,順利編寫(xiě)出代碼。 3.2 今后的學(xué)習(xí)展望 經(jīng)過(guò)這次的單片機(jī)課程設(shè)計(jì),從產(chǎn)生設(shè)計(jì)想法到實(shí)際操作,到最終的設(shè)計(jì)完成,中間遇到的困難及困難的解決,讓我更進(jìn)一步了解了單片機(jī),讓我不再僅僅局限于書(shū)本上。 本次的設(shè)計(jì)經(jīng)驗(yàn)對(duì)于我們?nèi)蘸蟮膶W(xué)習(xí)工作有非常重要的作用,在遇到困難時(shí)可以不僅僅從書(shū)本上找解決方案,還可以自己親自動(dòng)手實(shí)踐來(lái)驗(yàn)證相關(guān)問(wèn)題及找到解決方法。 這次難得的課程設(shè)計(jì)過(guò)程中我鍛煉了自己的思考能力和動(dòng)手能力。通過(guò)題目選擇和設(shè)計(jì)電路的過(guò)程中,加強(qiáng)了我思考問(wèn)題的完整性和實(shí)際生活聯(lián)系的可行性。在方案設(shè)計(jì)選擇和芯片的選擇上,培養(yǎng)了我們綜合應(yīng)用單片機(jī)的能力,對(duì)單片機(jī)的各個(gè)管腳的功能也有了進(jìn)一步的認(rèn)識(shí)。還鍛煉我們個(gè)人的查閱技術(shù)資料的能力,動(dòng)手能力,發(fā)現(xiàn)問(wèn)題,解決問(wèn)題的能力。并且我們熟練掌握了有關(guān)器件的性能及測(cè)試方法。 四、心得體會(huì) 本次的設(shè)計(jì)經(jīng)驗(yàn)對(duì)于我們?nèi)蘸蟮膶W(xué)習(xí)工作有非常重要的作用,在遇到困難時(shí)可以不僅僅從書(shū)本上找解決方案,還可以自己親自動(dòng)手實(shí)踐來(lái)驗(yàn)證相關(guān)問(wèn)題及找到解決方法。 單片機(jī)這門(mén)課是一科非常重視動(dòng)手實(shí)踐的科目,不能總是看書(shū),但是也不能完全不看書(shū)。單片機(jī)并不象傳統(tǒng)的數(shù)字電路或模擬電路那樣比較直觀,原因是除了“硬件”之外還存在一個(gè)“軟件”的因素。正是這個(gè)“軟件”的原因使得許多初學(xué)者怎么也弄不懂單片機(jī)的工作過(guò)程,怎么也不明白為什么將幾個(gè)數(shù)送來(lái)送去就能讓數(shù)碼管顯示一串字符或控制一個(gè)電機(jī)的變速。對(duì)初學(xué)單片機(jī)的人來(lái)說(shuō),需要從書(shū)中大概了解一下單片機(jī)的各個(gè)功能寄存器,如果看的多了反而容易搞亂,現(xiàn)在市場(chǎng)上大多數(shù)講單片機(jī)的書(shū)一開(kāi)始就講解較復(fù)雜的內(nèi)存、地址、存儲(chǔ)器什么的,更讓初學(xué)者感到不知所云、難以入門(mén)。如果按教科書(shū)式的學(xué)法,上來(lái)就是一大堆指令、名詞,學(xué)了半天還搞不清這些指令起什么作用,能夠產(chǎn)生什么實(shí)際效果,那么也許用不了幾天就會(huì)覺(jué)得枯燥乏味而半途而廢。簡(jiǎn)單的說(shuō),使用單片機(jī)實(shí)際上就是用我們自己編寫(xiě)的軟件去控制單片機(jī)的各個(gè)功能寄存器。再簡(jiǎn)單些,就是控制單片機(jī)哪些引腳的電平什么時(shí)候輸出高電平,什么時(shí)候輸出低電平。由這些高低變化的電平來(lái)控制外圍電路,實(shí)現(xiàn)我們需要的各個(gè)功能。 經(jīng)過(guò)這次的單片機(jī)課程設(shè)計(jì),從產(chǎn)生設(shè)計(jì)想法到實(shí)際操作,到最終的設(shè)計(jì)完成,中間遇到的困難及困難的解決,讓我更進(jìn)一步了解了單片機(jī),讓我不再僅僅局限于書(shū)本上。 單片機(jī)課程設(shè)計(jì)報(bào)告 ? 課程名稱:?jiǎn)纹瑱C(jī)原理及接口課程設(shè)計(jì) ? 題目:基于 ? 學(xué)院:電氣信息學(xué)院 ? 專(zhuān)業(yè)班級(jí):測(cè)控技術(shù)與儀器 ? 姓名:江讓 ? 學(xué)號(hào): ? 指導(dǎo)老師:劉升老師 ? 時(shí)間: C51單片機(jī)的ADC0809數(shù)模轉(zhuǎn)換103班1090640772013/1/16第五篇:?jiǎn)纹瑱C(jī)課程設(shè)計(jì)報(bào)告