久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 5097|回復: 3
收起左側

ATmega48實驗指導書(45頁PDF下載)新手入門練習用

[復制鏈接]
ID:430257 發表于 2018-11-20 22:57 | 顯示全部樓層 |閱讀模式
下面附件里面有些適合剛入門的新手練習的習題,都是非常基礎典型的題目,有意著可以下載來練習下(請到本帖最后下載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 控制等。

五、電路原理圖




六、實驗內容與步驟

1Proteus操作步驟

(1)啟動 Proteus 軟件:

(2)在編輯境界拾取元件

(3)分析在元件庫中選擇單片機---atmega48、電阻---RES、發光二極管---LED 等;

(4)如“電路原理圖”進行元件布局與連線,并修改電阻阻值為 470 歐姆;結果如 下所示



(5)雙擊 atmega48 單片機,在“Program file:”項加載 HEX 程序文件;
(詳細操作步驟見              2、ICC AVR 操作步驟);
(6)雙擊編輯環境左下角的 Play 按鈕

2ICCAVR 操作步驟

(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=;//  計數周期為 5mSF=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=0AD通道,=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黑下載地址:
單片機實驗指導書(16學時).pdf (1.14 MB, 下載次數: 31)

評分

參與人數 1黑幣 +50 收起 理由
admin + 50 共享資料的黑幣獎勵!

查看全部評分

回復

使用道具 舉報

ID:8222 發表于 2019-3-30 18:29 | 顯示全部樓層
感謝樓主無私的奉獻。
回復

使用道具 舉報

ID:185852 發表于 2019-7-9 09:50 | 顯示全部樓層
感謝樓主無私的分享。
回復

使用道具 舉報

ID:185852 發表于 2019-7-9 09:51 | 顯示全部樓層
感謝樓主無私的分享。
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

手機版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 久久久tv| 成人av色 | 手机在线观看av | 天天干视频 | 久久机热| 亚洲色图在线观看 | 中文字幕 欧美 日韩 | 久久久久久免费精品一区二区三区 | 中文字幕一区二区三区四区五区 | 请别相信他免费喜剧电影在线观看 | 成人免费观看视频 | 久久丝袜| 国产一区二区黑人欧美xxxx | 亚洲第一成年免费网站 | 欧美亚洲免费 | 国产成人精品区一区二区不卡 | 亚洲欧美在线一区 | 日本久久精品视频 | 日韩精品一区二区三区第95 | 亚洲免费精品 | 久草免费在线视频 | 国产精品视频一二三区 | 亚洲精品久久久一区二区三区 | 99热在线播放 | 精品中文字幕一区 | 亚洲人成网亚洲欧洲无码 | 久久久久久国产精品免费 | 欧美影院| 久久精品国产一区二区三区 | 国产区视频在线观看 | 91在线精品秘密一区二区 | 欧美日韩久 | 免费久草 | 欧美一区在线视频 | 日韩欧美国产精品一区二区 | 欧美一区二区在线观看 | 日韩欧美国产一区二区三区 | 另类视频在线 | 国产一区二区三区视频在线观看 | 日韩喷潮| 日韩欧美三区 |