Lap 1: LẬP TRÌNH ĐIỀU KHIỂN XUẤT NHẬP CƠ BẢN LED ĐƠN.Bài tập 1: Viết chương trình và mô phỏng sử dụng PIC16F877A các yêu cầu sau: - Điều khiển 8 LED đơn được nối với Port D thực hiện lần
Trang 1TỔNG LIÊN ĐOÀN LAO ĐỘNG VIỆT NAM
TRƯỜNG ĐẠI HỌC TÔN ĐỨC THẮNG
BÀI BÁO CÁO
MÔN HỌC: Thí nghiệm Vi Điều Khiển
Trang 2Muc luc
Lời cảm ơn 3
Lap 1: LẬP TRÌNH ĐIỀU KHIỂN XUẤT NHẬP CƠ BẢN LED ĐƠN……… 4
Bai 1……… 4
Bai 2……… 8
Lap 2: LẬP TRÌNH ĐIỀU KHIỂN XUẤT NHẬP CƠ BẢN LED 7 ĐOẠN……… 12
Bai 1……… 12
Bai 2……… 14
Bai 3……… 16
Bai 4……… 17
Bai 5……… 20
Bai 6……… 22
Lap 3: LẬP TRÌNH ĐIỀU KHIỂN XUẤT NHẬP CƠ BẢN MATRIX LED………24
Bai 1……… 24
Bai 2……… 26
Bai 3……… 28
Lap 4: LẬP TRÌNH ĐIỀU KHIỂN XUẤT NHẬP CƠ BẢN LCD……….30
Bai 1……… 30
Bai 2……… 32
Bai 3……… 33
Lap 5: LẬP TRÌNH ĐIỀU KHIỂN XUẤT NHẬP CƠ BẢN ADC……….35
Bai 1……… 35
Bai 2……… 37
Lap 6: LẬP TRÌNH ĐIỀU KHIỂN XUẤT NHẬP CƠ BẢN NÚT NHẤN VÀ BÀN………39
PHÍM 4X4………39
Bai 1……… 41
Bai 2……… 43
Bai 3……… 46
Lap 7: LẬP TRÌNH ĐIỀU KHIỂN XUẤT NHẬP CƠ BẢN ĐIỀU KHIỂN ĐỘNG CƠ……… ………46
Bai 1……….……….46
Trang 3
Lời cảm ơn
Trước tiên với tình cảm sâu sắc và chân thành nhất, cho phép em được bày tỏ lòng biết ơn đến thầy Nguyễn Văn Trung đã giúp đỡ chúng em trong suốt quá trình học tập Trong suốt thời gian từ khi bắt đầu học tập tại trường đến nay, em đã nhận được rất nhiều sự quan tâm, giúp đỡ của quý thầy cô và bạn bè
Với lòng biết ơn sâu sắc nhất, em xin gửi đến quý thầy cô ở Khoa Điện – điện tử
đã truyền đạt vốn kiến thức quý báu cho chúng em trong suốt thời gian học tập tại trường Nhờ có những lời hướng dẫn, dạy bảo của các thầy cô nên bài báo cáo của
em mới có thể hoàn thiện tốt đẹp
Một lần nữa, em xin chân thành cảm ơn thầy Nguyễn Văn Trung - người đã trực tiếp giúp đỡ, quan tâm, hướng dẫn em hoàn thành tốt bài báo cáo này trong thời gian qua
Bài báo cáo thực tập thực hiện trong khoảng thời gian gần 3 tuần Bước đầu đi vào thực tế của em còn hạn chế và còn nhiều bỡ ngỡ nên không tránh khỏi những thiếu sót, em rất mong nhận được những ý kiến đóng góp quý báu của quý thầy cô để kiến thức của em trong lĩnh vực này được hoàn thiện hơn đồng thời có điều kiện bổsung, nâng cao ý thức của mình
Trang 4Lap 1: LẬP TRÌNH ĐIỀU KHIỂN XUẤT NHẬP CƠ BẢN LED ĐƠN.
Bài tập 1: Viết chương trình và mô phỏng sử dụng PIC16F877A các yêu cầu sau:
- Điều khiển 8 LED đơn được nối với Port D thực hiện lần lượt các hoạt động:+ Sáng tắt lên tục (5 lần)
+ Sáng đuổi phải trái (3 lần)
+ Sáng đuổi trái phải (3 lần)
Trang 5#use delay(clock=20000000)void main()
output_d(0xFF); delay_ms(100); output_d(0x00); delay_ms(100); }
// sang duoi phai trai 3 lan for (j = 0; j < 3; j++) {
int pattern = 0x01; for (i = 0; i < 8; i++) {
output_d(pattern); delay_ms(100); pattern <<= 1; }
}
//sang duoi phai trai 3 lan for (j = 0; j < 3; j++) {
int pattern = 0x80; for (i = 0; i < 8; i++) {
output_d(pattern); delay_ms(100); pattern >>= 1; }
Trang 6}
// sang xen ke 4 lan for (j = 0; j < 4; j++) {
for (i = 0; i < 8; i += 2) {
output_d(0xAA >> i); delay_ms(100);
}
}
// sang tu trong ra ngoai 3 lan for (j = 0; j < 3; j++) {
int pattern = 0x0C; for (i = 0; i < 4; i++) {
output_d(pattern); delay_ms(100);
int pattern = 0xC0; for (i = 0; i < 4; i++) {
output_d(pattern); delay_ms(100);
pattern >>= 1;
pattern |= 0xC0; }
}
// sang don trai phai 3 lan for (j = 0; j < 3; j++) {
int pattern = 0x01;
Trang 7Bài tập 2: Viết chương trình và mô phỏng sử dụng PIC16F877A các yêu cầu sau:
- Điều khiển 16 LED đơn được nối với Port C và Port D thực hiện liên tục lần lượt các hoạt động:
+ Sáng tắt lên tục (5 lần)
+ Sáng đuổi phải trái (3 lần)
+ Sáng đuổi trái phải (3 lần)
Trang 9delay_ms(100);
output_c(0x00); output_d(0x00); delay_ms(100);
}
for (j = 0; j < 3; j++) {
int pattern = 0x01; for (i = 0; i < 8; i++) {
output_c(pattern); output_d(pattern); delay_ms(300); pattern <<= 1; }
}
// sang duoi trai phai (3 lan) for (j = 0; j < 3; j++) {
int pattern = 0x80; for (i = 0; i < 8; i++) {
output_c(pattern); output_d(pattern); delay_ms(300); pattern >>= 1; }
}
// Sang xen ke (4 lan) for (j = 0; j < 4; j++) {
int pattern_c = 0xAA; int pattern_d = 0x55; for (i = 0; i < 8; i += 2) {
output_c(pattern_c); output_d(pattern_d); delay_ms(300);
Trang 10pattern_c = (pattern_c << 2) | (pattern_c >> 6); pattern_d = (pattern_d >> 2) | (pattern_d << 6); }
Trang 11Bài tập 1: Viết chương trình và mô phỏng sử dụng PIC16F877A các yêu cầu sau:
- Điều khiển LED 7 đoạn đếm lên từ 0 đến 9 được nối với Port D
- Điều khiển LED 7 đoạn đếm xuống từ 9 đến 0 được nối với Port D
Mô phỏng trên Proteus
Trang 12
Code:
#include <16f877a.h>
#use delay(clock=20000000)
#fuses HS, PUT, NOWDT, NOPROTECT
const unsigned char MA7D[10]={0xC0, 0xF9, 0xA4, 0xB0, 0x99, 0x92, 0x82, 0xF8, 0x80, 0x90};
Trang 13Bài tập 2: Viết chương trình và mô phỏng sử dụng PIC16F877A các yêu cầu sau:
- Điều khiển LED 7 đoạn đếm lên từ 00 đến 99 được nối với Port D
- Điều khiển LED 7 đoạn đếm xuống từ 99 đến 00 được nối với Port D
- Điều khiển LED 7 đoạn đếm chẳn được nối với Port D
- Điều khiển LED 7 đoạn đếm lẻ được nối với Port D
Mô phỏng trên Proteus:
Trang 15- Điều khiển LED 7 đoạn đếm lên từ 0 đến 9 được nối với Port D và IC HC595.
- Điều khiển LED 7 đoạn đếm xuống từ 9 đến 0 được nối với Port D và IC HC595
Mô phỏng trên Proteus:
Trang 16#define ST_CP PIN_D2
const char
MA7D[10]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};void HC595_out_8bit(int8 data)
Trang 17- Hiển thị số 2023 đứng yên.
- Hiển thị số 2023 lần lượt từng số từ trái sang phải
Mô phỏng trên Proteus:
Trang 18output_high(PIN_d1);output_c(MA7D[2]);output_low(PIN_d2);delay_ms(1);
output_high(PIN_d2);output_c(MA7D[3]);output_low(PIN_d3);delay_ms(1);
output_high(PIN_d3);
// nhay tu trai sang phai output_c(MA7D[2]);output_low(PIN_d0);delay_ms(100);output_high(PIN_D0);output_c(MA7D[0]);output_low(PIN_d1);delay_ms(100);output_high(PIN_d1);output_c(MA7D[2]);output_low(PIN_d2);delay_ms(100);output_high(PIN_d2);output_c(MA7D[3]);output_low(PIN_d3);delay_ms(100);output_high(PIN_d3);}
}
}
Trang 19Bài tập 5: Viết chương trình và mô phỏng sử dụng PIC16F877A dùng phương
pháp quét
led sau:
- Hiển thị đếm giờ, phút, giây
Mô phỏng trên Proetus:
unsigned int8 DATALED
Trang 20for(i=0; i<8; i++)
Trang 21led các yêu cầu sau:
- Điều khiển LED 7 đoạn đếm lên từ 00 đến 99 được nối với Port D và IC HC595
- Điều khiển LED 7 đoạn đếm xuống từ 99 đến 00 được nối với Port D và IC HC595
Mô phỏng trên Proteus:
Code:
#include <16F877A.h>
#fuses HS,NOWDT,NOPROTECT,NOLVP
#use delay(clock=20000000)
#define HC595_DATA PIN_B0
#define HC595_CLOCK PIN_B1
#define HC595_LATCH PIN_B2
#define LED_A PIN_D0
#define LED_B PIN_D1
#define LED_C PIN_D2
#define LED_D PIN_D3
#define LED_E PIN_D4
#define LED_F PIN_D5
Trang 22#define LED_G PIN_D6
#define LED_DP PIN_D7
const unsigned char digitValues[10] = { 0b00111111, // 0
Trang 23Bài tập 1: Viết chương trình và mô phỏng sử dụng PIC16F877A các yêu cầu sau:
- Điều khiển led ma trận 8x8, 1 màu (Cấu trúc: Anode Led là phần Hàng, Cathode Led là phần Cột
- Led ma trận được kết nối phần Hàng với Port B và phần Cột với Port D
- Hiển thị ký tự “A” đứng yên không dịch chuyển trên màn hình LED ma trận
Mô phỏng trên Proteus:
Trang 25Bài tập 2: Viết chương trình và mô phỏng sử dụng PIC16F877A các yêu cầu sau:
- Điều khiển led ma trận 8x16, 1 màu (Cấu trúc: Anode Led là phần Hàng, CathodeLed là phần Cột
- Led ma trận được kết nối phần Hàng với Port B và phần Cột với Port C nối IC HC595
- Hiển thị ký tự “ĐH TON DUC THANG” dịch chuyển trên màn hình LED ma trận
từ phải sang trái.’
Mô phỏng trên Proteus:
Trang 27Bài tập 3: Viết chương trình và mô phỏng sử dụng PIC16F877A các yêu cầu sau:
- Điều khiển led ma trận 8x16, 1 màu (Cấu trúc: Anode Led là phần Hàng, CathodeLed là phần Cột
- Led ma trận được kết nối phần Hàng với Port B và phần Cột với Port C nối IC HC595
- Hiển thị ký tự “KHOA ĐIỆN-ĐIỆN TỬ” dịch chuyển trên màn hình LED ma trận
từ trái sang phải
Mô phỏng trên Proteus:
Trang 29- Kết nối với vi điều khiển theo kiểu 4 bit dữ liệu (D4 – D7) và 3 bit điều khiển.
- Hiện thị thông tin trên 2 dòng đứng yên không dịch chuyển như sau:
+ dòng 1 hiện thông tin: “ họ tên sinh viên”
+ dòng 2 hiện thông tin: “ mã số sinh viên”
Trang 30 Mô phỏng trên Proteus:
Code:
#include <16F877A.h>
#use delay(clock=4000000)
#include <lcd.c>
#define LCD_ENABLE_PIN PIN_D0
#define LCD_RS_PIN PIN_D1
#define LCD_RW_PIN PIN_D2
#define LCD_DATA4 PIN_D4
#define LCD_DATA5 PIN_D5
#define LCD_DATA6 PIN_D6
#define LCD_DATA7 PIN_D7 void main() {
lcd_init();
while(1) {
Trang 31
- Kết nối với vi điều khiển theo kiểu 4 bit dữ liệu (D4 – D7) và 3 bit điều khiển.
- Dòng chữ thứ nhất sáng dần lần lượt các ký tự từ trái sang phải một cách liên tục (
ví dụ: D – DH- DH T- DH TO- DH TON……….), dòng chữ thứ 2 đứng yên.+ dòng 1 hiện thông tin: “ DH TON DUC THANG ”
+ dòng 2 hiện thông tin: “ K DIEN-DIEN TU”
Mô phỏng trên Proteus:
Trang 32 Code:
#include <16F877A.h>
#use delay(clock=4000000)
#include <lcd.c>
#define LCD_ENABLE_PIN PIN_D0
#define LCD_RS_PIN PIN_D1
#define LCD_RW_PIN PIN_D2
#define LCD_DATA4 PIN_D4
#define LCD_DATA5 PIN_D5
#define LCD_DATA6 PIN_D6
#define LCD_DATA7 PIN_D7
void main() {
lcd_init();
while (1) {
lcd_gotoxy(1, 1);
char message[] = "DH TON DUC THANG ";
int messageLength = (message);
for (int i = 0; i < messageLength; i++) {
- Kết nối với vi điều khiển theo kiểu 8 bit dữ liệu (D0 – D7) và 3 bit điều khiển
- Hiện thị thông tin 2 hàng giồng như trong bảng dưới đây
Trang 33 Mô phỏng trên Proteus:
#define LCD_ENABLE_PIN PIN_D0
#define LCD_RS_PIN PIN_D1
#define LCD_RW_PIN PIN_D2
#define LCD_DATA0 PIN_D0
#define LCD_DATA1 PIN_D1
#define LCD_DATA2 PIN_D2
#define LCD_DATA3 PIN_D3
Trang 34#define LCD_DATA4 PIN_D4
#define LCD_DATA5 PIN_D5
#define LCD_DATA6 PIN_D6
#define LCD_DATA7 PIN_D7
- Hiển thị nhiệt độ LM35 lên LCD
Mô phỏng trên Proteus:
Trang 35#define LCD_ENABLE_PIN PIN_D0
#define LCD_RS_PIN PIN_D1
#define LCD_RW_PIN PIN_D2
#define LCD_DATA4 PIN_D4
#define LCD_DATA5 PIN_D5
#define LCD_DATA6 PIN_D6
#define LCD_DATA7 PIN_D7
Trang 36- Nếu nhiệt độ thấp hơn nằm trong giới hạn cài đặt thì đèn Led tắt.
- Nếu nhiệt độ cao hơn nằm trong giới hạn cài đặt thì đèn Led sáng
- Thay đổi nhiệt độ bằng nút nhấn
Mô phỏng trên Proteus:
Code:
#include <16F877A.h>
Trang 37#device ADC=10
#FUSES NOWDT, PUT, NOLVP, NOPROTECT, HS, NOBROWNOUT
#use delay(clock=20M)
#define LCD_ENABLE_PIN PIN_D0
#define LCD_RS_PIN PIN_D1
#define LCD_RW_PIN PIN_D2
#define LCD_DATA4 PIN_D4
#define LCD_DATA5 PIN_D5
#define LCD_DATA6 PIN_D6
#define LCD_DATA7 PIN_D7
Trang 38Bài tập 1: Viết chương trình và mô phỏng sử dụng PIC16F877A các yêu cầu sau:
- Điều khiển LED 7 đoạn bằng nút nhấn đếm lên từ 0 đến 9
- Điều khiển LED 7 đoạn bằng nút nhấn đếm xuống từ 9 đến 0
Trang 40Bài tập 2: Viết chương trình và mô phỏng sử dụng PIC16F877A các yêu cầu sau:
- Điều khiển LED 7 đoạn bằng nút nhấn bằng 2 chế độ:
+ Chế độ đếm chẳn
+ Chế độ đếm lẻ
Mô phỏng trên Proteus:
Trang 42Bài tập 3: Viết chương trình và mô phỏng sử dụng PIC16F877A các yêu cầu sau:
- Điều khiển nút nhấn bàn phím keyboard 4x4 hiển thị lên LCD:
+ Hiển thị ký tự tương ứng khi nhấn bàn phím (ví dụ: nhấn số 7 thì hiển thị lên LCD
là số 7)
Trang 45thay đổi tốc độ động cơ DC các yêu cầu sau:
- Điều khiển động cơ hiển thị lên CLD quay thuận
- Điều khiển động cơ hiển thị lên CLD quay nghịch
Mô phỏng trên Proteus:
Trang 46#define LCD_DATA4 PIN_D3
#define LCD_DATA5 PIN_D4
Trang 47#define LCD_DATA6 PIN_D5
#define LCD_DATA7 PIN_D6
void main() {
int duty_cycle = 0;
int direction = 1;
setup_timer_2(T2_DIV_BY_16, 255, 1); setup_ccp1(CCP_PWM);
lcd_init(); // Kh?i t?o LCD
delay_ms(100);
Trang 48
duty_cycle += direction;
if (duty_cycle >= 255) { direction = -1;
duty_cycle = 255; } else if (duty_cycle <= 0) { direction = 1;
duty_cycle = 0;
}
}
}