Professional Documents
Culture Documents
BÁO CÁO
MÔN KỸ THUẬT VI XỬ LÝ
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.
2011 Trang 2
PTIT [BÁO CÁO KỸ THUẬT VI XỬ LÝ]
MỤC LỤC
B I 2 HI N TH T ÊN ED 7 Đ ẠN ............................................................................................ 17
B I 4 ĐIỀU HI N HI N TH T ÊN CD .................................................................................... 38
2011 Trang 3
PTIT [BÁO CÁO KỸ THUẬT VI XỬ LÝ]
/*****************************************************
http://www.hpinfotech.com
Project :
Version :
Date : 8/21/2011
Company :
Comments:
2011 Trang 4
PTIT [BÁO CÁO KỸ THUẬT VI XỬ LÝ]
*****************************************************/
#include <mega16.h>
#include <delay.h>
#include <stdio.h>
void main(void)
// Port A initialization
PORTA=0x00;
// Port B initialization
2011 Trang 5
PTIT [BÁO CÁO KỸ THUẬT VI XỬ LÝ]
PORTB=0x00;
DDRB=0x00; //Port B là IN
// Port C initialization
PORTC=0x00;
DDRC=0x00; //Port C là IN
// Port D initialization
PORTD=0x00;
DDRD=0x00; //Port D là IN
// Timer/Counter 0 initialization
2011 Trang 6
PTIT [BÁO CÁO KỸ THUẬT VI XỬ LÝ]
TCNT0=0x00;
OCR0=0x00;
// Timer/Counter 1 initialization
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
TCCR2=0x00;
TCNT2=0x00;
OCR2=0x00;
// INT1: Off
// INT2: Off
2011 Trang 8
PTIT [BÁO CÁO KỸ THUẬT VI XỬ LÝ]
MCUCR=0x00;
MCUCSR=0x00;
// USART initialization
// USART disabled
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)
switch(PINB)
PORTA = 0b10000000;
delay_ms(20);
2011 Trang 10
PTIT [BÁO CÁO KỸ THUẬT VI XỬ LÝ]
delay_ms(20);
break;
};
PORTA = 0b00000000;
phu = 0b10000000;
PORTA = phu;
delay_ms(20);
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;
delay_ms(20);
};
phu = 0b10000000;
phu2 = 0b00000001;
2011 Trang 12
PTIT [BÁO CÁO KỸ THUẬT VI XỬ LÝ]
delay_ms(20);
break;
case 0b00001000: //Cau 4: 1 LED sang chay tu trai qua phai roi dung lai
phu2 = 0b00000000;
phu = 0b10000000;
delay_ms(20);
phu2 = PORTA;
2011 Trang 13
PTIT [BÁO CÁO KỸ THUẬT VI XỬ LÝ]
delay_ms(20);
break;
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;
};
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;
delay_ms(20);
phu = phu >> 1; //phu cho led chay qua phai, phu2 cho led cha y
qua trai
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Ý]
/*****************************************************
http://www.hpinfotech.com
Version :
Date : 8/22/2011
2011 Trang 17
PTIT [BÁO CÁO KỸ THUẬT VI XỬ LÝ]
Company :
*****************************************************/
#include <mega16.h>
#include <delay.h>
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)
// Port A initialization
PORTA=0x00;
DDRA=0x00;
// Port B initialization
PORTB=0x00;
DDRB=0x00;
// Port C initialization
2011 Trang 19
PTIT [BÁO CÁO KỸ THUẬT VI XỬ LÝ]
PORTC=0x00;
DDRC=0xFF;
// Port D initialization
PORTD=0x00;
DDRD=0xFF;
// Timer/Counter 0 initialization
TCCR0=0x00;
TCNT0=0x00;
OCR0=0x00;
// Timer/Counter 1 initialization
2011 Trang 20
PTIT [BÁO CÁO KỸ THUẬT VI XỬ LÝ]
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Ý]
ASSR=0x00;
TCCR2=0x00;
TCNT2=0x00;
OCR2=0x00;
// INT0: Off
// INT1: Off
// INT2: Off
MCUCR=0x00;
MCUCSR=0x00;
TIMSK=0x00;
// USART initialization
// USART disabled
2011 Trang 22
PTIT [BÁO CÁO KỸ THUẬT VI XỬ LÝ]
UCSRB=0x00;
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Ý]
switch(PINB)
for (i=0;i<=3;i++)
delay_ms(2);
PORTD = pos[4];
break;
dis[3] = led[i];
2011 Trang 24
PTIT [BÁO CÁO KỸ THUẬT VI XỬ LÝ]
PORTD = pos[j];
PORTC = dis[j];
delay_ms(2);
PORTD = pos[4];
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Ý]
/*****************************************************
http://www.hpinfotech.com
Project :
Version :
Date : 27/08/2011
Company : D09VTA1
Comments: HVCNBCVT
2011 Trang 27
PTIT [BÁO CÁO KỸ THUẬT VI XỬ LÝ]
*****************************************************/
#include <mega16.h>
#include <delay.h>
int i,dem,row,col,n,j,k;
//dinh nghia cac vi tri cua LED, pos[4] la khong chon vi tri nao(xoa)
dem = 10;
n=0;
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;
void main(void)
// Port A initialization
PORTA=0xFF;
// Port B initialization
2011 Trang 29
PTIT [BÁO CÁO KỸ THUẬT VI XỬ LÝ]
PORTB=0xFF;
// Port C initialization
PORTC=0x00;
// Port D initialization
PORTD=0x00;
// Timer/Counter 0 initialization
TCCR0=0x00;
2011 Trang 30
PTIT [BÁO CÁO KỸ THUẬT VI XỬ LÝ]
TCNT0=0x00;
OCR0=0x00;
// Timer/Counter 1 initialization
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
ASSR=0x00;
TCCR2=0x00;
TCNT2=0x00;
OCR2=0x00;
// INT0: Off
// INT1: Off
// INT2: Off
MCUCR=0x00;
MCUCSR=0x00;
2011 Trang 32
PTIT [BÁO CÁO KỸ THUẬT VI XỬ LÝ]
TIMSK=0x00;
// USART initialization
// USART disabled
UCSRB=0x00;
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)
PORTB=0b11110111;
row=TIMVITRI(PINA);
if (row>=0)
dis[3] = led[i];
};
2011 Trang 34
PTIT [BÁO CÁO KỸ THUẬT VI XỬ LÝ]
};
PORTD = pos[3];
PORTC = dis[3];
delay_ms(1);
PORTB=0b11110111;
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Ý]
};
};
for(n=0;n<=6;n++)
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Ý]
/*****************************************************
http://www.hpinfotech.com
Project :
Version :
Date : 9/6/2011
Comments:
2011 Trang 38
PTIT [BÁO CÁO KỸ THUẬT VI XỬ LÝ]
*****************************************************/
#include <mega16.h>
#include <delay.h>
#define RS PORTC.0
#define RW PORTC.1
#define E PORTC.2
void wait_LCD(void) //chương trình con nhằm đợi cho LCD sẵn sàng
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;
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;
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);
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)
2011 Trang 42
PTIT [BÁO CÁO KỸ THUẬT VI XỬ LÝ]
// Port A initialization
PORTA=0x00;
DDRA=0x00;
// Port B initialization
PORTB=0x00;
DDRB=0x00;
// Port C initialization
PORTC=0x00;
DDRC=0xFF;
// Port D initialization
2011 Trang 43
PTIT [BÁO CÁO KỸ THUẬT VI XỬ LÝ]
PORTD=0x00;
DDRD=0x07;
// Timer/Counter 0 initialization
TCCR0=0x00;
TCNT0=0x00;
OCR0=0x00;
// Timer/Counter 1 initialization
2011 Trang 44
PTIT [BÁO CÁO KỸ THUẬT VI XỬ LÝ]
TCCR1A=0x00;
TCCR1B=0x00;
TCNT1H=0x00;
TCNT1L=0x00;
ICR1H=0x00;
ICR1L=0x00;
OCR1AH=0x00;
OCR1AL=0x00;
OCR1BH=0x00;
OCR1BL=0x00;
// Timer/Counter 2 initialization
ASSR=0x00;
2011 Trang 45
PTIT [BÁO CÁO KỸ THUẬT VI XỬ LÝ]
TCCR2=0x00;
TCNT2=0x00;
OCR2=0x00;
// INT0: Off
// INT1: Off
// INT2: Off
MCUCR=0x00;
MCUCSR=0x00;
TIMSK=0x00;
// USART initialization
// USART disabled
UCSRB=0x00;
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)
2011 Trang 47
PTIT [BÁO CÁO KỸ THUẬT VI XỬ LÝ]
for (i=0;i<=16;i++)
set(0xc0);
for (i=0;i<=16;i++)
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);
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Ý]
/*****************************************************
http://www.hpinfotech.com
Version :
Date : 9/9/2011
Comments:
2011 Trang 51
PTIT [BÁO CÁO KỸ THUẬT VI XỬ LÝ]
*****************************************************/
#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
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Ý]
delay_us(10);
ADCSRA|=0x40;
ADCSRA|=0x10;
return ADCH;
void wait_LCD(void)
tam = 0x80;
DDRD = 0x00;
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;
delay_us(210);
RS = 0;
RW = 0;
E = 0;
data = set;
E = 1;
E = 0;
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;
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);
i = i + 0x30;
else i = i + 0x37;
j = j >> 4;
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();
int k;
float valuef;
void main(void)
2011 Trang 57
PTIT [BÁO CÁO KỸ THUẬT VI XỬ LÝ]
// Port A initialization
PORTA=0x00;
DDRA=0x00;
// Port B initialization
PORTB=0x00;
DDRB=0x00;
// Port C initialization
PORTC=0x00;
DDRC=0b00000111;
// Port D initialization
2011 Trang 58
PTIT [BÁO CÁO KỸ THUẬT VI XỬ LÝ]
PORTD=0x00;
DDRD=0xFF;
// Timer/Counter 0 initialization
TCCR0=0x00;
TCNT0=0x00;
OCR0=0x00;
// Timer/Counter 1 initialization
2011 Trang 59
PTIT [BÁO CÁO KỸ THUẬT VI XỬ LÝ]
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 60
PTIT [BÁO CÁO KỸ THUẬT VI XỬ LÝ]
ASSR=0x00;
TCCR2=0x00;
TCNT2=0x00;
OCR2=0x00;
// INT0: Off
// INT1: Off
// INT2: Off
MCUCR=0x00;
MCUCSR=0x00;
TIMSK=0x00;
// USART initialization
// USART disabled
UCSRB=0x00;
2011 Trang 61
PTIT [BÁO CÁO KỸ THUẬT VI XỬ LÝ]
ACSR=0x80;
SFIOR=0x00;
// ADC initialization
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)
in = read_adc(k);
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++)
bit_value = 1;
if(tam == 0x01)
for(j=1;j<=i;j++)
bit_value = 2* bit_value;
else bit_value = 0;
in = in >> 1;
valuef = value * 5;
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--)
value = value/10;
if (k==4)
pos(1,0);
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Ý]
/*****************************************************
http://www.hpinfotech.com
Project :
Version :
Date : 9/19/2011
2011 Trang 67
PTIT [BÁO CÁO KỸ THUẬT VI XỬ LÝ]
*****************************************************/
#include <mega16.h>
#include <delay.h>
#include <math.h>
#define RS PORTC.0
#define RW PORTC.1
#define E PORTC.2
int k;
float v,tempf;
unsigned char timedisplay[5] = {0,46,0,0,0}; //chuoi hien thi thoi gian tu nap
char start[] = {" Starting..."}; //Chuoi hien thi khi LCD khoi dong
2011 Trang 68
PTIT [BÁO CÁO KỸ THUẬT VI XỬ LÝ]
2011 Trang 69
PTIT [BÁO CÁO KỸ THUẬT VI XỬ LÝ]
void wait_LCD(void)
tam = 0x80;
DDRD = 0x00;
RS = 0;
RW = 1;
E = 0;
tam = PIND;
E = 1;
E = 0;
DDRD = 0xFF;
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;
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;
int i;
if(x == 0)
set(0x02);
if(x == 1)
set(0xc0);
for(i=0;i<=y;i++)
set(0x14);
clear_LCD();
2011 Trang 72
PTIT [BÁO CÁO KỸ THUẬT VI XỬ LÝ]
temp = time;
for(k=0;k<=4;k++)
display(timedisplay[k]);
display(115);
//time = 0;
//delay_ms(300);
pos(0,9);
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;
for(k=0;k<=4;k++)
display(voltagedisplay[k]);
display(86);
pos(1,5);
temp = v;
for(k=3;k>=0;k--)
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)
// Port A initialization
PORTA=0x00;
DDRA=0xFF;
2011 Trang 75
PTIT [BÁO CÁO KỸ THUẬT VI XỬ LÝ]
// Port B initialization
PORTB=0x00;
DDRB=0x00;
// Port C initialization
PORTC=0x00;
DDRC=0xFF;
// Port D initialization
PORTD=0x00;
DDRD=0xFF;
// Timer/Counter 0 initialization
2011 Trang 76
PTIT [BÁO CÁO KỸ THUẬT VI XỬ LÝ]
// Timer/Counter 1 initialization
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
ASSR=0x00;
TCCR2=0x00;
OCR2=0x00;
// INT0: Off
// INT1: Off
2011 Trang 78
PTIT [BÁO CÁO KỸ THUẬT VI XỬ LÝ]
// INT2: Off
MCUCR=0x00;
MCUCSR=0x00;
TIMSK=0x00;
// USART initialization
// USART disabled
UCSRB=0x00;
// Analog Comparator: 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;
#asm("sei")
set(0x38);
set(0x0c);
set(0x02);
PORTA.0 = 1;
delay_ms(50); //xa tu
for(k=0;k<=16;k++)
while (1)
2011 Trang 80
PTIT [BÁO CÁO KỸ THUẬT VI XỬ LÝ]
PORTA.0 = 0;
TIMSK = 0x02;
TCNT0 = 0x00;
i=0;
x = 1;
time = 0;
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);
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.
2011 Trang 82
PTIT [BÁO CÁO KỸ THUẬT VI XỬ LÝ]
BÀI 7: G DAC
/*****************************************************
http://www.hpinfotech.com
e-mail:office@hpinfotech.com
Version :
Date : 1/10/2011
2011 Trang 83