第一篇:?jiǎn)纹瑱C(jī),紅綠燈顯示實(shí)驗(yàn)報(bào)告
實(shí)
驗(yàn)
報(bào)
告
學(xué)生姓名:
學(xué) 號(hào):
指導(dǎo)教師:
實(shí)驗(yàn)地點(diǎn):
實(shí)驗(yàn)時(shí)間:2018年4月2日 實(shí)驗(yàn) 紅綠燈顯示實(shí)驗(yàn)
一、實(shí)驗(yàn)?zāi)康模?/p>
1.掌握程序控制指令。
2.掌握分支程序、子程序、循環(huán)程序的編寫方法。
3.掌握軟件延時(shí)的方法、了解機(jī)器周期和指令周期的概念。4.了解“靜態(tài)顯示”的含義。
二、實(shí)驗(yàn)內(nèi)容:
在顯示實(shí)驗(yàn)的基礎(chǔ)上,如果將第7位,第3位,第1位分別看成紅燈、黃燈和綠燈,紅燈5秒(對(duì)應(yīng)位顯示0)后,顯示黃燈1秒(對(duì)應(yīng)位顯示0),再顯示綠燈3秒,編寫對(duì)應(yīng)程序,程序要求,延時(shí)使用子程序,最好使用標(biāo)志位。其它內(nèi)容見顯示實(shí)驗(yàn)
三、實(shí)驗(yàn)步驟:
1.程序清單:
a)DpyDisplay.c: #include
typedef unsigned char u8;typedef unsigned int u16;
#define Dpy P0 sbit LSA = P2^2;sbit LSB = P2^3;sbit LSC = P2^4;
u8 code array[17] = {0x3f, 0x06, 0x5b, 0x4f,0x66, 0x6d, 0x7d, 0x07,0x7f, 0x6f, 0x77, 0x7c,0x39, 0x5e, 0x79, 0x71,0x00};
void ls(u8 c, u8 b, u8 a)
{ LSA = a;LSB = b;LSC = c;}
void delay(u16 i){ while(i>0)i--;}
void Dpy1Display(u8 i){ ls(1,1,1);Dpy = array[i];delay(100);Dpy = 0x00;}
void Dpy2Display(u8 i){ ls(1,1,0);Dpy = array[i];delay(100);Dpy = 0x00;}
void Dpy3Display(u8 i){ ls(1,0,1);Dpy = array[i];delay(100);Dpy = 0x00;}
void Dpy4Display(u8 i){ ls(1,0,0);Dpy = array[i];delay(100);Dpy = 0x00;}
void Dpy5Display(u8 i){ ls(0,1,1);Dpy = array[i];delay(100);Dpy = 0x00;}
void Dpy6Display(u8 i){ ls(0,1,0);Dpy = array[i];delay(100);Dpy = 0x00;}
void Dpy7Display(u8 i){ ls(0,0,1);Dpy = array[i];delay(100);Dpy = 0x00;}
void Dpy8Display(u8 i){ ls(0,0,0);Dpy = array[i];delay(100);Dpy = 0x00;}
void DpyDisplay(u8 a, u8 b, u8 c, u8 d, u8 e, u8 f, u8 g, u8 h){ Dpy1Display(a);Dpy2Display(b);Dpy3Display(c);Dpy4Display(d);Dpy5Display(e);Dpy6Display(f);Dpy7Display(g);Dpy8Display(h);} b)main.c: #include
typedef unsigned char u8;typedef unsigned int u16;
extern void DpyDisplay(u8 a, u8 b, u8 c, u8 d, u8 e, u8 f, u8 g, u8 h);
void main(){ u16 i, j, n;n = 108;
while(1){ for(j=10;j>0;j--){
for(i=0;i DpyDisplay(j-1,16,16,16,16,16,16,16);} for(j=2;j>0;j--){ for(i=0;i DpyDisplay(16,16,j-1,16,16,16,16,16);} for(j=5;j>0;j--) } } { } for(i=0;i 2.實(shí)驗(yàn)現(xiàn)象: 開發(fā)板數(shù)碼管第一位從9逐秒遞減至0后,第三位從1逐秒遞減至0,之后第五位從4逐秒遞減至0。3.實(shí)驗(yàn)原理: a)通過發(fā)送段碼選定某位后向該位發(fā)送位碼以點(diǎn)亮一根數(shù)碼管。b)數(shù)碼管以非常短的時(shí)間重復(fù)點(diǎn)亮,利用人的視覺暫留給人以穩(wěn)定顯示字符之感。 c)利用for循環(huán)使數(shù)碼管穩(wěn)定顯示,并使數(shù)字逐秒減少。4.實(shí)驗(yàn)中的注意事項(xiàng)、遇到的問題以及總結(jié): a)點(diǎn)亮數(shù)碼管的循環(huán)函數(shù)中語句盡可能少,防止數(shù)碼管顯示過程中的閃爍。b)最好制作編碼表,設(shè)置輸入值與顯示字符的關(guān)系,后續(xù)即可通過查表完成顯示,可大大減小工作量。 c)利用for控制每位顯示可大大減少代碼量。5.實(shí)驗(yàn)改進(jìn)方向與設(shè)想 可外接不同色LED模擬紅綠燈。 實(shí)驗(yàn)報(bào)告 班級(jí): 學(xué)號(hào): 姓名: 日期: 實(shí)驗(yàn) 一、紅綠燈控制 一、實(shí)驗(yàn)?zāi)康?/p> 熟悉軟件的使用,掌握plc編程的方法,編寫程序控制十字路口的紅綠燈。 二、實(shí)驗(yàn)設(shè)備 一臺(tái)安裝有STEP 7-MivroWIN4.0與S7200_simulation的電腦。 三、控制要求分析 實(shí)驗(yàn)利用PLC控制十字路口的紅綠燈。十字路口的紅綠燈分為橫向控制燈和縱向控制燈,每個(gè)方向有紅、綠、黃3種顏色的控制燈。 當(dāng)電路接通,雙向紅綠燈開始正常工作,橫向的綠燈和縱向的紅燈先亮。橫向的綠燈亮維持8s,在橫向綠燈亮的同時(shí)縱向的紅燈也亮起,并維持10s。第8秒時(shí)橫向的綠燈熄滅,同時(shí)亮起黃燈并維持2s后熄滅。第10s時(shí),橫向黃燈熄滅的同時(shí)亮起紅燈并維持10s,同時(shí)縱向的綠燈亮起并維持8s。當(dāng)縱向綠燈熄滅并亮起黃燈持續(xù)2s后紅燈亮起,同時(shí)橫向的綠燈也亮起并維持8s到此一個(gè)循環(huán)就此結(jié)束下一個(gè)循環(huán)開始。當(dāng)按下緊停按鈕時(shí)兩路同時(shí)亮黃燈2s后,其中一路亮紅燈另一路亮綠燈。本實(shí)驗(yàn)設(shè)置了兩個(gè)緊停按鈕。 四、PLC的I/O分析 I0.1,I0.2兩個(gè)緊停按鈕。M0.1,M0.2中間繼電器。Q0.0橫向綠燈,Q0.1橫向黃燈,Q0.2橫向紅燈,Q0.3縱向紅燈,Q0.4縱向綠燈,Q0.5縱向黃燈。T37、T41為8s定時(shí)器,T38、T42為2s定時(shí)器,T39、T40為10s定時(shí)器。 五、PLC梯形圖程序及指令表程序 梯形圖程序: 指令表程序: LD I0.1 = M0.1 Network 2 LDN M0.2 AN M0.1 AN T37 LDN M0.1 A T38 A M0.2 OLD = Q0.0 Network 3 LDN M0.2 AN M0.1 AN T39 TON T37, 80 Network 4 LDN M0.2 AN M0.1 AN T38 A T37 LDN M0.2 AN T38 A M0.1 OLD LDN M0.1 AN T38 A M0.2 OLD = Q0.1 Network 5 LDN M0.1 AN M0.2 A T37 LDN M0.2 A M0.1 OLD LDN M0.1 A M0.2 OLD TON T38, 20 Network 6 LDN M0.2 AN M0.1 AN T39 A T38 LDN M0.2 A T38 A M0.1 OLD = Q0.2 Network 7 LDN M0.1 AN M0.2 A T38 TON T39, 100 Network 8 LDN M0.1 AN M0.2 AN T40 LDN M0.1 A T42 A M0.2 OLD = Q0.3 Network 9 LDN T42 AN M0.1 AN M0.2 TON T40, 100 Network 10 LDN M0.1 AN M0.2 AN T41 A T40 LDN M0.2 A T38 A M0.1 OLD = Q0.4 Network 11 LDN M0.1 AN M0.2 AN T42 A T40 TON T41, 80 Network 12 LD T41 AN M0.2 AN T42 AN M0.1 LDN T42 A M0.1 AN M0.2 OLD LDN T42 AN M0.1 A M0.2 OLD = Q0.5 Network 13 LDN M0.1 AN M0.2 A T41 LDN M0.2 A M0.1 OLD LD M0.2 AN M0.1 OLD TON T42, 20 Network 14 LD I0.2 = M0.2 六、實(shí)驗(yàn)過程記錄及分析 根據(jù)實(shí)驗(yàn)要求,編寫plc梯形圖程序。打開軟件錄入程序,運(yùn)行調(diào)試直到達(dá)到正確控制紅綠燈的亮滅。模擬軟件S7-200調(diào)試時(shí),雙向紅綠燈開始正常工作,橫向的綠燈和縱向的紅燈先亮。橫向的綠燈亮維持8s,在橫向綠燈亮的同時(shí)縱向的紅燈也亮起,并維持10s。第8秒時(shí)橫向的綠燈熄滅,同時(shí)亮起黃燈并維持2s后熄滅。第10s時(shí),橫向黃燈熄滅的同時(shí)亮起紅燈并維持10s,同時(shí)縱向的綠燈亮起并維持8s。當(dāng)縱向綠燈熄滅并亮起黃燈持續(xù)2s后紅燈亮起,同時(shí)橫向的綠燈也亮起并維持8s到此一個(gè)循環(huán)就此結(jié)束,下一個(gè)循環(huán)開始。按下緊停按鈕I0.1、I0.2時(shí),Q0.1、Q0.5同時(shí)亮起并維持2s后熄滅,同時(shí)其中一路常亮綠燈,另一路常亮紅燈。 說明實(shí)驗(yàn)程序正確,保存好實(shí)驗(yàn)數(shù)據(jù),做好記錄。關(guān)閉軟件。 七、時(shí)序分析 正常無故障運(yùn)行: Q0.0橫向綠燈,Q0.1橫向黃燈,Q0.2橫向紅燈,Q0.3縱向紅燈,Q0.4縱向綠燈,Q0.5縱向黃燈。 I0.1、I0.2為緊停開關(guān) 當(dāng)按下緊停按鈕I0.1:橫向紅燈(Q0.2)亮,縱向綠燈(Q0.4)亮。 當(dāng)按下緊停按鈕I0.2:橫向綠燈(Q0.0)亮,縱向紅燈(Q0.3)亮。 八、實(shí)驗(yàn)心得體會(huì) 通過實(shí)驗(yàn)操作,了解掌握了plc編程的原理和方法,同時(shí)實(shí)驗(yàn)前期遇到很多各類問題,均得到了解決,對(duì)plc產(chǎn)生了初步的興趣。對(duì)以后進(jìn)一步學(xué)習(xí)plc相關(guān)知識(shí)奠定了堅(jiān)實(shí)的基礎(chǔ)。 實(shí) 實(shí) 驗(yàn) 驗(yàn) 報(bào) 報(bào) 告 實(shí)驗(yàn)課程: 單片機(jī)原理及應(yīng)用 班 級(jí): 自動(dòng)化 2 班 學(xué) 號(hào): 姓 名: 教 師: 張 玲 成績(jī): 實(shí) 驗(yàn) 日 期 : ****年**月**日 實(shí)驗(yàn)名稱: 實(shí)驗(yàn) 1-—計(jì)數(shù)顯示器 一、實(shí)驗(yàn)?zāi)康? 學(xué)習(xí)Proteus 軟件得使用,掌握單片機(jī)原理圖得繪圖方法。 二、實(shí)驗(yàn)內(nèi)容: ?1、繪制“計(jì)數(shù)顯示器”電路原理圖;2、利用提供得hex 文件驗(yàn)證此電路得運(yùn)行效果。 三、實(shí)驗(yàn)要求: 提交得實(shí)驗(yàn)報(bào)告中應(yīng)包括:1、繪圖方法簡(jiǎn)述,要求說明元件與電源得選取、擺放及屬性編輯,總線與標(biāo)簽得畫法等內(nèi)容;2、電路原理圖;3、仿真運(yùn)行效果展示,要求就仿真文件加載方法及 3~4幅運(yùn)行截圖進(jìn)行簡(jiǎn)要說明;4、實(shí)驗(yàn)小結(jié),說明遇到得主要問題或?qū)嶒?yàn) 1 體會(huì)等.參考電路原理圖如下: 元件類別 電路符號(hào) 元件名稱 Microprocessor ICs “U1“ 80C51 Miscellaneous “X1”/12MHz CRYSTAL Capacitors “C1”~“C2”/1nF CAP Capacitors “C3”/22μF CAP—ELEC Resistors Packs “RP1“/7—100Ω RESPACK—7 Resistors “R1"/100Ω RES Optoelectronics “LED1”~“LED2” 7SEG--CAT-GRN Switches & Relays “BUT” BUTTON 1、、及 編程思路及 C51 源程序: 2、電路原理圖: : 3、仿真運(yùn)行效果展示: 4、實(shí)驗(yàn)小結(jié) : 熟悉Proteus 軟件,了解軟件得結(jié)構(gòu)組成與功能;學(xué)習(xí)ISIS 模塊得使用方法,學(xué)會(huì)設(shè)置圖紙、選元件、線畫總線、修改屬性等基本操作;學(xué)會(huì)可執(zhí)行文件 加載及程序仿法;理解Proteus在單片機(jī)開發(fā)中得作用,完成單片機(jī)電路原 理圖得繪制. 實(shí)驗(yàn)名稱: 實(shí)驗(yàn) 2——LED 指示燈循環(huán)控制 一、實(shí)驗(yàn)?zāi)康?熟悉μVision3 編譯軟件、掌握 C51編程與調(diào)試方法。 二、 實(shí)驗(yàn)內(nèi)容 1、按照教材 P243 得圖 A、34,繪制實(shí)驗(yàn)二電路原理圖; 2、編寫 C51 程序,實(shí)現(xiàn) 8 個(gè) LED 燈依次點(diǎn)亮得功能: P0、0→P0、1→ P0、2→P0、3→ ┅ →P0、7→P0、6→P0、5→ ┅ →P0、0 得順序,無限循環(huán),間隔約50ms; 3、觀察仿真結(jié)果,完成實(shí)驗(yàn)報(bào)告。 三、 實(shí)驗(yàn)要求 1、采用兩種加載并運(yùn)行可執(zhí)行文件得方法,即proteus獨(dú)立運(yùn)行與prote us + Keil 聯(lián)合運(yùn)行,體會(huì)其中得差異與意義;2、練習(xí)采用單步、斷點(diǎn)以及監(jiān)視窗等手段進(jìn)行程序調(diào)試得方法;3、觀察仿真結(jié)果,完成實(shí)驗(yàn)報(bào)告:繪制得電路原理圖、編程思路分析及 C51源程序、調(diào)試過程簡(jiǎn)述,仿真運(yùn)行效果以及實(shí)驗(yàn)小結(jié)。、電路原理圖: : 及 2、編程思路及 C51 源程序:、仿真運(yùn)行效果:、實(shí)驗(yàn)小結(jié) : 通過本次實(shí)驗(yàn)我熟悉 uVision3 編譯軟件了解軟件得結(jié)構(gòu)組成與功能學(xué)習(xí)C51 語言得程序設(shè)計(jì)方法)學(xué)會(huì)在 uVision3中進(jìn)行 C51 程序錄入、編譯、與 調(diào)試?yán)斫?Proteus 與 Keil 聯(lián)合得仿真原理實(shí)現(xiàn) LED 指示燈循環(huán)控制功能。 更好得將 C 語言與 C51 語言聯(lián)系在了一起)學(xué)到得知識(shí)能準(zhǔn)確得利用了出來。 實(shí)驗(yàn)名稱: 實(shí)驗(yàn)3——指示燈與數(shù)碼管得中斷控制 一、實(shí) 驗(yàn)?zāi)康?掌握外部中斷得工作原理,學(xué)會(huì)中斷程序設(shè)計(jì).二、實(shí)驗(yàn)內(nèi)容 1、按照教材帕圖 A、53,繪制實(shí)驗(yàn)四電路原理圖;2、要求采用外部中斷原理完成本次實(shí)驗(yàn),其中按鍵 K1、K2 均設(shè)置為下降沿觸發(fā)方式,自然優(yōu)先級(jí); 3、編寫 C51 程序?qū)崿F(xiàn)如下功能:開機(jī)后 D1滅燈,LED1黑屏,隨后單擊 K1→D1狀態(tài)反轉(zhuǎn),單擊 K2 →LED1 從 0 開始循環(huán)顯示0~F 字符。 4、觀察仿真結(jié)果,完成實(shí)驗(yàn)報(bào)告。 三、 實(shí)驗(yàn)要求 提交得實(shí)驗(yàn)報(bào)告中應(yīng)包括:電路原理圖,外部中斷工作原理闡述(以 K1 為例說明中斷響應(yīng)過程),C51 源程序(含流程圖與注釋語句),運(yùn)行效果(含運(yùn)行截圖 與說明),實(shí)驗(yàn)小結(jié). 1、電路原理圖 : 2、外部中斷工作原理闡述: 持續(xù)按下 K1 則 D1 將“亮→滅→亮→滅→?→亮→滅如此循環(huán),表明實(shí)現(xiàn)了 K1 對(duì)應(yīng)于 D1 狀態(tài)反轉(zhuǎn)這個(gè)功能;持續(xù)按下持續(xù)按 K2 則數(shù)碼顯示管依次顯 示 1-F,實(shí)現(xiàn)了 K2 對(duì)應(yīng)于 0~F 間得數(shù)碼管加一計(jì)數(shù)顯示. 3、、及 編程思路及 C51 源 源 程序:、仿真運(yùn)行效果: 5、實(shí)驗(yàn)小結(jié): 通過實(shí)驗(yàn)對(duì) Protues 有了更多得了解,同時(shí)了解到中斷系統(tǒng)在實(shí)際中得更好 應(yīng)用。經(jīng)過編程操作起來更加熟練能很快得完成繪圖,編程時(shí)也得心應(yīng)手,能熟練得運(yùn)用軟件找出自己所編程中得語法問題及其她問題,并以改正。 實(shí)驗(yàn)名稱: 實(shí)驗(yàn)4—-電子秒表顯示器 一、實(shí) 實(shí) 驗(yàn)?zāi)康?掌握定時(shí)/計(jì)數(shù)器得中斷法工作原理,熟悉 C51 編程與調(diào)試方法 二、實(shí)驗(yàn)要求: 1、實(shí)驗(yàn)電路原理圖如教材 P260 A、65 圖所示.程序開始時(shí)顯示“00”;當(dāng)1s 產(chǎn)生時(shí),秒計(jì)數(shù)加1;秒計(jì)數(shù)到 59 后,自動(dòng)從“00”開始。 2、采用12MHz晶振頻率,T0 定時(shí)方式 1、50ms 定時(shí)中斷法編程(1s 需要經(jīng)過 20 軟循環(huán))(流程圖與參考程序模版如下所示).//定時(shí)中斷方式實(shí)現(xiàn)得電子秒表 15()件文頭?(定義無符號(hào)字符型變量 t—-中斷次數(shù)計(jì)數(shù)器,并賦初值0(定義無符號(hào)字符型變量 second—-秒計(jì)數(shù)器,并賦初值 0(定義位于 ROM 區(qū)得無符號(hào)字符型數(shù)組table-—顯示字模)timer0() (中斷函數(shù)關(guān)鍵詞){ ?()0T 閉關(guān)?(初值重裝載 0x3cb0) ()1增器數(shù)計(jì)數(shù)次斷中? {)02==t(fi?? ? // 秒1于當(dāng)相,次 02斷中若? ;0=t???????? //中斷次數(shù)計(jì)數(shù)器清零 ? ;++dnoces?? ? // 零清器數(shù)計(jì)秒? }()零清,06 到達(dá)值器數(shù)計(jì)秒若??()值示顯得 dnoces 量變出輸別分口 2P與0P?()0T動(dòng)啟??} main(){ ? ;]01/dnoces[elbat=0P?? // 值示顯出輸別分口 2P 與 0P? ;]01%dnoces[elbat=2P?(定義T0 定時(shí)方式 1—-TMOD)05()0LT與0HT——載加0bc3x0值初出溢 sm?()AE,0TE——化始初斷中?(啟動(dòng) T0) (死循環(huán))3、編程思路及C1 51 源程序: : 4、仿真運(yùn)行效果: 5、實(shí)驗(yàn)小結(jié) : 本次實(shí)驗(yàn)進(jìn)行得比較順利,根據(jù)指導(dǎo)材料中提供得流程圖完成了源程序得編 寫,成功生成了、hex文件,經(jīng)過仿真運(yùn)行達(dá)到了預(yù)期得實(shí)驗(yàn)結(jié)果.通過本次得 實(shí)驗(yàn),我更加深入得了解到單片機(jī)定時(shí)/計(jì)數(shù)功能實(shí)現(xiàn)得機(jī)理,通過與單片機(jī)中 斷功能得結(jié)合,可以完成更多得預(yù)期功能。但就是進(jìn)過討論我也發(fā)現(xiàn),程序還就是存 在很大得缺陷,想要實(shí)現(xiàn)更加準(zhǔn)確實(shí)現(xiàn)計(jì)時(shí)功能還需綜合利用各種知識(shí)完善程 序。 《單片機(jī)原理及應(yīng)用》 實(shí) 驗(yàn) 報(bào) 告 2017—2018學(xué)年第一學(xué)期 班級(jí): 152 專業(yè): 電子科學(xué)與技術(shù) 姓名: 子路 學(xué)號(hào): 教師: 實(shí)驗(yàn)一:Keil C51 一、實(shí)驗(yàn)?zāi)康?/p> 1、熟悉Keil C51單片機(jī)應(yīng)用開發(fā)系統(tǒng) 2、熟悉Keil C51的調(diào)試技巧 二、實(shí)驗(yàn)內(nèi)容 1、安裝好了Keil軟件以后,我們打開它。打開以后界面如下: 2、我們先新建一個(gè)工程文件,點(diǎn)擊“Project->New Project?”菜單,如下圖: 3、選擇工程文件要存放的路徑 ,輸入工程文件名 LED, 最后單擊保存.4、在彈出的對(duì)話框中選擇 CPU 廠商及型號(hào) 5、選擇好 Atmel 公司的 AT89S52 后 , 單擊確定 6、在接著出現(xiàn)的對(duì)話框中選擇“是”。 7、新建一個(gè) C51 文件 , 單擊左上角的 New File 如下圖所示: 8、保存新建的文件,單擊SAVE如下圖: 9、在出現(xiàn)的對(duì)話框中輸入保存文件名MAIN.C(注意后綴名必須為.C),再單擊“保存”,如下圖: 10、保存好后把此文件加入到工程中方法如下 : 用鼠標(biāo)在 Source Group1 上單擊右鍵 , 然后再單擊 Add Files to Group ‘Source Group 1' 如下圖: 11、選擇要加入的文件 , 找到 MAIN.C 后 , 單擊 Add, 然后單擊 Close 12、在編輯框里輸入如下代碼: 13、到此我們完成了工程項(xiàng)目的建立以及文件加入工程 , 現(xiàn)在我們開始編譯工程如下圖所示 : 我們先單擊編譯, 如果在錯(cuò)誤與警告處看到 0 Error(s)表示編譯通過: 14、生成.hex 燒寫文件,先單擊Options for Target,如圖: 15、在下圖中,我們單擊 Output, 選中 Create HEX F。再單擊“確定” 16、打開文件夾‘實(shí)驗(yàn)1’,查看是否生成了HEX文件。如果沒有生成,在執(zhí)行 一遍步驟10到步驟12,直到生成。 三、實(shí)驗(yàn)工具(軟件、硬件等) 1、Keil 2、計(jì)算機(jī) 實(shí)驗(yàn)二:Proteus軟件學(xué)習(xí) 一、實(shí)驗(yàn)?zāi)康?/p> 1、了解Proteus的基本功能 2、熟悉Proteus的設(shè)計(jì)環(huán)境Preoteus ISIS及第三方編譯工具Keil 3、掌握Proteus中實(shí)現(xiàn)單片機(jī)系統(tǒng)設(shè)計(jì)與仿真的步驟與方法 二、實(shí)驗(yàn)內(nèi)容 設(shè)計(jì)與仿真的開發(fā)過程 Proteus強(qiáng)大的單方機(jī)系統(tǒng)設(shè)計(jì)與仿真功能,使之成為單片機(jī)系統(tǒng)應(yīng)用開發(fā)和改進(jìn)手段之一。 開發(fā)的整個(gè)過程都是在計(jì)算機(jī)上完成的,其過程一般分為三步: 1)Proteus 電路設(shè)計(jì):在ISIS平臺(tái)上進(jìn)行單片機(jī)系統(tǒng)電路設(shè)計(jì)、選擇元器件、接插件、連接電路和電氣現(xiàn)則檢查等。 2)Proteus 源程序設(shè)計(jì)和生成目標(biāo)代碼文件:在ISIS平臺(tái)上或借助第三方編譯工具進(jìn)行單片機(jī)系統(tǒng)程序設(shè)計(jì)、編輯、匯編編譯、代碼級(jí)調(diào)試,最后生成目標(biāo)代碼文件(*hex)。 3)Proteus仿真:在ISIS平臺(tái)上將目標(biāo)代碼文件加載到單片機(jī)系統(tǒng)中,由此實(shí)現(xiàn)系統(tǒng)實(shí)時(shí)交互與協(xié)同傷真。 三、實(shí)驗(yàn)工具(軟件、硬件等) 1、載有Proteus的計(jì)算機(jī)一臺(tái) 實(shí)驗(yàn)三:LED流水燈 一、實(shí)驗(yàn)?zāi)康?/p> 1、用Keil軟件編寫程序并利用開發(fā)板仿真 2、學(xué)習(xí)LED燈工作原理 二、實(shí)驗(yàn)內(nèi)容 延時(shí)實(shí)現(xiàn)LED流水燈效果P2口八個(gè)燈作跑馬燈。采用了寄存器存中間數(shù)。 三、實(shí)驗(yàn)工具(軟件、硬件等)1.載有Keil軟件的計(jì)算機(jī)一臺(tái) 2.開發(fā)板一套 四、實(shí)驗(yàn)結(jié)果及分析 實(shí)驗(yàn)四:靜態(tài)數(shù)碼管 一、實(shí)驗(yàn)?zāi)康?/p> 1、用Keil軟件編寫程序并利用開發(fā)板仿真 2、學(xué)習(xí)靜態(tài)顯示管工作原理 二、實(shí)驗(yàn)內(nèi)容 靜態(tài)數(shù)碼管流動(dòng)顯示0~9 二、實(shí)驗(yàn)工具(軟件、硬件等)1.載有Keil軟件的計(jì)算機(jī)一臺(tái) 2.開發(fā)板一套 四、實(shí)驗(yàn)結(jié)果及分析 實(shí)驗(yàn)五:按鍵移位動(dòng)態(tài)顯示 一、實(shí)驗(yàn)?zāi)康?/p> 1、用Keil軟件編寫程序并利用開發(fā)板仿真 2、學(xué)習(xí)靜態(tài)顯示管工作原理 二、實(shí)驗(yàn)內(nèi)容 靜態(tài)顯示管,按鍵不同顯示不同 三、實(shí)驗(yàn)工具(軟件、硬件等)1.載有Keil軟件的計(jì)算機(jī)一臺(tái) 2.開發(fā)板一套 四、實(shí)驗(yàn)結(jié)果及分析 實(shí)驗(yàn)六:中斷INT0+INT1 一、實(shí)驗(yàn)?zāi)康?/p> 1、用Keil軟件編寫程序并利用開發(fā)板仿真 2、學(xué)習(xí)中斷INT0和INT1的工作原理 二、實(shí)驗(yàn)內(nèi)容 試驗(yàn)數(shù)碼管上顯示外部中斷計(jì)數(shù),用單片機(jī)腳直接控制數(shù)碼管和外部中斷使用 三、實(shí)驗(yàn)工具(軟件、硬件等)1.載有Keil軟件的計(jì)算機(jī)一臺(tái) 2.開發(fā)板一套 四、實(shí)驗(yàn)結(jié)果及分析 目錄 第一章單片機(jī)簡(jiǎn)介....................................................2 第二章 實(shí)驗(yàn)要求..................................................3 第三章實(shí)驗(yàn)設(shè)備......................................................3 第四章實(shí)驗(yàn)安排......................................................4 第五章實(shí)驗(yàn)內(nèi)容......................................................4 LED燈實(shí)驗(yàn).......................................................4 步進(jìn)馬達(dá)試驗(yàn)....................................................5 獨(dú)立按鍵控制LED實(shí)驗(yàn)............................................7 矩陣鍵盤實(shí)驗(yàn)....................................................9 靜態(tài)數(shù)碼管實(shí)驗(yàn).................................................12 動(dòng)態(tài)數(shù)碼管實(shí)驗(yàn).................................................14 NE555脈沖發(fā)生器實(shí)驗(yàn)(定時(shí)/計(jì)數(shù)器).............................16 RS232串口通信實(shí)驗(yàn)(接收與發(fā)送)..................................21 第六章收獲體會(huì).....................................................25 單片機(jī)實(shí)驗(yàn)報(bào)告 第一章單片機(jī)簡(jiǎn)介 單片機(jī)也被稱為微控制器(Microcontroller),是因?yàn)樗钤绫挥迷诠I(yè)控制領(lǐng)域。單片機(jī)由芯片內(nèi)僅有CPU的專用處理器發(fā)展而來。最早的設(shè)計(jì)理念是通過將大量外圍設(shè)備和CPU集成在一個(gè)芯片中,使計(jì)算機(jī)系統(tǒng)更小,更容易集成進(jìn)復(fù)雜的而對(duì)體積要求嚴(yán)格的控制設(shè)備當(dāng)中。INTEL的Z80是最早按照這種思想設(shè)計(jì)出的處理器,從此以后,單片機(jī)和專用處理器的發(fā)展便分道揚(yáng)鑣。單片機(jī)是靠程序運(yùn)行的,并且可以修改。通過不同的程序?qū)崿F(xiàn)不同的功能,尤其是特殊的獨(dú)特的一些功能,這是別的器件需要費(fèi)很大力氣才能做到的,有些則是花大力氣也很難做到的。一個(gè)不是很復(fù)雜的功能要是用美國50年代開發(fā)的74系列,或者60年代的CD4000系列這些純硬件來搞定的話,電路一定是一塊大PCB板!但是如果要是用美國70年代成功投放市場(chǎng)的系列單片機(jī),結(jié)果就會(huì)有天壤之別!只因?yàn)閱纹瑱C(jī)的通過你編寫的程序可以實(shí)現(xiàn)高智能,高效率,以及高可靠性! 單片機(jī)誕生于20世紀(jì)70年代末,經(jīng)歷了SCM、MCU、SoC三大階段。 1.SCM即單片微型計(jì)算機(jī)(Single Chip Microcomputer)階段,主要是尋求最佳的單片形態(tài)嵌入式系統(tǒng)的最佳體系結(jié)構(gòu)。“創(chuàng)新模式”獲得成功,奠定了SCM與通用計(jì)算機(jī)完全不同的發(fā)展道路。在開創(chuàng)嵌入式系統(tǒng)獨(dú)立發(fā)展道路上,Intel公司功不可沒。 2.MCU即微控制器(Micro Controller Unit)階段,主要的技術(shù)發(fā)展方向是:不斷擴(kuò)展?jié)M足嵌入式應(yīng)用時(shí),對(duì)象系統(tǒng)要求的各種外圍電路與接口電路,突顯其對(duì)象的智能化控制能力。它所涉及的領(lǐng)域都與對(duì)象系統(tǒng)相關(guān),因此,發(fā)展MCU的重任不可避免地落在電氣、電子技術(shù)廠家。從這一角度來看,Intel逐漸淡出MCU的發(fā)展也有其客觀因素。在發(fā)展MCU方面,最著名的廠家當(dāng)數(shù)Philips公司。 Philips公司以其在嵌入式應(yīng)用方面的巨大優(yōu)勢(shì),將MCS-51從單片微型計(jì)算機(jī)迅速發(fā)展到微控制器。因此,當(dāng)我們回顧嵌入式系統(tǒng)發(fā)展道路時(shí),不要忘記Intel和Philips的歷史功績(jī)。 3.單片機(jī)是嵌入式系統(tǒng)的獨(dú)立發(fā)展之路,向MCU階段發(fā)展的重要因素,就是尋求 單片機(jī)實(shí)驗(yàn)報(bào)告 應(yīng)用系統(tǒng)在芯片上的最大化解決;因此,專用單片機(jī)的發(fā)展自然形成了SoC化趨勢(shì)。隨著微電子技術(shù)、IC設(shè)計(jì)、EDA工具的發(fā)展,基于SoC的單片機(jī)應(yīng)用系統(tǒng)設(shè)計(jì)會(huì)有較大的發(fā)展。因此,對(duì)單片機(jī)的理解可以從單片微型計(jì)算機(jī)、單片微控制器延伸到單片應(yīng)用系統(tǒng)。 MCS51系列微控制器應(yīng)用廣泛,在家電、汽車甚至航空等領(lǐng)域都有其活躍的身影。然而,普通51系列微控制器內(nèi)部資源有限,像我用Proteus構(gòu)建微控制器虛擬實(shí)驗(yàn)室選用的AT89C52只有三個(gè)定時(shí)器、一個(gè)全雙工的串行口和中斷控制,并且其數(shù)據(jù)處理能力有限,不適合對(duì)大量數(shù)據(jù)進(jìn)行復(fù)雜分析和運(yùn)算。 因此,在不重新選型(可選用SoC)的前提下,為實(shí)現(xiàn)我們所需要的功能,就需要進(jìn)行外圍擴(kuò)展。針對(duì)微控制器的特點(diǎn),我們首先考慮串行擴(kuò)展,因?yàn)槲⒖刂破鞯腎/O引腳有限,并行擴(kuò)展一則外圍芯片面積比較大,二則對(duì)抑制EMI不利。 第二章 實(shí)驗(yàn)要求 1.學(xué)習(xí)Keil C51集成開發(fā)工具的操作及調(diào)試程序的方法,包括:仿真調(diào)試與脫機(jī)運(yùn)行間的切換方法 2.熟悉TD-51單片機(jī)系統(tǒng)板及實(shí)驗(yàn)系統(tǒng)的結(jié)構(gòu)及使用 3.進(jìn)行MCS51單片機(jī)指令系統(tǒng)軟件編程設(shè)計(jì)與硬件接口功能設(shè) 4. 學(xué)習(xí)并掌握Keil C51軟件聯(lián)機(jī)進(jìn)行單片機(jī)接口電路的設(shè)計(jì)與編程調(diào)試 5.完成指定MCS51單片機(jī)綜合設(shè)計(jì)題 第三章實(shí)驗(yàn)設(shè)備 1.HC600S-51單片機(jī)開發(fā)板 2.Keil C51 3.普中自動(dòng)下載軟件 第四章 實(shí)驗(yàn)安排 1.LED燈實(shí)驗(yàn) 單片機(jī)實(shí)驗(yàn)報(bào)告 2.步進(jìn)馬達(dá)試驗(yàn) 3.獨(dú)立按鍵控制LED實(shí)驗(yàn) 4.矩陣鍵盤實(shí)驗(yàn) 5.靜態(tài)數(shù)碼管實(shí)驗(yàn) 6.動(dòng)態(tài)數(shù)碼管實(shí)驗(yàn) 7.NE555脈沖發(fā)生器實(shí)驗(yàn)(定時(shí)/計(jì)數(shù)器)8.RS232串口通信實(shí)驗(yàn)(接收與發(fā)送) 第五章 實(shí)驗(yàn)內(nèi)容 一、LED燈實(shí)驗(yàn) 1.基本要求 利用位移循環(huán)指令實(shí)現(xiàn)LED燈的閃爍 2.實(shí)驗(yàn)內(nèi)容 在Keil C51中進(jìn)行程序的編寫設(shè)計(jì)并生成.HEX文件,按照下圖連接電路后將HC600S-51單片機(jī)開發(fā)板接通電源,按下開關(guān),錄入。打開普中錄入生成.HEX文件,加載程序,觀察實(shí)驗(yàn)結(jié)果,如果不正確對(duì)程序進(jìn)行改進(jìn)后重復(fù)此操作。實(shí)驗(yàn)結(jié)束后先斷電源再拆線,將元器件歸位后離開。3.接線圖 4.電路原理圖 單片機(jī)實(shí)驗(yàn)報(bào)告 5.程序 #include main(){unsigned int i;while(1) {for(i=0,P0=1;i<4;i++){d(500);P0=(P0<<2);}}} 二、步進(jìn)馬達(dá)試驗(yàn) 1.基本要求 編程實(shí)現(xiàn)馬達(dá)的正反轉(zhuǎn),調(diào)速等功能 2.實(shí)驗(yàn)內(nèi)容 在Keil C51中進(jìn)行程序的編寫設(shè)計(jì)并生成.HEX文件,按照下圖連接電路后將HC600S-51單片機(jī)開發(fā)板接通電源,按下開關(guān),錄入。打開普中錄入生成.HEX文件,加載程序,觀察實(shí)驗(yàn)結(jié)果,如果不正確對(duì)程序進(jìn)行改進(jìn)后重復(fù)此操作。實(shí)驗(yàn)結(jié)束后先斷電源再拆線,將元器件歸位后離開。3.接線圖(圖一) 單片機(jī)實(shí)驗(yàn)報(bào)告 圖一 圖二 4.電路原理圖 上圖圖二 5.程序 #include “reg52.h” #define speed 2 sbit PH1 = P1^0; //定義管腳 sbit PH2 = P1^1;sbit I01 = P1^2;sbit I11 = P1^3;sbit I02 = P1^4;sbit I12 = P1^5; void delay(int time); void Go(){ //A PH1 = 0;//PH1為0 則A線圈為反向電流 I01 = 0;I11 = 0; //以最大電流輸出 PH2 = 0;//PH2為0 則B線圈為反向電流 I02 = 1;I12 = 1; //輸出0 delay(speed);//圈為反向電流 I01 = 1;//輸出0 I11 = 1; PH2 = 1;//PH2為1 則B線圈為正向電流 I02 = 0;//以最大電流輸出 I12 = 0; delay(speed);//B PH1 = 1; //PH1為1 則A線圈為 正向電流 I01 = 0; //以最大電流輸出 I11 = 0; PH2 = 1;//PH2為1 則B線圈為正 向電流 I02 = 1;//輸出0 I12 = 1; delay(speed); PH1 = 1; //PH1為1 則A線圈為正向電流 I01 = 1;I11 = 1; PH2 = 0; //PH2為0 則B線圈為反向電流 I02 = 0;I12 = 0;delay(speed);} void delay(int time){ int i,j; for(j=0;j <= time;j++) for(i =0;i <= 120;i++);} void main(){ while(1) { Go();//步進(jìn)電機(jī)運(yùn)行 } } 單片機(jī)實(shí)驗(yàn)報(bào)告 三、獨(dú)立按鍵控制LED實(shí)驗(yàn) 1.基本要求 通過編程控制8個(gè)獨(dú)立按鍵分別控制8個(gè)LED燈的開關(guān) 2.實(shí)驗(yàn)內(nèi)容 在Keil C51中進(jìn)行程序的編寫設(shè)計(jì)并生成.HEX文件,按照下圖連接電路后將HC600S-51單片機(jī)開發(fā)板接通電源,按下開關(guān),錄入。打開普中錄入生成.HEX文件,加載程序,觀察實(shí)驗(yàn)結(jié)果,如果不正確對(duì)程序進(jìn)行改進(jìn)后重復(fù)此操作。實(shí)驗(yàn)結(jié)束后先斷電源再拆線,將元器件歸位后離開。3.接線圖(圖一) 圖一 圖二 4.電路原理圖 上圖圖二 5.程序 #include P1口 #define uchar unsigned char #define uint unsigned int void Delayms(unsigned int c); //延時(shí)10ms uchar Key_Scan();void main(void){ unsigned char ledValue, keyNum; ledValue = 0x01; while(1) { keyNum = Key_Scan();//掃描鍵 盤 switch(keyNum) { case(0xFE): //返回按 鍵K1的數(shù)據(jù) ledValue = 0x01; break; 單片機(jī)實(shí)驗(yàn)報(bào)告 case(0xFD): ledValue = 0x02; break;case(0xFB): ledValue = 0x04; break;case(0xF7): ledValue = 0x08; break;case(0xEF): ledValue = 0x10; break;case(0xDF): ledValue = 0x20; break;case(0xBF): ledValue = 0x40; break;case(0x7F): ledValue = 0x80; //返回按鍵K2的數(shù)據(jù) //返回按鍵K3的數(shù)據(jù) //返回按鍵K4的數(shù)據(jù) //返回按鍵K5的數(shù)據(jù) //返回按鍵K6的數(shù)據(jù) //返回按鍵K7的數(shù)據(jù) //返回按鍵K8的數(shù)據(jù) break;default: break; } GPIO_LED = ledValue;//點(diǎn)亮LED燈 } } uchar Key_Scan(void)//鍵盤掃描函數(shù) { uchar i,n=0xff; if(P1==0xff)goto Scan_r;//無鍵按 下,返回 goto Scan_r;Scan_1: while(P1!=0xff);//等待鍵釋放 Delayms(10);Scan_r: return n;} void Delayms(uint x){ uint n; for(;x>0;x--) { for(n=0;n<123;n++) {;} } } 四、矩陣鍵盤實(shí)驗(yàn) 1.基本要求 編程由16個(gè)矩陣按鍵控制數(shù)碼管顯示相應(yīng)的數(shù)值 2.實(shí)驗(yàn)內(nèi)容 在Keil C51中進(jìn)行程序的編寫設(shè)計(jì)并生成.HEX文件,按照下圖連接電路后將HC600S-51單片機(jī)開發(fā)板接通電源,按下開關(guān),錄入。打開普中錄入生成.HEX文件,加載程序,觀察實(shí)驗(yàn)結(jié)果,如果不正確對(duì)程序進(jìn)行改進(jìn)后重復(fù)此操作。實(shí)驗(yàn)結(jié)束后先斷電源再拆線,將元器件歸位后離開。 3.接線圖 單片機(jī)實(shí)驗(yàn)報(bào)告 見下圖圖一 圖一 圖二 4.電路原理圖 見上圖圖二 5.程序 #include uchar ScanKey(void);void Delayms(uint x);main(){ unsigned char ledValue;uchar i;ledValue = 0x01;loop: i = ScanKey(); switch(i) { case 0xee: ledValue = ~0x3F; break; case 0xde: ledValue = ~0x06; break; case 0xbe: ledValue = ~0x5B; break; case 0x7e: ledValue = ~0x4F; break; case 0xed: ledValue = ~0x66; break; case 0xdd: ledValue = ~0x6D; break; 單片機(jī)實(shí)驗(yàn)報(bào)告 case 0xbd: ledValue = ~0x7D; break; case 0x7d: ledValue = ~0x07; break; case 0xeb: ledValue = ~0x7F; break; case 0xdb: ledValue = ~0x6F; break; case 0xbb: ledValue = ~0x77; break; case 0x7b: ledValue = ~0x7C; break; case 0xe7: ledValue = ~0x39; break; case 0xd7: ledValue = ~0x5E; break; case 0xb7: ledValue = ~0x79; break; case 0x77: ledValue = ~0x71; break; } GPIO_LED = ledValue;i=0;goto loop;} void Delayms(uint x){uint n;for(;x > 0;x--) { for(n=0;n<123;n++) {;} } } uchar ScanKey(void)//鍵盤掃描函數(shù) { uchar i,n=0xff; P1=0xf0; if(P1==0xf0)goto Scan_r;//無鍵按下,返回 for(i=0,P1=0xfe;i<4;i++) { if((P1&0xf0)!=0xf0) { Delayms(10); if((P1&0xf0)!=0xf0) { n= P1; goto Scan_1;} } P1=(P1<<1)+1; //掃描下 一行 } goto Scan_r;Scan_1: 單片機(jī)實(shí)驗(yàn)報(bào)告 P1=0xf0;while((P1&0xf0)!=0xf0);//等待鍵 釋放 Delayms(10); Scan_r: P1=0xff;return n;} } 五、靜態(tài)數(shù)碼管實(shí)驗(yàn) 1.基本要求 編程使數(shù)碼管顯示字符0-F 2.實(shí)驗(yàn)內(nèi)容 在Keil C51中進(jìn)行程序的編寫設(shè)計(jì)并生成.HEX文件,按照下圖連接電路后將HC600S-51單片機(jī)開發(fā)板接通電源,按下開關(guān),錄入。打開普中錄入生成.HEX文件,加載程序,觀察實(shí)驗(yàn)結(jié)果,如果不正確對(duì)程序進(jìn)行改進(jìn)后重復(fù)此操作。實(shí)驗(yàn)結(jié)束后先斷電源再拆線,將元器件歸位后離開。3.接線框圖(圖一) 圖一 單片機(jī)實(shí)驗(yàn)報(bào)告 圖二 4.電路原理圖 見上圖圖二 5.程序 #include {~0x3F,~0x06,~0x5B,~0x4F,~0x66,~0x6D, ~0x7D,~0x07,~0x7F,~0x6F,~0x77,~0x7C,~0x39,~0x5E,~0x79,~0x71};main(){ unsigned int LedNumVal;//定義變量 while(1) { // 將字模送到P0口顯示 LedNumVal++; P0 = LED7Code[LedNumVal%16]; Delayms(1000); //調(diào)用延時(shí)程序 } } 單片機(jī)實(shí)驗(yàn)報(bào)告 void Delayms(uint x){uint n;for(;x > 0;x--) { for(n=0;n<123;n++) {;} } } 六、動(dòng)態(tài)數(shù)碼管實(shí)驗(yàn) 1.基本要求 編程實(shí)現(xiàn)8個(gè)數(shù)碼管的動(dòng)態(tài)掃描。通過P22、P23、P24控制3-8譯碼器來對(duì)數(shù)碼管進(jìn)行位選,通過P0口經(jīng)過573的驅(qū)動(dòng)控制數(shù)碼管的段選,通過P13控制573的使能端,為低電平時(shí)573才會(huì)有輸出。2.實(shí)驗(yàn)內(nèi)容 在Keil C51中進(jìn)行程序的編寫設(shè)計(jì)并生成.HEX文件,按照下圖連電路后將HC600S-51單片機(jī)開發(fā)板接通電源,按下開關(guān),錄入。打開普中錄入生成.HEX文件,加載程序,觀察實(shí)驗(yàn)結(jié)果,如果不正確對(duì)程序進(jìn)行改進(jìn)后重復(fù)此操作。實(shí)驗(yàn)結(jié)束后先斷電源再拆線,將元器件歸位后離開。3.接線圖(圖一) 圖一 圖二 單片機(jī)實(shí)驗(yàn)報(bào)告 圖三 4.電路原理圖 見上圖圖 二、圖三 5.程序 #define uint unsigned int void Dsplay();void Delayms(uint x);uchar mDS[6];uchar code cDsCode[]= {0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xf8,0x80,0x90}; void main(){ uchar i; for(i=0;i<6;i++)mDS[i]=i+1; loop: Dsplay(); goto loop;} void Dsplay()//動(dòng)態(tài)掃描顯示 {uchar i; for(i=0,P2=0x01;i<6;i++) { P1=cDsCode[mDS[i]];//輸出段 Delayms(1000); P2=P2<<1; //選通下一位 } P2=0x00; //關(guān)閉位選通 } void Delayms(uint x){uint n;for(;x > 0;x--) { for(n=0;n<123;n++) {;} } } 七、NE555脈沖發(fā)生器實(shí)驗(yàn)(定時(shí)/計(jì)數(shù)器) 1.基本要求 2.實(shí)驗(yàn)內(nèi)容 在Keil C51中進(jìn)行程序的編寫設(shè)計(jì)并生成.HEX文件,按照下圖連接電路后將HC600S-51單片機(jī)開發(fā)板接通電源,按下開關(guān),錄入。打開普中錄入生成.HEX文件,加載程序,觀察實(shí)驗(yàn)結(jié)果,如果不正確對(duì)程序進(jìn)行改進(jìn)后重復(fù)此操作。實(shí)驗(yàn)結(jié)束后先斷電源再拆線,將元器件歸位后離開。3.接線圖 4.電路原理圖 5.程序 #include CYMOMETER ”};uchar code EN_CHAR2[16]={“FREQ: HZ”}; 單片機(jī)實(shí)驗(yàn)報(bào)告 void TIMER_Configuration();//初始化定時(shí)器 ulong Freq; //用來存放要顯示的頻率值 ulong TimeCount;//用于計(jì)算1S鐘的 void main(){ uchar i, freqValue[6]; LcdInit();TIMER_Configuration();for(i=0;i<16;i++){ LcdWriteData(EN_CHAR1[i]);} LcdWriteCom(0xc0);//第二行顯示 for(i=0;i<16;i++){ LcdWriteData(EN_CHAR2[i]);} while(1){ if(TR0==0) //當(dāng)計(jì)數(shù)器停下的時(shí)候,表明計(jì)數(shù)完畢 { Freq = Freq + TL1; //讀取TL的值 Freq = Freq +(TH1 * 256);//讀取TH的值 LcdWriteCom(0xc8); //--求頻率的個(gè)十百千萬十萬位--// freqValue[0]='0'+Freq%1000000/100000; freqValue[1]='0'+Freq%100000/10000; freqValue[2]='0'+Freq%10000/1000; freqValue[3]='0'+Freq%1000/100; freqValue[4]='0'+Freq%100/10; freqValue[5]='0'+Freq%10; for(i=0;i<5;i++)//從最高位開始查找不為0的數(shù)開始顯示(最低位為0顯示0) { if(freqValue[i]==0x30) { freqValue[i]=0x20;//若為0則賦值空格鍵 } else 單片機(jī)實(shí)驗(yàn)報(bào)告 { break; } } for(i=0;i<6;i++) { LcdWriteData(freqValue[i]); } Freq=0;//將計(jì)算的頻率清零 TH1=0;//將計(jì)數(shù)器的值清零 TL1=0; TR0=1;//開啟定時(shí)器 TR1=1;//開啟計(jì)數(shù)器 } } } void TIMER_Configuration(){ TMOD=0x51;TH0=0x3C;TL0=0xB0;ET0=1;ET1=1;EA=1;TR0=1;TR1=1;} void Timer0()interrupt 1 { TimeCount++;if(TimeCount==20)//計(jì)時(shí)到1S { TR0=0; TR1=0; TimeCount=0; } //--12MHZ設(shè)置定時(shí)50ms的初值--// TH0=0x3C;TL0=0xB0;} void Timer1()interrupt 3 { 單片機(jī)實(shí)驗(yàn)報(bào)告 //--進(jìn)入一次中斷,表明計(jì)數(shù)到了65536--// Freq=Freq+65536; } #include“l(fā)cd.h” void Lcd1602_Delay1ms(uint c) //誤差 0us { uchar a,b;for(;c>0;c--){ for(b=199;b>0;b--) { for(a=1;a>0;a--); } } } #ifndef LCD1602_4PINS //當(dāng)沒有定義這個(gè)LCD1602_4PINS時(shí) void LcdWriteCom(uchar com) //寫入命令 { LCD1602_E = 0; //使能 LCD1602_RS = 0; //選擇發(fā)送命令 LCD1602_RW = 0; //選擇寫入 LCD1602_DATAPINS = com; //放入命令 Lcd1602_Delay1ms(1);//等待數(shù)據(jù)穩(wěn)定 LCD1602_E = 1; //寫入時(shí)序 Lcd1602_Delay1ms(5); //保持時(shí)間 LCD1602_E = 0;} #else void LcdWriteCom(uchar com) //寫入命令 { LCD1602_E = 0;//使能清零 LCD1602_RS = 0;//選擇寫入命令 LCD1602_RW = 0;//選擇寫入 LCD1602_DATAPINS = com;// Lcd1602_Delay1ms(1);LCD1602_E = 1;//寫入時(shí)序 Lcd1602_Delay1ms(5);LCD1602_E = 0;Lcd1602_Delay1ms(1); 單片機(jī)實(shí)驗(yàn)報(bào)告 LCD1602_DATAPINS = com << 4;//發(fā)送低四位 Lcd1602_Delay1ms(1); LCD1602_E = 1;//寫入時(shí)序 Lcd1602_Delay1ms(5);LCD1602_E = 0;} #endif #ifndef LCD1602_4PINS void LcdWriteData(uchar dat) //寫入數(shù)據(jù) { LCD1602_E = 0;//使能清零 LCD1602_RS = 1;//選擇輸入數(shù)據(jù) LCD1602_RW = 0;//選擇寫入 LCD1602_DATAPINS = dat;//寫入數(shù)據(jù) Lcd1602_Delay1ms(1); LCD1602_E = 1; //寫入時(shí)序 Lcd1602_Delay1ms(5); //保持時(shí)間 LCD1602_E = 0;} #else void LcdWriteData(uchar dat) //寫入數(shù)據(jù) { LCD1602_E = 0;//使能清零 LCD1602_RS = 1; //選擇寫入數(shù)據(jù) LCD1602_RW = 0; //選擇寫入 LCD1602_DATAPINS = dat; Lcd1602_Delay1ms(1);LCD1602_E = 1;//寫入時(shí)序 Lcd1602_Delay1ms(5);LCD1602_E = 0;LCD1602_DATAPINS = dat << 4;//寫入低四位 Lcd1602_Delay1ms(1);LCD1602_E = 1;//寫入時(shí)序 Lcd1602_Delay1ms(5);LCD1602_E = 0;} #endif #ifndef LCD1602_4PINS void LcdInit() //LCD初始化子程序 { LcdWriteCom(0x38);//開顯示 單片機(jī)實(shí)驗(yàn)報(bào)告 LcdWriteCom(0x0c);//開顯示不顯示光標(biāo) LcdWriteCom(0x06);//寫一個(gè)指針加1 LcdWriteCom(0x01);//清屏 LcdWriteCom(0x80);//設(shè)置數(shù)據(jù)指針起點(diǎn) } #else void LcdInit() //LCD初始化子程序 { LcdWriteCom(0x32);//將8位總線轉(zhuǎn)為4位總線 LcdWriteCom(0x28);//在四位線下的初始化 LcdWriteCom(0x0c);//開顯示不顯示光標(biāo) LcdWriteCom(0x06);//寫一個(gè)指針加1 LcdWriteCom(0x01);//清屏 LcdWriteCom(0x80);//設(shè)置數(shù)據(jù)指針起點(diǎn) } #endif 八、RS232串口通信實(shí)驗(yàn)(接收與發(fā)送) 1.基本要求 a.通過實(shí)驗(yàn)了解串口的基本原理及使用,理解并掌握對(duì)串口進(jìn)行初始化; b.使用串口調(diào)試助手(Baud 9600、數(shù)據(jù)位 8、停止位 1、效驗(yàn)位無)做為上位機(jī)來做收發(fā)試驗(yàn); c.利用串口調(diào)試助手中字符串輸入進(jìn)行數(shù)據(jù)發(fā)送,接受窗口顯示收到的數(shù)據(jù)。2.實(shí)驗(yàn)內(nèi)容 在Keil C51中進(jìn)行程序的編寫設(shè)計(jì)并生成.HEX文件,按照下圖連接電路后將HC600S-51單片機(jī)開發(fā)板接通電源,按下開關(guān),錄入。打開普中錄入生成.HEX文件,加載程序,觀察實(shí)驗(yàn)結(jié)果,如果不正確對(duì)程序進(jìn)行改進(jìn)后重復(fù)此操作。實(shí)驗(yàn)結(jié)束后先斷電源再拆線,將元器件歸位后離開。3.接線圖 單片機(jī)實(shí)驗(yàn)報(bào)告 4.電路原理圖 5.程序 #include LcdWriteData(ChCode[i]);} UsartConfiguration();while(1){ if(RI == 1) //查看是否接收到數(shù)據(jù) { receiveData = SBUF;//讀取數(shù)據(jù) 單片機(jī)實(shí)驗(yàn)報(bào)告 RI = 0; //清除標(biāo)志位 LcdWriteCom(0xC0); LcdWriteData('0' +(receiveData / 100)); // 百位 LcdWriteData('0' +(receiveData % 100 / 10));// 十位 LcdWriteData('0' +(receiveData % 10)); // 個(gè)位 } } } void UsartConfiguration(){ SCON=0X50; //設(shè)置為工作方式1 TMOD=0X20;//設(shè)置計(jì)數(shù)器工作方式2 PCON=0X80; //波特率加倍 TH1=0XF3; //計(jì)數(shù)器初始值設(shè)置,注意波特率是4800的TL1=0XF3;TR1=1; //打開計(jì)數(shù)器 } #include“l(fā)cd.h” void Lcd1602_Delay1ms(uint c) //誤差 0us { uchar a,b;for(;c>0;c--){ for(b=199;b>0;b--) { for(a=1;a>0;a--); } } } #ifndef LCD1602_4PINS //當(dāng)沒有定義這個(gè)LCD1602_4PINS時(shí) void LcdWriteCom(uchar com) //寫入命令 { LCD1602_E = 0; //使能 LCD1602_RS = 0; //選擇發(fā)送命令 LCD1602_RW = 0; //選擇寫入 LCD1602_DATAPINS = com; //放入命令 Lcd1602_Delay1ms(1);//等待數(shù)據(jù)穩(wěn)定 LCD1602_E = 1; //寫入時(shí)序 單片機(jī)實(shí)驗(yàn)報(bào)告 Lcd1602_Delay1ms(5); //保持時(shí)間 LCD1602_E = 0;} #else void LcdWriteCom(uchar com) //寫入命令 { LCD1602_E = 0;//使能清零 LCD1602_RS = 0;//選擇寫入命令 LCD1602_RW = 0;//選擇寫入 LCD1602_DATAPINS = com;Lcd1602_Delay1ms(1);LCD1602_E = 1;//寫入時(shí)序 Lcd1602_Delay1ms(5);LCD1602_E = 0;Lcd1602_Delay1ms(1);LCD1602_DATAPINS = com << 4;//發(fā)送低四位 Lcd1602_Delay1ms(1);LCD1602_E = 1;//寫入時(shí)序 Lcd1602_Delay1ms(5);LCD1602_E = 0;} #endif #ifndef LCD1602_4PINS void LcdWriteData(uchar dat) //寫入數(shù)據(jù) { LCD1602_E = 0;//使能清零 LCD1602_RS = 1;//選擇輸入數(shù)據(jù) LCD1602_RW = 0;//選擇寫入 LCD1602_DATAPINS = dat;//寫入數(shù)據(jù) Lcd1602_Delay1ms(1);LCD1602_E = 1; //寫入時(shí)序 Lcd1602_Delay1ms(5); //保持時(shí)間 LCD1602_E = 0;} #else void LcdWriteData(uchar dat) //寫入數(shù)據(jù) { LCD1602_E = 0; //使能清零 LCD1602_RS = 1; //選擇寫入數(shù)據(jù) LCD1602_RW = 0;//選擇寫入 LCD1602_DATAPINS = dat; Lcd1602_Delay1ms(1);LCD1602_E = 1; //寫入時(shí)序 Lcd1602_Delay1ms(5); 單片機(jī)實(shí)驗(yàn)報(bào)告 LCD1602_E = 0;LCD1602_DATAPINS = dat << 4;//寫入低四位 Lcd1602_Delay1ms(1);LCD1602_E = 1; //寫入時(shí)序 Lcd1602_Delay1ms(5);LCD1602_E = 0;} #endif #ifndef LCD1602_4PINS void LcdInit() //LCD初始化子程序 { LcdWriteCom(0x38);//開顯示 LcdWriteCom(0x0c);//開顯示不顯示光標(biāo) LcdWriteCom(0x06);//寫一個(gè)指針加1 LcdWriteCom(0x01);//清屏 LcdWriteCom(0x80);//設(shè)置數(shù)據(jù)指針起點(diǎn) } #else void LcdInit() //LCD初始化子程序 { LcdWriteCom(0x32);//將8位總線轉(zhuǎn)為4位總線 LcdWriteCom(0x28);//在四位線下的初始化 LcdWriteCom(0x0c);//開顯示不顯示光標(biāo) LcdWriteCom(0x06);//寫一個(gè)指針加1 LcdWriteCom(0x01);//清屏 LcdWriteCom(0x80);//設(shè)置數(shù)據(jù)指針起點(diǎn) } #endif 單片機(jī)實(shí)驗(yàn)報(bào)告 第六章 收獲體會(huì) 本次微控制器綜合設(shè)計(jì)基本上使用了所選微控制器的所有資源,進(jìn)一步熟悉和加深了對(duì)中斷、定時(shí)器和串行通信的理解和使用。我覺得軟件實(shí)驗(yàn)就是讓我們初學(xué)者熟悉keil的使用,然后復(fù)習(xí)下匯編的思想和掌握程序的流程,所以軟件實(shí)驗(yàn)可以很快的完成,并且慢慢熟悉調(diào)試的強(qiáng)大功能。硬件設(shè)計(jì)中,仿真讓我很有感觸,感覺蠻好玩的,可以摒棄麻煩的實(shí)驗(yàn)硬件自己在寢室玩而且不受硬件狀態(tài)的限制,即便出錯(cuò)了也不會(huì)損壞。當(dāng)然更重要的是這種好習(xí)慣,仿真完后再去在實(shí)驗(yàn)板上驗(yàn)證會(huì)比直接要來的確切而且便捷,至少不要老是去插拔線。在做實(shí)驗(yàn)中在同學(xué)指導(dǎo)下我試用C語言來編寫程序,確實(shí)發(fā)現(xiàn)比匯編語言容易編寫也容易理解,以前的實(shí)驗(yàn)還是有參考資料的習(xí)慣,現(xiàn)在什么都開始自己寫感覺還是很有成就感的,當(dāng)然這是基于程序本身就那么幾行很容易編寫,也不是說參考不好??偠灾?,這學(xué)期的單片機(jī)實(shí)驗(yàn)還是收獲頗豐的。相信在以后的實(shí)驗(yàn)學(xué)習(xí)實(shí)踐工作中都會(huì)有個(gè)潛移默化的作用的。第二篇:紅綠燈實(shí)驗(yàn)報(bào)告
第三篇:?jiǎn)纹瑱C(jī)實(shí)驗(yàn)報(bào)告[范文模版]
第四篇:?jiǎn)纹瑱C(jī)實(shí)驗(yàn)報(bào)告
第五篇:?jiǎn)纹瑱C(jī)實(shí)驗(yàn)報(bào)告