0
Tải bản đầy đủ (.doc) (57 trang)

Ngoài ra còn 1 số loại linh kiện khác

Một phần của tài liệu ĐỒ ÁN TỐT NGHIỆP MẠCH KIT THÍ NGHIỆM DÙNG VI ĐIỀU KHIỂN AVR (Trang 49 -57 )

C: VI ĐIỀU KHIỂN PIC

6. Giới thiệu một vài linh kiện được lựa chọn

6.6: Ngoài ra còn 1 số loại linh kiện khác

Nút nhấn button :

Nút bấm được chọn làm nút Reset và nút bấm dán dùng làm ma trận phím 4x4.

Là công tắc thường mở, khi nhấn sẽ ở trạng thái đóng (nối) mạch.

Nút bấm và nút bấm dán

SW-DIP

Dùng để bắt dây điện. Có thể dùng để lấy nguồn từ biến áp.

Thạch anh

Header 40 pins:

CHƯƠNG 3: MỘT SỐ BÀI THỰC HÀNH

Để điều khiển hoạt động của thiết bị ta cần viết chương trình cho vi điều khiển hoặc điều khiển trực tiếp bằng máy vi tính thông qua cổng COM. Atmega 32 có thể được lập trình bằng ngôn ngữ Assembly hoặc cũng có thể được lập trình bằng ngôn ngữ C. Do tính tiện dụng, trình bày khoa học và dễ dàng cho việc debug, chúng em quyết định lựa chọn ngôn ngữ C được viết bằng CodevisionAVR. Là trình biên dịch ngôn ngữ lập trình C cho vi điều khiển AVR của Atmel, CodeVisionAVR được phát triển bởi HP InfoTech, tích hợp đầy đủ trình biên dịch, môi trường soạn thảo tích hợp Development Environment (IDE) trên nền hệ điều hành Windows.

Các tập bài thực hành mẫu :

Bài 1. Chương trình hiển thị led đơn

Mục đích: Giúp sinh viên làm quen với việc điều khiển tín hiệu ra của vi điều khiển và hiển thị trực quan lên LED đơn.

#include <mega32.h> void delay (unsigned int ms) { unsigned char i; while(ms--) { for(i=0;i<150;i++) {}; } } void main(void) { while (1) { PORTB = 0xff; delay(1000); PORTB = 0xfe; delay(1000); PORTB = 0xfc; delay(1000); PORTB = 0xf8; delay(1000); PORTB = 0xf0; delay(1000);

delay(1000); } }

Bài 2. Chương trình hiển thị led 7 thanh

Mục đích: Giúp sinh viên làm quen với việc hiển thị số lên LED 7 thanh

#include <mega32.h> #include <delay.h>

void daydulieu(unsigned char x) //ham dua du lieu ra port { switch(x)

{ //logic 1 tat led, logic 0 bat led case 0: {PORTB=0xC0; break;} //so 0 case 1: {PORTB=0xF9; break;} //so 1 case 2: {PORTB=0xA4; break;} //so 2 case 3: {PORTB=0xB0; break;} //so 3 case 4: {PORTB=0x99; break;} //so 4 case 5: {PORTB=0x92; break;} //so 5 case 6: {PORTB=0x82; break;} //so 6 case 7: {PORTB=0xF8; break;} //so 7 case 8: {PORTB=0x80; break;} //so 8 case 9: {PORTB=0x90; break;} //so 9 } }

void hienthi(int n) { int a,b,c,d;

a=n/1000; //lay hang nghin b=(n-a*1000)/100; // lay hang tram c=(n-a*1000-b*100)/10; // lay hang chuc d=(n-a*1000-b*100-c*10); // lay hang don vi // quet led

PORTA=0x08; // led dau tien daydulieu(d); // day ra hang don vi delay_ms(10); //tre

PORTB=0xFF; // tat toan bo led PORTA=0x04; // led thu hai daydulieu(c); // dua ra hang chuc delay_ms(10); // tre

PORTB=0xFF; PORTA=0x02;

daydulieu(b); delay_ms(10); PORTB=0x0FF; PORTA=0x01; daydulieu(a); delay_ms(10); PORTB=0x0FF; } void main(void) { while (1) { hienthi(2014); } }

Bài 3. Chương trình hiển thị led ma trận

Mục đích: Giúp sinh viên làm quen với màn hình hiển thị LED ma trận.

#include <mega32.h> int i,j,k;

void delay(int t) // Ham tao tre t(ms) { int a,b;

for(a=0;a<t;a++)

{ for(b=0;b<125;b++) {} } }

unsigned char cot[]={0x80,0x40,0x20,0x10,0x08,0x04,0x02,0x01},

hang[]={0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x83,0xF7,0xEF,0xF7,0x83,0xFF,0x8F,0xE7, }; void main(void)

{ while (1)

{ for(i=0;i<24;i++) // Quet tung ma trong mang 'hang' (so luong chu)

{ for(j=0;j<30;j++) // Muc dich tao tre cho hien thi

{ for(k=0;k<8;k++) // Quet tu cot 1 toi cot 8

{ PORTA=cot[k]; // ma cot

PORTB=hang[k+i]; // ma hang cho led delay(5); // tao tre cho hien thi

PORTA=0x00; // Xoa led } } } }

#include <mega324.h> #include <delay.h> #include <alcd.h> void main(void) {lcd_init(8); while (1)

{ lcd_gotoxy(0,0); // dua con tro ve goc dong 0 cot 0 lcd_putsf("KIT THUC HANH"); // hien thi dong chu lcd_gotoxy(0,1); // dua con tro ve dong 1 cot 0

lcd_putsf("8051-AVR-PIC"); // hien thi dong chu delay_ms(3000); // tre 3s } }

Bài 5. Chương trình đọc thời gian từ DS1307 hiển thị LCD

Mục đích: Giúp sinh viên làm quen với các ứng dụng trong thực tế.

#include <mega32.h> #include <delay.h> #asm

.equ __i2c_port=0x15 ;PORTC .equ __sda_bit=1 .equ __scl_bit=0 #endasm #include <i2c.h> #include <ds1307.h> #include <alcd.h> unsigned char h,m,s;

unsigned char date,month,year; void lcd_putnum(unsigned char x) { unsigned char chuc,donvi ; chuc=x/10 ; donvi=(x - chuc*10); lcd_putchar(chuc+48); lcd_putchar(donvi+48); } void main(void) { while (1)

{ rtc_get_time(&h ,&m, &s);

rtc_get_date(&date ,&month, &year); // doc ngay tu ds1307 lcd_gotoxy(0,0); lcd_putsf("Time: "); lcd_putnum(h); lcd_putsf(":"); lcd_putnum(m); lcd_putsf(":"); lcd_putnum(s); lcd_gotoxy(0,1); lcd_putsf("Date: "); lcd_putnum(date); lcd_putsf("-"); lcd_putnum(month); lcd_putsf("-20"); lcd_putnum(year); delay_ms(100); } }

Bài 6 Chương trình dùng phím bấm điều khiển Led đơn

Mục đích: Giúp sinh viên làm quen với việc điều khiển đầu ra dựa vào dữ liệu nhận được từ đầu vào. #define F_CPU 8000000 #include <util/delay.h> #include <avr/io.h> int main() { DDRD=0x00; PORTD=0xff; DDRB=0xff; while(1) { while(!(PIND&1)) {PORTB=0xfe;} PORTB=0xff; while(!(PIND&2)) {PORTB=0xfd;} PORTB=0xff;

{PORTB=0xfb;} PORTB=0xff; while(!(PIND&8)) {PORTB=0xf7;}

CHƯƠNG 4: KẾT LUẬN

Một phần của tài liệu ĐỒ ÁN TỐT NGHIỆP MẠCH KIT THÍ NGHIỆM DÙNG VI ĐIỀU KHIỂN AVR (Trang 49 -57 )

×