You are on page 1of 84

PTIT

Báo cáo Kỹ thuật Vi xử lý

Giảng viên hướng dẫn: Phạm Thế Duy


Sinh viên thực hiện: Đinh Tuấn Hải
Đ09VTA1
409160010
PTIT [BÁO CÁO KỸ THUẬT VI XỬ LÝ]

HỌC VIỆN CÔNG NGHỆ BƯU CHÍNH VIỄN THÔNG


CƠ SỞ TẠI THÀNH PHỐ HỒ CHÍ MINH

BÁO CÁO
MÔN KỸ THUẬT VI XỬ LÝ

GIẢNG VIÊN HƯỚNG DẪN: Phạm Thế Duy

SINH VIÊN THỰC HIỆN: Đinh Tuấn Hải

Lớp Đ09VTA1

MSSV: 409160010

TPHCM - 2011

2011 Trang 1
PTIT [BÁO CÁO KỸ THUẬT VI XỬ LÝ]

Lưu ý:

+ Các mạch mô phỏng được thực hiện trên Proteus 7.8 SP2 và CodeVision 2.05.0
Professional với các điều kiện được ghi chú sẵn.

+ Các ghi chú trong code chỉ được ghi 1 lần, theo thứ tự xuất hiện của dòng lệnh. (Có
những code thừa nhưng do xuất hiện trước nên vẫn được ghi chú bình thường)

+ Các bài tập có sử dụng bộ định thời để chạy với ý nghĩa thời gian thực có thể hoạt
động sai khi sử dụng trên các máy tính khác, và phải hiệu chỉnh lại cho thích hợp. Các bài tập
này mang ý nghĩa thuật toán, giải thuật nhiều hơn ý nghĩa chính xác về mặt thời gian. Tất cả
các bài đã được hiệu chỉnh để chạy chính xác trên hệ thống máy tính của cá nhân người lập
trình, do vậy có thể mang tính chủ quan.

TP.HCM ngày 10 tháng 10 năm 2011

Sinh viên thực hiện

Đinh Tuấn Hải

2011 Trang 2
PTIT [BÁO CÁO KỸ THUẬT VI XỬ LÝ]

MỤC LỤC

B I 1 ĐIỀU HI N C NG T C ĐƠN V ED ĐƠN ......................................................................4

B I 2 HI N TH T ÊN ED 7 Đ ẠN ............................................................................................ 17

B I 3 ĐIỀU HI N ĐỌC B N HÍ AT N HI N TH HÍ T ÊN ED 7 Đ ẠN ........ 27

B I 4 ĐIỀU HI N HI N TH T ÊN CD .................................................................................... 38

B I 5 ĐIỀU HI N ĐỌC ĐIỆN DC B NG ADC V HI N TH ÊN CD .............................. 51

B I 6 Đ NHIỆT Đ V HI N TH T ÊN ED 7 Đ ẠN D NG ẠCH S S NH TƯƠNG TỰ


TÍCH H T NG AV ................................................................................................................. 67

BÀI 7: TẠ UNG VU NG SIN TA GI C B NG DAC ............................................................ 83

BÀI 8: GIAO TIẾP NỐI TIẾP USART.............................................................................................. 96

BÀI 9: THỰC HIỆN ĐỒNG HỒ ĐIỆN TỬ ..................................................................................... 115

B I 10 ĐÈN TÍN HIỆU GIAO THÔNG......................................................................................... 136

2011 Trang 3
PTIT [BÁO CÁO KỸ THUẬT VI XỬ LÝ]

/*****************************************************

This program was produced by the

CodeWizardAVR V2.05.3a Evaluation

Automatic Program Generator

© Copyright 1998-2011 Pavel Haiduc, HP InfoTech s.r.l.

http://www.hpinfotech.com

Project :

Version :

Date : 8/21/2011

Author : Freeware, for evaluation and

Company :

Comments:

Chip type : ATmega16

Program type : Application

AVR Core Clock frequency: 8.000000 MHz

Memory model : Small

External RAM size :0

2011 Trang 4
PTIT [BÁO CÁO KỸ THUẬT VI XỬ LÝ]

Data Stack size : 256

*****************************************************/

#include <mega16.h>

#include <delay.h>

#include <stdio.h>

// Declare your global variables here

int i,j; //khai báo biến

unsigned char phu, phu2;

void main(void)

// Declare your local variables here

// Input/Output Ports initialization

// Port A initialization

// Func7=Out Func6=Out Func5=Out Func4=Out Func3=Out Func2=Out Func1=Out Func0=Out

// State7=0 State6=0 State5=0 State4=0 State3=0 State2=0 State1=0 State0=0

PORTA=0x00;

DDRA=0xFF; //Port A là OUT

// Port B initialization

2011 Trang 5
PTIT [BÁO CÁO KỸ THUẬT VI XỬ LÝ]

// Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In

// State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T

PORTB=0x00;

DDRB=0x00; //Port B là IN

// Port C initialization

// Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In

// State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T

PORTC=0x00;

DDRC=0x00; //Port C là IN

// Port D initialization

// Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In

// State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T

PORTD=0x00;

DDRD=0x00; //Port D là IN

// Timer/Counter 0 initialization

// Clock source: System Clock

// Clock value: Timer 0 Stopped

// Mode: Normal top=0xFF

2011 Trang 6
PTIT [BÁO CÁO KỸ THUẬT VI XỬ LÝ]

// OC0 output: Disconnected

TCCR0=0x00; //Các thanh ghi cho Timer/Counter0

TCNT0=0x00;

OCR0=0x00;

// Timer/Counter 1 initialization

// Clock source: System Clock

// Clock value: Timer1 Stopped

// Mode: Normal top=0xFFFF

// OC1A output: Discon.

// OC1B output: Discon.

// Noise Canceler: Off

// Input Capture on Falling Edge

// Timer1 Overflow Interrupt: Off

// Input Capture Interrupt: Off

// Compare A Match Interrupt: Off

// Compare B Match Interrupt: Off

TCCR1A=0x00; //Các thanh ghi cho Timer/Counter1

TCCR1B=0x00;

TCNT1H=0x00;

TCNT1L=0x00;

2011 Trang 7
PTIT [BÁO CÁO KỸ THUẬT VI XỬ LÝ]

ICR1H=0x00;

ICR1L=0x00;

OCR1AH=0x00;

OCR1AL=0x00;

OCR1BH=0x00;

OCR1BL=0x00;

// Timer/Counter 2 initialization

// Clock source: System Clock

// Clock value: Timer2 Stopped

// Mode: Normal top=0xFF

// OC2 output: Disconnected

ASSR=0x00; //thanh ghi cho Timer/Counter2

TCCR2=0x00;

TCNT2=0x00;

OCR2=0x00;

// External Interrupt(s) initialization

// INT0: Off //ngắt ngoài

// INT1: Off

// INT2: Off

2011 Trang 8
PTIT [BÁO CÁO KỸ THUẬT VI XỬ LÝ]

MCUCR=0x00;

MCUCSR=0x00;

// Timer(s)/Counter(s) Interrupt(s) initialization

TIMSK=0x00; //Cài đặt ngắt cho các bộ Timer/Counter

// USART initialization

// USART disabled

UCSRB=0x00; //Chức năng USART

// Analog Comparator initialization

// Analog Comparator: Off

// Analog Comparator Input Capture by Timer/Counter 1: Off

ACSR=0x80; //Bộ so sánh tương tự - Analog Comparator

SFIOR=0x00;

// ADC initialization

// ADC disabled

ADCSRA=0x00;

// SPI initialization

2011 Trang 9
PTIT [BÁO CÁO KỸ THUẬT VI XỬ LÝ]

// SPI disabled

SPCR=0x00;

// TWI initialization

// TWI disabled

TWCR=0x00;

while (1)

// Place your code here

switch(PINB)

case 0b00000001: //Cau 1: 1 LED sang doi qua lai

PORTA = 0b10000000;

delay_ms(20); //tạo độ trễ để mắt người có thể theo dõi kịp

for (i=0; i<=6; i++) //chay LED qua phai 7 lan

PORTA = PORTA >> 1; //Port A dịch qua phải 1 bit

delay_ms(20);

2011 Trang 10
PTIT [BÁO CÁO KỸ THUẬT VI XỬ LÝ]

for (i=6; i>=1; i--) //chay LED qua trai 7 lan

PORTA = PORTA << 1;

delay_ms(20);

break;

};

case 0b00000010: //Cau 2: 8 LED sang dan sau do tat dan

PORTA = 0b00000000;

phu = 0b10000000;

for (i=0; i<=7; i++) //sang dan tu trai qua phai

PORTA = phu;

phu = phu | (phu >> 1);

delay_ms(20);

for (i=0; i<=7; i++) //tat dan

PORTA = PORTA >> 1;

2011 Trang 11
PTIT [BÁO CÁO KỸ THUẬT VI XỬ LÝ]

delay_ms(20);

break;

};

case 0b00000100: //Cau 3: 8 LED sang tu hai ben vao roi tat tu hai ben vao

phu = 0b10000000;

phu2 = 0b00000001;

PORTA = 0b00000000;

for (i=1; i<=4; i++) //sang tu hai ben vao

PORTA = phu + phu2 + PORTA;

phu = phu >> 1;

phu2 = phu2 <<1;

delay_ms(20);

};

phu = 0b10000000;

phu2 = 0b00000001;

for (i=1; i<=4; i++) //tat tu hai ben vao

PORTA = PORTA - phu - phu2 ;

2011 Trang 12
PTIT [BÁO CÁO KỸ THUẬT VI XỬ LÝ]

phu = phu >> 1;

phu2 = phu2 <<1;

delay_ms(20);

break;

case 0b00001000: //Cau 4: 1 LED sang chay tu trai qua phai roi dung lai

phu2 = 0b00000000;

for (i=7; i>=0; i--)

phu = 0b10000000;

for (j=0; j<=i; j++)

PORTA = phu + phu2;

delay_ms(20);

phu = phu >> 1;

phu2 = PORTA;

2011 Trang 13
PTIT [BÁO CÁO KỸ THUẬT VI XỬ LÝ]

delay_ms(20);

break;

case 0b00010000: //Cau 5: 8 LED chop tat

PORTA = 0b11111111;

delay_ms(20);

PORTA = 0b00000000;

delay_ms(20);

break;

};

case 0b00100000: //Cau 6: Cac LED sang tat xen ke va nguoc lai

PORTA = 0b10101010;

delay_ms(20);

PORTA = 0b01010101;

delay_ms(20);

break;

};

case 0b01000000: //Cau 7: 4 LED sang 4 LED tat va nguoc lai

2011 Trang 14
PTIT [BÁO CÁO KỸ THUẬT VI XỬ LÝ]

PORTA = 0b11110000;

delay_ms(20);

PORTA = 0b00001111;

delay_ms(20);

break;

};

case 0b10000000: //Cau 8: 2 LED sang chay vao tu hai ben va chay ra hai ben

phu = 0b10000000;

phu2 = 0b00000001;

for (i=0; i<=7; i++)

PORTA = phu + phu2;

delay_ms(20);

phu = phu >> 1; //phu cho led chay qua phai, phu2 cho led cha y
qua trai

phu2 = phu2 << 1;

break;

2011 Trang 15
PTIT [BÁO CÁO KỸ THUẬT VI XỬ LÝ]

};

0
U1
9 22
RESET PC0/SCL
D8 D7 D6 D5 D4 D3 D2 D1 PC1/SDA
23
LED-YELLOW
LED-YELLOW
LED-YELLOW
LED-YELLOW
LED-YELLOW
LED-YELLOW LED-YELLOW 13
LED-YELLOW XTAL1 PC2/TCK
24
12 25
XTAL2 PC3/TMS
26
PC4/TDO
40 27
PA0/ADC0 PC5/TDI
39 28
PA1/ADC1 PC6/TOSC1
38 29
PA2/ADC2 PC7/TOSC2
37
PA3/ADC3
36 14
PA4/ADC4 PD0/RXD
35 15
PA5/ADC5 PD1/TXD
34 16
PA6/ADC6 PD2/INT0
33 17
SW1 PA7/ADC7 PD3/INT1
18
PD4/OC1B
1 19
PB0/T0/XCK PD5/OC1A
2 20
PB1/T1 PD6/ICP1
SW-SPDT 3 21
PB2/AIN0/INT2 PD7/OC2
4
PB3/AIN1/OC0
5
SW2 6
PB4/SS
PB5/MOSI
7 32
PB6/MISO AREF
8 30
PB7/SCK AVCC
SW-SPDT
ATMEGA16
SW3

SW-SPDT

SW4

SW-SPDT

SW5

SW-SPDT

SW6

SW-SPDT

SW7

SW-SPDT

SW8

SW-SPDT

Ghi chú: Bật lần lượt các công tắc từ 1 tới 8 trong file mô phỏng để thực hiện lần lượt 8 yêu cầu
của đề bài.

2011 Trang 16
PTIT [BÁO CÁO KỸ THUẬT VI XỬ LÝ]

/*****************************************************

This program was produced by the

CodeWizardAVR V2.05.3a Evaluation

Automatic Program Generator

© Copyright 1998-2011 Pavel Haiduc, HP InfoTech s.r.l.

http://www.hpinfotech.com

Project : Bai thuc hanh so 2

Version :

Date : 8/22/2011

Author : Freeware, for evaluation and

non-commercial use only

2011 Trang 17
PTIT [BÁO CÁO KỸ THUẬT VI XỬ LÝ]

Company :

Comments: Dinh Tuan Hai - D09VTA1

Chip type : ATmega16

Program type : Application

AVR Core Clock frequency: 8.000000 MHz

Memory model : Small

External RAM size :0

Data Stack size : 256

*****************************************************/

#include <mega16.h>

#include <delay.h>

// Declare your global variables here

unsigned char led[10] =


{0b11111100,0b01100000,0b11011010,0b11110010,0b01100110,0b10110110,0b10111110,0b
11100000,0b11111110,0b11110110,}; // dinh nghia cac chu so tren LED

unsigned char pos[5] = {0b00000111,0b00001011,0b00001101,0b00001110,0b00001111};


//dinh nghia vi tri chon LED tren bang LED (position)

unsigned char dis[4] = {0,0,0,0}; //dinh nghia so de hien thi tren LED (display)

2011 Trang 18
PTIT [BÁO CÁO KỸ THUẬT VI XỬ LÝ]

int i,j,k;

void main(void)

// Declare your local variables here

// Input/Output Ports initialization

// Port A initialization

// Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In

// State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T

PORTA=0x00;

DDRA=0x00;

// Port B initialization

// Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In

// State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T

PORTB=0x00;

DDRB=0x00;

// Port C initialization

// Func7=Out Func6=Out Func5=Out Func4=Out Func3=Out Func2=Out Func1=Out Func0=Out

// State7=0 State6=0 State5=0 State4=0 State3=0 State2=0 State1=0 State0=0

2011 Trang 19
PTIT [BÁO CÁO KỸ THUẬT VI XỬ LÝ]

PORTC=0x00;

DDRC=0xFF;

// Port D initialization

// Func7=Out Func6=Out Func5=Out Func4=Out Func3=Out Func2=Out Func1=Out Func0=Out

// State7=0 State6=0 State5=0 State4=0 State3=0 State2=0 State1=0 State0=0

PORTD=0x00;

DDRD=0xFF;

// Timer/Counter 0 initialization

// Clock source: System Clock

// Clock value: Timer 0 Stopped

// Mode: Normal top=0xFF

// OC0 output: Disconnected

TCCR0=0x00;

TCNT0=0x00;

OCR0=0x00;

// Timer/Counter 1 initialization

// Clock source: System Clock

// Clock value: Timer1 Stopped

2011 Trang 20
PTIT [BÁO CÁO KỸ THUẬT VI XỬ LÝ]

// Mode: Normal top=0xFFFF

// OC1A output: Discon.

// OC1B output: Discon.

// Noise Canceler: Off

// Input Capture on Falling Edge

// Timer1 Overflow Interrupt: Off

// Input Capture Interrupt: Off

// Compare A Match Interrupt: Off

// Compare B Match Interrupt: Off

TCCR1A=0x00;

TCCR1B=0x00;

TCNT1H=0x00;

TCNT1L=0x00;

ICR1H=0x00;

ICR1L=0x00;

OCR1AH=0x00;

OCR1AL=0x00;

OCR1BH=0x00;

OCR1BL=0x00;

// Timer/Counter 2 initialization

2011 Trang 21
PTIT [BÁO CÁO KỸ THUẬT VI XỬ LÝ]

// Clock source: System Clock

// Clock value: Timer2 Stopped

// Mode: Normal top=0xFF

// OC2 output: Disconnected

ASSR=0x00;

TCCR2=0x00;

TCNT2=0x00;

OCR2=0x00;

// External Interrupt(s) initialization

// INT0: Off

// INT1: Off

// INT2: Off

MCUCR=0x00;

MCUCSR=0x00;

// Timer(s)/Counter(s) Interrupt(s) initialization

TIMSK=0x00;

// USART initialization

// USART disabled

2011 Trang 22
PTIT [BÁO CÁO KỸ THUẬT VI XỬ LÝ]

UCSRB=0x00;

// Analog Comparator initialization

// Analog Comparator: Off

// Analog Comparator Input Capture by Timer/Counter 1: Off

ACSR=0x80;

SFIOR=0x00;

// ADC initialization

// ADC disabled

ADCSRA=0x00;

// SPI initialization

// SPI disabled

SPCR=0x00;

// TWI initialization

// TWI disabled

TWCR=0x00;

while (1)

2011 Trang 23
PTIT [BÁO CÁO KỸ THUẬT VI XỬ LÝ]

// Place your code here

switch(PINB)

case 0b00000001: // nhan SW1 de hien 4 so lien tuc

for (i=0;i<=3;i++)

PORTD = pos[i]; //hien thi so o vi tri i

PORTC = led[i+1]; //dịch

delay_ms(2);

PORTD = pos[4];

break;

case 0b00000010: // nhan SW2 de chay 0-9

for (i=0; i<=9; i++)

dis[3] = led[i];

for (k=0; k<=5; k++) //giam toc do chay so lai

2011 Trang 24
PTIT [BÁO CÁO KỸ THUẬT VI XỬ LÝ]

for (j=3; j>=0; j--)

PORTD = pos[j];

PORTC = dis[j];

delay_ms(2);

PORTD = pos[4];

for (j=0; j<=3; j++)

dis[j] = dis[j+1];

break;

2011 Trang 25
PTIT [BÁO CÁO KỸ THUẬT VI XỬ LÝ]

U1
9 22
RESET PC0/SCL
23
PC1/SDA
13 24
XTAL1 PC2/TCK
12 25
XTAL2 PC3/TMS
26
PC4/TDO
40 27
PA0/ADC0 PC5/TDI
39 28
PA1/ADC1 PC6/TOSC1
38 29
PA2/ADC2 PC7/TOSC2
37
PA3/ADC3
36 14
PA4/ADC4 PD0/RXD
35 15
PA5/ADC5 PD1/TXD
34 16
SW1 33
PA6/ADC6 PD2/INT0
17
PA7/ADC7 PD3/INT1
18
PD4/OC1B
1 19
PB0/T0/XCK PD5/OC1A
SW-SPDT 2 20
PB1/T1 PD6/ICP1
3 21
PB2/AIN0/INT2 PD7/OC2
4
SW2 5
PB3/AIN1/OC0
PB4/SS
6
PB5/MOSI
7 32
PB6/MISO AREF
SW-SPDT 8 30
PB7/SCK AVCC
ATMEGA16

Ghi chú:

+ Nhấn SW1 để thực hiện yêu cầu 1 (hiện 4 số cùng lúc trên bảng LED)

+ Nhấn SW2 để thực hiện yêu cầu 2 (chạy số từ 0-9 từ phải qua trái)

2011 Trang 26
PTIT [BÁO CÁO KỸ THUẬT VI XỬ LÝ]

/*****************************************************

This program was produced by the

CodeWizardAVR V2.05.3a Evaluation

Automatic Program Generator

© Copyright 1998-2011 Pavel Haiduc, HP InfoTech s.r.l.

http://www.hpinfotech.com

Project :

Version :

Date : 27/08/2011

Author : Dinh Tuan Hai

Company : D09VTA1

Comments: HVCNBCVT

Chip type : ATmega16

Program type : Application

AVR Core Clock frequency: 8.000000 MHz

Memory model : Small

External RAM size :0

2011 Trang 27
PTIT [BÁO CÁO KỸ THUẬT VI XỬ LÝ]

Data Stack size : 256

*****************************************************/

#include <mega16.h>

#include <delay.h>

// Declare your global variables here

int i,dem,row,col,n,j,k;

//dinh nghia cac ky tu se hien tren LED

unsigned char led[16] =


{0b11111100,0b01100000,0b11011010,0b11110010,0b01100110,0b10110110,0b10111110,0b
11100000,0b11111110,0b11110110, 0b11101110, 0b00111110, 0b10011100, 0b01111010,
0b10011110, 0b10001110};

//dinh nghia cac vi tri cua LED, pos[4] la khong chon vi tri nao(xoa)

unsigned char pos[5] = {0b00000111,0b00001011,0b00001101,0b00001110,0b00001111};

unsigned char dis[4] = {0,0,0,0};

int TIMVITRI(unsigned char p) //chuong trinh tim vi tri bit 0 trong p

dem = 10;

n=0;

while (p != 0b11111111) //thuc hien cho den khi p = 0xFF

2011 Trang 28
PTIT [BÁO CÁO KỸ THUẬT VI XỬ LÝ]

p = (p >> 1);

p = p | 0b10000000;

n = n + 1;

dem = n - 1;

return(dem); //tra lai gia tri dem

void main(void)

// Declare your local variables here

// Input/Output Ports initialization

// Port A initialization

// Func7=In Func6=In Func5=In Func4=In Func3=Out Func2=Out Func1=Out Func0=Out

// State7=P State6=P State5=P State4=P State3=1 State2=1 State1=1 State0=1

PORTA=0xFF;

DDRA=0x00; //Cong A nhan tin hieu vao

// Port B initialization

// Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In

// State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T

2011 Trang 29
PTIT [BÁO CÁO KỸ THUẬT VI XỬ LÝ]

PORTB=0xFF;

DDRB=0xFF; //Cong B dua tin hieu ra

// Port C initialization

// Func7=Out Func6=Out Func5=Out Func4=Out Func3=Out Func2=Out Func1=Out Func0=Out

// State7=0 State6=0 State5=0 State4=0 State3=0 State2=0 State1=0 State0=0

PORTC=0x00;

DDRC=0xFF; //Cong C dua tin hieu ra

// Port D initialization

// Func7=Out Func6=Out Func5=Out Func4=Out Func3=Out Func2=Out Func1=Out Func0=Out

// State7=0 State6=0 State5=0 State4=0 State3=0 State2=0 State1=0 State0=0

PORTD=0x00;

DDRD=0x0F; //4 bit cao: IN, 4 bit thap: OUT

// Timer/Counter 0 initialization

// Clock source: System Clock

// Clock value: Timer 0 Stopped

// Mode: Normal top=0xFF

// OC0 output: Disconnected

TCCR0=0x00;

2011 Trang 30
PTIT [BÁO CÁO KỸ THUẬT VI XỬ LÝ]

TCNT0=0x00;

OCR0=0x00;

// Timer/Counter 1 initialization

// Clock source: System Clock

// Clock value: Timer1 Stopped

// Mode: Normal top=0xFFFF

// OC1A output: Discon.

// OC1B output: Discon.

// Noise Canceler: Off

// Input Capture on Falling Edge

// Timer1 Overflow Interrupt: Off

// Input Capture Interrupt: Off

// Compare A Match Interrupt: Off

// Compare B Match Interrupt: Off

TCCR1A=0x00;

TCCR1B=0x00;

TCNT1H=0x00;

TCNT1L=0x00;

ICR1H=0x00;

ICR1L=0x00;

2011 Trang 31
PTIT [BÁO CÁO KỸ THUẬT VI XỬ LÝ]

OCR1AH=0x00;

OCR1AL=0x00;

OCR1BH=0x00;

OCR1BL=0x00;

// Timer/Counter 2 initialization

// Clock source: System Clock

// Clock value: Timer2 Stopped

// Mode: Normal top=0xFF

// OC2 output: Disconnected

ASSR=0x00;

TCCR2=0x00;

TCNT2=0x00;

OCR2=0x00;

// External Interrupt(s) initialization

// INT0: Off

// INT1: Off

// INT2: Off

MCUCR=0x00;

MCUCSR=0x00;

2011 Trang 32
PTIT [BÁO CÁO KỸ THUẬT VI XỬ LÝ]

// Timer(s)/Counter(s) Interrupt(s) initialization

TIMSK=0x00;

// USART initialization

// USART disabled

UCSRB=0x00;

// Analog Comparator initialization

// Analog Comparator: Off

// Analog Comparator Input Capture by Timer/Counter 1: Off

ACSR=0x80;

SFIOR=0x00;

// ADC initialization

// ADC disabled

ADCSRA=0x00;

// SPI initialization

// SPI disabled

SPCR=0x00;

2011 Trang 33
PTIT [BÁO CÁO KỸ THUẬT VI XỬ LÝ]

// TWI initialization

// TWI disabled

TWCR=0x00;

while (1)

// Place your code here

while (PIND.4 == 0) //thuc hien yeu cau so 1

PORTB=0b11110111;

for (col = 3; col>=0; col--)

row=TIMVITRI(PINA);

if (row>=0)

i=col*4+row; //thuật toán tính giá trị nút bấm

dis[3] = led[i];

};

2011 Trang 34
PTIT [BÁO CÁO KỸ THUẬT VI XỬ LÝ]

PORTB =(PORTB>>1)| 0b10000000;

};

PORTD = pos[3];

PORTC = dis[3];

delay_ms(1);

while (PIND.4 == 1) //thuc hien yeu cau so 2

PORTB=0b11110111;

for (col = 3; col>=0; col--)

row=TIMVITRI(PINA);

if (row>=0)

i=col*4+row;

for(j=0;j<=2;j++)

dis[j] = dis[j+1];

dis[3] = led[i];

2011 Trang 35
PTIT [BÁO CÁO KỸ THUẬT VI XỬ LÝ]

};

PORTB =(PORTB>>1)| 0b10000000;

};

for(n=0;n<=6;n++)

for(k=0;k<=3;k++) //hien thi ra LED

PORTD = pos[k];

PORTC = dis[k];

delay_ms(1);

PORTD = pos[4];

2011 Trang 36
PTIT [BÁO CÁO KỸ THUẬT VI XỬ LÝ]

0 4 8 C

1 5 9 D

2 6 A E

3 7 B F

U1
9 22
RESET PC0/SCL
23
PC1/SDA
13 24
XTAL1 PC2/TCK
12 25
XTAL2 PC3/TMS
26
PC4/TDO
40 27
PA0/ADC0 PC5/TDI
39 28
PA1/ADC1 PC6/TOSC1
38 29
PA2/ADC2 PC7/TOSC2
37
PA3/ADC3
36 14
PA4/ADC4 PD0/RXD
35 15
PA5/ADC5 PD1/TXD
34 16
PA6/ADC6 PD2/INT0
33 17
PA7/ADC7 PD3/INT1 1
18
PD4/OC1B
1 19
PB0/T0/XCK PD5/OC1A
2 20
PB1/T1 PD6/ICP1
3 21
PB2/AIN0/INT2 PD7/OC2
4
PB3/AIN1/OC0
5
PB4/SS
6
PB5/MOSI
7 32
PB6/MISO AREF
8 30
PB7/SCK AVCC
ATMEGA16

Ghi chú:

+ Chuyển mức Logic cổng PIND.4 thành 0 để thực hiện yêu cầu số 1 của bài (đọc mã
phím hiển thị lên LED 7 đoạn)

+ Chuyển mức Logic cổng PIND.4 thành 1 để thực hiện yêu cầu số 2 của bài (nhấm phim,
hiện ký tự tương ứng trên LED kế tiếp những ký tự đã nhấn trước đó)

2011 Trang 37
PTIT [BÁO CÁO KỸ THUẬT VI XỬ LÝ]

/*****************************************************

This program was produced by the

CodeWizardAVR V2.05.0 Professional

Automatic Program Generator

© Copyright 1998-2010 Pavel Haiduc, HP InfoTech s.r.l.

http://www.hpinfotech.com

Project :

Version :

Date : 9/6/2011

Author : Dinh Tuan Hai

Company : D09VTA1 - MSSV: 409160010

Comments:

Chip type : ATmega16

Program type : Application

AVR Core Clock frequency: 8.000000 MHz

Memory model : Small

External RAM size :0

2011 Trang 38
PTIT [BÁO CÁO KỸ THUẬT VI XỬ LÝ]

Data Stack size : 256

*****************************************************/

#include <mega16.h>

#include <delay.h>

#define RS PORTC.0

#define RW PORTC.1

#define E PORTC.2

#define data PORTD

void wait_LCD(void) //chương trình con nhằm đợi cho LCD sẵn sàng

unsigned char tam;

DDRD = 0x00;

RS = 0;

RW = 1;

do

2011 Trang 39
PTIT [BÁO CÁO KỸ THUẬT VI XỬ LÝ]

E = 1;

delay_ms(100);

tam = PIND;

E = 0;

while ((tam && 0x80)!= 0x80);

DDRD = 0xFF;

void set(unsigned char set) //chương trình con cài đặt cho LCD

delay_us(210);

RS = 0;

RW = 0;

E = 0;

data = set;

E = 1;

E = 0;

void display(unsigned char out) //chương trình con hiển thị 1 mã ASCII cho LCD

2011 Trang 40
PTIT [BÁO CÁO KỸ THUẬT VI XỬ LÝ]

delay_us(210);

RS = 1;

RW = 0;

E = 0;

data = out;

E = 1;

E = 0;

void clear_LCD(void) //chương trình con xóa LCD

delay_ms(1);

RS = 0;

RW = 0;

E = 0;

data = 0x01;

E = 1;

E = 0;

void pos(int x,int y) //chương trình con chọn vị trí trên LCD

2011 Trang 41
PTIT [BÁO CÁO KỸ THUẬT VI XỬ LÝ]

int i;

delay_us(210);

if(x == 0)

set(0x02);

if(x == 1)

set(0xc0);

for(i=0;i<=y;i++)

set(0x14);

// Declare your global variables here

char line1[] = {" Dinh Tuan Hai"}; //chuỗi được hiển thị ở hàng 1

char line2[] = {" 409160010 "}; //chuỗi được hiển thị ở hàng 2

int i,j;

unsigned char x;

void main(void)

// Declare your local variables here

2011 Trang 42
PTIT [BÁO CÁO KỸ THUẬT VI XỬ LÝ]

// Input/Output Ports initialization

// Port A initialization

// Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In

// State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T

PORTA=0x00;

DDRA=0x00;

// Port B initialization

// Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In

// State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T

PORTB=0x00;

DDRB=0x00;

// Port C initialization

// Func7=Out Func6=Out Func5=Out Func4=Out Func3=Out Func2=Out Func1=Out Func0=Out

// State7=0 State6=0 State5=0 State4=0 State3=0 State2=0 State1=0 State0=0

PORTC=0x00;

DDRC=0xFF;

// Port D initialization

// Func7=Out Func6=Out Func5=Out Func4=Out Func3=Out Func2=Out Func1=Out Func0=Out

2011 Trang 43
PTIT [BÁO CÁO KỸ THUẬT VI XỬ LÝ]

// State7=0 State6=0 State5=0 State4=0 State3=0 State2=0 State1=0 State0=0

PORTD=0x00;

DDRD=0x07;

// Timer/Counter 0 initialization

// Clock source: System Clock

// Clock value: Timer 0 Stopped

// Mode: Normal top=0xFF

// OC0 output: Disconnected

TCCR0=0x00;

TCNT0=0x00;

OCR0=0x00;

// Timer/Counter 1 initialization

// Clock source: System Clock

// Clock value: Timer1 Stopped

// Mode: Normal top=0xFFFF

// OC1A output: Discon.

// OC1B output: Discon.

// Noise Canceler: Off

// Input Capture on Falling Edge

2011 Trang 44
PTIT [BÁO CÁO KỸ THUẬT VI XỬ LÝ]

// Timer1 Overflow Interrupt: Off

// Input Capture Interrupt: Off

// Compare A Match Interrupt: Off

// Compare B Match Interrupt: Off

TCCR1A=0x00;

TCCR1B=0x00;

TCNT1H=0x00;

TCNT1L=0x00;

ICR1H=0x00;

ICR1L=0x00;

OCR1AH=0x00;

OCR1AL=0x00;

OCR1BH=0x00;

OCR1BL=0x00;

// Timer/Counter 2 initialization

// Clock source: System Clock

// Clock value: Timer2 Stopped

// Mode: Normal top=0xFF

// OC2 output: Disconnected

ASSR=0x00;

2011 Trang 45
PTIT [BÁO CÁO KỸ THUẬT VI XỬ LÝ]

TCCR2=0x00;

TCNT2=0x00;

OCR2=0x00;

// External Interrupt(s) initialization

// INT0: Off

// INT1: Off

// INT2: Off

MCUCR=0x00;

MCUCSR=0x00;

// Timer(s)/Counter(s) Interrupt(s) initialization

TIMSK=0x00;

// USART initialization

// USART disabled

UCSRB=0x00;

// Analog Comparator initialization

// Analog Comparator: Off

// Analog Comparator Input Capture by Timer/Counter 1: Off

2011 Trang 46
PTIT [BÁO CÁO KỸ THUẬT VI XỬ LÝ]

ACSR=0x80;

SFIOR=0x00;

// ADC initialization

// ADC disabled

ADCSRA=0x00;

// SPI initialization

// SPI disabled

SPCR=0x00;

// TWI initialization

// TWI disabled

TWCR=0x00;

set(0x38);

set(0x0c);

set(0x02);

while (1)

// Place your code here

while (PINC.3 == 1) //Thuc hien yeu cau so 1

2011 Trang 47
PTIT [BÁO CÁO KỸ THUẬT VI XỬ LÝ]

for (i=0;i<=16;i++)

display(line1[i]); //hiển thị hàng chữ 1

set(0xc0);

for (i=0;i<=16;i++)

display(line2[i]); //hiển thị hàng chữ 2

while (PINC.3 == 0) //Thuc hien yeu cau so 2

for (j=14;j>=0;j--) //chay cho de khi nao ca chuoi duoc can le trai

pos(1,j);

for(i=0;i<=(14-j);i++)

display(line1[i]);

2011 Trang 48
PTIT [BÁO CÁO KỸ THUẬT VI XỬ LÝ]

delay_ms(40);

clear_LCD(); //xóa LCD

for(j=1;j<=15;j++) //chay tiep cho den khi ca chuoi chay het

pos(1,0);

for(i=j;i<=16;i++)

display(line1[i]);

delay_ms(40);

clear_LCD();

2011 Trang 49
PTIT [BÁO CÁO KỸ THUẬT VI XỬ LÝ]

LCD1
LM016L

VDD
VSS

VEE

RW
RS

D0
D1
D2
D3
D4
D5
D6
D7
E
1
2
3

4
5
6

7
8
9
10
11
12
13
14
U1
9 22
RESET PC0/SCL
23
PC1/SDA
13 24
XTAL1 PC2/TCK
12 25
XTAL2 PC3/TMS
26
PC4/TDO
40 27
PA0/ADC0 PC5/TDI
39 28
PA1/ADC1 PC6/TOSC1
38 29
PA2/ADC2 PC7/TOSC2
37
PA3/ADC3
36 14
PA4/ADC4 PD0/RXD
35 15
PA5/ADC5 PD1/TXD
34 16
PA6/ADC6 PD2/INT0
33 17
PA7/ADC7 PD3/INT1
18
PD4/OC1B
1 19
PB0/T0/XCK PD5/OC1A
2 20
PB1/T1 PD6/ICP1
3 21
PB2/AIN0/INT2 PD7/OC2
4
PB3/AIN1/OC0
5
PB4/SS
6
PB5/MOSI
7 32
PB6/MISO AREF
8 30
PB7/SCK AVCC
ATMEGA16

Ghi chú:

+ Chỉnh mức Logic của cổng PINC.3 thành 0 để thực hiện yêu cầu số 1 (hiển thị 2 dòng
chữ trên LCD)

+ Chỉnh mức Logic của cổng PINC.3 thành 1 để thực hiện yêu cầu số 2 (hiển thị dòng chữ
trôi)

2011 Trang 50
PTIT [BÁO CÁO KỸ THUẬT VI XỬ LÝ]

/*****************************************************

This program was produced by the

CodeWizardAVR V2.05.0 Professional

Automatic Program Generator

© Copyright 1998-2010 Pavel Haiduc, HP InfoTech s.r.l.

http://www.hpinfotech.com

Project : Bai thuc hanh so 5

Version :

Date : 9/9/2011

Author : Dinh Tuan Hai

Company : D09VTA1 - PTIT - 409160010

Comments:

Chip type : ATmega16

Program type : Application

AVR Core Clock frequency: 8.000000 MHz

Memory model : Small

External RAM size :0

2011 Trang 51
PTIT [BÁO CÁO KỸ THUẬT VI XỬ LÝ]

Data Stack size : 256

*****************************************************/

#include <mega16.h>

#include <delay.h>

#include <stdio.h>

#define RS PORTC.0 //định nghĩa lại cái port trên LCD để dễ chỉnh sửa

#define RW PORTC.1

#define E PORTC.2

#define data PORTD

#define ADC_VREF_TYPE 0x20

// Read the 8 most significant bits

// of the AD conversion result

unsigned char read_adc(unsigned char adc_input) //chương trình con đọc ADC

2011 Trang 52
PTIT [BÁO CÁO KỸ THUẬT VI XỬ LÝ]

ADMUX=adc_input | (ADC_VREF_TYPE & 0xff);

// Delay needed for the stabilization of the ADC input voltage

delay_us(10);

// Start the AD conversion

ADCSRA|=0x40;

// Wait for the AD conversion to complete

while ((ADCSRA & 0x10)==0);

ADCSRA|=0x10;

return ADCH;

void wait_LCD(void)

unsigned char tam;

tam = 0x80;

DDRD = 0x00;

while ((tam && 0x80)==0x80)

RS = 0;

RW = 1;

E = 0;

tam = PIND;

2011 Trang 53
PTIT [BÁO CÁO KỸ THUẬT VI XỬ LÝ]

E = 1;

E = 0;

DDRD = 0xFF;

void set(unsigned char set)

delay_us(210);

RS = 0;

RW = 0;

E = 0;

data = set;

E = 1;

E = 0;

void display(unsigned char out)

delay_us(210);

RS = 1;

RW = 0;

2011 Trang 54
PTIT [BÁO CÁO KỸ THUẬT VI XỬ LÝ]

E = 0;

data = out;

E = 1;

E = 0;

void clear_LCD(void)

delay_us(210);

RS = 0;

RW = 0;

E = 0;

data = 0x01;

E = 1;

E = 0;

void pos(int x,int y)

int i;

if(x == 0)

set(0x02);

2011 Trang 55
PTIT [BÁO CÁO KỸ THUẬT VI XỬ LÝ]

if(x == 1)

set(0xc0);

y = y-1; //sua lai ham nay de cho chinh xac vi tri cusor dong 2

for(i=0;i<=y;i++)

set(0x14);

void display_hexa(unsigned char in) //chuong trinh hien thi ma HEXA

unsigned char i,j;

i = in & 0x0f; //lấy 4 bit thấp

if ((0x00 <= i) && (i <= 0x09))

i = i + 0x30;

else i = i + 0x37;

j = in & 0xf0; //lấy 4 bit cao

j = j >> 4;

if ((0x00 <= j) && (j <= 0x09))

j = j + 0x30;

2011 Trang 56
PTIT [BÁO CÁO KỸ THUẬT VI XỬ LÝ]

else j = j + 0x37;

pos(0,13);

display(j);

delay_ms(1);

display(i);

//data = j;

delay_ms(100);

clear_LCD();

// Declare your global variables here

int k;

unsigned char i,j,in,tam;

unsigned int value,bit_value;

float valuef;

unsigned char dis[6] = {0,0x2c,0,0,0,0};

void main(void)

// Declare your local variables here

2011 Trang 57
PTIT [BÁO CÁO KỸ THUẬT VI XỬ LÝ]

// Input/Output Ports initialization

// Port A initialization

// Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In

// State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T

PORTA=0x00;

DDRA=0x00;

// Port B initialization

// Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In

// State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T

PORTB=0x00;

DDRB=0x00;

// Port C initialization

// Func7=Out Func6=Out Func5=Out Func4=Out Func3=Out Func2=Out Func1=Out Func0=Out

// State7=0 State6=0 State5=0 State4=0 State3=0 State2=0 State1=0 State0=0

PORTC=0x00;

DDRC=0b00000111;

// Port D initialization

2011 Trang 58
PTIT [BÁO CÁO KỸ THUẬT VI XỬ LÝ]

// Func7=Out Func6=Out Func5=Out Func4=Out Func3=Out Func2=Out Func1=Out Func0=Out

// State7=0 State6=0 State5=0 State4=0 State3=0 State2=0 State1=0 State0=0

PORTD=0x00;

DDRD=0xFF;

// Timer/Counter 0 initialization

// Clock source: System Clock

// Clock value: Timer 0 Stopped

// Mode: Normal top=0xFF

// OC0 output: Disconnected

TCCR0=0x00;

TCNT0=0x00;

OCR0=0x00;

// Timer/Counter 1 initialization

// Clock source: System Clock

// Clock value: Timer1 Stopped

// Mode: Normal top=0xFFFF

// OC1A output: Discon.

// OC1B output: Discon.

// Noise Canceler: Off

2011 Trang 59
PTIT [BÁO CÁO KỸ THUẬT VI XỬ LÝ]

// Input Capture on Falling Edge

// Timer1 Overflow Interrupt: Off

// Input Capture Interrupt: Off

// Compare A Match Interrupt: Off

// Compare B Match Interrupt: Off

TCCR1A=0x00;

TCCR1B=0x00;

TCNT1H=0x00;

TCNT1L=0x00;

ICR1H=0x00;

ICR1L=0x00;

OCR1AH=0x00;

OCR1AL=0x00;

OCR1BH=0x00;

OCR1BL=0x00;

// Timer/Counter 2 initialization

// Clock source: System Clock

// Clock value: Timer2 Stopped

// Mode: Normal top=0xFF

// OC2 output: Disconnected

2011 Trang 60
PTIT [BÁO CÁO KỸ THUẬT VI XỬ LÝ]

ASSR=0x00;

TCCR2=0x00;

TCNT2=0x00;

OCR2=0x00;

// External Interrupt(s) initialization

// INT0: Off

// INT1: Off

// INT2: Off

MCUCR=0x00;

MCUCSR=0x00;

// Timer(s)/Counter(s) Interrupt(s) initialization

TIMSK=0x00;

// USART initialization

// USART disabled

UCSRB=0x00;

// Analog Comparator initialization

// Analog Comparator: Off

2011 Trang 61
PTIT [BÁO CÁO KỸ THUẬT VI XỬ LÝ]

// Analog Comparator Input Capture by Timer/Counter 1: Off

ACSR=0x80;

SFIOR=0x00;

// ADC initialization

// ADC Clock frequency: 1000.000 kHz

// ADC Voltage Reference: AREF pin

// ADC Auto Trigger Source: ADC Stopped

// Only the 8 most significant bits of

// the AD conversion result are used

ADMUX=ADC_VREF_TYPE & 0xff;

ADCSRA=0x83;

// SPI initialization

// SPI disabled

SPCR=0x00;

// TWI initialization

// TWI disabled

TWCR=0x00;

set(0x38);

2011 Trang 62
PTIT [BÁO CÁO KỸ THUẬT VI XỬ LÝ]

set(0x0c);

set(0x02);

while (1)

// Place your code here

while (PINC.3 == 0) // Thuc hien yeu cau so 1

in = read_adc(0); //đọc ADC vào

display_hexa(in); //hiển thị mã hexa lên LCD

for(k = 0; k<=7; k++)

in = read_adc(k);

// Chuong trinh doi tu so nhi phan ra thap phan

value = 0;

bit_value = 1;

2011 Trang 63
PTIT [BÁO CÁO KỸ THUẬT VI XỬ LÝ]

for (i=0;i<=7;i++)

tam = in & 0x01;

bit_value = 1;

if(tam == 0x01)

for(j=1;j<=i;j++)

bit_value = 2* bit_value;

else bit_value = 0;

value = bit_value + value;

in = in >> 1;

//Quy doi gia tri de chuan bi hien thi ra LCD

valuef = value * 5;

valuef = (float)valuef / 255;

valuef = valuef * 10000;

value = (int)valuef;

2011 Trang 64
PTIT [BÁO CÁO KỸ THUẬT VI XỬ LÝ]

//Nap cac gia tri do duoc vao cac vi tri hien thi

for(i=5;i>=2;i--)

dis[i] = value % 10 + 0x30;

value = value/10;

dis[0] = value % 10 + 0x30;

//Hien thi ra man hinh LCD

if (k==4)

pos(1,0);

for (i=0;i<=2; i++)

display(dis[i]);

display(0x20); //SpaceBar

delay_ms(150);

2011 Trang 65
PTIT [BÁO CÁO KỸ THUẬT VI XỬ LÝ]

clear_LCD();

RV2(2) LCD2
LM016L

VDD
VSS

VEE

RW
RS

D0
D1
D2
D3
D4
D5
D6
D7
RV1 RV2 RV3 RV4

E
1
2
3

4
5
6

7
8
9
10
11
12
13
14
100%

100%

100%

0%

U1
9 22
RESET PC0/SCL
50k 50k 50k 100 23
PC1/SDA
13 24
XTAL1 PC2/TCK
12 25
XTAL2 PC3/TMS
26
PC4/TDO
40 27
PA0/ADC0 PC5/TDI
39 28
PA1/ADC1 PC6/TOSC1
38 29
PA2/ADC2 PC7/TOSC2

1
37
PA3/ADC3
36 14
PA4/ADC4 PD0/RXD
35 15
PA5/ADC5 PD1/TXD
34 16
PA6/ADC6 PD2/INT0
33 17
PA7/ADC7 PD3/INT1
18
RV5 RV6 RV7 RV8 PD4/OC1B
1 19
PB0/T0/XCK PD5/OC1A
2 20
PB1/T1 PD6/ICP1
3 21
PB2/AIN0/INT2 PD7/OC2
4
100%

100%

100%

100%

PB3/AIN1/OC0
5 U1(AREF)
PB4/SS
6
PB5/MOSI
7 32
PB6/MISO AREF
50k 50k 50k 50k 8 30
PB7/SCK AVCC
ATMEGA16

Ghi chú:

+ Chỉnh mức Logic trên PINC.3 là 0 để thực hiện yêu cầu số 1 (hiện mã HEXA tương ứng
điện áp đầu vào cổng PINA.0)

+ Chỉnh mức Logic trên PINC.3 là 1 để thực hiện yêu cầu số 2 (hiện 8 giá trị điện áp
tương ứng trên 8 cổng vào)

2011 Trang 66
PTIT [BÁO CÁO KỸ THUẬT VI XỬ LÝ]

/*****************************************************

This program was produced by the

CodeWizardAVR V2.05.0 Professional

Automatic Program Generator

© Copyright 1998-2010 Pavel Haiduc, HP InfoTech s.r.l.

http://www.hpinfotech.com

Project :

Version :

Date : 9/19/2011

Author : Dinh Tuan Hai - 409160010

Company : D09VTA1 - PTIT

Comments: Bai thuc hanh so 6

Chip type : ATmega16

Program type : Application

AVR Core Clock frequency: 8.000000 MHz

Memory model : Small

External RAM size :0

2011 Trang 67
PTIT [BÁO CÁO KỸ THUẬT VI XỬ LÝ]

Data Stack size : 256

*****************************************************/

#include <mega16.h>

#include <delay.h>

#include <math.h>

#define RS PORTC.0

#define RW PORTC.1

#define E PORTC.2

#define data PORTD

long int i,j=0,x;

long int time,temp;

int k;

float v,tempf;

unsigned char timedisplay[5] = {0,46,0,0,0}; //chuoi hien thi thoi gian tu nap

unsigned char voltagedisplay[5] = {0,46,0,0,0}; //chuoi hien thi dien ap tren tu

unsigned char tdisplay[4] = {0,0,0,0}; //chuoi hien thi nhiet do

char start[] = {" Starting..."}; //Chuoi hien thi khi LCD khoi dong

2011 Trang 68
PTIT [BÁO CÁO KỸ THUẬT VI XỬ LÝ]

// Timer 0 overflow interrupt service routine

interrupt [TIM0_OVF] void timer0_ovf_isr(void)

// Place your code here

// Timer 0 output compare interrupt service routine

interrupt [TIM0_COMP] void timer0_comp_isr(void)

// Place your code here

i++; //tang i len sau moi lan ngat

// Analog Comparator interrupt service routine

interrupt [ANA_COMP] void ana_comp_isr(void)

// Place your code here

time = i*10; //thoi gian tinh bang ms.

2011 Trang 69
PTIT [BÁO CÁO KỸ THUẬT VI XỬ LÝ]

// Declare your global variables here

void wait_LCD(void)

unsigned char tam;

tam = 0x80;

DDRD = 0x00;

while ((tam && 0x80)==0x80)

RS = 0;

RW = 1;

E = 0;

tam = PIND;

E = 1;

E = 0;

DDRD = 0xFF;

void set(unsigned char set)

2011 Trang 70
PTIT [BÁO CÁO KỸ THUẬT VI XỬ LÝ]

delay_us(210);

RS = 0;

RW = 0;

E = 0;

data = set;

E = 1;

E = 0;

void display(unsigned char out)

delay_us(210);

RS = 1;

RW = 0;

E = 0;

data = out;

E = 1;

E = 0;

void clear_LCD(void)

2011 Trang 71
PTIT [BÁO CÁO KỸ THUẬT VI XỬ LÝ]

RS = 0;

RW = 0;

E = 0;

data = 0x01;

E = 1;

E = 0;

void pos(int x,int y)

int i;

if(x == 0)

set(0x02);

if(x == 1)

set(0xc0);

for(i=0;i<=y;i++)

set(0x14);

void time_display(long int time) //hien thi thoi gian

clear_LCD();

2011 Trang 72
PTIT [BÁO CÁO KỸ THUẬT VI XỬ LÝ]

temp = time;

timedisplay[4] = temp % 10 + 48;

temp = temp / 10;

timedisplay[3] = temp % 10 + 48;

temp = temp / 10;

timedisplay[2] = temp % 10 + 48;

temp = temp / 10;

timedisplay[0] = temp + 48;

for(k=0;k<=4;k++)

display(timedisplay[k]);

display(115);

//time = 0;

//delay_ms(300);

void voltage_display(long int time) //hien thi dien ap

pos(0,9);

tempf = (float)time / 1000;

v = 5*(1-exp((-tempf)/10));

v = v * 1000;

v = (int)v;

2011 Trang 73
PTIT [BÁO CÁO KỸ THUẬT VI XỬ LÝ]

temp = v;

voltagedisplay[4] = temp % 10 + 48;

temp = temp / 10;

voltagedisplay[3] = temp % 10 + 48;

temp = temp / 10;

voltagedisplay[2] = temp % 10 + 48;

temp = temp / 10;

voltagedisplay[0] = temp + 48;

for(k=0;k<=4;k++)

display(voltagedisplay[k]);

display(86);

void temperature_display(int v) //hien thi nhiet do

pos(1,5);

temp = v;

for(k=3;k>=0;k--)

tdisplay[k] = temp % 10;

temp = temp /10;

2011 Trang 74
PTIT [BÁO CÁO KỸ THUẬT VI XỬ LÝ]

for(k=0;k<=2;k++)

display(tdisplay[k]+48);

display(111);

display(67);

void main(void)

// Declare your local variables here

// Input/Output Ports initialization

// Port A initialization

// Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In

// State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T

PORTA=0x00;

DDRA=0xFF;

Tải bản FULL (165 trang): bit.ly/2Ywib4t

2011 Trang 75
PTIT [BÁO CÁO KỸ THUẬT VI XỬ LÝ]

// Port B initialization

// Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In

// State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T

PORTB=0x00;

DDRB=0x00;

// Port C initialization

// Func7=Out Func6=Out Func5=Out Func4=Out Func3=Out Func2=Out Func1=Out Func0=Out

// State7=0 State6=0 State5=0 State4=0 State3=0 State2=0 State1=0 State0=0

PORTC=0x00;

DDRC=0xFF;

// Port D initialization

// Func7=Out Func6=Out Func5=Out Func4=Out Func3=Out Func2=Out Func1=Out Func0=Out

// State7=0 State6=0 State5=0 State4=0 State3=0 State2=0 State1=0 State0=0

PORTD=0x00;

DDRD=0xFF;

// Timer/Counter 0 initialization

// Clock source: System Clock

// Clock value: 1000.000 kHz

2011 Trang 76
PTIT [BÁO CÁO KỸ THUẬT VI XỬ LÝ]

// Mode: CTC top=OCR0

// OC0 output: Disconnected

TCCR0=0x0B; //CTC mode

TCNT0=0x00; //khoi tao gia tri 0

OCR0=0x9B; //dem len 125 nhip

// Timer/Counter 1 initialization

// Clock source: System Clock

// Clock value: Timer1 Stopped

// Mode: Normal top=0xFFFF

// OC1A output: Discon.

// OC1B output: Discon.

// Noise Canceler: Off

// Input Capture on Falling Edge

// Timer1 Overflow Interrupt: Off

// Input Capture Interrupt: Off

// Compare A Match Interrupt: Off

// Compare B Match Interrupt: Off

TCCR1A=0x00;

TCCR1B=0x00;

TCNT1H=0x00;

2011 Trang 77
PTIT [BÁO CÁO KỸ THUẬT VI XỬ LÝ]

TCNT1L=0x00;

ICR1H=0x00;

ICR1L=0x00;

OCR1AH=0x00;

OCR1AL=0x00;

OCR1BH=0x00;

OCR1BL=0x00;

// Timer/Counter 2 initialization

// Clock source: System Clock

// Clock value: Timer2 Stopped

// Mode: Normal top=0xFF

// OC2 output: Disconnected

ASSR=0x00;

TCCR2=0x00;

TCNT2=0x00; Tải bản FULL (165 trang): bit.ly/2Ywib4t

OCR2=0x00;

// External Interrupt(s) initialization

// INT0: Off

// INT1: Off

2011 Trang 78
PTIT [BÁO CÁO KỸ THUẬT VI XỬ LÝ]

// INT2: Off

MCUCR=0x00;

MCUCSR=0x00;

// Timer(s)/Counter(s) Interrupt(s) initialization

TIMSK=0x00;

// USART initialization

// USART disabled

UCSRB=0x00;

// Analog Comparator initialization

// Analog Comparator: On

// Interrupt on Falling Output Edge

// Analog Comparator Input Capture by Timer/Counter 1: On

ACSR=0x08;

SFIOR=0x00;

// ADC initialization

// ADC disabled

ADCSRA=0x00;

2011 Trang 79
PTIT [BÁO CÁO KỸ THUẬT VI XỬ LÝ]

// SPI initialization

// SPI disabled

SPCR=0x00;

// TWI initialization

// TWI disabled

TWCR=0x00;

// Global enable interrupts

#asm("sei")

set(0x38);

set(0x0c);

set(0x02);

PORTA.0 = 1;

delay_ms(50); //xa tu

for(k=0;k<=16;k++)

display(start[k]); //hien dong chu khoi dong

while (1)

2011 Trang 80
PTIT [BÁO CÁO KỸ THUẬT VI XỬ LÝ]

// Place your code here

PORTA.0 = 0;

TIMSK = 0x02;

TCNT0 = 0x00;

i=0;

x = 1;

time = 0;

while(x==1) //lap vo han cho den khi tu nap bang LM35

if(time!=0)

x = 0;

pos(0,2);

time_display(time); //lan luot hien thi cac gia tri ra man hinh LCD

voltage_display(time);

temperature_display(v);

PORTA.0 = 1; //xa tu chuan bi cho lan do tiep theo

delay_ms(50);

2011 Trang 81
PTIT [BÁO CÁO KỸ THUẬT VI XỬ LÝ]

LCD1
LM016L

R2(1)

VDD
VSS

VEE

RW
RS

D0
D1
D2
D3
D4
D5
D6
D7
E
R2

1
2
3

4
5
6

7
8
9
10
11
12
13
14
10k

RL1 U1
1 9 22
RESET PC0/SCL
23
PC1/SDA
13 24
XTAL1 PC2/TCK
12 25
XTAL2 PC3/TMS
+88.8 26
PC4/TDO
Volts 40 27
PA0/ADC0 PC5/TDI
39 28
PA1/ADC1 PC6/TOSC1
C1 38
PA2/ADC2 PC7/TOSC2
29
1m R1(1) 37
PA3/ADC3
36 14
PA4/ADC4 PD0/RXD
35 15
PA5/ADC5 PD1/TXD
34 16
PA6/ADC6 PD2/INT0
33 17
PA7/ADC7 PD3/INT1
R1 PD4/OC1B
18
1 19
0 10k
U1(PB2/AIN0/INT2) 2
PB0/T0/XCK
PB1/T1
PD5/OC1A
PD6/ICP1
20
3 21
PB2/AIN0/INT2 PD7/OC2
4
PB3/AIN1/OC0
U3(VOUT) 5
U3 PB4/SS
1 6
PB5/MOSI
7 32
PB6/MISO AREF
8 30
PB7/SCK AVCC
85.0
ATMEGA16

2
VOUT

3 LM35

Ghi chú:

+ Điều chỉnh nhiệt độ trên LM35 để kiểm tra xem hiển thị LCD có chính xác hay không.

Tải bản FULL (165 trang): bit.ly/2Ywib4t

2011 Trang 82
PTIT [BÁO CÁO KỸ THUẬT VI XỬ LÝ]

BÀI 7: G DAC
/*****************************************************

This program was produced by the

CodeWizardAVR V1.24.6 Professional

Automatic Program Generator

© Copyright 1998-2005 Pavel Haiduc, HP InfoTech s.r.l.

http://www.hpinfotech.com

e-mail:office@hpinfotech.com

Project : Bai thuc hanh so 7

Version :

Date : 1/10/2011

Author : Dinh Tuan Hai

Company : D09VTA1 - PTIT

Comments: MSSV: 409160010

Chip type : ATmega16

Program type : Application

Clock frequency : 8,000000 MHz

Memory model : Small


2677192

2011 Trang 83

You might also like