一、實(shí)驗?zāi)康?/div>
1、熟悉 AVR 單片機(jī)的 I/O 口配置方法。
2、掌握 AVR 單片機(jī) I/O 口控制 LED 顯示的方法。
3、掌握 AVR 單片機(jī) I/O 口檢測按鍵的方法。
二、實(shí)驗要求
通過 IO 口檢測的8個按鍵的狀態(tài),并分別控制8盞 LED 的亮與滅。
三、實(shí)驗設(shè)備與平臺
1、實(shí)驗設(shè)備:計算機(jī)(PC),AVRmega48 學(xué)習(xí)板,AVR 下載器。
2、軟件平臺:ICCAVR C 語言程序開發(fā)軟件。
四、知識點(diǎn)
AVR 單片機(jī) I/O 口的原理及其配置、LED 控制、按鍵檢測。
五、電路原理圖
圖 2.1 8個按鍵和 8 盞 LED 電路圖
六、實(shí)驗內(nèi)容與步驟
1、連線
用杜邦線按圖 2.1 連線,按鍵接在 PB 口,LED 燈接在 PD 口。
2、程序流程圖(供參考)
IO 端口初始化
B 口輸入(上拉) D 口輸出
B0 狀態(tài)為低?
N
說明:連接 LED 電路的端口應(yīng)配置成輸出 口;連接按鍵電路端口應(yīng)配置成啟用內(nèi)部 上拉的輸入口;
Y 點(diǎn)燈 D0 控制的
LED 燈
Y
B1 狀態(tài)為低? 點(diǎn)燈 D1 控制的
LED 燈
N
??
3、操作步驟
B7 狀態(tài)為低?
N
Y 點(diǎn)燈 D7 控制的
LED 燈
(1)創(chuàng)建工程目錄“exam2”。
(2)將“..\Include\”目錄下的頭文件 iom48v.h 拷貝到本工程目錄“exam2”
(3)創(chuàng)建工程“exam2”
(4)設(shè)置工程參數(shù)(操作如實(shí)驗 1 的操作步驟)。
(5)將頭文件 iom48v.h 添加到本工程(操作如實(shí)驗 1 的操作步驟)。
(6)創(chuàng)建 exam2.c 文件并加入到本工程中(操作如實(shí)驗 1 的操作步驟)。 (7)編寫 exam2.c 文件。 雙擊右邊的“Project”頁面的“exam2.c”,在左邊的“exam2.c”頁面添加如下的語句
(參考代碼):
#include "iom48v.h"
void delay(unsigned int x) { //延時函數(shù)
while ( x--) ;
}
void io_init(void) { //IO口初始化函數(shù)
DDRB=;//PB口設(shè)置為輸入
PORTB=;//PB口全部內(nèi)部上拉
DDRD=;//PD口設(shè)置為輸出
PORTD=;//PD口全部輸出高電平
}
void main(void) { unsigned char i; io_init();
while (1) {
//補(bǔ)充代碼,實(shí)現(xiàn)一個按鍵控制一個LED燈的功能;
//提示:用 PINB 讀取按鍵的狀態(tài),用PORTD控制LED燈
}
}
(8)編譯連接exam1工程:
單擊
按鈕編譯連接工程并生成exam2.hex燒寫文件。
(9)下載exam1.hex燒寫文件到ATmega48學(xué)習(xí)板并運(yùn)行,觀察運(yùn)行結(jié)果。
七、擴(kuò)展實(shí)驗
1、按一下與B0口相連的按鍵,對應(yīng)的點(diǎn)亮連接D0口的LED,再按一下該按鍵, 對應(yīng)的LED熄滅;依此類推,用8個按鍵控制8盞LED。
八、實(shí)驗報告要求
1、描述如何設(shè)置 AVR 單片機(jī)的 I/O 口為輸出,如何使8盞 LED 亮滅;描述如 何設(shè)置 AVR 單片機(jī)的 I/O 口為輸入,如何讀取8個按鈕;
2、寫出擴(kuò)展實(shí)驗的流程圖與源程序。
實(shí)驗 3中斷與定時器實(shí)驗
一、實(shí)驗項目
1、利用定時器產(chǎn)生周期為 1 秒的中斷,讓 PD 口連接的 8 個 LED 燈實(shí)現(xiàn)二進(jìn) 制計數(shù)顯示的秒表。
2、利用 PWM 占空比調(diào)節(jié)功能,使用定時器輸出兩路動態(tài) PWM 信號,結(jié)果以 亮度的形式顯示在對應(yīng)的 LED 上,并通過兩個按鍵調(diào)節(jié) LED 的亮度。二、實(shí)驗?zāi)康?/font>
1、掌握定時器產(chǎn)生所需定時時間的方法。 2、掌握 PWM。
三、實(shí)驗設(shè)備與平臺
1、實(shí)驗設(shè)備:計算機(jī)(PC),AVRmega48 學(xué)習(xí)板,AVR 下載器。
2、軟件平臺:ICCAVR C 語言程序開發(fā)軟件。
四、知識點(diǎn)
定時器,PWM。
五、電路原理圖
圖3.1 二進(jìn)制顯示秒表電路圖
六、實(shí)驗內(nèi)容與步驟
第一部分 定時器中斷
1、連線
用杜邦線按圖 3.1 連線,PD 口接 LED。
2、程序流程圖(供參考)
D 口輸出
T1 定時器初始化: 普通模式,
64 分頻, 定時器初值=49911
T1 溢出中斷允許 總中斷允許
循環(huán)等待
T1 定時溢出中斷服務(wù) 程序流程
重設(shè)計數(shù)值
49911
秒計時值+1
秒計時值輸出顯示
3、操作步驟
(1)創(chuàng)建工程目錄“exam3-1”。
(2)將“..\Include\”目錄下的頭文件 iom48v.h 拷貝到本工程目錄“exam3-1”
(3)創(chuàng)建工程“exam3-1”
(4)設(shè)置工程參數(shù)(操作如實(shí)驗 1 的操作步驟)。
(5)將頭文件 iom48v.h 添加到本工程(操作如實(shí)驗 1 的操作步驟)。
(6)創(chuàng)建 exam3-1.c 文件并加入到本工程中(操作如實(shí)驗 1 的操作步驟)。
(7)編寫 exam3-1.c 文件,exam3-1.c 的語句如下(參考代碼):
#include "iom48v.h" unsigned char second=0;
// IO口初始化函數(shù)
void io_init(void) {
//補(bǔ)充代碼;
}
void t1_init(void)
{
TCCR1B= ;
#pragmainterrupt_handlerInt_T1:
void Int_T1(void)
{
//補(bǔ)充代碼;
}
void main(void) { io_init(); t1_init();
TIMSK1|=;
SREG|= ;
TCCR1A= ;
while (1) ;
TCNT1= ;}
}
(8)編譯連接exam3-1工程(操作如實(shí)驗1的操作步驟)。
(9)下載exam3-1.hex燒寫文件到ATmega48學(xué)習(xí)板并運(yùn)行(操作如實(shí)驗1的操作步 驟),觀察運(yùn)行結(jié)果。
第二部分 PWM 輸出
1、連線
用杜邦線按圖 3.2 連線。
圖3.2 LED調(diào)光燈電路圖
2、程序流程圖(供參考)
B1 輸出,B6B7 輸入(上拉)
T1 定時器初始化:
8 位快速 PWM 模式,1 分頻,比較輸出 式:比較匹配時清零 OC1A/OC1B,比 較匹配初值 OCR1A = 120
接 B6 的按鍵按下? Y 比較匹配值
OCR1A+1
3、操作步驟
(1)創(chuàng)建工程“exam3-2”
(2)設(shè)置工程參數(shù)(操作如實(shí)驗 1 的操作步驟)。
(3)將頭文件 iom48v.h 添加到本工程(操作如實(shí)驗 1 的操作步驟)。 (4)創(chuàng)建 exam3-2.c 文件并加入到本工程中(操作如實(shí)驗 1 的操作步驟)。 (5)編寫 exam3-2.c 文件,exam3-2.c 的語句如下(參考代碼):
#include "iom48v.h"
//延時函數(shù)
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工程(操作如實(shí)驗1的操作步驟)。
(7)下載exam3-2.hex燒寫文件到ATmega48學(xué)習(xí)板并運(yùn)行(操作如實(shí)驗1的操作 步驟),觀察運(yùn)行結(jié)果。
九、擴(kuò)展實(shí)驗
1、將第一部分的秒表改為數(shù)碼管顯示(只需顯示一位)。
2、針對PWM輸出實(shí)現(xiàn)調(diào)壓功能的實(shí)驗,任意選用一種檢驗方法并記錄實(shí)驗結(jié)
果(檢驗方法一:用萬用表測量電壓的變化;檢驗方法二:用示波器觀察輸出波形;
檢驗方法三:接直流電機(jī)觀察電機(jī)的轉(zhuǎn)速變化;)
3、如果要用T0實(shí)現(xiàn)按鍵計數(shù)功能,請?zhí)峁╇娐穲D、寄存器配置情況(含說明)、 程序流程圖;
十、實(shí)驗報告要求
1、描述擴(kuò)展實(shí)驗中控制數(shù)碼管顯示的方法。
2、描述 PWM 控制 LED 變亮和變暗的算法。
實(shí)驗 4鍵盤掃描顯示實(shí)驗
一、實(shí)驗項目
1、矩陣鍵盤與數(shù)碼管的動態(tài)刷新顯示。
2、利用 AVR 內(nèi)部的模數(shù)轉(zhuǎn)換將一個測量的電壓值顯示在 4 位數(shù)碼管上。
二、實(shí)驗?zāi)康?/font>
1、掌握數(shù)碼管動態(tài)刷新顯示的方法。2、掌握矩陣鍵盤掃描的程序設(shè)計方法。
3、掌握 AVR 單片機(jī)內(nèi)置的 A/D 模數(shù)轉(zhuǎn)換的使用方法。
三、實(shí)驗設(shè)備與平臺
1、實(shí)驗設(shè)備:計算機(jī)(PC),AVRmega48 學(xué)習(xí)板,AVR 下載器。
2、軟件平臺:ICCAVR C 語言程序開發(fā)軟件。
四、知識點(diǎn)
數(shù)碼管動態(tài)刷新顯示,鍵盤掃描,A/D 模數(shù)轉(zhuǎn)換。
五、電路原理圖
圖4.1 矩陣鍵盤與顯示電路圖
六、實(shí)驗內(nèi)容與步驟
1、連線
2、程序流程圖(供參考)
C 口 D 口輸出
B 口高 4 位輸出,低
4 位輸入上拉
T1 定時器初始化: (定時時長為 5ms) CTC 模式,64 分頻
CTC 中斷允許 總中斷允許
矩陣鍵盤 掃描與判斷
確定鍵值
T1 定時器 CTC 中斷服 務(wù)程序流程
K=(K+1)%4
關(guān)閉所有位控 根據(jù) K 值輸出
顯示字形碼
根據(jù) K 值 打開相應(yīng)位控
鍵值譯碼
(譯成顯示碼)
3、操作步驟
(1)創(chuàng)建工程目錄“exam4”。
(2)將“..\Include\”目錄下的頭文件 iom48v.h 拷貝到本工程目錄“exam4”
(3)創(chuàng)建工程“exam4-1”
(4)設(shè)置工程參數(shù)(操作如實(shí)驗 1 的操作步驟)。
(5)將頭文件 iom48v.h 添加到本工程(操作如實(shí)驗 1 的操作步驟)。
(6)創(chuàng)建 exam4-1.c 文件并加入到本工程中(操作如實(shí)驗 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};
// 顯示緩沖區(qū),分別存放的是千位、百位、十位、個位的段碼;
unsigned char ledbuf[]={0xff,0xff,0xff,0xff};
unsigned char k=0; //顯示刷新標(biāo)志
unsigned int x=1234;
// 定時器 1 的初始化,CTC 模式,8 分頻,定時 5ms void disp_init(void) {
TCCR1A= ; TCCR1B= ;
OCR1A=;// 計數(shù)周期為 5mS,F=1M數(shù)值
ICR1= ;
TIMSK1 = 0x02; // 比較中斷 A 允許
TIFR1 = 0x02;
}
// 定時中斷服務(wù)程序
#pragmainterrupt_handlerInt_TCCR1A:
void Int_TCCR1A(void) {
// 補(bǔ)充代碼,實(shí)現(xiàn)以下功能
// 刷新段碼與位控制,用變量 K 實(shí)現(xiàn)輪流刷新的目的
}
//IO 口初始化函數(shù)
void io_init(void) {
DDRB = 0xF0; /*設(shè)置高 4 位為輸出,控制 4 位數(shù)碼管*/
PORTB = 0xFF; DDRC = 0xFF; PORTC = 0xFF; DDRD = 0xFF; PORTD = 0xFF;
}
//延時函數(shù)
void delay(unsigned int x) {
while ( x--) ;
}
// 譯碼程序,將顯示的數(shù)據(jù)譯成段碼,存入 ledbuf 數(shù)組中
void decode(unsigned int b)
{
// 補(bǔ)充代碼,實(shí)現(xiàn)以下功能
// ledbuf[0]保存千位數(shù)顯示碼,ledbuf[1]保存百位數(shù)顯示碼,
// ledbuf[0]保存十位數(shù)顯示碼,ledbuf[0]保存?zhèn)位數(shù)顯示碼
}
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工程(操作如實(shí)驗1的操作步驟)。
(9)下載exam4-1.hex燒寫文件到ATmega48學(xué)習(xí)板并運(yùn)行(操作如實(shí)驗1的操作步 驟),觀察運(yùn)行結(jié)果。
七、擴(kuò)展實(shí)驗
1、修改部分的程序代碼,使新輸入的數(shù)據(jù)顯示在個位上,原數(shù)據(jù)自動向左移動 一位;
實(shí)驗 5A/D轉(zhuǎn)換實(shí)驗
一、實(shí)驗項目
1、矩陣鍵盤與數(shù)碼管的動態(tài)刷新顯示。
2、利用 AVR 內(nèi)部的模數(shù)轉(zhuǎn)換將一個測量的電壓值顯示在 4 位數(shù)碼管上。
二、實(shí)驗?zāi)康?/font>
1、掌握數(shù)碼管動態(tài)刷新顯示的方法。
2、掌握模數(shù)轉(zhuǎn)換器的基本工作原理與關(guān)鍵技術(shù)指標(biāo)。
3、掌握 AVR 單片機(jī)內(nèi)置的 A/D 模數(shù)轉(zhuǎn)換的使用方法。
三、實(shí)驗設(shè)備與平臺
1、實(shí)驗設(shè)備:計算機(jī)(PC),AVRmega48 學(xué)習(xí)板,AVR 下載器。
2、軟件平臺:ICCAVR C 語言程序開發(fā)軟件。
四、知識點(diǎn)
數(shù)碼管動態(tài)刷新顯示,鍵盤掃描,A/D 模數(shù)轉(zhuǎn)換。
五、電路原理圖
圖5.1 AD測量與顯示電路圖
六、實(shí)驗內(nèi)容與步驟
1、連線
用杜邦線按圖 5.1 連線。注意:AVCC 接 VCC,AREF 通過 0.1uF 電容接地;
2、程序流程圖(供參考)
C 口 D 口輸出
B 口高 4 位輸出,低
4 位輸入上拉
AD 初始化: 基準(zhǔn)源:VCC 通道 4,等等
T1 定時器初始化: (定時時長為 5ms) CTC 模式,64 分頻
CTC 中斷允許 總中斷允許
讀取 AD 測量值 將 AD 值轉(zhuǎn)換為
電壓數(shù)據(jù)
顯示數(shù)據(jù)譯碼
T1 定時器 CTC 中斷服 務(wù)程序流程
K=(K+1)%4
關(guān)閉所有位控 根據(jù) K 值輸出
顯示字形碼
根據(jù) K 值 打開相應(yīng)位控
3、操作步驟
(1)創(chuàng)建工程“exam5”
(2)設(shè)置工程參數(shù)(操作如實(shí)驗 1 的操作步驟)。
(3)將頭文件 iom48v.h 添加到本工程(操作如實(shí)驗 1 的操作步驟)。 (4)創(chuàng)建 exam5.c 文件并加入到本工程中(操作如實(shí)驗 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; //顯示刷新標(biāo)志
// 定時器 1 的初始化,CTC 模式,8 分頻
void disp_init(void) { TCCR1A = 0x00; TCCR1B = 0x0A; OCR1A = 625;
ICR1 = 625;
TIMSK1 = 0x02; /*比較中斷 A 允許*/
TIFR1 = 0x02;
}
// 定時中斷服務(wù)程序
#pragmainterrupt_handlerInt_TCCR1A:
void Int_TCCR1A(void) {
// 補(bǔ)充代碼,實(shí)現(xiàn)以下功能
// 刷新段碼與位控制,用變量 K 實(shí)現(xiàn)輪流刷新的目的
}
// IO 口初始化函數(shù)
void io_init(void) {
DDRB = 0xF0; // 設(shè)置高 4 位為輸出,控制 4 位數(shù)碼管 PORTB = 0xFF; // 高 4 位輸出低電平,點(diǎn)亮 4 位數(shù)碼管 DDRC = 0x0F;
PORTC = 0x0F; DDRD = 0xFF;
PORTD = 0xFF;
ADMUX= ;//基準(zhǔn) AVCC、通道 4
ADCSRA= ;//使能,開始
ADCSRB=;//ACME=0為 AD通道,=1為模擬比較器通道
}
// ADC 采樣函數(shù),采樣第 4 通道信號,采樣頻率
unsigned int get_ad(void) {
unsigned int i;
ADCSRA= ;//使能,開始
;//等待采樣結(jié)束 i= ;//讀取 AD結(jié)果 ADCSRA &= ~(0b00010000); //清標(biāo)志,關(guān)閉轉(zhuǎn)換
return i; //返回結(jié)果
}
// 十六進(jìn)制數(shù)轉(zhuǎn)十進(jìn)制段碼函數(shù)
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; // 加小數(shù)點(diǎn)
}
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值轉(zhuǎn)成電壓值來顯示
delay(20000);
}
}
(6)編譯連接exam5工程(操作如實(shí)驗1的操作步驟)。
(7)下載exam5.hex燒寫文件到ATmega48學(xué)習(xí)板并運(yùn)行(操作如實(shí)驗1的操作步 驟),觀察運(yùn)行結(jié)果。
七、擴(kuò)展實(shí)驗
1、系統(tǒng)要求如下:
(1)將模擬輸入通道改為 1 號通道(ADC1);
(2)定時(100ms)啟動測量 AD 測量;
(3)采用平滑移動法處理測量數(shù)據(jù);即只保留最新的 10 個采樣數(shù)據(jù),若出現(xiàn) 第 11 個數(shù)據(jù),則將最早測量的那個數(shù)據(jù)去掉,
(4)對當(dāng)前的 10 個數(shù)據(jù)進(jìn)行中值濾波處理,即去掉最大值與最小值,然后計 算剩余 8 個數(shù)據(jù)的平均值。
2、用 LM35D 取代電位器,設(shè)計算法,顯示出測量的溫度值;
八、實(shí)驗報告要求
1、描述擴(kuò)展實(shí)驗中修改 A/D 通道的方法。
2、寫出擴(kuò)展實(shí)驗修改過的函數(shù)的原程序清單。
實(shí)驗 6串行通訊實(shí)驗
一、實(shí)驗項目
1、使用 AVR 的串行口傳送預(yù)設(shè)的數(shù)據(jù)
2、使用 AVR 的串行口接收數(shù)據(jù)并實(shí)時顯示。
二、實(shí)驗?zāi)康?/font>
1、掌握 AVR 單片機(jī)串行口發(fā)送數(shù)據(jù)與接收數(shù)據(jù)的方法。
三、實(shí)驗設(shè)備與平臺
1、實(shí)驗設(shè)備:計算機(jī)(PC),AVRmega48 學(xué)習(xí)板,AVR 下載器。
2、軟件平臺:ICCAVR C 語言程序開發(fā)軟件。
四、知識點(diǎn)
數(shù)碼管動態(tài)刷新顯示,按鍵掃描,串行通訊。
五、電路原理
圖 6.1 串口通信電路圖
六、實(shí)驗內(nèi)容與步驟
1、連線
1、用杜邦線按圖 6.1 連接。
2、實(shí)驗需同時用兩套 ATmega48 學(xué)習(xí)板,用 A 板與 B 板加以說明。
3、A 板的 TXD(3)引腳與 B 板的 RXD(2)引腳相連,B 板的 TXD(3)引 腳與 A 板的 RXD(2)引腳相連。
4、兩套學(xué)習(xí)板的 GND(8)線相連。
2、程序流程圖(供參考)

端口初始化

5msT1 定時器初始化
串口初始化:4800bps,
異步,8 數(shù)據(jù)位,1 停止位,無校驗位, 接收中斷使能,發(fā)送使能

X=0,顯示譯碼

Y
接 D7 的按鍵按下? X=‘A’
顯示譯碼
N
接 D6 的按鍵按下? Y X=‘0’ 顯示譯碼
N
串口發(fā)送
X 的內(nèi)容
串口發(fā)送
X 的內(nèi)容
接 D5 的按鍵按下?
N
Y X=X+1
顯示譯碼
串口發(fā)送
X 的內(nèi)容
串口數(shù)據(jù)接收完成 中斷服務(wù)程序流程
T1 定時器 CTC 中斷服
務(wù)程序流程
讀取接收數(shù)據(jù),送 X
K=(K+1)%4
對 X 譯碼
關(guān)閉所有位控
根據(jù) K 值輸出
顯示字形碼
3、操作步驟
(1)創(chuàng)建工程目錄“exam6”。
根據(jù) K 值
打開相應(yīng)位控
(2)將“..\Include\”目錄下的頭文件 iom48v.h 拷貝到本工程目錄“exam6”
(3)創(chuàng)建工程“exam6”
(4)設(shè)置工程參數(shù)(操作如實(shí)驗 1 的操作步驟)。
(5)將頭文件 iom48v.h 添加到本工程(操作如實(shí)驗 1 的操作步驟)。 (6)創(chuàng)建 exam6.c 文件并加入到本工程中(操作如實(shí)驗 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; //顯示刷新標(biāo)志
//延時函數(shù)
void delay(unsigned int x) {
while ( x--) ;
}
/*十六進(jìn)制數(shù)轉(zhuǎn)十進(jìn)制段碼函數(shù)*/
void int_to_bcd(unsigned int temp) {
unsigned char i;
for (i = 3; i > 0; i--) {
ledbuf = disp[temp%10]; /*提取當(dāng)前變量最低位*/
temp = temp/10; /*去掉當(dāng)前最低位值*/
}
ledbuf[0]=disp[temp];
}
// 定時中斷服務(wù)程序
#pragmainterrupt_handlerInt_TCCR1A:
void Int_TCCR1A(void) {
// 補(bǔ)充代碼,實(shí)現(xiàn)以下功能
// 刷新段碼與位控制,用變量 K 實(shí)現(xiàn)輪流刷新的目的
}
// 串口 0 接收完成中斷服務(wù)程序
#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; //設(shè)置低 4 位為輸出,控制 4 位數(shù)碼管
PORTC = 0xFF; //低 4 位輸出高電平,關(guān)閉 4 位數(shù)碼管
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 三位要寫內(nèi)容 UCSR0B=0b10011000; // 接收結(jié)束中斷使能,接收使能,發(fā)送使能UCSR0C=0b00000110; // 異步,無校驗,1 位停止位,8 位數(shù)據(jù),上
升沿發(fā)送數(shù)據(jù)
UBRR0=12; // 波特率=4800 ,F(xiàn)osc=1Mhz
}
void send(unsigned char x) { // 串口發(fā)送
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工程(操作如實(shí)驗1的操作步驟)。
(7)下載exam6.hex燒寫文件到ATmega48學(xué)習(xí)板并運(yùn)行(操作如實(shí)驗1的操作步 驟),觀察運(yùn)行結(jié)果。
七、擴(kuò)展實(shí)驗
自行查找單片機(jī)與PC機(jī)通信的技術(shù)要求,制作相應(yīng)的通信模塊,應(yīng)用串行口實(shí) 現(xiàn)單片機(jī)學(xué)習(xí)板與PC機(jī)的數(shù)據(jù)通信(提示:PC機(jī)端可用超級終端或串口助手等工具 軟件)
八、實(shí)驗報告要求
1、描述擴(kuò)展實(shí)驗中單片機(jī)與 PC 機(jī)通信的手段與方法。
2、記錄串口實(shí)驗的全過程。
實(shí)驗 7-1單片機(jī)應(yīng)用系統(tǒng)設(shè)計—電子時鐘
一、實(shí)驗項目
數(shù)字電子鐘應(yīng)用系統(tǒng),基于自己制作的電路板,以 ATmega48 為核心,配合數(shù) 碼管顯示屏(或液晶顯示屏)為用戶提供長期、連續(xù)、可靠、穩(wěn)定的工作環(huán)境。
二、實(shí)驗類型
設(shè)計性。
三、計劃學(xué)時
4 學(xué)時。
四、指導(dǎo)思想
學(xué)生能運(yùn)用已學(xué)的電路知識、計算機(jī)知識、單片機(jī)硬件和軟件知識,基于 AVR 單片機(jī)設(shè)計一個有獨(dú)到之處的系統(tǒng),激發(fā)學(xué)生學(xué)習(xí)的主動性和創(chuàng)新意識,培養(yǎng)學(xué)生 獨(dú)立思考、綜合運(yùn)用知識、提出問題和解決復(fù)雜問題的能力。
五、實(shí)驗?zāi)康募耙?/font>
通過本實(shí)驗使學(xué)生掌握從題目構(gòu)思到選型、硬件設(shè)計、硬件調(diào)試、軟件設(shè)計和 軟件調(diào)試的單片機(jī)設(shè)計方法。
系統(tǒng)要求:
1、能顯示時、分、秒、日期及時間和日期調(diào)整功能;
2、能設(shè)定兩個以上的鬧鐘時間;
3、自定義其它擴(kuò)展功能。
六、涉及的內(nèi)容或知識點(diǎn)
傳感器采樣,控制器的控制,鍵盤輸入和數(shù)碼管顯示等知識。
七、采用的教學(xué)方法和手段
本實(shí)驗為設(shè)計性實(shí)驗,教師給出題目范圍,由學(xué)生自主完成系統(tǒng)硬件設(shè)計和程序 編制。
八、實(shí)驗設(shè)備與平臺
1、實(shí)驗設(shè)備:計算機(jī)(PC),AVR 下載器,學(xué)生自己制作的系統(tǒng)。
2、軟件平臺:ICCAVR C 語言程序開發(fā)軟件。
九、實(shí)驗報告和結(jié)果要求
1、實(shí)驗報告:
① 設(shè)計概況;
② 硬件電路圖(原理圖與實(shí)物照片);★
③ 軟件流程圖;★★★
④ 源程序清單;
⑤ 操作說明;
⑥實(shí)驗結(jié)果分析。
2、自制的應(yīng)用系統(tǒng)目標(biāo)板(能按操作說明操作、使用)。
提示:可以外接蜂鳴器模塊、DS1302 實(shí)時時鐘模塊、LCD1602 模塊等;
實(shí)驗 7-2單片機(jī)應(yīng)用系統(tǒng)設(shè)計—溫度報警系統(tǒng)
一、實(shí)驗項目
系統(tǒng)采樣溫度并顯示;當(dāng)溫度超過限定值則報警;通過“設(shè)置”、“+”和“-”鍵修 改溫度限定值。
要求:
1、根據(jù)系統(tǒng)功能選擇一個性價比較高的 AVR 單片機(jī)為控制芯片;
2、獨(dú)立設(shè)計硬件電路,自制實(shí)驗系統(tǒng);
3、獨(dú)立完成軟件設(shè)計并調(diào)試。
二、實(shí)驗類型
綜合性。
三、計劃學(xué)時
4 學(xué)時。
四、指導(dǎo)思想
通過本實(shí)驗,學(xué)生能利用 AVR 單片機(jī)的豐富硬件資源設(shè)計一個實(shí)際應(yīng)用系統(tǒng), 使學(xué)生掌握電子產(chǎn)品的設(shè)計過程。
五、實(shí)驗?zāi)康募耙?/font>
通過溫度傳感器完成溫度的采樣和顯示;當(dāng)溫度超過警戒值則報警;通過“設(shè) 置”、“+”和“-”鍵修改溫度警戒值。
要求:
1、使用 AVR 單片機(jī)為控制芯片;
2、使用 AD 模擬采集的溫度數(shù)據(jù)(0~5V 表示 0~50℃);
3、使用 4 位八段數(shù)碼管顯示當(dāng)前測量的溫度值(要求保留 1 位小數(shù));
4、溫度上限值與溫度下限值保存在 EEPROM 中(初值為 30℃和 10℃);
5、當(dāng)測量溫度高于設(shè)定的上限值時,蜂鳴器響,開啟冷水閥(用 LED 模擬); 當(dāng)測量溫度低于設(shè)定的下限值時,蜂鳴器響,開啟熱風(fēng)閥(用 LED 模擬); 當(dāng)測量溫度在下限與上限之間時,蜂鳴器、冷水閥、熱風(fēng)閥均關(guān)閉;
6、用 3 或 4 個按鍵修改溫度上限與下限值,溫度上限與下限在修改時必須用數(shù)碼管 顯示,
7、通過按鍵修改好的溫度上限值與下限值能保存在單片機(jī)內(nèi)部。 通過本實(shí)驗掌握單片機(jī)對模擬信號的采集和處理,掌握單片機(jī)串行數(shù)據(jù)傳送技
術(shù)和電路、軟件設(shè)計方法,掌握 LED 數(shù)碼管電路和軟件設(shè)計方法,掌握按鍵和蜂鳴 器的電路和軟件設(shè)計方法。
六、涉及的內(nèi)容或知識點(diǎn)
溫度采樣,一線數(shù)據(jù)傳送總線,LED 數(shù)碼管驅(qū)動,串行轉(zhuǎn)并行的數(shù)據(jù)傳送,揚(yáng) 聲器驅(qū)動,按鍵處理。
七、采用的教學(xué)方法和手段
本實(shí)驗為綜合性實(shí)驗,教師給出題目并提出設(shè)計目標(biāo)和要求,設(shè)定需實(shí)現(xiàn)的技術(shù) 指標(biāo),由學(xué)生自主完成系統(tǒng)硬件的組合設(shè)計和程序的編制。
八、實(shí)驗設(shè)備與平臺
1、實(shí)驗設(shè)備:計算機(jī)(PC),AVR 下載器,學(xué)生自己制作的系統(tǒng)。
2、軟件平臺:ICCAVR C 語言程序開發(fā)軟件。
九、實(shí)驗報告和結(jié)果要求
1、實(shí)驗報告:
① 設(shè)計概況;
② 硬件電路圖(原理圖與實(shí)物照片);★
③ 軟件流程圖;★★★
④ 源程序清單;
⑤ 操作說明;
⑥ 實(shí)驗結(jié)果分析。
2、自制的應(yīng)用系統(tǒng)目標(biāo)板(能按操作說明操作、使用)。
提示:可以外接蜂鳴器模塊、LM35D 測溫芯片或 DS18B20 測溫芯片等;
實(shí)驗 7-3單片機(jī)應(yīng)用系統(tǒng)設(shè)計—小型測控系統(tǒng)
一、實(shí)驗項目
系統(tǒng)是基于自己制作的電路板,至少包括傳感器檢測、控制(電機(jī)等)、鍵盤 輸入?yún)?shù)和數(shù)碼管顯示當(dāng)前狀態(tài)等。具體方案由學(xué)生獨(dú)立自行設(shè)計。
二、實(shí)驗類型
設(shè)計性。
三、計劃學(xué)時
4 學(xué)時。
四、指導(dǎo)思想
學(xué)生能運(yùn)用已學(xué)的電路知識、計算機(jī)知識、單片機(jī)硬件和軟件知識,基于 AVR 單片機(jī)設(shè)計一個有獨(dú)到之處的系統(tǒng),激發(fā)學(xué)生學(xué)習(xí)的主動性和創(chuàng)新意識,培養(yǎng)學(xué)生 獨(dú)立思考、綜合運(yùn)用知識、提出問題和解決復(fù)雜問題的能力。
五、實(shí)驗?zāi)康募耙?/font>
通過本實(shí)驗使學(xué)生掌握從題目構(gòu)思到控制器選型、硬件設(shè)計、硬件調(diào)試、軟件 設(shè)計和軟件調(diào)試的單片機(jī)設(shè)計方法。
系統(tǒng)是基于 AVR 單片機(jī),至少包括傳感器檢測、控制(電機(jī)等)、鍵盤輸入 和數(shù)碼管顯示當(dāng)前狀態(tài)等。具體方案由學(xué)生獨(dú)立自行設(shè)計。
六、涉及的內(nèi)容或知識點(diǎn)
傳感器采樣,控制器的控制,鍵盤輸入和數(shù)碼管顯示等知識。
七、采用的教學(xué)方法和手段
本實(shí)驗為設(shè)計性實(shí)驗,教師給出題目范圍,由學(xué)生自主完成系統(tǒng)硬件設(shè)計和程序 編制。
八、實(shí)驗設(shè)備與平臺
1、實(shí)驗設(shè)備:計算機(jī)(PC),AVR 下載器,學(xué)生自己制作的系統(tǒng)。
2、軟件平臺:ICCAVR C 語言程序開發(fā)軟件。
九、實(shí)驗報告和結(jié)果要求
1、實(shí)驗報告:
① 設(shè)計概況;
② 硬件電路圖(原理圖與實(shí)物照片);★
③ 軟件流程圖;★★★
④ 源程序清單;
⑤ 操作說明;
⑥實(shí)驗結(jié)果分析。
2、自制的應(yīng)用系統(tǒng)目標(biāo)板(能按操作說明操作、使用)。
完整的pdf格式文檔51黑下載地址: