畢業(yè)論文 跳繩儀設(shè)計
資源目錄里展示的全都有,所見即所得。下載后全都有,請放心下載。原稿可自行編輯修改=【QQ:401339828 或11970985 有疑問可加】
?LCD1602中文資料一
?
?
一:液晶顯示器各種圖形的顯示原理?? 線段的顯示:點陣圖形式液晶由M×N個顯示單元組成,假設(shè)LCD顯示屏有64行,每行有128列,每8列對應(yīng)1字節(jié)的8位,即每行由16字節(jié),共16×8=128個點組成,屏上64×16個顯示單元與顯示RAM區(qū)1024字節(jié)相對應(yīng),每一字節(jié)的內(nèi)容和顯示屏上相應(yīng)位置的亮暗對應(yīng)。例如屏的第一行的亮暗由RAM區(qū)的000H——00FH的16字節(jié)的內(nèi)容決定,當(dāng)(000H)=FFH時,則屏幕的左上角顯示一條短亮線,長度為8個點;當(dāng)(3FFH)=FFH時,則屏幕的右下角顯示一條短亮線;當(dāng)(000H)=FFH,(001H)=00H,(002H)=00H,……(00EH)=00H,(00FH)=00H時,則在屏幕的頂部顯示一條由8段亮線和8條暗線組成的虛線。這就是LCD顯示的基本原理。
字符的顯示
???用LCD顯示一個字符時比較復(fù)雜,因為一個字符由6×8或8×8點陣組成,既要找到和顯示屏幕上某幾個位置對應(yīng)的顯示RAM區(qū)的8字節(jié),還要使每字節(jié)的不同位為“1”,其它的為“0”,為“1”的點亮,為“0”的不亮。這樣一來就組成某個字符。但由于內(nèi)帶字符發(fā)生器的控制器來說,顯示字符就比較簡單了,可以讓控制器工作在文本方式,根據(jù)在LCD上開始顯示的行列號及每行的列數(shù)找出顯示RAM對應(yīng)的地址,設(shè)立光標(biāo),在此送上該字符對應(yīng)的代碼即可。
漢字的顯示
?? 漢字的顯示一般采用圖形的方式,事先從微機(jī)中提取要顯示的漢字的點陣碼(一般用字模提取軟件),每個漢字占32B,分左右兩半,各占16B,左邊為1、3、5……右邊為2、4、6……根據(jù)在LCD上開始顯示的行列號及每行的列數(shù)可找出顯示RAM對應(yīng)的地址,設(shè)立光標(biāo),送上要顯示的漢字的第一字節(jié),光標(biāo)位置加1,送第二個字節(jié),換行按列對齊,送第三個字節(jié)……直到32B顯示完就可以LCD上得到一個完整漢字?
?二:1602字符型LCD簡介
????1·字符型液晶顯示模塊是一種專門用于顯示字母、數(shù)字、符號等點陣式LCD,目前常用16*1,16*2,20*2和40*2行等的模塊。下面以長沙太陽人電子有限公司的1602字符型液晶顯示器為例,介紹其用法。一般1602字符型液晶顯示器實物如圖
?
????????????????????????????????? 圖一
?2·1602LCD的基本參數(shù)及引腳功能
?? 1602LCD分為帶背光和不帶背光兩種,基控制器大部分為HD44780,帶背光的比不帶背光的厚,是否帶背光在應(yīng)用中并無差別,兩者尺寸差別如下圖
??????????????????????????????? 圖二
3`LCD1602主要技術(shù)參數(shù):?
?顯示容量:16×2個字符
?芯片工作電壓:4.5—5.5V
?工作電流:2.0mA(5.0V)
?模塊最佳工作電壓:5.0V
?字符尺寸:2.95×4.35(W×H)mm
4`引腳功能說明
1602LCD采用標(biāo)準(zhǔn)的14腳(無背光)或16腳(帶背光)接口,各引腳接口說明如表
?
編號
符號
引腳說明
編號
符號
引腳說明
1
VSS
電源地
9
D2
數(shù)據(jù)
2
VDD
電源正極
10
D3
數(shù)據(jù)
3
VL
液晶顯示偏壓
11
D4
數(shù)據(jù)
4
RS
數(shù)據(jù)/命令選擇
12
D5
數(shù)據(jù)
5
R/W
讀/寫選擇
13
D6
數(shù)據(jù)
6
E
使能信號
14
D7
數(shù)據(jù)
7
D0
數(shù)據(jù)
15
BLA
背光源正極
8
D1
數(shù)據(jù)
16
BLK
背光源負(fù)極
??????????????????????? ?表1 引腳接口說明表
第1腳:VSS為地電源。
第2腳:VDD接5V正電源。
第3腳:VL為液晶顯示器對比度調(diào)整端,接正電源時對比度最弱,接地時對比度最高,對比度過高時會產(chǎn)生“鬼影”,使用時可以通過一個10K的電位器調(diào)整對比度。
第4腳:RS為寄存器選擇,高電平時選擇數(shù)據(jù)寄存器、低電平時選擇指令寄存器。
第5腳:R/W為讀寫信號線,高電平時進(jìn)行讀操作,低電平時進(jìn)行寫操作。當(dāng)RS和R/W共同為低電平時可以寫入指令或者顯示地址,當(dāng)RS為低電平R/W為高電平時可以讀忙信號,當(dāng)RS為高電平R/W為低電平時可以寫入數(shù)據(jù)。
第6腳:E端為使能端,當(dāng)E端由高電平跳變成低電平時,液晶模塊執(zhí)行命令。
第7~14腳:D0~D7為8位雙向數(shù)據(jù)線。
第15腳:背光源正極。
第16腳:背光源負(fù)極。
5`其與單片機(jī)的連接如下圖所示
LCD1602中文資料二(續(xù)一)
由于篇幅限制,此是LED中文資料的續(xù)寫,如訪問上篇內(nèi)容請點擊:LCD1602中文資料一
6`1602液晶模塊內(nèi)部的控制器共有11條控制指令,如下表所示
序號
指令
RS
R/W
D7
D6
D5
D4
D3
D2
D1
D0
1
清顯示
0
0
0
0
0
0
0
0
0
1
2
光標(biāo)返回
0
0
0
0
0
0
0
0
1
*
3
置輸入模式
0
0
0
0
0
0
0
1
I/D
S
4
顯示開/關(guān)控制
0
0
0
0
0
0
1
D
C
B
5
光標(biāo)或字符移位
0
0
0
0
0
1
S/C
R/L
*
*
6
置功能
0
0
0
0
1
DL
N
F
*
*
7
置字符發(fā)生存貯器地址
0
0
0
1
字符發(fā)生存貯器地址
8
置數(shù)據(jù)存貯器地址
0
0
1
顯示數(shù)據(jù)存貯器地址
9
讀忙標(biāo)志或地址
0
1
BF
計數(shù)器地址
10
寫數(shù)到CGRAM或DDRAM)
1
0
要寫的數(shù)據(jù)內(nèi)容
11
從CGRAM或DDRAM讀數(shù)
1
1
讀出的數(shù)據(jù)內(nèi)容
?
????????????????????????????????? ?表一
1602液晶模塊的讀寫操作,屏幕和光標(biāo)的操作都是通過指令編程來實現(xiàn)的。(說明1為高電平,0為低電平)
指令1:清顯示,指令碼01H,光標(biāo)復(fù)位到地址00H位置
指令2:光標(biāo)復(fù)位,光標(biāo)返回到地址00H
指令3:光標(biāo)和顯示位置設(shè)置I/D,光標(biāo)移動方向,高電平右移,低電平左移,S:屏幕上所有文字是否左移或右移,高電平表示有效,低電平表示無效。
指令4:顯示開關(guān)控制。D:控制整體的顯示開與關(guān),高電平表示開顯示,低電平表示關(guān)顯示。C:控制光標(biāo)的開與關(guān),高電平表示有光標(biāo),低電平表示無光標(biāo) B:控制光標(biāo)是否閃爍,高電平閃爍,低電平不閃爍。
指令5:光標(biāo)或顯示移位 S/C :高電平時顯示移動的文字,低電平時移動光標(biāo)
指令6:功能設(shè)置命令 DL:高電平時為4位總線,低電平時為8位總線 N:低電平時為單行顯示,高電平時為雙行顯示,F(xiàn):低電平時顯示5X7的點陣字符,高電平時顯示5X10的顯示字符。
指令7:字符發(fā)生器RAM地址設(shè)置。
指令8:DDRAM地址設(shè)置。
指令9:讀忙信號和光標(biāo)地址 BF:忙標(biāo)志位,高電平表示忙,此時模塊不能接收命令或數(shù)據(jù),如果為低電平表示不忙。
與HD44780相兼容的芯片時序表如下:
?
讀狀態(tài)
輸入
RS=L,R/W=H,E=H
輸出
D0—D7=狀態(tài)字
寫指令
輸入
RS=L,R/W=L,D0—D7=指令碼,E=高脈沖
輸出
無
讀數(shù)據(jù)
輸入
RS=H,R/W=H,E=H
輸出
D0—D7=數(shù)據(jù)
寫數(shù)據(jù)
輸入
RS=H,R/W=L,D0—D7=數(shù)據(jù),E=高脈沖
輸出
無
?
????????????????????????????????表二:基本操作時序表
讀寫操作時序如圖所示
?
??????????????????????????????? 圖三:讀操作時序
????????????????????????????? ?圖四:寫操作時序
7:1602LCD的RAM地址映射及標(biāo)準(zhǔn)字庫表
液晶顯示模塊是一個慢顯示器件,所以在執(zhí)行每條指令之前一定要確認(rèn)模塊的忙標(biāo)志為低電平,表示不忙,否則此指令失效。要顯示字符時要先輸入顯示字符地址,也就是告訴模塊在,哪里顯示字符,圖是1602的內(nèi)部顯示地址。
??????????????????? 圖五:LCD1602內(nèi)部顯示地址
例如第二行第一個字符的地址是40H,那么是否直接寫入40H就可以將光標(biāo)定位在第二行第一個字符的位置呢?這樣不行,因為寫入顯示地址時要求最高位D7恒定為高電平1所以實際寫入的數(shù)據(jù)應(yīng)該是01000000B(40H)+10000000B(80H)=11000000B(C0H)。
???? 在對液晶模塊的初始化中要先設(shè)置其顯示模式,在液晶模塊顯示字符時光標(biāo)是自動右移的,無需人工干預(yù)。每次輸入指令前都要判斷液晶模塊是否處于忙的狀態(tài)。
???? 1602液晶模塊內(nèi)部的字符發(fā)生存儲器(CGROM)已經(jīng)存儲了160個不同的點陣字符圖形,如圖10-58所示,這些字符有:阿拉伯?dāng)?shù)字、英文字母的大小寫、常用的符號、和日文假名等,每一個字符都有一個固定的代碼,比如大寫的英文字母“A”的代碼是01000001B(41H),顯示時模塊把地址41H中的點陣字符圖形顯示出來,我們就能看到字母“A”。
#include
#define uchar unsigned char
#define uint unsigned int
sbit rs=P3^5;
sbit lcden=P3^4;
sbit rw=P3^6;
uchar table1[]="yang wen hao";
uchar table2[]="1234567654321";
void delay(uint x)
{
uint a,b;
for(a=x;a>0;a--)
for(b=10;b>0;b--);
}
void delay1(uint x)
{
uint a,b;
for(a=x;a>0;a--)
for(b=100;b>0;b--);
}
void write_com(uchar com)
{
lcden=0;
rs=0;
rw=0;
P0=com;
delay(10);
lcden=1;
delay(20);
lcden=0;
}
void write_date(uchar date)
{
lcden=0;
rs=1;
rw = 0;
P0=date;
delay(10);
lcden=1;
delay(20);
lcden=0;
}
void init()
{
write_com(0x38);
delay(20);
write_com(0x0f);
delay(20);
write_com(0x06);
delay(20);
write_com(0x01);
delay(20);
}
void main()
{
uchar a;
init();
write_com(0x80);
delay(20);
for(a=0;a<12;a++)
{
write_date(table1[a]);
delay(20);
}
write_com(0x80+0x40);
delay(20);
for(a=0;a<13;a++)
{
write_date(table2[a]);
delay(40);
}
while(1);
}
目 錄
1 引言 2
2 方案論證 2
3 總體設(shè)計框圖 2
4 部分電路元件的介紹 3
4.1 單片機(jī)STC89C58RD+ 3
4.1.1反射式紅外傳感器E18-D80NK-N 3
4.1.2 對射式紅外傳感器3MNK 4
4.1.3 液晶顯示器 LCD1602 4
5 整體電路介紹 13
5.1 總的工作原理分析 14
5.2 原理圖 15
5.1 PCB圖 16
6 程序軟件 17
7 總結(jié) 18
謝辭 19
參考文獻(xiàn) 21
1 引言
跳繩是一種以四肢肌肉活動為主的全身運動,它花樣繁多,可簡可繁,隨時可做,一學(xué)就會,運動量可以根據(jù)動作繁簡和速度快慢來調(diào)節(jié),特別適宜在氣溫較低的季節(jié)作為健身運動是一項男女老少皆宜的運動項目。
跳繩不僅有利于發(fā)展腿部、上肢、腰部的肌肉力量,提高靈敏性、協(xié)調(diào)性、耐力等身體素質(zhì),尤其可以促進(jìn)少年兒童的身體發(fā)育,還有利于加強(qiáng)血液循環(huán),促進(jìn)體內(nèi)新陳代謝,提高神經(jīng)系統(tǒng)的協(xié)調(diào)配合能力。同時,研究證實,跳繩可以預(yù)防諸如糖尿病、關(guān)節(jié)炎、肥胖癥、骨質(zhì)疏松、高血壓、肌肉萎縮、高血脂、失眠癥、抑郁癥、更年期綜合征等多種癥病。對哺乳期和絕經(jīng)期婦女來說,跳繩還兼有放松情緒的積極作用,因而也有利于女性的心理健康。
在跳繩時身體以兩腿的彈跳和雙上肢的搖動為主,手握繩把不停的搖動會刺激拇指上的穴位,增加腦神經(jīng)細(xì)胞的活力。跳繩時的各種復(fù)雜的動作能夠使大腦皮層的分析與綜合機(jī)能得到提高。從運動量來說,持續(xù)跳繩10分鐘,與慢跑30分鐘或跳健身舞20分鐘相差無幾,可謂耗時少、耗能大的需氧運動。
“模擬跳繩儀”與手?jǐn)[式跳繩不同,它是用紅外線的發(fā)射與接收來檢測手的移動以及腳的跳動,代替了繩子的擺動,從而實現(xiàn)了模擬跳繩的功能。當(dāng)紅外傳感器檢測到物體遮擋時,將輸出一個低電平,當(dāng)正常狀態(tài)下沒有物體遮擋時,輸出一個高電平,當(dāng)物體在不停的移動時,通過檢測紅外傳感器的輸出電平的不斷變化來統(tǒng)計計數(shù),從而實現(xiàn)電子自動計數(shù)的功能;
“模擬跳繩儀”設(shè)計時,采用紅外感器,無觸點、無損傷、壽命長。設(shè)計制作成小型的可適合家庭使用,設(shè)計制作成人型的可用于學(xué)校、機(jī)關(guān)、廠礦、小區(qū)等集體跳繩使用。如果該項目設(shè)計的好,一定會推動群眾性跳繩健身運動的發(fā)展。
2 方案論證
“模擬跳繩儀”是采用紅外傳感器的原理進(jìn)行一定規(guī)律的掃描,代替?zhèn)鹘y(tǒng)的手動擺繩,人進(jìn)入跳繩區(qū)域(即紅外檢測區(qū)域)后,跳繩機(jī)開始計數(shù),如果犯規(guī),即該跳起來時沒有跳起來,紅外傳感器沒有檢測到腳的移動,模擬跳繩儀將不計數(shù),即顯示器上的計數(shù)值不會增加。
3 總體設(shè)計框圖
模擬跳繩儀的設(shè)計主控MCU采用STC89C58RD+單片機(jī),用對射式紅外傳感器3MNK檢測腳的起跳動作,用反射式紅外線傳感器E18-d80nk-N檢測手的不停移動,用LCD1602來顯示計數(shù)跳繩的次數(shù)。其中對射式紅外傳感器接收器的輸出信號連接STC89C58RD+的一個外部中斷引腳INT1,反射式紅外傳感器的輸出信號連接STC89C58RD+的另外一個外部中斷引腳INT0。在跳繩的過程中如果腳阻擋了光線,則是犯規(guī),犯規(guī)計數(shù)器將會記下犯規(guī)的次數(shù)。圖1為本設(shè)計的總體設(shè)計框圖。
電 源
反射式紅外傳感器
單
片
機(jī)
手
對射式紅外傳感器發(fā)送端
對射式紅外傳感器接收端
腳
LCD顯示器
圖1 總體設(shè)計框圖
4 部分電路元件的介紹
4.1單片機(jī)STC89C58RD+
圖2
STC89C58RD+引出端的功能圖如上圖2,STC89C58RD+單片機(jī)是STC推出的新一代高速/低功耗/超強(qiáng)抗干擾的單片機(jī),指令代碼完全兼容傳統(tǒng)的8051單片機(jī),12時鐘/機(jī)器周期和6時鐘機(jī)器周期可以任意選擇。
1、 增強(qiáng)型8051單片機(jī),12時鐘/機(jī)器周期和6時鐘機(jī)器周期可以任意選擇,指令代碼完全兼容傳統(tǒng)的8051
2、 工作電壓在5.5V-3.3V
3、 工作頻率范圍:0-40MHz,相當(dāng)于普通8051的0-80MHz實際工作頻率可達(dá)到48MHz
4、 用戶應(yīng)用程序空間為32K,數(shù)據(jù)存儲空間為1280字節(jié),內(nèi)部EEPROM為29K
5、 32個通用IO口,P0口是開漏輸出,作為總線擴(kuò)展用時,不用上拉電阻;用作普通IO口用時,必須外接上拉電阻
6、 ISP(在系統(tǒng)可編程)/IAP(在應(yīng)用可編程),無需專用的編程器和仿真器,可通過串口(RXD/P3.0,TXD/P3.1)直接下載用戶程序,數(shù)秒即可完成
7、 具有內(nèi)部看門狗
8、 共有2個16位定時器/計數(shù)器,還可以當(dāng)成兩個8位定時器使用
9、 具有兩個外部中斷
10、 具有通用異步串口(UART),還可以用定時器軟件實現(xiàn)多個UART
11、 工作溫度范圍:-40-80攝氏度(工業(yè)級)/0-75攝氏度(商業(yè)級)
12、 封裝:PDIP-40
4.1.1 反射式紅外傳感器E18-d80nk-N
E18-D80NK-N這是一種集發(fā)射與接收于一體的光電傳感器,發(fā)射光經(jīng)過調(diào)制后發(fā)出,接收頭對反射光進(jìn)行解調(diào)輸出。有效的避免了可見光的干擾。透鏡的使用,也使得這款傳感器最遠(yuǎn)可以檢測80厘米距離的問題(由于紅外光的特性,不同顏色的物體,能探測的最大距離也有不同;白色物體最遠(yuǎn),黑色物體最近)。
檢測障礙物的距離可以根據(jù)要求通過尾部的電位器旋鈕進(jìn)行調(diào)節(jié)。
該傳感器具有探測距離遠(yuǎn)、受可見光干擾小、價格便宜、易于裝配、使用方便等特點,可以廣泛應(yīng)用于機(jī)器人避障、流水線計件等眾多場合。
電氣特性:
紅色:VCC;黑色:GND;黃色:OUT。
U:5VDC
I:100mA
Sn:3-80CM
尺寸:
直徑:17MM
傳感器長度:45MM
引線長度:45CM
4.1.1 對射式紅外傳感器3MNK
3MNK是一種對射式光電傳感器,其物體不局限于金屬,該傳感器探測距離遠(yuǎn)范圍為10CM-3M,由于該傳感器不是精密產(chǎn)品,所以其測量有誤差。
技術(shù)參數(shù):
1、 電壓:5VDC
2、 電流10 mA
3、 測量范圍:10CM-3M
4、 NPN常開
5、 尺寸:32*25*14MM
6、 引線長度:45CM
7、 種類:對射式
8、 材料:聚合物
9、 材料物理性質(zhì):電感式
10、 制作工藝:集成
11、 輸出信號:開關(guān)型
4.2液晶顯示屏LCD1602
LCD1602是一種專門用于顯示字母、數(shù)字、符號等點陣式LCD字符型液晶顯示模塊
主要技術(shù)參數(shù):
?顯示容量:16×2個字符
?芯片工作電壓:4.5—5.5V
?工作電流:2.0mA(5.0V)
?模塊最佳工作電壓:5.0V
?字符尺寸:2.95×4.35(W×H)mm
4`引腳功能說明
1602LCD采用標(biāo)準(zhǔn)的14腳(無背光)或16腳(帶背光)接口,各引腳接口說明如表
?
編號
符號
引腳說明
編號
符號
引腳說明
1
VSS
電源地
9
D2
數(shù)據(jù)
2
VDD
電源正極
10
D3
數(shù)據(jù)
3
VL
液晶顯示偏壓
11
D4
數(shù)據(jù)
4
RS
數(shù)據(jù)/命令選擇
12
D5
數(shù)據(jù)
5
R/W
讀/寫選擇
13
D6
數(shù)據(jù)
6
E
使能信號
14
D7
數(shù)據(jù)
7
D0
數(shù)據(jù)
15
BLA
背光源正極
8
D1
數(shù)據(jù)
16
BLK
背光源負(fù)極
??????????????????????? ?表1 引腳接口說明表
第1腳:VSS為地電源。
第2腳:VDD接5V正電源。
第3腳:VL為液晶顯示器對比度調(diào)整端,接正電源時對比度最弱,接地時對比度最高,對比度過高時會產(chǎn)生“鬼影”,使用時可以通過一個10K的電位器調(diào)整對比度。
第4腳:RS為寄存器選擇,高電平時選擇數(shù)據(jù)寄存器、低電平時選擇指令寄存器。
第5腳:R/W為讀寫信號線,高電平時進(jìn)行讀操作,低電平時進(jìn)行寫操作。當(dāng)RS和R/W共同為低電平時可以寫入指令或者顯示地址,當(dāng)RS為低電平R/W為高電平時可以讀忙信號,當(dāng)RS為高電平R/W為低電平時可以寫入數(shù)據(jù)。
第6腳:E端為使能端,當(dāng)E端由高電平跳變成低電平時,液晶模塊執(zhí)行命令。
第7~14腳:D0~D7為8位雙向數(shù)據(jù)線。
第15腳:背光源正極。
第16腳:背光源負(fù)極。
5`其與單片機(jī)的連接如下圖所示
1602液晶模塊內(nèi)部的控制器共有11條控制指令,如下表所示
序號
指令
RS
R/W
D7
D6
D5
D4
D3
D2
D1
D0
1
清顯示
0
0
0
0
0
0
0
0
0
1
2
光標(biāo)返回
0
0
0
0
0
0
0
0
1
*
3
置輸入模式
0
0
0
0
0
0
0
1
I/D
S
4
顯示開/關(guān)控制
0
0
0
0
0
0
1
D
C
B
5
光標(biāo)或字符移位
0
0
0
0
0
1
S/C
R/L
*
*
6
置功能
0
0
0
0
1
DL
N
F
*
*
7
置字符發(fā)生存貯器地址
0
0
0
1
字符發(fā)生存貯器地址
8
置數(shù)據(jù)存貯器地址
0
0
1
顯示數(shù)據(jù)存貯器地址
9
讀忙標(biāo)志或地址
0
1
BF
計數(shù)器地址
10
寫數(shù)到CGRAM或DDRAM)
1
0
要寫的數(shù)據(jù)內(nèi)容
11
從CGRAM或DDRAM讀數(shù)
1
1
讀出的數(shù)據(jù)內(nèi)容
?
????????????????????????????????? ?表一
1602液晶模塊的讀寫操作,屏幕和光標(biāo)的操作都是通過指令編程來實現(xiàn)的。(說明1為高電平,0為低電平)
指令1:清顯示,指令碼01H,光標(biāo)復(fù)位到地址00H位置
指令2:光標(biāo)復(fù)位,光標(biāo)返回到地址00H
指令3:光標(biāo)和顯示位置設(shè)置I/D,光標(biāo)移動方向,高電平右移,低電平左移,S:屏幕上所有文字是否左移或右移,高電平表示有效,低電平表示無效。
指令4:顯示開關(guān)控制。D:控制整體的顯示開與關(guān),高電平表示開顯示,低電平表示關(guān)顯示。C:控制光標(biāo)的開與關(guān),高電平表示有光標(biāo),低電平表示無光標(biāo) B:控制光標(biāo)是否閃爍,高電平閃爍,低電平不閃爍。
指令5:光標(biāo)或顯示移位 S/C :高電平時顯示移動的文字,低電平時移動光標(biāo)
指令6:功能設(shè)置命令 DL:高電平時為4位總線,低電平時為8位總線 N:低電平時為單行顯示,高電平時為雙行顯示,F(xiàn):低電平時顯示5X7的點陣字符,高電平時顯示5X10的顯示字符。
指令7:字符發(fā)生器RAM地址設(shè)置。
指令8:DDRAM地址設(shè)置。
指令9:讀忙信號和光標(biāo)地址 BF:忙標(biāo)志位,高電平表示忙,此時模塊不能接收命令或數(shù)據(jù),如果為低電平表示不忙。
??表二:基本操作時序表
讀寫操作時序如圖所示
?
??????????????????????????????? 圖三:讀操作時序
????????????????????????????? ?圖四:寫操作時序
5 整體電路介紹
5.1 總的工作原理分析
當(dāng)紅外傳感器檢測到有物體時,其輸出端口將輸出高電平,當(dāng)沒有檢測到物體的正常狀態(tài)時,其輸出端口輸出低電平;因此,利用這一特性可以檢測到腳的起跳和手的移動。當(dāng)人站在對射式紅外傳感器(發(fā)送與接收端的中間時),對射式紅外傳感器的接收器會檢測到腳,使其輸出信號為低電平,當(dāng)起跳后,紅外傳感器將不會檢測到腳,輸出高電平,當(dāng)腳落地后,又輸出低電平,于是,我們可以通過單片機(jī)檢測到外部中斷腳出現(xiàn)下降沿時,產(chǎn)生中斷的方式來計數(shù)一次,起跳到落地,單片機(jī)將會產(chǎn)生一次中斷,同理,檢測手的反射式傳感器也可以這樣做。當(dāng)單片機(jī)同時檢測到兩個外部中斷(即人起跳,同時手有晃動動作,即可模擬一次跳繩的動作)計數(shù)跳繩一次,同時,單片機(jī)驅(qū)動LCD1602顯示一次跳繩結(jié)果,并依次累計。
5.2 原理圖
5.3 PCB圖
6. 軟件
Main.c
/************************頭文件及說明*************************/
#include"stc.h"
#include
#include
#include
#include"uart.h"
#include"timer.h"
#include"misc.h"
#include"lcd1602.h"
unsigned char name[] = "IR JUMP TEST";
unsigned char name1[] = "--by Tan Tianyu";
unsigned char table1[12]={'j','u','m','p','c','o','u','n','t',':','0','0'};
unsigned char decade = 0;
unsigned char SkipCnt = 0;
void main(void)
{
LED_ON;
Timer0_Init();
UART_Init();
exit_Init();
lcd1602_init();
clearScreen();
DisplayChar (0,2,name,sizeof(name)-1);
DisplayChar (1,0,name1,sizeof(name1)-1);
delay_ms(4000);
clearScreen();
DisplayChar (0,2,name,sizeof(name)-1);
DisplayChar (1,2,table1,sizeof(table1));
while(1)
{
if(StartDetectFlag)
{
if(DetectHandFlag == 1 && DetectFootFlag == 1)
{
DetectHandFlag = 0;
DetectFootFlag = 0;
if(SkipCnt <= 9)
{
table1[11] = SkipCnt + 0x30;
}
else if(SkipCnt<=99)
{
table1[10] = SkipCnt/10 + 0x30;
table1[11] = SkipCnt%10 + 0x30;
}
else if(SkipCnt >= 100)
{
SkipCnt = 0;
table1[10] = SkipCnt + 0x30;
table1[11] = SkipCnt + 0x30;
}
SkipCnt++;
DisplayChar(1,2,table1,sizeof(table1));
}
}
}
}
Uart.c
/************************頭文件及說明*************************/
#include "stc.h"
#include
#include "uart.h"
void UART_Init(void)
{
TMOD |= 0x20;//配置定時器1工作在模式2
TH1 = 0xFA; //T1的溢出率 = 11.0592MHz/12/(256-TH1) = 153600
TL1 = TH1;
SCON = 0x50;//串口工作在方式1,8位UART,波特率=(2^SMOD/32)*(T1的溢出率) = 9600
PCON = 0x80;// SMOD位置1
EA = 1; //使能總中斷
ES = 1; //使能串口中斷
TR1 = 1; //開啟定時器1
}
void UartSendChar(unsigned char dat)
{
SBUF = dat;
while(!TI);
TI = 0;
}
#if 1
void UartSendChars(unsigned char *dat, unsigned int length)
{
while(length--)
{
UartSendChar(*dat++);
}
}
#endif
void UART_Routine(void) interrupt 4 using 2
{
if(RI)
{
RI=0;
}
}
Timer.c
/************************頭文件及說明*************************/
#include "stc.h"
#include "timer.h"
#include"uart.h"
#include"misc.h"
#define SYSCLK 11059200
#define TIMER_10MS (65536-SYSCLK/12/100)
volatile int timeout = 200;
void Timer0_Init(void)
{
TMOD |= 0x01;//定時器0工作在模式1
TH0 = TIMER_10MS/256;
TL0 = TIMER_10MS%256; //定時時間10ms
ET0 = 1; //使能T0中斷
TR0 = 1; //開啟定時器0計時
}
void Timer0_Routine(void) interrupt 1 //10ms定時中斷服務(wù)子程序
{
TH0 = TIMER_10MS/256;
TL0 = TIMER_10MS%256;
if(StartDetectFlag)
{
timeout--;
if(timeout == 0)
{
StartDetectFlag = 0;
}
}
}
Misc.c
#include"stc.h"
#include"misc.h"
#include"uart.h"
#include"timer.h"
volatile unsigned char StartDetectFlag = 0;
volatile unsigned char DetectHandFlag = 0;
volatile unsigned char DetectFootFlag = 0;
void delay_us(unsigned int i)
{
while(i--);
}
void delay_ms(unsigned int cnt)
{
unsigned int i;
while(cnt--)
{
for(i=0;i<75;i++);
}
}
void exit_Init(void)
{
IT0 = 1; //下降沿觸發(fā)中斷
EX0 = 1; //使能中斷
IT1 = 1;
EX1 = 1;
}
void Int0_Routine(void) interrupt 0
{
//UartSendChar(0x22);
DetectFootFlag = 1;
}
void Int1_Routine(void) interrupt 2
{
//UartSendChar(0x33);
StartDetectFlag = 1;
timeout = 200;//2S定時開啟
DetectHandFlag = 1;
}
LCD.c
#include"stc.h"
#include"lcd1602.h"
#include"misc.h"
const unsigned char address[]=
{0x80,0x81,0x82,0x83,0x84,0x85,0x86,0x87,0x88,0x89,0x8A,0x8B,0x8C,0x8D,0x8E,0x8F,
0xC0,0xC1,0xC2,0xC3,0xC4,0xC5,0xC6,0xC7,0xC8,0xC9,0xCA,0xCB,0xCC,0xCD,0xCE,0xCF};
void write_com(unsigned char com)
{
E = 0;
RS = 0;
W_R = 0;
P2 = com;
delay_us(10);
E = 1;
delay_us(20);
E = 0;
}
void write_date(unsigned char date)
{
E = 0;
RS = 1;
W_R = 0;
P2 = date;
delay_us(10);
E = 1;
delay_us(20);
E = 0;
}
void lcd1602_init(void)
{
write_com(0x38); //設(shè)置顯示模式,8位數(shù)據(jù)總線,雙行顯示,顯示5X10的字符
delay_us(20);
write_com(0x0c);//設(shè)置光標(biāo)打開并閃爍顯示
delay_us(20);
write_com(0x06);//設(shè)置光標(biāo)右移
delay_us(20);
write_com(0x01); //清除屏幕
delay_us(20);
}
void clearScreen(void)
{
delay_us(200);
write_com(0x01);
delay_us(200);
}
void DisplayChar(unsigned char x,unsigned char y,unsigned char *buf,unsigned char size)
{
write_com(address[16*x+y]);
delay_us(20);
while(size--)//空格的地址是0
{
if(y>=16) //判斷換行
{ //若不判斷,則自動從第一行到第三行
y=0;
x++;
}
if(x>=2)
{
x=0;//一屏顯示完,回到屏左上角
}
write_com(address[16*x+y]);//更新地址 一個地址要寫完一個字,則要與兩次數(shù)據(jù)寫完
write_date(*buf);//寫數(shù)據(jù)
buf++;
y++;//寫完一個字地址要往前走一位
delay_us(20);
}
}
7 結(jié)論
畢業(yè)論文是我們本科生在學(xué)習(xí)階段的一次非常難得的理論與實際相結(jié)合的機(jī)會,通過這次比較完整的模擬跳繩儀的設(shè)計,我擺脫了單純的理論知識學(xué)習(xí)狀態(tài)。和實際設(shè)計的結(jié)合鍛煉了我的綜合運用所學(xué)專業(yè)基礎(chǔ)知識的能力,同時也增強(qiáng)我查閱文獻(xiàn)資料、設(shè)計手冊、設(shè)計規(guī)范以及專業(yè)軟件制圖等非專業(yè)能力,而且通過對整體的掌控,對局部的取舍,以及對細(xì)節(jié)的斟酌處理,都使我的能力得到了鍛煉,經(jīng)驗得到了豐富,并且意志力、抗壓能力及耐力水平也都得到了不同程度的提升。這是我們都希望看到的,也正是我們進(jìn)行畢業(yè)設(shè)計的目的所在。
雖然畢業(yè)設(shè)計內(nèi)容繁多,過程繁瑣,但我的收獲卻更加豐富。通過查找資料,設(shè)計電路以及制作電路,能夠讓人詳細(xì)對跳繩儀的工作原理、操作過程以及使用方法有一個深刻的理解。各種芯片的適用條件,各種元件設(shè)備的選用標(biāo)準(zhǔn),我都是隨著設(shè)計的不斷深入而不斷熟悉并學(xué)會應(yīng)用的。
在設(shè)計過程中,和老師的溝通交流更使我從經(jīng)濟(jì)實用的角度對設(shè)計有了新的認(rèn)識,也對自己提出了新的要求。要想更完美的進(jìn)行,與其他專業(yè)人才及老師的交流溝通也是很有必要的。這期間我請教了關(guān)于單片機(jī)、PLC、家電等多方面的各位老師,更加理清了模擬跳繩儀各部分電路的原理知識。提高是有限的,但提高也是全面的,正是這一次設(shè)計讓我積累了無數(shù)實際經(jīng)驗,讓我的頭腦更好的被知識武裝了起來,也必然會讓我在未來的工作學(xué)習(xí)中表現(xiàn)出更高的應(yīng)變能力,更強(qiáng)的溝通力和理解力。
順利如期的完成本次畢業(yè)設(shè)計給了我很大的信心,讓我了解專業(yè)知識的同時也對本專業(yè)的發(fā)展前景充滿信心。雖然有些地方還有不足,但正是因為這些不足在一定程度上給了我們無限的創(chuàng)造力,也是我們更好的去研究、更好的去創(chuàng)造的最大動力,只有發(fā)現(xiàn)問題、面對問題,才有可能解決問題,不足和遺憾不會給我打擊,只會更好的鞭策我前行,今后我更會關(guān)注新技術(shù)新設(shè)備的出現(xiàn),并爭取盡快的掌握這些先進(jìn)的知識,更好的為大眾服務(wù)。
謝辭
在畢業(yè)設(shè)計中,在老師指導(dǎo)和幫助下設(shè)計模擬跳繩儀,使我在理論和實踐方面都受益匪淺,不僅進(jìn)一步豐富了理論知識,而且還提高了動手操作的能力。由于我要參加考研復(fù)試,因此我做畢業(yè)的時間很少,學(xué)校復(fù)試完回來時,剩下的時間已經(jīng)很少了,因此為了讓我更好的完成畢業(yè)設(shè)計,老師不惜犧牲假日和平時的休息時間,為我輔導(dǎo)和及時的解決出現(xiàn)的各種問題。他們求學(xué)的嚴(yán)謹(jǐn)態(tài)度、孜孜不倦的探索精神,令我受益終生。他們對知識地渴求,對生活的樂觀,還有他們永遠(yuǎn)洋溢著笑容的臉龐,讓我們由衷的感激,也由衷的敬佩!也將永遠(yuǎn)銘刻在我的心中,并激勵我奮發(fā)向前!
此外,在畢業(yè)設(shè)計的過程中,我的每一點進(jìn)步和收獲,也離不開同學(xué)們的支持和幫助,在我遇到困難時,他們總是熱情、認(rèn)真的幫助我分析問題,最終和我一起找到解決方案。
大學(xué)四年的學(xué)習(xí)階段伴隨著論文的完成就要結(jié)束了,在即將畢業(yè)的時刻,難以割舍的心情用千言萬語都無法形容,但是在這里我要向所有關(guān)心、幫助我的老師致以衷心的感謝!是您們將自己寶貴的財富無私地奉獻(xiàn)給了我們,讓我們能在學(xué)業(yè)上有所成就;是您們讓我們倍感教師職業(yè)的偉大,教給我們知識,又不忘教育我們?nèi)绾巫鋈?!我真誠對老師們說聲:您們辛苦了,感謝您們這一路來的指導(dǎo)和無微不致的關(guān)懷。同時也要向我的同學(xué)朋友說聲,感謝你們對我的支持和幫助,衷心的祝愿你們事業(yè)有成,一生幸福
參考文獻(xiàn)
[1] 黃繼昌.傳感器工作原理及應(yīng)用實例[M].北京:人民郵電出版社,1998
[2] 卿太全.熱釋電人體紅外傳感器原理及應(yīng)用[J].電子世界1996(10):25 ~ 26
[3] 馮克成.紅外線光學(xué)系統(tǒng)[M].北京:兵器工業(yè)出版社,2005
[4] 顧文郁.光電測技術(shù)[M].上海:上海科學(xué)技術(shù)出版社,2004
[5] 虞光楣.功率放大器的應(yīng)用[M].北京:北京工業(yè)出版社,2004
[6] 守車生.移位寄存器[J].無線電,2000(11):522~523
[7] 荀殿棟.數(shù)字電路設(shè)計實用手冊[M].電子工業(yè)出版社,2005
[8] 福安.電子電路設(shè)計與實踐[M].山東科學(xué)技術(shù)出版社,2004
[9] 劉守義.數(shù)字電子技術(shù)[M].西安電子科技大學(xué)出版,2001
[10] 電子電路手則,第二冊數(shù)電集成部分的由石英晶體震蕩器獲得脈沖信號,2000
[11] 李學(xué)芝.LED數(shù)碼管的使用方法[J].無線電,1999(10):23~24
[12] 洪亞闊.電子檢測儀準(zhǔn)確率的研究.用電器科技.2006(3):37~39
[13] David Ethetidge.Information Networks [M]. Prentice halInternational Ltd ,2005
[14] Head JR.The use of micron aver vehicle detectors with traffic signals [J].Traffic Engineering Control,2006(1):23~25
[15] 吳金戌,郭庭吉等.音樂的應(yīng)用.8051單片機(jī)實踐與應(yīng)用[M].124-130
[16]李朝青.89C2051單片機(jī).單片機(jī)原理及接口技術(shù)[M].北京航空航天大學(xué)出版社, 278
[17] 宋東生.音樂集成電路.無線電[J].2002,(1):59
19
收藏