第一篇:江蘇大學(xué)單片機(jī)課程設(shè)計(jì)
江蘇大學(xué)
單片機(jī)課程設(shè)計(jì)
姓名:
學(xué)號(hào)
班級(jí):電氣
一、設(shè)計(jì)任務(wù)、原理、步驟
任務(wù):○1從鍵盤(pán)上輸入正、反轉(zhuǎn)命令,轉(zhuǎn)速參數(shù)(16級(jí))和轉(zhuǎn)動(dòng)步數(shù)顯示在LED顯示器上。
顯示器上顯示:第一位為0表示正轉(zhuǎn),為1表示反轉(zhuǎn);第二位0~F為轉(zhuǎn)速等級(jí),第三到第六位設(shè)定步數(shù)。
2單片機(jī)依顯示器上顯示的正、反轉(zhuǎn)命令,轉(zhuǎn)速級(jí)數(shù)和轉(zhuǎn)動(dòng)步數(shù)進(jìn)行相應(yīng)動(dòng)作,轉(zhuǎn)○動(dòng)步數(shù)減為零時(shí)停止轉(zhuǎn)動(dòng)。
原理:
如圖,當(dāng)有一相繞組被通電激勵(lì)時(shí),磁通從正相齒,經(jīng)過(guò)軟鐵芯的轉(zhuǎn)子,并以最短路徑流向負(fù)相齒,為使磁通路徑最短,在磁場(chǎng)力的作用下,轉(zhuǎn)子被迫移動(dòng),使最近的一對(duì)齒與被激勵(lì)的一相對(duì)準(zhǔn)。
那么,通過(guò)對(duì)它每相線圈中電流的順序切換可使電機(jī)作步進(jìn)式旋轉(zhuǎn)。相數(shù):產(chǎn)生不同對(duì)極N、S磁場(chǎng)的激磁線圈對(duì)數(shù)。
拍數(shù):指電機(jī)轉(zhuǎn)過(guò)一個(gè)齒距角所需脈沖數(shù),以四相電機(jī)為例,有四相四拍運(yùn)行方式即AB-BC-CD-DA-AB或A-B-C-D-A,四相八拍運(yùn)行方式即 A-AB-B-BC-C-CD-D-DA-A.步距角:對(duì)應(yīng)一個(gè)脈沖信號(hào)電機(jī)轉(zhuǎn)子轉(zhuǎn)過(guò)的角位移.步距角=360/(轉(zhuǎn)
子齒數(shù)*拍數(shù))系統(tǒng)中使用20BY-0型號(hào)步進(jìn)電機(jī),它使用+5V直流電源,步距角為18度,電機(jī)線圈由A、B、C、D四相組成。
步進(jìn)電機(jī)驅(qū)動(dòng)原理是通過(guò)對(duì)它每相線圈中的電流的順序切換來(lái)使電機(jī)作步進(jìn)式旋轉(zhuǎn),驅(qū)動(dòng)電路由脈沖信號(hào)來(lái)控制,所以調(diào)節(jié)脈沖信號(hào)的頻率便可改變步進(jìn)電機(jī)的轉(zhuǎn)速。
BA、BB、BC、BD即為脈沖信號(hào)輸入插孔,驅(qū)動(dòng)器輸出A、B、C、D接步進(jìn)電機(jī)。
步驟:先設(shè)計(jì)鍵盤(pán)顯示程序,根據(jù)書(shū)本的鍵盤(pán)掃描程序與數(shù)碼管顯示程序,把二者整合到
一起,成功后,再做驅(qū)動(dòng)電機(jī)程序,在鍵盤(pán)顯示程序的基礎(chǔ)上,進(jìn)行擴(kuò)張,實(shí)現(xiàn)電
機(jī)的正反轉(zhuǎn)與調(diào)速控制。
二、硬件原理接線圖 鍵盤(pán)顯示原理圖
連線圖
? 步進(jìn)電機(jī)模塊插頭接實(shí)驗(yàn)系統(tǒng)J3插座,(順接)? 把P1.0~P1.3分別接到BA~BD插孔。
4.7kX474LS04P1.0P1.18032P1.2J***4523535ABVCCBABBBCBD1359CDP1.34
三、流程圖
按鍵流程圖
數(shù)碼管顯示流程圖
電機(jī)控制程序流程圖
四、程序清單
ORG 0000H
AJMP MAIN
ORG 0050H MAIN: MOV SP, #40H
MOV 79H, #00H
MOV 7AH, #00H
MOV 7BH, #00H
MOV 7CH, #00H
MOV 7DH, #00H
MOV 7EH, #00H
MOV R1, #7EH MAIN1: ACALL KEY1
MOV @R1, A
CJNE R1, #78H, KS
CJNE A, #16H, AGAIN
LJMP RUN AGAIN: LJMP MAIN
KS: DEC
R1
LJMP MAIN1
RUN: MOV A,7EH
JZ
ZHEN
JNZ
FAN
SJMP $
ZHEN: MOV
P1, #03H
ACALL DELAY
MOV
P1, #06H
ACALL DELAY
MOV
P1, #0CH
ACALL DELAY
MOV
P1, #09H
ACALL DELAY
ANL
79H, #0FH
ANL
7AH, #0FH
ANL
7BH, #0FH
ANL
7CH, #0FH
LCALL DIR
LCALL DIR
MOV
R5, 79H
CJNE R5, #0,Z1
DEC
79H
MOV R5,7AH
CJNE R5, #0,Z2
DEC
7AH
MOV
R5, 7BH
CJNE R5, #0,Z3
DEC
7BH
MOV
R5, 7CH
CJNE R5, #0,Z4
LJMP MAIN Z1:
DEC
79H
LJMP ZHEN Z2:
DEC
7AH
LJMP ZHEN Z3:
DEC
7BH
LJMP ZHEN Z4:
DEC
7CH
LJMP ZHEN FAN: MOV
P1, #09H
ACALL DELAY
MOV
P1, #0CH
ACALL DELAY
MOV
P1, #06H
ACALL DELAY
MOV
P1, #03H
ACALL DELAY
ANL 79H, #0FH
ANL 7AH, #0FH
ANL 7BH, #0FH
ANL 7CH, #0FH
LCALL DIR
LCALL DIR
MOV R5, 79H
CJNE R5, #0,F1
DEC 79H
MOV R5, 7AH
CJNE R5, #0,F2
DEC 7AH
MOV R5, 7BH
CJNE R5, #0,F3
DEC 7BH
MOV R5, 7CH
CJNE R5, #0,F4
LJMP MAIN F1:
DEC 79H
LJMP FAN F2:
DEC 7AH
LJMP FAN F3:
DEC 7BH
LJMP FAN F4:
DEC 7CH
LJMP FAN
DELAY: MOV R1, 7DH DELAY10: ACALL DIR DELAY13:DJNZ R1, DELAY10
RET DIR: MOV R0,#79H
MOV R3,#01H LD0: MOV DPTR,#SEG
MOV A,@R0
MOVC A,@A+DPTR
CPL
A
MOV
DPTR,#0FFDCH
MOVX @DPTR,A
MOV A,R3
MOV DPTR,#0FFDDH
MOVX @DPTR,A
ACALL DL1
INC
R0
MOV
A,R3
JB
ACC.5,LD1
RL
A
MOV
R3,A
AJMP LD0 LD1: RET SEG: DB 3FH, 06H, 5BH, 4FH, 66H, 6DH
DB 7DH, 07H, 7FH, 6FH, 77H, 7CH
DB 39H, 5EH, 79H, 71H, 00H, 73H DL1: MOV
R7,#02H DL: MOV
R6,#0FFH DLA: DJNZ R6,DLA
DJNZ R7,DL
RET KEY1:ACALL KS1
JNZ
LK1
ACALL DIR
AJMP
KEY1 LK1: ACALL DIR
ACALL T12ms
ACALL KS1
JNZ
LK2
AJMP
KEY1 LK2: MOV
R2, #0FEH
MOV
R4, #00H LK4: MOV
DPTR, #0FFDDH
MOV
A, R2
MOVX
@DPTR, A
INC
DPTR
MOVX
A, @DPTR
JB
ACC.0, LONE
MOV
A, #00H
AJMP
LKP LONE:JB
ACC.1, LTOW
MOV
A, #08H
AJMP
LKP LTOW:JB
ACC.2, LTHR
MOV
A, #10H
AJMP
LKP LTHR:JB
ACC.3, NEXT
MOV
A, #18H LKP: ADD
A, R4
MOV
DPTR, #TAB
MOVC
A, @A+DPTR
PUSH
ACC LK3: ACALL DIR
ACALL KS1
JNZ
LK3
POP
ACC
RET NEXT:INC
R4
MOV
A,R2
JNB
ACC.7,KND
RL
A
MOV
R2,A
AJMP
LK4 KND: AJMP
KEY1 KS1: MOV
DPTR,#0FFDDH
MOV
A,#00H
MOVX
@DPTR,A
INC
DPTR
MOVX
A,@DPTR
CPL
A
ANL
A,#0FH
RET T12ms:MOV R7,#18H TM: MOV
R6,#0FFH TM6: DJNZ
R6,TM6
DJNZ
R7,TM
RET TAB: DB 07H,04H,08H,05H,09H,06H,0AH,0BH,01H,00H,02H,0FH,03H,0EH
DB 0CH,0DH,00H,00H,00H,00H,00H,00H,16H
END
五、設(shè)計(jì)心得體會(huì)
為期一周的單片機(jī)課程設(shè)計(jì),我有很多心得體會(huì),有關(guān)于單片機(jī)方面的,更多的是人與人之間的。
此次單片機(jī)課程設(shè)計(jì)意義非凡。一開(kāi)始,我們組出現(xiàn)了很多問(wèn)題,例如,如何把鍵盤(pán)與顯示程序整合到一起,但是在老師的悉心指導(dǎo)和同學(xué)的幫助下,各種問(wèn)題都被解決了。此次課程設(shè)計(jì)不僅增強(qiáng)了同學(xué)們的動(dòng)手實(shí)踐能力,而且更加豐富了同學(xué)們的理論知識(shí),熟悉了匯編語(yǔ)言的編程方法。除此之外,我還學(xué)到了如何與人合作,與人交流。
總而言之,單片機(jī)課程設(shè)計(jì)對(duì)于我們有很大的幫助,我們從中受益匪淺
第二篇:湘潭大學(xué)單片機(jī)課程設(shè)計(jì)
單
片
機(jī)
課
程
設(shè)
計(jì)
設(shè)計(jì)題目:簡(jiǎn)易頻率計(jì)數(shù)器姓名:學(xué)號(hào):
班級(jí):09級(jí)電子信息工程一班指導(dǎo)老師:粟建新
一、實(shí)驗(yàn)?zāi)康?.要求學(xué)生具有制作調(diào)試單片機(jī)最小系統(tǒng)及外設(shè)的能力,能夠掌握單片機(jī)內(nèi)部資源的使用。
2.熟練掌握焊接技術(shù)的基礎(chǔ)上,能熟練使用單片機(jī)軟件開(kāi)發(fā)環(huán)境Keil C51編程調(diào)試,并使用STC ISP調(diào)試工具采用串口下載方式聯(lián)調(diào)制作的單片機(jī)最小系統(tǒng)。
二、實(shí)驗(yàn)要求
自制一個(gè)單片機(jī)最小系統(tǒng),包括串口下載、復(fù)位電路,采用外部計(jì)數(shù)器T0或T1作為外部頻率輸入,外部頻率由信號(hào)源提供,計(jì)算出來(lái)的頻率顯示在四位一體的數(shù)碼管上。
三、實(shí)驗(yàn)器材
單片機(jī)'STC89C54RD+一個(gè),晶振一個(gè),電容3個(gè),電阻3個(gè),排阻一個(gè)(由于實(shí)驗(yàn)室不提供排阻,實(shí)驗(yàn)過(guò)程中用了10個(gè)10千歐姆的電阻代替),4位一體數(shù)碼顯示管一個(gè),按鈕1個(gè)。
四、實(shí)驗(yàn)原理圖
五、硬件連線
1.將P0口與4位一體數(shù)碼管的ABCDEFG和DP相連;
2.將P2口的2.0,2.1,2.2分別與數(shù)碼管的S1,S2,S3相連;
3.引出14做激勵(lì)輸入口。
六、程序設(shè)計(jì)內(nèi)容
1.定時(shí)/計(jì)數(shù)器T0 和T1 的工作方式設(shè)置,由圖可知,T0 是工作在計(jì)數(shù)狀態(tài)下,對(duì)輸入的頻率信號(hào)進(jìn)行計(jì)數(shù),但對(duì)工作在計(jì)數(shù)狀態(tài)下的T0,最大計(jì)數(shù)值為fOSC/24,由于fOSC=12MHz,因此:T0 的最大計(jì)數(shù)頻率為250KHz。對(duì)于頻率的概念就是在一秒只數(shù)脈沖的個(gè) 數(shù),即為頻率值。所以T1 工作在定時(shí)狀態(tài)下,每定時(shí)1秒鐘到,就停止T0 的計(jì)數(shù),而從T0 的計(jì)數(shù)單元中讀取計(jì)數(shù)的數(shù)值,然后進(jìn)行數(shù)據(jù)處理。送到數(shù)碼管顯示出來(lái)。
2.T1工作在定時(shí)狀態(tài)下,最大定時(shí)時(shí)間為65ms,達(dá)不到1秒的定時(shí),所以采用定時(shí)50ms,共定時(shí)20 次,即可完成1 秒的定時(shí)功能。
七、C語(yǔ)言源程序
#include
#define uchar unsigned char//變量宏定義
#define uint unsigned int
unsigned char code table2[]={ //共陽(yáng)極0~f數(shù)碼管編碼
0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e};
uintnumber1[4]={0,0,0,0};
uint count=0;//定義脈沖計(jì)數(shù)變量
sbit K1=P1^0;
sbit K2=P1^7;
void delay(uchar y)// 延時(shí)子程序
{
uchar x;
while(y--)for(x=110;x>0;x--);
}
display(x)// 顯示子程序
{uintc,g=0x01;
number1[0]=x/1000;
number1[1]=x%1000/100;
number1[2]=x%1000%100/10;
number1[3]=x%1000%100%10;
for(c=0;c<4;c++)
{
P2=g;//位選
P0=table2[number1[c]];//段選
delay(15);//簡(jiǎn)短的延時(shí)
g=g<<1;//左移為了掃描位選
}}
void main()
{
IE=0x8a;
TMOD=0x51;
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
while(1)
{
if(K1==0)
{
delay(10);
if(K1==0)
{count=0;
TR0=TR1=1;
}
}
}
}
void t0()interrupt
1{ uchar K;
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;// 開(kāi)總中斷和T0,T1// 設(shè)置中斷工作方式//當(dāng)按鍵按下時(shí)啟動(dòng)T0和T1//定時(shí)計(jì)數(shù)器T0子程序
if(++K==20)
{
TR1=TR0=K=0;
count=TH1*256+TL1;
display(count);
TH1=TL1=0;
}
}
//關(guān)兩個(gè)中斷//當(dāng)?shù)揭幻牒?,?jì)下T1收到的脈沖個(gè)數(shù) //T1清零
八、實(shí)驗(yàn)心得
通過(guò)這次課程設(shè)計(jì),我熟悉了Keil C51編程與PROTUSE的使用,對(duì)單片機(jī)的使用有了更深刻的了解,在焊接與測(cè)試過(guò)程中也懂得了對(duì)任何的細(xì)節(jié)必須分外注意,不能粗心大意。實(shí)驗(yàn)由兩部分組成,仿真和焊板子,仿真過(guò)程用運(yùn)用了keil c51軟件和PROTUSE,這兩個(gè)軟件以前沒(méi)有用過(guò),通過(guò)這次課程設(shè)計(jì),我學(xué)習(xí)了這兩種軟件的基本上使用,是此次課程設(shè)計(jì)比較大的收獲。焊接過(guò)程中,由于從大一開(kāi)始已經(jīng)有好幾次的焊接經(jīng)歷,我吸取以前的教訓(xùn),在這次的焊接過(guò)程中在排版,接線上都有了很大的改善,而且焊點(diǎn)基本上沒(méi)有虛焊,只不過(guò)焊接復(fù)位電路時(shí)沒(méi)認(rèn)真看仿真圖,導(dǎo)致后面數(shù)碼管沒(méi)亮,但是我仔細(xì)檢查后發(fā)現(xiàn)了錯(cuò)誤所在,通過(guò)檢查錯(cuò)誤這一步,我對(duì)我自己做焊接試驗(yàn)有了很大的信心,因?yàn)槲抑懒巳绾斡萌f(wàn)用表檢查錯(cuò)誤??傊n程設(shè)計(jì)不僅讓我們溫習(xí)了單片機(jī)的設(shè)計(jì)思路與編程語(yǔ)言,而且鍛煉了我們實(shí)際動(dòng)手能力,將理論與實(shí)踐相結(jié)合了。
第三篇:?jiǎn)纹瑱C(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)用開(kāi)發(fā)技術(shù)的相關(guān)軟件如 keill、STC_ISP_V394等,能夠使用c語(yǔ)言的語(yǔ)言編程簡(jiǎn)單的功能。
二、設(shè)計(jì)的思想:
利用所提供的單片機(jī)和開(kāi)發(fā)板的原理圖用keill軟件編程程序以實(shí)現(xiàn)一些功能。然后用STC_ISP_V394.exe軟件將編譯完全正確的程序生成的hxe文件下載到開(kāi)發(fā)板上,再調(diào)試編譯的程序能否實(shí)現(xiàn)其所設(shè)計(jì)的功能。
1、對(duì)蜂鳴器的了解:
蜂鳴器是一種一體化結(jié)構(gòu)的電子訊響器,采用直流電壓供電,它由振蕩器、電磁線圈、磁鐵、振動(dòng)膜片及外殼組成,接通電源后,振蕩器產(chǎn)生的音頻信號(hào)由電流通過(guò)電磁線圈,使電磁線圈產(chǎn)生磁場(chǎng),振動(dòng)膜片在電磁線圈和磁鐵的相互作用下,周期性的振動(dòng)發(fā)聲。
2、設(shè)計(jì):
我們所使用的開(kāi)發(fā)板實(shí)物圖如圖一,單片機(jī)對(duì)右上角蜂鳴器的控制是加入三極管接入vcc,單片機(jī)的第22引腳和負(fù)極上,以此來(lái)控制蜂鳴器工作。單片機(jī)我們選擇STC89C52RC+1602液晶來(lái)實(shí)現(xiàn)對(duì)蜂鳴器的控制及顯示所需要的信息。
圖一 調(diào)試說(shuō)明:
首先用Keil軟件創(chuàng)建一個(gè)工程,將程序源代碼輸入并編譯生成單片可執(zhí)行的.hex文件。其次,打開(kāi)單片機(jī)實(shí)踐板的電源,接好串口線,用STC-ISP燒錄軟件,將.hex文件燒錄入單片機(jī)中。程序下載完畢后,單片機(jī)會(huì)自動(dòng)執(zhí)行程序功能。最后,觀察程序功能的執(zhí)行情況,看是否達(dá)到了設(shè)計(jì)要求。
如果單片機(jī)實(shí)踐板硬件電路的執(zhí)行結(jié)果與設(shè)計(jì)結(jié)果一致,則說(shuō)明設(shè)計(jì)過(guò)程及流程沒(méi)有問(wèn)題,完全符合設(shè)計(jì)要求。否則,先檢查單片機(jī)實(shí)踐板的硬件電路是否完好,是否有斷點(diǎn)、漏焊、虛焊以及元器件是否完好等情況,排除故障重新連接后重新進(jìn)行調(diào)試。如果仍然無(wú)法正
常實(shí)現(xiàn),則說(shuō)明程序編寫(xiě)有誤,需要認(rèn)真檢查程序流程,然后經(jīng)過(guò)反復(fù)的修改與調(diào)試排除故障,實(shí)現(xiàn)設(shè)計(jì)要求的各項(xiàng)功能。編譯和燒寫(xiě)該程序到單片機(jī):
(1)用Keil編譯上面的代碼,并設(shè)置產(chǎn)生16進(jìn)制代碼文件*.hex.(2)用專用下載線,連接好實(shí)驗(yàn)板和電腦串口(DB9)(2)運(yùn)行hex文件燒寫(xiě)軟件STC_ISP_V394.exe
選單片機(jī)的型號(hào),并打開(kāi)編譯產(chǎn)生好的hex文件
點(diǎn)擊下載,給開(kāi)發(fā)板上電。
3、實(shí)現(xiàn)的功能:使用單片機(jī)將歌曲《八月桂花》的調(diào)子通過(guò)蜂鳴器播放出來(lái),用1602液晶將想要表達(dá)的信息有步驟地顯示在液晶顯示屏上,并且調(diào)子與顯示內(nèi)容可以任意通過(guò)修改的程序燒錄到單片機(jī)內(nèi),實(shí)現(xiàn)設(shè)計(jì)產(chǎn)品的使用性與靈活性。
三、實(shí)驗(yàn)程序:
/************************************************************************
[主題] C51音樂(lè)程序《八月桂花》
[功能]
通過(guò)單片機(jī)演奏音樂(lè),顯示一些內(nèi)容
/**********************************************************************/
#include
#include
//本例采用89C52, 晶振為11.0592MHZ
//關(guān)于如何編制音樂(lè)代碼, 其實(shí)十分簡(jiǎn)單,各位可以看以下代碼.//頻率常數(shù)即音樂(lè)術(shù)語(yǔ)中的音調(diào),而節(jié)拍常數(shù)即音樂(lè)術(shù)語(yǔ)中的多少拍;
//所以拿出譜子, 試探編吧!
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(){
// 測(cè)試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);
// 寫(xiě)入指令數(shù)據(jù)到LCD //設(shè)定顯示位置
}
lcd_wdat(BYTE dat)
{
//寫(xiě)入字符顯示數(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ù)//顯示開(kāi),關(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 ]!= '