第一篇:單片機課程設計資料袋
課程設計說明書
課程名稱:
單片機課程設計
設計題目: 255計數(shù),50000計數(shù),出租車計費 專
業(yè): 電氣工程及其自動化 班級:電氣080
2學生姓名: 易鳴 學
號: 0812180203 指導教師: 石偉
湖南工業(yè)大學科技學院教務部 制
2011年 5月 24日 設計思路、程序與仿真圖
50000計數(shù)
1.1設計思路
0-50000計數(shù):由于DIV AB指令中A B均為8為位寄存器,因此255二進制轉十進制計數(shù)的方法不能用于0-50000的循環(huán)計數(shù)??筛鶕?jù)TH0或TH1中每一個二進制‘1’代表十進制的256,再和TL0或TL1按前一步二轉十的方法轉換得到百.十.個相加,即可完成16位二進制轉十進制。
仿真圖:
萬位千位百位十位個位U119XTAL1P0.0/AD0P0.1/AD1P0.2/AD2P0.3/AD3P0.4/AD4P0.5/AD5P0.6/AD6P0.7/AD7P2.0/A8P2.1/A9P2.2/A10P2.3/A11P2.4/A12P2.5/A13P2.6/A14P2.7/A15P3.0/RXDP3.1/TXDP3.2/INT0P3.3/INT1P3.4/T0P3.5/T1P3.6/WRP3.7/RD*********617U3:F***04818XTAL2U3:E109RSTU3:D12293031PSENALEEAU3:C57404612345678P1.0P1.1P1.2P1.3P1.4P1.5P1.6P1.7AT89C51U2123ABCY0Y1Y2Y3Y4Y5Y6Y7***0973U3:B4740417404U3:A2645E1E2E374HC138 程序:
ORG 0000H
SJMP MAIN
ORG 0040H MAIN:
MOV TMOD,#50H
;定時器T1初始化
MOV TL1,#0FFH
;存儲空間初始化
MOV 70H,#00H
;保存?zhèn)€位
MOV 71H,#00H
;保存十位
MOV 72H,#00H
;保存百位
MOV 73H,#00H
;保存千位
MOV 74H,#00H
;保存萬位
LOOP: SETB TR1
;啟動T1
ACALL OUT
;調(diào)用顯示子程序
MOV A,TL1
CJNE A,#00H,LOOP
ACALL BCD
;調(diào)用BCD碼調(diào)整子程序
SJMP LOOP
RET
BCD:
MOV TL1,#0FFH
INC 70H
MOV A,70H
CJNE A,#0AH,EXIT
MOV 70H,#00H
INC 71H
MOV A,71H
CJNE A,#0AH,EXIT
MOV 71H,#00H
INC 72H
MOV A,72H
CJNE A,#0AH,EXIT
MOV 72H,#00H
INC 73H
MOV A,73H
CJNE A,#0AH,EXIT
MOV 73H,#00H
INC 74H
MOV A,74H
CJNE A,#05H,EXIT
MOV 74H,#00H
;BCD碼調(diào)整子程序
;只能計數(shù)到49999,遇到50000會歸零
EXIT:RET
OUT:
;顯示子程序
MOV R1,#70H
MOV R5,#00H
MOV DPTR,#TAB LOOP1:
MOV A,R5
MOV P2,A
MOV A,@R1
MOVC A,@A+DPTR
MOV P0,A
ACALL DELAY
INC R1
INC R5
CJNE R5,#05H,LOOP1
RET
DELAY:
;延時子程序
MOV R7,#31
;1+(1+2*100+2)*31+1+2*11+1+2=6320
L1: MOV R6,#100
W1: DJNZ R6,W1
DJNZ R7,L1
MOV R4,#11
J1: DJNZ R4,J1
NOP
RET
TAB: DB 0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H
;驅動LED顯示表
出租車計費
1.2設計思路
出租車計費:在上步的基礎上,每1個脈沖當作1公里(也可自己設置幾個脈沖1公里),5個脈沖,數(shù)碼管顯示05.0005,前3位余額,后3位為里程,超過5個脈沖,里程加1,金額加0.8。難點主要在于計費金額的顯示,可將初值置為50,其中十位調(diào)用帶點的字型碼,即顯示05.0,超過5個脈沖,里程加1,金額加8,由于十位是帶有小數(shù)點,即可實現(xiàn)金額加0.8元。
仿真圖:
十元元角百位十位個位U119XTAL1P0.0/AD0P0.1/AD1P0.2/AD2P0.3/AD3P0.4/AD4P0.5/AD5P0.6/AD6P0.7/AD7P2.0/A8P2.1/A9P2.2/A10P2.3/A11P2.4/A12P2.5/A13P2.6/A14P2.7/A15P3.0/RXDP3.1/TXDP3.2/INT0P3.3/INT1P3.4/T0P3.5/T1P3.6/WRP3.7/RD******28101112***8XTAL2U3:A129RSTU3:B***34293031PSENALEEAU3:C612345678P1.0P1.1P1.2P1.3P1.4P1.5P1.6P1.7AT89C51U3:D12U2123ABCY0Y1Y2Y3Y4Y5Y6Y7***09711U3:E***U3:F8645E1E2E374HC138 程序: ORG 0000H LJMP MIAN ORG 0030H MIAN:
GW equ 60h;個位數(shù)據(jù)緩沖 SW equ 61h;十位數(shù)據(jù)緩沖 BW equ 62h;百位數(shù)據(jù)緩沖
J equ 63h;角數(shù)據(jù)緩沖 Y equ 64h;元數(shù)據(jù)緩沖 SY equ 65H;十元數(shù)據(jù)緩沖 Mov GW,#0;初始化全為0 Mov SW,#0 Mov BW,#0 MOV J,#0 MOV Y ,#5 MOV SY,#0 MOV R1 ,#00H MOV R2 ,#00H MOV R0 ,#00H MOV R5 ,#00H MOV R6 ,#00H MOV TMOD ,#51H Mov TH1,#0 Mov TL1,#0
SETB C Setb TR1
;計數(shù)開始
START:
JNC LOOP
MOV A,GW
MOV DPTR ,#TAB
MOVC A ,@A+DPTR
MOV P0 ,A
MOV P2 ,#00H;//打開第一位數(shù)碼管的顯示電源
ACALL D1MS
MOV P2 ,#0FFH
MOV A,SW
MOV DPTR ,#TAB
MOVC A ,@A+DPTR
MOV P0 ,A
MOV P2 ,#01H;//打開第二位數(shù)碼管的顯示電源
ACALL D1MS
MOV P2 ,#0FFH
MOV A,BW
MOV DPTR ,#TAB
MOVC A ,@A+DPTR
MOV P0 ,A
MOV P2 ,#02H;//打開第三位數(shù)碼管的顯示電源
ACALL D1MS
MOV P2 ,#0FFH
MOV A,J
MOV DPTR ,#TAB
MOVC A ,@A+DPTR
MOV P0 ,A
MOV P2 ,#03H;//打開第四位數(shù)碼管的顯示電源
ACALL D1MS
MOV P2 ,#0FFH
MOV A,Y
MOV DPTR ,#TAB1
MOVC A ,@A+DPTR
MOV P0 ,A
MOV P2 ,#04H;//打開第五位數(shù)碼管的顯示電源
ACALL D1MS
MOV P2 ,#0FFH
MOV A,SY
MOV DPTR ,#TAB
MOVC A ,@A+DPTR
MOV P0 ,A
MOV P2 ,#05H;//打開第六位數(shù)碼管的顯示電源
ACALL D1MS
MOV P2 ,#0FFH
MOV A,TL1
MOV B ,#64H
DIV AB
MOV BW ,A
XCH A ,B
MOV B ,#0AH
DIV AB
MOV SW,A
MOV GW , B
MOV R0 ,TL1 CJNE R0 ,#05H , START LOOP: MOV A ,R0 SUBB A,#04H MOV B ,#08H MUL AB ADD A ,#50 MOV R5 ,A MOV A, B ADDC A ,#0 MOV R6 ,A
MOV R7,#08H H0:CLR C MOV A,R5 RLC A MOV R5,A MOV A,R6 RLC A MOV 07H,C CLR C SUBB A,#64H
JB 07H,H1 JNC H1 ADD A,#64H SJMP H2 H1:INC R5 H2:MOV R6 ,A
DJNZ R7 ,H0 MOV SY,R5 MOV A ,R6
MOV B ,#0AH
DIV AB
MOV Y ,A
MOV J,B
SETB C AJMP START D1MS:
MOV TMOD ,#51H
MOV
TL0 , #58H
MOV
TH0 , #0FFH
SETB TR0 WAIT1:
JNB
TF0 , WAIT1
CLR
TF0
CLR
TR0
RET
TAB :DB 0C0H ,0F9H ,0A4H,0B0H,99H,92H,82H,0F8H,80H,98H
TAB1:DB 40H,79H,24H,30H,19H,12H,02H,78H,00H,18H
課程設計心得
課程設計是培養(yǎng)學生綜合運用所學知識,發(fā)現(xiàn),提出,分析和解決實際問題,鍛煉實踐能力的重要環(huán)節(jié),是對學生實際工作能力的具體訓練和考察過程.隨著科學技術發(fā)展的日新日異,單片機已經(jīng)成為當今計算機應用中空前活躍的領域,在生活中可以說得是無處不在。因此作為二十一世紀的大學來說掌握單片機的開發(fā)技術是十分重要的。
本次課程設計我的課題是做基與單片機的出租車計費系統(tǒng)和溫度報警系統(tǒng)。當我拿到課題時候,我真的很激動,因為我知道,這不僅僅是一次課程設計,而且它將見證我大學單片機學習的成果。所以 從一開始我就對該設計顯得十分重視。我深信好好做課程設計,能給我?guī)砭薮蟮氖斋@。
通過努力,最終把這次課程設計的任務完成了。通過這次設計,得到了很多收獲和體會。提高了自己的動手能力。第一,鞏固和加深了對電子線路基本知識的理解,提高了編寫程序的能力。第二,增強了根據(jù)課程需要選學參考資料,查閱手冊,圖表和文獻資料的自學能力。通過獨立思考,深入研究有關問題,學會自己分析解決問題的方法。第三,初步掌握了簡單實用電路的分析方法和工程設計方法。第四,在這次課程設計過程中,光有理論知識是不夠的,還必須懂一些實踐中的知識。所以在課程設計的實踐中,我們應將實驗課與課堂教學結合起來,鍛煉自己的理論聯(lián)系實際的能力和實際動手能力。第五,掌握了比較常用的儀器的使用方法,科學態(tài)度。
回顧起此次單片機課程設計,我仍感慨頗多,的確,從理論到實踐,在二個星期的日子里,可以說得是苦多于甜,但是可以學到很多很多的的東西,同時不僅可以鞏固了以前所學過的知識,而且學到了很多在書本上所沒有學到過的知識。通過這次課程設計使我懂得了理論與實際相結合是很重要的,只有理論知識是遠遠不夠的,只有把所學的理論知識與實踐相結合起來,從理論中得出結論,才能真正為社會服務,從而提高自己的實際動手能力和獨立思考的能力。在設計的過程中遇到問題,可以說得是困難重重,這畢竟第一次做的,難免會遇到過各種各樣的問題,同時在設計的過程中發(fā)現(xiàn)了自己的不足之處,對以前所學過的知識理解得不夠深刻,掌握得不夠牢固,比如說 不懂一些元器件的使用方法,對單片機匯編語言掌握得不好……通過這次課程設計之后,一定把以前所學過的知識重新溫故。
在設計中我遇到了很多編程問題,最后在石偉老師的辛勤指導下,終于游逆而解。同時,在石偉老師那里我學得到很多實用的知識,在次我表示感謝!同時,對給過我?guī)椭乃型瑢W和各位指導老師再次表示忠心的感謝!
第二篇:單片機課程設計
設計題目: 單片機課程設計
學生姓名:
學
院: 電氣與信息工程學院
班
級: 電子111班 指導教師:
日 期: 2014年9月20日
一、課程設計目的:
了解電子元器件的功能與原理,掌握單片機的結構和原理,學會使用單片機應用開發(fā)技術的相關軟件如 keill、STC_ISP_V394等,能夠使用c語言的語言編程簡單的功能。
二、設計的思想:
利用所提供的單片機和開發(fā)板的原理圖用keill軟件編程程序以實現(xiàn)一些功能。然后用STC_ISP_V394.exe軟件將編譯完全正確的程序生成的hxe文件下載到開發(fā)板上,再調(diào)試編譯的程序能否實現(xiàn)其所設計的功能。
1、對蜂鳴器的了解:
蜂鳴器是一種一體化結構的電子訊響器,采用直流電壓供電,它由振蕩器、電磁線圈、磁鐵、振動膜片及外殼組成,接通電源后,振蕩器產(chǎn)生的音頻信號由電流通過電磁線圈,使電磁線圈產(chǎn)生磁場,振動膜片在電磁線圈和磁鐵的相互作用下,周期性的振動發(fā)聲。
2、設計:
我們所使用的開發(fā)板實物圖如圖一,單片機對右上角蜂鳴器的控制是加入三極管接入vcc,單片機的第22引腳和負極上,以此來控制蜂鳴器工作。單片機我們選擇STC89C52RC+1602液晶來實現(xiàn)對蜂鳴器的控制及顯示所需要的信息。
圖一 調(diào)試說明:
首先用Keil軟件創(chuàng)建一個工程,將程序源代碼輸入并編譯生成單片可執(zhí)行的.hex文件。其次,打開單片機實踐板的電源,接好串口線,用STC-ISP燒錄軟件,將.hex文件燒錄入單片機中。程序下載完畢后,單片機會自動執(zhí)行程序功能。最后,觀察程序功能的執(zhí)行情況,看是否達到了設計要求。
如果單片機實踐板硬件電路的執(zhí)行結果與設計結果一致,則說明設計過程及流程沒有問題,完全符合設計要求。否則,先檢查單片機實踐板的硬件電路是否完好,是否有斷點、漏焊、虛焊以及元器件是否完好等情況,排除故障重新連接后重新進行調(diào)試。如果仍然無法正
常實現(xiàn),則說明程序編寫有誤,需要認真檢查程序流程,然后經(jīng)過反復的修改與調(diào)試排除故障,實現(xiàn)設計要求的各項功能。編譯和燒寫該程序到單片機:
(1)用Keil編譯上面的代碼,并設置產(chǎn)生16進制代碼文件*.hex.(2)用專用下載線,連接好實驗板和電腦串口(DB9)(2)運行hex文件燒寫軟件STC_ISP_V394.exe
選單片機的型號,并打開編譯產(chǎn)生好的hex文件
點擊下載,給開發(fā)板上電。
3、實現(xiàn)的功能:使用單片機將歌曲《八月桂花》的調(diào)子通過蜂鳴器播放出來,用1602液晶將想要表達的信息有步驟地顯示在液晶顯示屏上,并且調(diào)子與顯示內(nèi)容可以任意通過修改的程序燒錄到單片機內(nèi),實現(xiàn)設計產(chǎn)品的使用性與靈活性。
三、實驗程序:
/************************************************************************
[主題] C51音樂程序《八月桂花》
[功能]
通過單片機演奏音樂,顯示一些內(nèi)容
/**********************************************************************/
#include
#include
//本例采用89C52, 晶振為11.0592MHZ
//關于如何編制音樂代碼, 其實十分簡單,各位可以看以下代碼.//頻率常數(shù)即音樂術語中的音調(diào),而節(jié)拍常數(shù)即音樂術語中的多少拍;
//所以拿出譜子, 試探編吧!
unsigned char i=0;sbit Beep = P2^7;
unsigned char p,m;
//m為頻率常數(shù)變量
unsigned char n=0;//n為節(jié)拍常數(shù)變量
unsigned char code music_tab[] ={
0x18, 0x30, 0x1C , 0x10, //格式為: 頻率常數(shù), 節(jié)拍常數(shù), 頻率常數(shù), 節(jié)拍常數(shù),0x20, 0x40, 0x1C , 0x10,0x18, 0x10, 0x20 , 0x10,0x1C, 0x10, 0x18 , 0x40,0x1C, 0x20, 0x20 , 0x20,0x1C, 0x20, 0x18 , 0x20,0x20, 0x80, 0xFF , 0x20,0x30, 0x1C, 0x10 , 0x18,0x20, 0x15, 0x20 , 0x1C,0x20, 0x20, 0x20 , 0x26,0x40, 0x20, 0x20 , 0x2B,0x20, 0x26, 0x20 , 0x20,0x20, 0x30, 0x80 , 0xFF,0x20, 0x20, 0x1C , 0x10,0x18, 0x10, 0x20 , 0x20,0x26, 0x20, 0x2B , 0x20,0x30, 0x20, 0x2B , 0x40,0x20, 0x20, 0x1C , 0x10,0x18, 0x10, 0x20 , 0x20,0x26, 0x20, 0x2B , 0x20,0x30, 0x20, 0x2B , 0x40,0x20, 0x30, 0x1C , 0x10,0x18, 0x20, 0x15 , 0x20,0x1C, 0x20, 0x20 , 0x20,0x26, 0x40, 0x20 , 0x20,0x2B, 0x20, 0x26 , 0x20,0x20, 0x20, 0x30 , 0x80,0x20, 0x30, 0x1C , 0x10,0x20, 0x10, 0x1C , 0x10,0x20, 0x20, 0x26 , 0x20,0x2B, 0x20, 0x30 , 0x20,0x2B, 0x40, 0x20 , 0x15,0x1F, 0x05, 0x20 , 0x10,0x1C, 0x10, 0x20 , 0x20,0x26, 0x20, 0x2B , 0x20,0x30, 0x20, 0x2B , 0x40,0x20, 0x30, 0x1C , 0x10,0x18, 0x20, 0x15 , 0x20,0x1C, 0x20, 0x20 , 0x20,0x26, 0x40, 0x20 , 0x20,0x2B, 0x20, 0x26 , 0x20,0x20, 0x20, 0x30 , 0x30,0x20, 0x30, 0x1C , 0x10,0x18, 0x40, 0x1C , 0x20,0x20, 0x20, 0x26 , 0x40,0x13, 0x60, 0x18 , 0x20,0x15, 0x40, 0x13 , 0x40,0x18, 0x80, 0x00
};
void int0()interrupt 1
//采用中斷0 控制節(jié)拍
{ TH0=0xd8;
TL0=0xef;
n--;
}
void delay(unsigned char m)
//控制頻率延時
{
unsigned i=3*m;
while(--i);
}
void delayms(unsigned char a)//豪秒延時子程序
{
while(--a);
//采用while(--a)不要采用while(a--);各位可編譯一下看看匯編結果就知道了!
}
typedef unsigned char BYTE;typedef bit BOOL;
sbit LCD_RS = P2^0;
sbit LCD_RW = P2^1;sbit LCD_EP = P2^2;
BYTE code dis1[] = {“
WLCOME TO
”};BYTE code dis2[] = {“
DanPianJi ”};BYTE code dis3[] = {“
111iZnaiD
”};BYTE code dis4[] = {“
eiXeiX ”};
delays(int ms){
// 延時子程序 int i;while(ms--){
for(i = 0;i< 250;i++)
{
_nop_();
_nop_();
_nop_();
_nop_();
} } }
BOOL lcd_bz(){
// 測試LCD忙碌狀態(tài) BOOL result;LCD_RS = 0;LCD_RW = 1;LCD_EP = 1;_nop_();_nop_();_nop_();_nop_();result =(BOOL)(P0 & 0x80);LCD_EP = 0;return result;}
lcd_wcmd(BYTE cmd){
while(lcd_bz());LCD_RS = 0;LCD_RW = 0;LCD_EP = 0;_nop_();_nop_();P0 = cmd;_nop_();_nop_();_nop_();_nop_();LCD_EP = 1;_nop_();_nop_();_nop_();_nop_();LCD_EP = 0;
}
lcd_pos(BYTE pos){
lcd_wcmd(pos | 0x80);
// 寫入指令數(shù)據(jù)到LCD //設定顯示位置
}
lcd_wdat(BYTE dat)
{
//寫入字符顯示數(shù)據(jù)到LCD while(lcd_bz());LCD_RS = 1;LCD_RW = 0;LCD_EP = 0;P0 = dat;_nop_();_nop_();_nop_();_nop_();LCD_EP = 1;_nop_();_nop_();_nop_();_nop_();LCD_EP = 0;}
lcd_init(){
lcd_wcmd(0x38);
delays(1);lcd_wcmd(0x0c);
delays(1);lcd_wcmd(0x06);
delays(1);lcd_wcmd(0x01);
delays(1);}
void main()
{
BYTE j;
lcd_init();
delays(10);
//LCD初始化設定
//16*2顯示,5*7點陣,8位數(shù)據(jù)//顯示開,關光標 //移動光標 //清除LCD的顯示內(nèi)容
// 初始化LCD
lcd_wcmd(0x06);
//向右移動光標
lcd_pos(0);
//設置顯示位置為第一行的第1個字符
j = 0;
while(dis1[ j ]!= '