第一篇:單片機(jī)課程設(shè)計(jì)
單片機(jī)課程設(shè)計(jì)報(bào)告
專業(yè):電氣工程及其自動(dòng)化 班級(jí):電0901-4班 姓名:代紅新 學(xué)號(hào):20092444 指導(dǎo)老師:石彥輝
電氣與電子工程學(xué)院
2012/6/22
一、設(shè)計(jì)題目:電子時(shí)鐘
二、設(shè)計(jì)要求:
1.通過鍵設(shè)置當(dāng)前時(shí)間(時(shí)分秒)2.可切換顯示年月日
3.可設(shè)定鬧鐘,到時(shí)報(bào)警,一個(gè)發(fā)光管閃爍(1次/秒),有復(fù)位鍵停止報(bào)警 4.可切換顯示鬧鐘時(shí)間和當(dāng)前時(shí)間
5.本機(jī)地址為02H,當(dāng)接到上位機(jī)發(fā)的02H時(shí),則回發(fā)02H 當(dāng)接到上位機(jī)發(fā)的AAH時(shí),則將當(dāng)前時(shí)間發(fā)給上位機(jī) 當(dāng)收到上位機(jī)發(fā)的55H時(shí),則修改當(dāng)前時(shí)間(時(shí)分秒)
三、設(shè)計(jì)思路
經(jīng)過思考,該電子時(shí)鐘試驗(yàn)須有六個(gè)八段數(shù)碼管,分別指示時(shí)分秒,切換指示年月日,由指示燈指示鬧鐘提醒,以及上位機(jī)對(duì)下位機(jī)的控制,更改時(shí)間。
硬件設(shè)計(jì)思路:下位機(jī)顯示時(shí)間和日期,以及鬧鐘指示燈,時(shí)間日期的更改由兩個(gè)中斷實(shí)現(xiàn),一個(gè)位選,一個(gè)加一。上位機(jī)顯示發(fā)送的數(shù)據(jù)和接受顯示,僅由一個(gè)外部中斷來切換方式。
軟件設(shè)計(jì)思路:通過之前的單片機(jī)實(shí)驗(yàn)的練習(xí),加上對(duì)本實(shí)驗(yàn)的理解,知道該由數(shù)碼管顯示時(shí)間,日期,進(jìn)位轉(zhuǎn)換,定時(shí)器計(jì)數(shù)器的應(yīng)用,將數(shù)字轉(zhuǎn)換為24進(jìn)制,60進(jìn)制,30進(jìn)制以及365進(jìn)制,并通過位選和片選實(shí)現(xiàn)顯示。
四、硬件設(shè)計(jì)
五、軟件設(shè)計(jì)
(一)上位機(jī)編程設(shè)計(jì)
SOK EQU 24H;fasongdezhonglei HOUR EQU 25H;xiangcongjifade hour MIN EQU 26H
;xiangcongjifade min SOK1 EQU 27H
;weixuanze HOUR1 EQU 28H
;zhujijieshoude hour MIN1 EQU 29H
;zhujijieshoude min ORG 0000H AJMP MAIN ORG 0003H AJMP X0IN;zhongleigaibian ORG 000BH AJMP T0IN
;zhujixiugaicongji ORG 0013H AJMP X1IN
;weixuanze
ORG 0030H MAIN:MOV SOK,#01H
MOV HOUR,#00H
MOV MIN,#00H
MOV SOK1,#01H
MOV HOUR1,#00H
MOV MIN1,#00H
MOV 21H,#02H
MOV 22H,#0AAH
MOV 23H,#55H
MOV TMOD,#26H
MOV TH1,#0FAH
MOV TL1,#0FAH
MOV TH0,#0FFH
MOV TL0,#0FFH
MOV PCON,#00H
MOV SCON,#50H
SETB PX0
CLR PS
CLR PT1
CLR PT0
CLR PX1
CLR ET1
SETB TR1
CLR ES
CLR TI
SETB IT0
SETB IT1
SETB EX0
SETB EX1
SETB ET0
SETB TR0
SETB EA ccc:MOV A,SOK
CJNE A,#1,aaa
LCALL DISP1
SJMP ccc aaa:MOV A,SOK
CJNE A,#2,eee
LCALL DISP2
SJMP ccc
eee:MOV DPTR,#8004H
MOV A,#6DH
MOVX @DPTR,A
MOV A,#02H
MOV DPTR,#8002H
MOVX @DPTR,A
LCALL DEL
MOV DPTR,#8004H
MOV A,#6DH
MOVX @DPTR,A
MOV A,#01H
MOV DPTR,#8002H
MOVX @DPTR,A
LCALL DEL
LJMP ccc
;XIANSHI;WAIT3:JNB TI,WAIT3
;CLR TI
;cc:MOV A,SOK
;CJNE A,#03H ,aa
;MOV A,23H
;MOV SBUF,A
;WAIT13:JNB TI,WAIT13
;CLR TI
X0IN:INC SOK
MOV A,SOK
CJNE A,#04H,dd
MOV SOK,#01H
SJMP ddd
dd:MOV A,SOK
CJNE A,#02H,qqq
MOV A,#0AAH
MOV SBUF,A WAITa:JNB TI,WAITa
CLR TI
WAIT4:JNB RI,WAIT4
CLR RI
MOV A,SBUF
MOV MIN1,A WAIT5:JNB RI,WAIT5
CLR RI
MOV A,SBUF
MOV HOUR1,A ddd: RETI qqq:MOV A,#55H
MOV SBUF,A WAITB:JNB TI,WAITB
CLR TI
RETI X1IN:INC SOK1
MOV A,SOK1
CJNE A,#03H,ee
MOV SOK1,#01H
ee:RETI T0IN:MOV A,SOK1
CJNE A,#1,ff
MOV A,SOK1
MOV SBUF,A WAIT6:JNB TI,WAIT6
CLR TI
MOV A,HOUR
CJNE A,#23,hh
MOV HOUR,#00H
MOV A,HOUR
MOV SBUF,A WAIT7:JNB TI,WAIT7
CLR TI
RETI
hh:INC HOUR
MOV A,HOUR
MOV SBUF,A WAIT8:JNB TI,WAIT8
CLR TI
RETI
ff: MOV A,SOK1
MOV SBUF,A WAIT9:JNB TI,WAIT9
CLR TI
MOV A,MIN
CJNE A,#59,ii
MOV MIN,#00H
MOV A,MIN
MOV SBUF,A WAIT10:JNB TI,WAIT10
CLR TI
RETI
ii:INC MIN
MOV A,MIN
MOV SBUF,A WAIT11:JNB TI,WAIT11
CLR TI
RETI DISP1:MOV DPTR,#8004H
MOV A,#3FH
MOVX @DPTR,A
MOV A,#04H
MOV DPTR,#8002H
MOVX @DPTR,A
LCALL DEL
MOV DPTR,#8004H
MOV A,#5BH
MOVX @DPTR,A
MOV A,#02H
MOV DPTR,#8002H
MOVX @DPTR,A
LCALL DEL
MOV DPTR,#8004H
MOV A,#76H
MOVX @DPTR,A
MOV A,#01H
MOV DPTR,#8002H
MOVX @DPTR,A
LCALL DEL
MOV DPTR,#8004H
MOV A,#3FH
MOVX @DPTR,A
MOV A,#20H
MOV DPTR,#8002H
MOVX @DPTR,A
LCALL DEL
MOV DPTR,#8004H
MOV A,#5BH
MOVX @DPTR,A
MOV A,#10H
MOV DPTR,#8002H
MOVX @DPTR,A
LCALL DEL
MOV DPTR,#8004H
MOV A,#76H
MOVX @DPTR,A
MOV A,#08H
MOV DPTR,#8002H
MOVX @DPTR,A
LCALL DEL
RET
DISP2:MOV DPTR,#8004H
MOV A,#77H
MOVX @DPTR,A
MOV A,#02H
MOV DPTR,#8002H
MOVX @DPTR,A
LCALL DEL
MOV DPTR,#8004H
MOV A,#77H
MOVX @DPTR,A
MOV A,#01H
MOV DPTR,#8002H
MOVX @DPTR,A
LCALL DEL
MOV DPTR,#TAB
MOV A,HOUR1
MOV B,#10
DIV AB
MOVC A,@A+DPTR
MOV 40H,A
MOV A,B
MOVC A,@A+DPTR
MOV 41H,A
MOV A,MIN1
MOV B,#10
DIV AB
MOVC A,@A+DPTR
MOV 42H,A
MOV A,B
MOVC A,@A+DPTR
MOV 43H,A
MOV DPTR,#8004H
MOV A,40H
MOVX @DPTR,A
MOV A,#20H
MOV DPTR,#8002H
MOVX @DPTR,A
LCALL DEL
MOV DPTR,#8004H
MOV A,41H
MOVX @DPTR,A
MOV A,#10H
MOV DPTR,#8002H
MOVX @DPTR,A(二)下位機(jī)編程設(shè)計(jì)
SOK2 BIT 20H.0;秒標(biāo)志位 SOK5 BIT 20H;秒標(biāo)志位
SEC EQU 30H
;秒
MIN EQU 31H
;分
HOUR EQU 32H
;時(shí)
DAY EQU 33H
;天
MON EQU 34H
;月
YEAR EQU 35H
;年
SEC1 EQU 36H
;鬧鐘的秒
MIN1 EQU 37H
;鬧鐘的分
HOUR1 EQU 38H;鬧鐘的時(shí)
SOK1 EQU 57H
;模式切換
SOK3 EQU 58H;位選擇標(biāo)志
SOK4 EQU 59H;模式表示
ORG 0000H
SJMP MAIN
ORG 0003H
LJMP X0IN
ORG 000BH
LJMP T0IN
ORG 0013H
LCALL DEL
MOV DPTR,#8004H
MOV A,42H
MOVX @DPTR,A
MOV A,#08H
MOV DPTR,#8002H
MOVX @DPTR,A
LCALL DEL
MOV DPTR,#8004H
MOV A,43H
MOVX @DPTR,A
MOV A,#04H
MOV DPTR,#8002H
MOVX @DPTR,A
LCALL DEL
RET
;XIANSHI
DEL:MOV R1,#750
zzz:DJNZ R1,zzz
RET
TAB:DB 3FH 06H 5BH 4FH 66H 6DH 7DH 07H 7FH 6FH 77H 7CH
END
LJMP X1IN
ORG 0023H
LJMP ESIN
ORG 0070H MAIN:MOV SOK1,#00H
MOV SOK3,#01H
MOV SEC,#00H
MOV MIN,#11
MOV HOUR,#11
MOV DAY,#21
MOV MON,#06
MOV YEAR,#12
MOV SEC1,#00H
MOV MIN1,#00H
MOV HOUR1,#00H
MOV R0,#10
MOV TMOD,#21H
MOV TL1,#0FAH
MOV TH1,#0FAH
MOV TH0,#3CH
MOV TL0,#0B0H
MOV PCON,#00H
MOV SCON,#50H
CLR TI
SETB ES
SETB PS
CLR PT1
CLR PX1
CLR PT0
CLR PT1
SETB P1.1
SETB EX0
SETB EX1
SETB IT0
SETB IT1
SETB ET0
CLR ET1
SETB TR0
SETB TR1
SETB EA
aa:JNB SOK2,ff
CLR SOK2
MOV A,SEC
CJNE A,#59,gg
MOV SEC,#00H
MOV A,MIN
CJNE A,#59,hh
MOV MIN,#00H
MOV A,HOUR
CJNE A,#23,ii
MOV HOUR,#00H
MOV A,DAY
CJNE A,#30,jj
MOV DAY,#01
MOV A,MON
CJNE A,#12,kk
MOV MON,#01
INC YEAR
gg:INC SEC
AJMP ff
hh:INC MIN
AJMP ff
ii:INC HOUR
AJMP ff
jj:INC DAY
AJMP ff
kk:INC MON
AJMP ff
ff:MOV A,HOUR
CJNE A,HOUR1,zz
MOV A,MIN
CJNE A,MIN1,zz
JNB SOK5,xx
CLR SOK5
SETB P1.0
LJMP zz
xx:CLR P1.0
zz:MOV A,SOK1
CJNE A,#00H,bb
AJMP DISP1
bb:CJNE A,#01,cc
AJMP DISP2
cc:AJMP DISP3
DISP1:MOV SOK4,#01H
MOV DPTR,#TAB
MOV A,DAY
MOV B,#10
DIV AB
MOVC A,@A+DPTR
MOV 45H,A
MOV A,B
MOVC A,@A+DPTR
MOV 46H,A
MOV A,MON
MOV B,#10
DIV AB
MOVC A,@A+DPTR
MOV 47H,A
MOV A,B
MOVC A,@A+DPTR
MOV 48H,A
MOV A,YEAR
MOV B,#10
DIV AB
MOVC A,@A+DPTR
MOV 49H,A
MOV A,B
MOVC A,@A+DPTR
MOV 50H,A
MOV DPTR,#8004H
MOV A,49H
MOVX @DPTR,A
MOV A,#20H
MOV DPTR,#8002H
MOVX @DPTR,A
LCALL DEL
LJMP aa
DISP2:MOV SOK4,#02
MOV DPTR,#TAB
MOV A,HOUR
MOV B,#10
DIV AB
MOVC A,@A+DPTR
MOV 43H,A
LCALL DEL
MOV DPTR,#8004H
MOV A,50H
MOVX @DPTR,A
MOV A,#10H
MOV DPTR,#8002H
MOVX @DPTR,A
LCALL DEL
MOV DPTR,#8004H
MOV A,47H
MOVX @DPTR,A
MOV A,#08H
MOV DPTR,#8002H
MOVX @DPTR,A
LCALL DEL
MOV DPTR,#8004H
MOV A,48H
MOVX @DPTR,A
MOV A,#04H
MOV DPTR,#8002H
MOVX @DPTR,A
LCALL DEL
MOV DPTR,#8004H
MOV A,45H
MOVX @DPTR,A
MOV A,#02H
MOV DPTR,#8002H
MOVX @DPTR,A
LCALL DEL
MOV DPTR,#8004H
MOV A,46H
MOVX @DPTR,A
MOV A,#01H
MOV DPTR,#8002H
MOVX @DPTR,A
MOV A,B
MOVC A,@A+DPTR MOV 44H,A MOV A,MIN MOV B,#10 DIV AB
MOVC A,@A+DPTR MOV 41H,A MOV A,B
MOVC A,@A+DPTR MOV 42H,A MOV A,SEC MOV B,#10 DIV AB
MOVC A,@A+DPTR MOV 39H,A MOV A,B
MOVC A,@A+DPTR MOV 40H,A MOV DPTR,#8004H MOV A,43H MOVX @DPTR,A MOV A,#20H MOV DPTR,#8002H MOVX @DPTR,A LCALL DEL MOV DPTR,#8004H MOV A,44H MOVX @DPTR,A MOV A,#10H MOV DPTR,#8002H MOVX @DPTR,A LCALL DEL MOV DPTR,#8004H MOV A,41H
MOVX @DPTR,A
MOV A,#08H
MOV DPTR,#8002H
MOVX @DPTR,A
LCALL DEL
MOV DPTR,#8004H
MOV A,42H
MOVX @DPTR,A
MOV A,#04H
MOV 54H,A
MOV A,SEC1
MOV B,#10
DIV AB
MOVC A,@A+DPTR
MOV 51H,A
MOV A,B
MOVC A,@A+DPTR
MOV 52H,A
MOV DPTR,#8002H
MOVX @DPTR,A
LCALL DEL
MOV DPTR,#8004H
MOV A,39H
MOVX @DPTR,A
MOV A,#02H
MOV DPTR,#8002H
MOVX @DPTR,A
LCALL DEL
MOV DPTR,#8004H
MOV A,40H
MOVX @DPTR,A
MOV A,#01H
MOV DPTR,#8002H
MOVX @DPTR,A
LCALL DEL
LJMP aa
DISP3:MOV SOK4,#03
MOV DPTR,#TAB
MOV A,HOUR1
MOV B,#10
DIV AB
MOVC A,@A+DPTR
MOV 55H,A
MOV A,B
MOVC A,@A+DPTR
MOV 56H,A
MOV A,MIN1
MOV B,#10
DIV AB
MOVC A,@A+DPTR
MOV 53H,A
MOV A,B
MOVC A,@A+DPTR
MOV DPTR,#8004H MOV A,55H MOVX @DPTR,A MOV A,#20H MOV DPTR,#8002H MOVX @DPTR,A LCALL DEL MOV DPTR,#8004H MOV A,56H MOVX @DPTR,A MOV A,#10H MOV DPTR,#8002H MOVX @DPTR,A LCALL DEL MOV DPTR,#8004H MOV A,53H MOVX @DPTR,A MOV A,#08H MOV DPTR,#8002H MOVX @DPTR,A LCALL DEL MOV DPTR,#8004H MOV A,54H MOVX @DPTR,A MOV A,#04H MOV DPTR,#8002H MOVX @DPTR,A LCALL DEL MOV DPTR,#8004H MOV A,51H MOVX @DPTR,A MOV A,#02H MOV DPTR,#8002H MOVX @DPTR,A LCALL DEL
MOV DPTR,#8004H
MOV A,52H
MOVX @DPTR,A
MOV A,#01H
MOV DPTR,#8002H
MOVX @DPTR,A
LCALL DEL
LJMP aa
X0IN:INC SOK1
CJNE A,#12,uu
MOV MON,#1
RETI
uu:INC MON
RETI
tt:INC YEAR
RETI
vv:MOV A,SOK4
CJNE A,#02H,ww
MOV A,SOK1
CJNE A,#3,dd
MOV SOK1,#00H
dd:RETI
T0IN:MOV TH0,#3CH
MOV TL0,#0B0H
DJNZ R0,ee
SETB SOK2
SETB SOK5
MOV R0,#10
ee:RETI
X1IN:JNB P1.1,kkk
MOV A,HOUR
CJNE A,HOUR1,aaa
MOV A,MIN
CJNE A,MIN1,aaa
INC MIN
aaa:INC SOK3
MOV A,SOK3
CJNE A,#4,ll
MOV SOK3,#01H
ll:RETI
kkk:MOV A,SOK4
CJNE A,#01H,vv
MOV A,SOK3
CJNE A,#01H,www
MOV A,DAY
CJNE A,#30,ss
MOV DAY,#1
RETI
ss:INC DAY
RETI
www:MOV A,SOK3
CJNE A,#2,tt
MOV A,MON
MOV A,SOK3
CJNE A,#1,nn
MOV A,SEC
CJNE A,#59,mm
MOV SEC,#00H
RETI mm:INC SEC
RETI nn:MOV A,SOK3
CJNE A,#2,pp
MOV A,MIN
CJNE A,#59,oo
MOV MIN,#00H
RETI oo:INC MIN
RETI pp:MOV A,HOUR
CJNE A,#23,qq
MOV HOUR,#00H
RETI qq:INC HOUR
RETI ww:MOV A,SOK4
CJNE A,#03H,bbb
MOV A,SOK3
CJNE A,#1,ccc
MOV A,SEC1
CJNE A,#59,ddd
MOV SEC1,#00H
RETI ddd:INC SEC1
RETI ccc:MOV A,SOK3
CJNE A,#2,eee
MOV A,MIN1
CJNE A,#59,ggg
MOV MIN1,#00H
RETI
ggg:INC MIN1
RETI
eee:MOV A,HOUR1
CJNE A,#23,fff
MOV HOUR1,#00H
RETI
fff:INC HOUR1
bbb:RETI
ESIN: CLR RI;很容易被忽略
MOV A,SBUF
CJNE A,#02H,aaaa
MOV A,#02H
MOV SBUF,A WAIT1:JNB TI,WAIT1
CLR TI
RETI aaaa:
CJNE A,#0AAH,bbbb
MOV A,MIN
MOV SBUF,A
WAIT2:JNB TI,WAIT2
CLR TI
MOV A,HOUR
MOV SBUF,A
WAIT3:JNB TI,WAIT3
CLR TI
RETI
bbbb: CPL P1.7
;WAIT7:JNB RI,WAIT7
;
CLR RI
;
MOV A,SBUF
;
CJNE A,#01H,cccc
;WAIT4:JNB RI,WAIT4
;
CLR RI
;
MOV A,SBUF
;
MOV HOUR,A
;cccc: NOP
;WAIT5:JNB RI,WAIT5
;
CLR RI
;
MOV A,SBUF
;MOV MIN,A
RETI
DEL:MOV R1,#750
zzz:DJNZ R1,zzz
RET
TAB:DB 3FH 06H 5BH 4FH 66H 6DH 7DH 07H 7FH 6FH 77H 7CH
END
六、設(shè)計(jì)總結(jié)。
單片機(jī)已滲透到我們生活的各個(gè)領(lǐng)域,幾乎很難找到?jīng)]有單片機(jī)足跡的領(lǐng)域。導(dǎo)彈的導(dǎo)航裝置,飛機(jī)上各種儀表的控制,計(jì)算機(jī)的網(wǎng)絡(luò)通訊與數(shù)據(jù)傳輸,工業(yè)自動(dòng)化過程的實(shí)時(shí)控制和數(shù)據(jù)處理,廣泛使用的各種智能IC卡,以及程控玩具、電子寵物等等,這些都離不開單片機(jī)。更不用說全自動(dòng)控制領(lǐng)域的機(jī)器人、智能儀表、醫(yī)療器械了。因此,單片機(jī)的學(xué)習(xí)、開發(fā)與應(yīng)用將造就一批計(jì)算機(jī)應(yīng)用與智能化控制的工程師和科學(xué)家。科技越發(fā)達(dá),智能化的東西就越多。因此學(xué)習(xí)單片機(jī)是社會(huì)發(fā)展的必然需求。
為期十天的單片機(jī)課程設(shè)計(jì)結(jié)束了,回想起這十天的設(shè)計(jì)過程,有緊張激烈的構(gòu)思討論過程,有忙碌甚至絞盡腦汁的編程調(diào)試階段。有久久實(shí)現(xiàn)不了的無奈,也有靈機(jī)一動(dòng)的興奮,更有老師的肯定和鼓勵(lì)。
幾天的單片機(jī)課程設(shè)計(jì),較之前的實(shí)驗(yàn)上機(jī)實(shí)現(xiàn)了更多的功能,使得單片機(jī)實(shí)力有更充分的發(fā)揮,硬件設(shè)計(jì)還算簡單,但是其編程技巧有了更深更高的要求,軟件編程是本課程設(shè)計(jì)的難點(diǎn)和重點(diǎn),通過對(duì)題目要求的仔細(xì)研究,外加之前實(shí)驗(yàn)的經(jīng)驗(yàn),加上老師的悉心指點(diǎn),并提出了寶貴的意見,我們的“時(shí)鐘“功能得以實(shí)現(xiàn)。在這里,我必須要感謝老師的悉心指導(dǎo),同學(xué)們的互相幫助,謝謝你們!
第二篇:單片機(jī)課程設(shè)計(jì)
設(shè)計(jì)題目: 單片機(jī)課程設(shè)計(jì)
學(xué)生姓名:
學(xué)
院: 電氣與信息工程學(xué)院
班
級(jí): 電子111班 指導(dǎo)教師:
日 期: 2014年9月20日
一、課程設(shè)計(jì)目的:
了解電子元器件的功能與原理,掌握單片機(jī)的結(jié)構(gòu)和原理,學(xué)會(huì)使用單片機(jī)應(yīng)用開發(fā)技術(shù)的相關(guān)軟件如 keill、STC_ISP_V394等,能夠使用c語言的語言編程簡單的功能。
二、設(shè)計(jì)的思想:
利用所提供的單片機(jī)和開發(fā)板的原理圖用keill軟件編程程序以實(shí)現(xiàn)一些功能。然后用STC_ISP_V394.exe軟件將編譯完全正確的程序生成的hxe文件下載到開發(fā)板上,再調(diào)試編譯的程序能否實(shí)現(xiàn)其所設(shè)計(jì)的功能。
1、對(duì)蜂鳴器的了解:
蜂鳴器是一種一體化結(jié)構(gòu)的電子訊響器,采用直流電壓供電,它由振蕩器、電磁線圈、磁鐵、振動(dòng)膜片及外殼組成,接通電源后,振蕩器產(chǎn)生的音頻信號(hào)由電流通過電磁線圈,使電磁線圈產(chǎn)生磁場,振動(dòng)膜片在電磁線圈和磁鐵的相互作用下,周期性的振動(dòng)發(fā)聲。
2、設(shè)計(jì):
我們所使用的開發(fā)板實(shí)物圖如圖一,單片機(jī)對(duì)右上角蜂鳴器的控制是加入三極管接入vcc,單片機(jī)的第22引腳和負(fù)極上,以此來控制蜂鳴器工作。單片機(jī)我們選擇STC89C52RC+1602液晶來實(shí)現(xiàn)對(duì)蜂鳴器的控制及顯示所需要的信息。
圖一 調(diào)試說明:
首先用Keil軟件創(chuàng)建一個(gè)工程,將程序源代碼輸入并編譯生成單片可執(zhí)行的.hex文件。其次,打開單片機(jī)實(shí)踐板的電源,接好串口線,用STC-ISP燒錄軟件,將.hex文件燒錄入單片機(jī)中。程序下載完畢后,單片機(jī)會(huì)自動(dòng)執(zhí)行程序功能。最后,觀察程序功能的執(zhí)行情況,看是否達(dá)到了設(shè)計(jì)要求。
如果單片機(jī)實(shí)踐板硬件電路的執(zhí)行結(jié)果與設(shè)計(jì)結(jié)果一致,則說明設(shè)計(jì)過程及流程沒有問題,完全符合設(shè)計(jì)要求。否則,先檢查單片機(jī)實(shí)踐板的硬件電路是否完好,是否有斷點(diǎn)、漏焊、虛焊以及元器件是否完好等情況,排除故障重新連接后重新進(jìn)行調(diào)試。如果仍然無法正
常實(shí)現(xiàn),則說明程序編寫有誤,需要認(rèn)真檢查程序流程,然后經(jīng)過反復(fù)的修改與調(diào)試排除故障,實(shí)現(xiàn)設(shè)計(jì)要求的各項(xiàng)功能。編譯和燒寫該程序到單片機(jī):
(1)用Keil編譯上面的代碼,并設(shè)置產(chǎn)生16進(jìn)制代碼文件*.hex.(2)用專用下載線,連接好實(shí)驗(yàn)板和電腦串口(DB9)(2)運(yùn)行hex文件燒寫軟件STC_ISP_V394.exe
選單片機(jī)的型號(hào),并打開編譯產(chǎn)生好的hex文件
點(diǎn)擊下載,給開發(fā)板上電。
3、實(shí)現(xiàn)的功能:使用單片機(jī)將歌曲《八月桂花》的調(diào)子通過蜂鳴器播放出來,用1602液晶將想要表達(dá)的信息有步驟地顯示在液晶顯示屏上,并且調(diào)子與顯示內(nèi)容可以任意通過修改的程序燒錄到單片機(jī)內(nèi),實(shí)現(xiàn)設(shè)計(jì)產(chǎn)品的使用性與靈活性。
三、實(shí)驗(yàn)程序:
/************************************************************************
[主題] C51音樂程序《八月桂花》
[功能]
通過單片機(jī)演奏音樂,顯示一些內(nèi)容
/**********************************************************************/
#include
#include
//本例采用89C52, 晶振為11.0592MHZ
//關(guān)于如何編制音樂代碼, 其實(shí)十分簡單,各位可以看以下代碼.//頻率常數(shù)即音樂術(shù)語中的音調(diào),而節(jié)拍常數(shù)即音樂術(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)
//控制頻率延時(shí)
{
unsigned i=3*m;
while(--i);
}
void delayms(unsigned char a)//豪秒延時(shí)子程序
{
while(--a);
//采用while(--a)不要采用while(a--);各位可編譯一下看看匯編結(jié)果就知道了!
}
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){
// 延時(shí)子程序 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 //設(shè)定顯示位置
}
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初始化設(shè)定
//16*2顯示,5*7點(diǎn)陣,8位數(shù)據(jù)//顯示開,關(guān)光標(biāo) //移動(dòng)光標(biāo) //清除LCD的顯示內(nèi)容
// 初始化LCD
lcd_wcmd(0x06);
//向右移動(dòng)光標(biāo)
lcd_pos(0);
//設(shè)置顯示位置為第一行的第1個(gè)字符
j = 0;
while(dis1[ j ]!= '