下面附件里面有些適合剛入門的新手練習的習題,都是非常基礎典型的題目,有意著可以下載來練習下(請到本帖最后下載pdf,不會有格式錯亂的情況)
單片機原理與接口技術
實驗指導書
(ATmega48) 肖忠 編
目 錄
前言 1
實驗報告填寫總體要求 2
實驗1 PROTEUS仿真實驗 3
實驗2 I/O實驗 10
實驗3 中斷與定時器實驗 14
實驗4 鍵盤掃描顯示實驗 18
實驗5 A/D轉換實驗 24
實驗6 串行通訊實驗 29
實驗7-1 單片機應用系統設計—電子時鐘 35
實驗7-2 單片機應用系統設計—報警系統 37
實驗7-3 單片機應用系統設計—測控系統 40
前言 《單片機原理與接口技術實驗》課程是電氣工程及其自動化等專業學 生的重要實踐課程。它與《單片機原理與接口技術》課程緊密配合,是《單 片機原理與接口技術》課程的重要實踐組成部分,是課堂教學的延伸,關 系到學生動手能力、創新能力、適應能力、團隊合作等綜合能力的培養。 為此編寫了《單片機原理與接口技術實驗指導書》。 為突出工程技術型人才培養的特點,本課程按照“基礎型、應用型、 綜合型、設計型”循序漸進分層次構建實驗項目,實驗的內容除涵蓋了單 片機知識外,還涉及電路基礎、模擬電子技術、數字電子技術、應用軟件 等內容。所以是一門既有廣度又有深度的綜合性課程。 本課程將著重于專業技能的訓練,使學生掌握單片機的各功能部件及 控制方式(查詢、中斷等),掌握單片機最基本的結構,掌握單片機系統 的設計與開發方法與過程,了解單片機的用途與應用前景,使學生在學習 的過程中對單片機有一個相對全面的了解。通過本課程的訓練與實踐,激 發學生的學習熱情,力不是實踐中提高學生的思維水平與創造能力。 由于時間倉促和水平所限,指導書中可能存在一些錯誤和不妥之處, 敬請批評指正。
實驗報告填寫總體要求
1、實驗目的; 2、實驗要求; 3、實驗原理:可用框圖或示意圖表示,也可用電路原理圖表示; 4、電路分析:詳細分析外圍電路,明確所用引腳的性質,確定單片機各 引腳的配置,確定單片機內部資源的配置,進而實現各寄存器的配置; 電路分析要求簡單、直接,按相應功能逐一描述,多項可分條列寫。 5、程序流程圖:即完成實驗功能而設計的程序流程,程序流程圖要求真 實,嚴禁杜撰或抄襲。 6、實驗結果及分析:對實驗結果進行的分析與判斷,如果實驗包括擴展 部分,或者包括引深的實驗內容,需要有專門的分析與描述,即要提 供實驗電路、實驗手段、程序流程、實驗結果等。 7、對針擴展實驗,提供程序流程圖與核心代碼; 8、實驗體會:包括對實驗過程中的經驗、教訓、收獲等進行小結;也可 以對實驗內容、方法、設備等的建議和設想;
9、實驗報告必須在規定的時間內交給指導老師。
實驗 1PROTEUS仿真實驗
一、實驗目的 1、熟悉 Proteus 仿真軟件的使用方法。 2、掌握 ICC AVR 編譯軟件的使用方法。
二、實驗要求
通過仿真軟件的仿真實現8盞 LED 構成的跑馬燈。
三、實驗設備與平臺
1、實驗設備:計算機(PC),AVRmega48 學習板,AVR 下載器。
2、軟件平臺:Proteus 仿真軟件;ICCAVR C 語言程序開發軟件。
四、知識點
AVR 單片機 I/O 口的原理及其配置、LED 控制等。
五、電路原理圖
六、實驗內容與步驟
1、Proteus操作步驟
 (1)啟動 Proteus 軟件:
 (2)在編輯境界拾取元件
(3)分析在元件庫中選擇單片機---atmega48、電阻---RES、發光二極管---LED 等;
(4)如“電路原理圖”進行元件布局與連線,并修改電阻阻值為 470 歐姆;結果如 下所示
(5)雙擊 atmega48 單片機,在“Program file:”項加載 HEX 程序文件; (詳細操作步驟見 2、ICC AVR 操作步驟);  (6)雙擊編輯環境左下角的 Play 按鈕
2、ICCAVR 操作步驟
(1)創建工程目錄“exam1” (2)將“..\Include\”目錄下的頭文件 iom48v.h 拷貝到本工程目錄“exam1” (3)創建工程“exam1”:
打開ICCAVR,在“Project”下拉菜單中選擇“New”,在“保存在(I)” 下拉菜單中選擇本工程目錄“exam1”,在“文件名(N)”窗口中輸入工程文件 名“exam1”,如下圖1.2所示,然后按 按鈕。
 圖1.2 創建工程文檔界面
(4)設置工程參數:
在 “Project”下拉菜單中選擇“Options…”,在彈出窗口的“Target”頁面的“Device
Configuration”下拉菜單中選擇“ATmega48”,如下圖1.3所示,然后按  鍵。
 圖1.3 芯片配置信息界面
(5)將頭文件 iom48v.h 添加到工程:右擊“Project”頁面中的“Headers”項,在打開  的菜單中選擇“Add File(s)…”,選擇彈出窗口中的 iom48v.h 文件,并按“打開” 按鈕,結果如下圖 1.4 所示。
圖1.4 頭文件添加到工程的圖示 (6)創建 exam1.c 文件并加入到工程
創建 exam1.c 文件:按 按鍵創建一個新文件,在 “File”下拉菜單中選擇 “Save As…”將新文件保存在本工程目錄,名字為 exam1.c。 將 exam1.c 文件添加到工程:右擊“Project”頁面中的“Files”項,在打開的菜單 中選擇“Add File(s)…”。選擇彈出窗口中的 exam1.c 文件并打開,結果如下圖 1.5 所示。
圖1.5 源文件添加到工程的圖示
(7)編寫 exam1.c 文件。 雙擊右邊的“Project”頁面的“exam1.c”,在左邊的“exam1.c”頁面添加如下的語句 (參考代碼):
#include "iom48v.h"
void delay(unsigned int x) { //延時函數
while ( x--) ;
}
unsigned char LED_table[]={0xFF,0x00,0xFF,0xFE,0xFD,0xFB,0xF7,0xEF,
0xDF,0xBF,0x7F,0xFF,0x00,0xFF,0x7F,0xBF,0xDF,0xEF,0xF7,0xFB,0xFD,
0xFE,0xFF,0x00,0xFF,0x7E,0xBD,0xDB,0xE7,0xFF,0x00,0xE7,0xDB,0xBD,
0x7E,0xFF,0x00};
void main(void) {
unsigned char i=0;
DDRD = 0xFF; //D配置為輸出口
PORTD = 0xFF; //D口輸出全高,即全部LED燈熄滅
while(1) {
i = (i+1)%36;
PORTD = LED_table[ i];
delay(60000);
}
}
(8)編譯連接exam1工程:
單擊 按鈕編譯連接工程并生成exam1.hex燒寫文件。
(9)加載exam1.hex燒寫文件到Proteus仿真圖的單片機內并運行,觀察運行結果。
七、擴展實驗
1、將延時程序的延時時間延長1倍,記錄仿真結果,分析現象,研究解決方案;
2、自行設計一種LED的表現形式;(例如:LED燈從左到右逐個點燈,保持2~3
秒,LED燈再從右到左逐個熄滅)
實驗 2I/O實驗
一、實驗目的
1、熟悉 AVR 單片機的 I/O 口配置方法。
2、掌握 AVR 單片機 I/O 口控制 LED 顯示的方法。
3、掌握 AVR 單片機 I/O 口檢測按鍵的方法。
二、實驗要求
通過 IO 口檢測的8個按鍵的狀態,并分別控制8盞 LED 的亮與滅。
三、實驗設備與平臺
1、實驗設備:計算機(PC),AVRmega48 學習板,AVR 下載器。
2、軟件平臺:ICCAVR C 語言程序開發軟件。
四、知識點
AVR 單片機 I/O 口的原理及其配置、LED 控制、按鍵檢測。
五、電路原理圖
圖 2.1 8個按鍵和 8 盞 LED 電路圖
六、實驗內容與步驟
1、連線
用杜邦線按圖 2.1 連線,按鍵接在 PB 口,LED 燈接在 PD 口。
2、程序流程圖(供參考)
IO 端口初始化 B 口輸入(上拉) D 口輸出
B0 狀態為低?
N 說明:連接 LED 電路的端口應配置成輸出 口;連接按鍵電路端口應配置成啟用內部 上拉的輸入口;
Y 點燈 D0 控制的 LED 燈
Y
B1 狀態為低? 點燈 D1 控制的 LED 燈
N
??
3、操作步驟 B7 狀態為低?
N Y 點燈 D7 控制的 LED 燈
(1)創建工程目錄“exam2”。 (2)將“..\Include\”目錄下的頭文件 iom48v.h 拷貝到本工程目錄“exam2” (3)創建工程“exam2” (4)設置工程參數(操作如實驗 1 的操作步驟)。
(5)將頭文件 iom48v.h 添加到本工程(操作如實驗 1 的操作步驟)。 (6)創建 exam2.c 文件并加入到本工程中(操作如實驗 1 的操作步驟)。 (7)編寫 exam2.c 文件。 雙擊右邊的“Project”頁面的“exam2.c”,在左邊的“exam2.c”頁面添加如下的語句 (參考代碼):
#include "iom48v.h"
void delay(unsigned int x) { //延時函數
while ( x--) ;
}
void io_init(void) { //IO口初始化函數
DDRB=;//PB口設置為輸入
PORTB=;//PB口全部內部上拉
DDRD=;//PD口設置為輸出
PORTD=;//PD口全部輸出高電平
}
void main(void) { unsigned char i; io_init(); while (1) {
//補充代碼,實現一個按鍵控制一個LED燈的功能;
//提示:用 PINB 讀取按鍵的狀態,用PORTD控制LED燈
}
}
(8)編譯連接exam1工程:
單擊 按鈕編譯連接工程并生成exam2.hex燒寫文件。
(9)下載exam1.hex燒寫文件到ATmega48學習板并運行,觀察運行結果。
七、擴展實驗
1、按一下與B0口相連的按鍵,對應的點亮連接D0口的LED,再按一下該按鍵, 對應的LED熄滅;依此類推,用8個按鍵控制8盞LED。
八、實驗報告要求
1、描述如何設置 AVR 單片機的 I/O 口為輸出,如何使8盞 LED 亮滅;描述如 何設置 AVR 單片機的 I/O 口為輸入,如何讀取8個按鈕; 2、寫出擴展實驗的流程圖與源程序。
實驗 3中斷與定時器實驗
一、實驗項目
1、利用定時器產生周期為 1 秒的中斷,讓 PD 口連接的 8 個 LED 燈實現二進 制計數顯示的秒表。 2、利用 PWM 占空比調節功能,使用定時器輸出兩路動態 PWM 信號,結果以 亮度的形式顯示在對應的 LED 上,并通過兩個按鍵調節 LED 的亮度。二、實驗目的 1、掌握定時器產生所需定時時間的方法。 2、掌握 PWM。
三、實驗設備與平臺
1、實驗設備:計算機(PC),AVRmega48 學習板,AVR 下載器。
2、軟件平臺:ICCAVR C 語言程序開發軟件。
四、知識點
定時器,PWM。
五、電路原理圖
圖3.1 二進制顯示秒表電路圖
六、實驗內容與步驟
第一部分 定時器中斷
1、連線
用杜邦線按圖 3.1 連線,PD 口接 LED。
2、程序流程圖(供參考)
D 口輸出
T1 定時器初始化: 普通模式, 64 分頻, 定時器初值=49911
T1 溢出中斷允許 總中斷允許
循環等待
T1 定時溢出中斷服務 程序流程
重設計數值 49911
秒計時值+1
秒計時值輸出顯示
3、操作步驟
(1)創建工程目錄“exam3-1”。 (2)將“..\Include\”目錄下的頭文件 iom48v.h 拷貝到本工程目錄“exam3-1” (3)創建工程“exam3-1” (4)設置工程參數(操作如實驗 1 的操作步驟)。 (5)將頭文件 iom48v.h 添加到本工程(操作如實驗 1 的操作步驟)。
(6)創建 exam3-1.c 文件并加入到本工程中(操作如實驗 1 的操作步驟)。 (7)編寫 exam3-1.c 文件,exam3-1.c 的語句如下(參考代碼):
#include "iom48v.h" unsigned char second=0;
// IO口初始化函數
void io_init(void) {
//補充代碼;
}
void t1_init(void)
{
TCCR1B= ; #pragmainterrupt_handlerInt_T1:
void Int_T1(void)
{
//補充代碼;
}
void main(void) { io_init(); t1_init(); TIMSK1|=;
SREG|= ;
TCCR1A= ; while (1) ;
TCNT1= ;}
}
(8)編譯連接exam3-1工程(操作如實驗1的操作步驟)。
(9)下載exam3-1.hex燒寫文件到ATmega48學習板并運行(操作如實驗1的操作步 驟),觀察運行結果。
第二部分 PWM 輸出 1、連線
用杜邦線按圖 3.2 連線。
圖3.2 LED調光燈電路圖
2、程序流程圖(供參考)
B1 輸出,B6B7 輸入(上拉)
T1 定時器初始化: 8 位快速 PWM 模式,1 分頻,比較輸出 式:比較匹配時清零 OC1A/OC1B,比 較匹配初值 OCR1A = 120
接 B6 的按鍵按下? Y 比較匹配值 OCR1A+1
3、操作步驟
(1)創建工程“exam3-2” (2)設置工程參數(操作如實驗 1 的操作步驟)。 (3)將頭文件 iom48v.h 添加到本工程(操作如實驗 1 的操作步驟)。 (4)創建 exam3-2.c 文件并加入到本工程中(操作如實驗 1 的操作步驟)。 (5)編寫 exam3-2.c 文件,exam3-2.c 的語句如下(參考代碼):
#include "iom48v.h"
//延時函數
void delay(unsigned int x) {
while ( x--) ;
}
void main(void) { DDRB=0x03; PORTB|=0xFF; TCCR1A=0b10100001; TCCR1B=0b00001001; if ((PINB & 0x40) == 0)
if (OCR1A<255) { OCR1A+=1; delay(2000); }
if ((PINB & 0x80) == 0)
if (OCR1A> 200) { OCR1A-=1; delay(2000); } CR1=0x00FF; } OCR1A=120; }while (1) {
(6)編譯連接exam3-2工程(操作如實驗1的操作步驟)。
(7)下載exam3-2.hex燒寫文件到ATmega48學習板并運行(操作如實驗1的操作 步驟),觀察運行結果。
九、擴展實驗
1、將第一部分的秒表改為數碼管顯示(只需顯示一位)。
2、針對PWM輸出實現調壓功能的實驗,任意選用一種檢驗方法并記錄實驗結
果(檢驗方法一:用萬用表測量電壓的變化;檢驗方法二:用示波器觀察輸出波形;
檢驗方法三:接直流電機觀察電機的轉速變化;)
3、如果要用T0實現按鍵計數功能,請提供電路圖、寄存器配置情況(含說明)、 程序流程圖;
十、實驗報告要求
1、描述擴展實驗中控制數碼管顯示的方法。
2、描述 PWM 控制 LED 變亮和變暗的算法。
實驗 4鍵盤掃描顯示實驗
一、實驗項目
1、矩陣鍵盤與數碼管的動態刷新顯示。
2、利用 AVR 內部的模數轉換將一個測量的電壓值顯示在 4 位數碼管上。
二、實驗目的
1、掌握數碼管動態刷新顯示的方法。2、掌握矩陣鍵盤掃描的程序設計方法。
3、掌握 AVR 單片機內置的 A/D 模數轉換的使用方法。
三、實驗設備與平臺
1、實驗設備:計算機(PC),AVRmega48 學習板,AVR 下載器。
2、軟件平臺:ICCAVR C 語言程序開發軟件。
四、知識點
數碼管動態刷新顯示,鍵盤掃描,A/D 模數轉換。
五、電路原理圖
圖4.1 矩陣鍵盤與顯示電路圖
六、實驗內容與步驟
1、連線 2、程序流程圖(供參考)
C 口 D 口輸出 B 口高 4 位輸出,低 4 位輸入上拉
T1 定時器初始化: (定時時長為 5ms) CTC 模式,64 分頻
CTC 中斷允許 總中斷允許
矩陣鍵盤 掃描與判斷
確定鍵值
T1 定時器 CTC 中斷服 務程序流程
K=(K+1)%4
關閉所有位控 根據 K 值輸出 顯示字形碼
根據 K 值 打開相應位控
鍵值譯碼 (譯成顯示碼)
3、操作步驟
(1)創建工程目錄“exam4”。 (2)將“..\Include\”目錄下的頭文件 iom48v.h 拷貝到本工程目錄“exam4” (3)創建工程“exam4-1” (4)設置工程參數(操作如實驗 1 的操作步驟)。
(5)將頭文件 iom48v.h 添加到本工程(操作如實驗 1 的操作步驟)。 (6)創建 exam4-1.c 文件并加入到本工程中(操作如實驗 1 的操作步驟)。 (7)編寫 exam4-1.c 文件,exam4-1.c 的語句如下(參考代碼):
#include "iom48v.h"
#include <macros.h>
const unsigned char disp[] = {0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,
0xF8,0x80,0x90,0x88,0x83,0xa7,0xa1,0x86,0x8e,0xff}; // 顯示緩沖區,分別存放的是千位、百位、十位、個位的段碼;
unsigned char ledbuf[]={0xff,0xff,0xff,0xff}; unsigned char k=0; //顯示刷新標志
unsigned int x=1234;
// 定時器 1 的初始化,CTC 模式,8 分頻,定時 5ms void disp_init(void) { TCCR1A= ; TCCR1B= ; OCR1A=;// 計數周期為 5mS,F=1M數值
ICR1= ;
TIMSK1 = 0x02; // 比較中斷 A 允許
TIFR1 = 0x02;
}
// 定時中斷服務程序
#pragmainterrupt_handlerInt_TCCR1A:
void Int_TCCR1A(void) { // 補充代碼,實現以下功能 // 刷新段碼與位控制,用變量 K 實現輪流刷新的目的
}
//IO 口初始化函數
void io_init(void) {
DDRB = 0xF0; /*設置高 4 位為輸出,控制 4 位數碼管*/
PORTB = 0xFF; DDRC = 0xFF; PORTC = 0xFF; DDRD = 0xFF; PORTD = 0xFF; }
//延時函數
void delay(unsigned int x) {
while ( x--) ;
}
// 譯碼程序,將顯示的數據譯成段碼,存入 ledbuf 數組中
void decode(unsigned int b)
{ // 補充代碼,實現以下功能 // ledbuf[0]保存千位數顯示碼,ledbuf[1]保存百位數顯示碼, // ledbuf[0]保存十位數顯示碼,ledbuf[0]保存個位數顯示碼
}
void main(void) {
unsigned char key=0,keycode; io_init(); // IO 初始化 disp_init(); // 定時器初始化 /*中斷使能*/ SEI(); while (1) {
PORTB = 0x0F;
keycode= (~PINB) & 0x0F;
if (keycode != 0x00) { PORTB = ~0x10;
keycode = (~PINB) & 0x0F;
switch(keycode){
case 0x01:key=0;break; case 0x02:key=1;break; case 0x04:key=2;break; case 0x08:key=3;break; }
PORTB = ~0x20;
keycode = (~PINB) & 0x0F;
switch(keycode){
case 0x01:key=4;break; case 0x02:key=5;break; case 0x04:key=6;break; case 0x08:key=7;break; }
PORTB = ~0x40;
keycode = (~PINB) & 0x0F;
switch(keycode){
case 0x01:key=8;break; case 0x02:key=9;break; case 0x04:key=10;break; case 0x08:key=11;break; }
PORTB = ~0x80;
keycode = (~PINB) & 0x0F;
switch(keycode){
case 0x01:key=12;break; case 0x02:key=13;break; case 0x04:key=14;break; case 0x08:key=15;break; }
PORTB = 0xFF; ledbuf[0] = 0xFF; ledbuf[1] = 0xFF; ledbuf[2] = 0xFF; ledbuf[3] = disp[key]; }
delay(30000);
}
}
(8)編譯連接exam4-1工程(操作如實驗1的操作步驟)。
(9)下載exam4-1.hex燒寫文件到ATmega48學習板并運行(操作如實驗1的操作步 驟),觀察運行結果。
七、擴展實驗
1、修改部分的程序代碼,使新輸入的數據顯示在個位上,原數據自動向左移動 一位;
實驗 5A/D轉換實驗
一、實驗項目
1、矩陣鍵盤與數碼管的動態刷新顯示。
2、利用 AVR 內部的模數轉換將一個測量的電壓值顯示在 4 位數碼管上。
二、實驗目的
1、掌握數碼管動態刷新顯示的方法。
2、掌握模數轉換器的基本工作原理與關鍵技術指標。
3、掌握 AVR 單片機內置的 A/D 模數轉換的使用方法。
三、實驗設備與平臺
1、實驗設備:計算機(PC),AVRmega48 學習板,AVR 下載器。
2、軟件平臺:ICCAVR C 語言程序開發軟件。
四、知識點
數碼管動態刷新顯示,鍵盤掃描,A/D 模數轉換。
五、電路原理圖
圖5.1 AD測量與顯示電路圖
六、實驗內容與步驟
1、連線
用杜邦線按圖 5.1 連線。注意:AVCC 接 VCC,AREF 通過 0.1uF 電容接地; 2、程序流程圖(供參考)
C 口 D 口輸出 B 口高 4 位輸出,低 4 位輸入上拉
AD 初始化: 基準源:VCC 通道 4,等等
T1 定時器初始化: (定時時長為 5ms) CTC 模式,64 分頻
CTC 中斷允許 總中斷允許 讀取 AD 測量值 將 AD 值轉換為 電壓數據
顯示數據譯碼
T1 定時器 CTC 中斷服 務程序流程
K=(K+1)%4
關閉所有位控 根據 K 值輸出 顯示字形碼
根據 K 值 打開相應位控
3、操作步驟
(1)創建工程“exam5” (2)設置工程參數(操作如實驗 1 的操作步驟)。 (3)將頭文件 iom48v.h 添加到本工程(操作如實驗 1 的操作步驟)。 (4)創建 exam5.c 文件并加入到本工程中(操作如實驗 1 的操作步驟)。 (5)編寫exam5.c 文件,exam5.c 的語句如下(參考代碼): #include "iom48v.h"
const unsigned char disp[] = {0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,
0x80,0x90,0xC0,0xC0,0xC0,0xC0,0xC0,0xC0};
unsigned char ledbuf[]={0xFF,0xFF,0xFF,0xFF}; unsigned char flag,k=0; //顯示刷新標志
// 定時器 1 的初始化,CTC 模式,8 分頻
void disp_init(void) { TCCR1A = 0x00; TCCR1B = 0x0A; OCR1A = 625; ICR1 = 625;
TIMSK1 = 0x02; /*比較中斷 A 允許*/
TIFR1 = 0x02;
}
// 定時中斷服務程序
#pragmainterrupt_handlerInt_TCCR1A:
void Int_TCCR1A(void) { // 補充代碼,實現以下功能 // 刷新段碼與位控制,用變量 K 實現輪流刷新的目的
}
// IO 口初始化函數
void io_init(void) { DDRB = 0xF0; // 設置高 4 位為輸出,控制 4 位數碼管 PORTB = 0xFF; // 高 4 位輸出低電平,點亮 4 位數碼管 DDRC = 0x0F; PORTC = 0x0F; DDRD = 0xFF; PORTD = 0xFF;
ADMUX= ;//基準 AVCC、通道 4 ADCSRA= ;//使能,開始 ADCSRB=;//ACME=0為 AD通道,=1為模擬比較器通道
}
// ADC 采樣函數,采樣第 4 通道信號,采樣頻率
unsigned int get_ad(void) {
unsigned int i; ADCSRA= ;//使能,開始 ;//等待采樣結束 i= ;//讀取 AD結果 ADCSRA &= ~(0b00010000); //清標志,關閉轉換 return i; //返回結果
}
// 十六進制數轉十進制段碼函數
void decode(unsigned int b) { ledbuf[3]=disp[b%10]; b=b/10; ledbuf[2]=disp[b%10]; b=b/10;ledbuf[1]=disp[b%10]; ledbuf[0]=disp[b/10]; ledbuf[0] &= ~0x80; // 加小數點
}
void main(void) {
unsigned int x = 0; io_init(); //初始化 IO 口disp_init(); //顯示初始化 SREG |= 0x80; decode(x); while (1) { x = get_ad();// 獲取 AD值 decode(x);// 試著增加或修改代碼,將 AD值轉成電壓值來顯示
delay(20000);
}
}
(6)編譯連接exam5工程(操作如實驗1的操作步驟)。
(7)下載exam5.hex燒寫文件到ATmega48學習板并運行(操作如實驗1的操作步 驟),觀察運行結果。
七、擴展實驗
1、系統要求如下:
(1)將模擬輸入通道改為 1 號通道(ADC1);
(2)定時(100ms)啟動測量 AD 測量;
(3)采用平滑移動法處理測量數據;即只保留最新的 10 個采樣數據,若出現 第 11 個數據,則將最早測量的那個數據去掉, (4)對當前的 10 個數據進行中值濾波處理,即去掉最大值與最小值,然后計 算剩余 8 個數據的平均值。 2、用 LM35D 取代電位器,設計算法,顯示出測量的溫度值;
八、實驗報告要求
1、描述擴展實驗中修改 A/D 通道的方法。
2、寫出擴展實驗修改過的函數的原程序清單。
實驗 6串行通訊實驗
一、實驗項目
1、使用 AVR 的串行口傳送預設的數據
2、使用 AVR 的串行口接收數據并實時顯示。
二、實驗目的
1、掌握 AVR 單片機串行口發送數據與接收數據的方法。
三、實驗設備與平臺
1、實驗設備:計算機(PC),AVRmega48 學習板,AVR 下載器。
2、軟件平臺:ICCAVR C 語言程序開發軟件。
四、知識點
數碼管動態刷新顯示,按鍵掃描,串行通訊。
五、電路原理
圖 6.1 串口通信電路圖
六、實驗內容與步驟
1、連線
1、用杜邦線按圖 6.1 連接。 2、實驗需同時用兩套 ATmega48 學習板,用 A 板與 B 板加以說明。 3、A 板的 TXD(3)引腳與 B 板的 RXD(2)引腳相連,B 板的 TXD(3)引 腳與 A 板的 RXD(2)引腳相連。 4、兩套學習板的 GND(8)線相連。
2、程序流程圖(供參考)
 端口初始化
 5msT1 定時器初始化
串口初始化:4800bps, 異步,8 數據位,1 停止位,無校驗位, 接收中斷使能,發送使能
 X=0,顯示譯碼
 Y
接 D7 的按鍵按下? X=‘A’ 顯示譯碼
N
接 D6 的按鍵按下? Y X=‘0’ 顯示譯碼
N 串口發送 X 的內容
串口發送 X 的內容
接 D5 的按鍵按下?
N Y X=X+1 顯示譯碼 串口發送 X 的內容
串口數據接收完成 中斷服務程序流程 T1 定時器 CTC 中斷服 務程序流程
讀取接收數據,送 X K=(K+1)%4
對 X 譯碼 關閉所有位控
根據 K 值輸出 顯示字形碼
3、操作步驟
(1)創建工程目錄“exam6”。 根據 K 值 打開相應位控
(2)將“..\Include\”目錄下的頭文件 iom48v.h 拷貝到本工程目錄“exam6” (3)創建工程“exam6” (4)設置工程參數(操作如實驗 1 的操作步驟)。 (5)將頭文件 iom48v.h 添加到本工程(操作如實驗 1 的操作步驟)。 (6)創建 exam6.c 文件并加入到本工程中(操作如實驗 1 的操作步驟)。 (7)編寫exam6.c 文件,exam6.c 的語句如下(參考代碼): #include "iom48v.h"
const unsigned char disp[] ={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90};
unsigned char x=0;
unsigned char ledbuf[]={0xFF,0xFF,0xFF,0xFF}; unsigned char flag,k=0; //顯示刷新標志
//延時函數
void delay(unsigned int x) {
while ( x--) ;
}
/*十六進制數轉十進制段碼函數*/
void int_to_bcd(unsigned int temp) {
unsigned char i;
for (i = 3; i > 0; i--) { ledbuf = disp[temp%10]; /*提取當前變量最低位*/ temp = temp/10; /*去掉當前最低位值*/
}
ledbuf[0]=disp[temp];
}
// 定時中斷服務程序
#pragmainterrupt_handlerInt_TCCR1A:
void Int_TCCR1A(void) { // 補充代碼,實現以下功能 // 刷新段碼與位控制,用變量 K 實現輪流刷新的目的
}
// 串口 0 接收完成中斷服務程序
#pragma interrupt_handler uart_receive:
void uart_receive(void)
{
x=UDR0;
int_to_bcd(x);
}
// IO 口初始化
void io_init(void) { DDRB = 0xFF; PORTB = 0xFF; DDRC = 0x0F; //設置低 4 位為輸出,控制 4 位數碼管 PORTC = 0xFF; //低 4 位輸出高電平,關閉 4 位數碼管
DDRD = 0x00; PORTD = 0xFF;
}
// 定時器 1 的初始化,CTC 模式,8 分頻 void disp_init(void) { TCCR1A = 0x00; TCCR1B = 0x0A; OCR1A = 625; ICR1 =625; TIMSK1 = 0x02; EIMSK = 0x01;
}
// 串行口初始化,波特率=4800 主頻=1M
void uart_init(void) { UCSR0A=0x40; // bit6,1,0 三位要寫內容 UCSR0B=0b10011000; // 接收結束中斷使能,接收使能,發送使能UCSR0C=0b00000110; // 異步,無校驗,1 位停止位,8 位數據,上 升沿發送數據 UBRR0=12; // 波特率=4800 ,Fosc=1Mhz
}
void send(unsigned char x) { // 串口發送 while(!(UCSR0A&0x20)); UDR0=x;
}
void main(void) { io_init(); disp_init(); uart_init(); SREG|=0x80; x=0;int_to_bcd(x); while (1) {
if(!(PIND&0x20)) {
delay(200);
x=0x41; int_to_bcd(x); send(x);
delay(200);
}
if(!(PIND&0x40)) {
delay(200);
x=0x31; int_to_bcd(x); send(x);
delay(200);
}
if(!(PIND&0x80)) {
delay(200);
x++; int_to_bcd(x); send(x);
delay(200);
}
}
}
(6)編譯連接exam6工程(操作如實驗1的操作步驟)。
(7)下載exam6.hex燒寫文件到ATmega48學習板并運行(操作如實驗1的操作步 驟),觀察運行結果。
七、擴展實驗
自行查找單片機與PC機通信的技術要求,制作相應的通信模塊,應用串行口實 現單片機學習板與PC機的數據通信(提示:PC機端可用超級終端或串口助手等工具 軟件)
八、實驗報告要求
1、描述擴展實驗中單片機與 PC 機通信的手段與方法。
2、記錄串口實驗的全過程。
實驗 7-1單片機應用系統設計—電子時鐘
一、實驗項目
數字電子鐘應用系統,基于自己制作的電路板,以 ATmega48 為核心,配合數 碼管顯示屏(或液晶顯示屏)為用戶提供長期、連續、可靠、穩定的工作環境。
二、實驗類型
設計性。
三、計劃學時
4 學時。
四、指導思想
學生能運用已學的電路知識、計算機知識、單片機硬件和軟件知識,基于 AVR 單片機設計一個有獨到之處的系統,激發學生學習的主動性和創新意識,培養學生 獨立思考、綜合運用知識、提出問題和解決復雜問題的能力。
五、實驗目的及要求
通過本實驗使學生掌握從題目構思到選型、硬件設計、硬件調試、軟件設計和 軟件調試的單片機設計方法。 系統要求:
1、能顯示時、分、秒、日期及時間和日期調整功能;
2、能設定兩個以上的鬧鐘時間;
3、自定義其它擴展功能。
六、涉及的內容或知識點
傳感器采樣,控制器的控制,鍵盤輸入和數碼管顯示等知識。
七、采用的教學方法和手段
本實驗為設計性實驗,教師給出題目范圍,由學生自主完成系統硬件設計和程序 編制。
八、實驗設備與平臺
1、實驗設備:計算機(PC),AVR 下載器,學生自己制作的系統。
2、軟件平臺:ICCAVR C 語言程序開發軟件。
九、實驗報告和結果要求
1、實驗報告:
① 設計概況;
② 硬件電路圖(原理圖與實物照片);★
③ 軟件流程圖;★★★
④ 源程序清單;
⑤ 操作說明;
⑥實驗結果分析。
2、自制的應用系統目標板(能按操作說明操作、使用)。
提示:可以外接蜂鳴器模塊、DS1302 實時時鐘模塊、LCD1602 模塊等;
實驗 7-2單片機應用系統設計—溫度報警系統
一、實驗項目
系統采樣溫度并顯示;當溫度超過限定值則報警;通過“設置”、“+”和“-”鍵修 改溫度限定值。 要求:
1、根據系統功能選擇一個性價比較高的 AVR 單片機為控制芯片;
2、獨立設計硬件電路,自制實驗系統;
3、獨立完成軟件設計并調試。
二、實驗類型
綜合性。
三、計劃學時
4 學時。
四、指導思想
通過本實驗,學生能利用 AVR 單片機的豐富硬件資源設計一個實際應用系統, 使學生掌握電子產品的設計過程。
五、實驗目的及要求
通過溫度傳感器完成溫度的采樣和顯示;當溫度超過警戒值則報警;通過“設 置”、“+”和“-”鍵修改溫度警戒值。 要求:
1、使用 AVR 單片機為控制芯片;
2、使用 AD 模擬采集的溫度數據(0~5V 表示 0~50℃);
3、使用 4 位八段數碼管顯示當前測量的溫度值(要求保留 1 位小數);
4、溫度上限值與溫度下限值保存在 EEPROM 中(初值為 30℃和 10℃);
5、當測量溫度高于設定的上限值時,蜂鳴器響,開啟冷水閥(用 LED 模擬); 當測量溫度低于設定的下限值時,蜂鳴器響,開啟熱風閥(用 LED 模擬); 當測量溫度在下限與上限之間時,蜂鳴器、冷水閥、熱風閥均關閉; 6、用 3 或 4 個按鍵修改溫度上限與下限值,溫度上限與下限在修改時必須用數碼管 顯示, 7、通過按鍵修改好的溫度上限值與下限值能保存在單片機內部。 通過本實驗掌握單片機對模擬信號的采集和處理,掌握單片機串行數據傳送技 術和電路、軟件設計方法,掌握 LED 數碼管電路和軟件設計方法,掌握按鍵和蜂鳴 器的電路和軟件設計方法。
六、涉及的內容或知識點
溫度采樣,一線數據傳送總線,LED 數碼管驅動,串行轉并行的數據傳送,揚 聲器驅動,按鍵處理。
七、采用的教學方法和手段
本實驗為綜合性實驗,教師給出題目并提出設計目標和要求,設定需實現的技術 指標,由學生自主完成系統硬件的組合設計和程序的編制。
八、實驗設備與平臺
1、實驗設備:計算機(PC),AVR 下載器,學生自己制作的系統。
2、軟件平臺:ICCAVR C 語言程序開發軟件。
九、實驗報告和結果要求
1、實驗報告:
① 設計概況;
② 硬件電路圖(原理圖與實物照片);★
③ 軟件流程圖;★★★
④ 源程序清單;
⑤ 操作說明;
⑥ 實驗結果分析。
2、自制的應用系統目標板(能按操作說明操作、使用)。
提示:可以外接蜂鳴器模塊、LM35D 測溫芯片或 DS18B20 測溫芯片等;
實驗 7-3單片機應用系統設計—小型測控系統
一、實驗項目
系統是基于自己制作的電路板,至少包括傳感器檢測、控制(電機等)、鍵盤 輸入參數和數碼管顯示當前狀態等。具體方案由學生獨立自行設計。
二、實驗類型
設計性。
三、計劃學時
4 學時。
四、指導思想
學生能運用已學的電路知識、計算機知識、單片機硬件和軟件知識,基于 AVR 單片機設計一個有獨到之處的系統,激發學生學習的主動性和創新意識,培養學生 獨立思考、綜合運用知識、提出問題和解決復雜問題的能力。
五、實驗目的及要求
通過本實驗使學生掌握從題目構思到控制器選型、硬件設計、硬件調試、軟件 設計和軟件調試的單片機設計方法。 系統是基于 AVR 單片機,至少包括傳感器檢測、控制(電機等)、鍵盤輸入 和數碼管顯示當前狀態等。具體方案由學生獨立自行設計。
六、涉及的內容或知識點
傳感器采樣,控制器的控制,鍵盤輸入和數碼管顯示等知識。
七、采用的教學方法和手段
本實驗為設計性實驗,教師給出題目范圍,由學生自主完成系統硬件設計和程序 編制。
八、實驗設備與平臺
1、實驗設備:計算機(PC),AVR 下載器,學生自己制作的系統。
2、軟件平臺:ICCAVR C 語言程序開發軟件。
九、實驗報告和結果要求
1、實驗報告:
① 設計概況;
② 硬件電路圖(原理圖與實物照片);★
③ 軟件流程圖;★★★
④ 源程序清單;
⑤ 操作說明;
⑥實驗結果分析。
2、自制的應用系統目標板(能按操作說明操作、使用)。
完整的pdf格式文檔51黑下載地址: |