TRƯỜNG ĐẠI HỌC CÔNG NGHIỆP VIỆT HUNG
KHOA ĐIỆN-ĐIỆN TỬ
--------------------------------------
BÁO CÁO THỰC HÀNH VI ĐIỀU KHIỂN
Giáo viên hướng dẫn : Phùng Toàn Thắng
Sinh viên thực hiện : Vũ Văn Được
MSV :1700347
Lớp : k41 tđh
Hà Nội 2019
BÁO CÁO THỰC HÀNH VI ĐIỀU KHIỂN PIC
Nội dung các bài thực hành:
-
Bài thực hành số 1: Thực hành điều khiển led đơn
-
Bài thực hành số 2: Thực hành hiển thị led 7 đoạn.
-
Bài thực hành số 3: Thực hành hiển thị LCD 16x2.
-
Bài thực hành số 4: Thực hành nhận biết phím đơn.
-
Bài thực hành số 5: Thực hành nhận biết phím matrix 4x3.
-
Bài thực hành số 6: Thực hành xử lý ngắt ngoài INT.
-
Bài thực hành số 7: Thực hành giao tiếp ADC.
-
Bài thực hành số 8: Thực hành giao tiếp với ROM.
-
Bài thực hành số 9: Thực hành giao tiếp thời gian thực
DS1307.
-
Bài thực hành số 10: Thực hành điều khiển động cơ DC.
-
Bài thực hành số 11: Thực hành điều động cơ khiển bước.
VŨ VĂN ĐƯỢC
2
BÁO CÁO THỰC HÀNH VI ĐIỀU KHIỂN PIC
01: Điều khiển hiển thị led đơn
Bài tập ứng dụng: Thực hành điều khiển 8 led đơn sáng dần từ
phải sang trái. Dữ liệu điều khiển led được xuất ra cổng Port D.
1
Sơ đồ nguyên lý
Hình 1.1. Sơ đồ nguyên lý khối led đơn
-Giải thuật
#use delay(clock=12000000)
#use
rs232(baud=9600,parity=N,xmit=PIN_C6,rcv=PIN_C7,bits=8)
#use Fast_IO(D) // thu vien cau hinh chan
VŨ VĂN ĐƯỢC
3
BÁO CÁO THỰC HÀNH VI ĐIỀU KHIỂN PIC
void main(void)
{
set_tris_D(0xF0);
//while(true)
for(;;)
{
output_D(0x0F);
delay_ms(10);
output_D(0xF0);
delay_ms(20); //200us(chu ky may 1Mhz-->200/1=?)
}
}
•
Kết quả
•
-
Nhận xét
Chương trình thực hiện chạy đúng theo nguyên lý đã đưa ra.
Thời gian sáng tắt các đèn led phải đủ lớn để mắt có thể nhận
thấy sự thay đổi trạng thái của các led, vì do thời gian lưu ảnh
của võng mạc.
VŨ VĂN ĐƯỢC
4
BÁO CÁO THỰC HÀNH VI ĐIỀU KHIỂN PIC
Bài thực hành số 02: Điều khiển hiển thị led 7 thanh
Bài tập ứng dụng: Hiển thị từ 0-9 bằng 4 led 7 thanh. Dữ liệu
được điều khiển qua cổng PORTD. Tín hiệu điều khiển led điều
khiển qua cổng PORTA.
2.1.
Sơ đồ nguyên lý
Hình 2.1. Sơ đồ nguyên lý khối led 7 thanh
Giải thuật
#include <18F4520.h>
#device adc=8
•
#FUSES NOWDT //No Watch Dog Timer
#FUSES WDT128 //Watch Dog Timer uses 1:128 Postscale
#FUSES LP //Low power osc < 200 khz
#FUSES NOPROTECT //Code not protected from reading
#FUSES BROWNOUT //Reset when brownout detected
//FUSES BORV25 //Brownout reset at 2.5V
#FUSES NOPUT //No Power Up Timer
#FUSES NOCPD //No EE protection
#FUSES STVREN //Stack full/underflow will cause reset
#FUSES NODEBUG //No Debug mode for ICD
VŨ VĂN ĐƯỢC
5
BÁO CÁO THỰC HÀNH VI ĐIỀU KHIỂN PIC
#FUSES LVP //Low Voltage Programming on B3(PIC16) or B5(PIC18)
#FUSES NOWRT //Program memory not write protected
#FUSES NOWRTD //Data EEPROM not write protected
#FUSES IESO //Internal External Switch Over mode enabled
#FUSES FCMEN //Fail-safe clock monitor enabled
#FUSES PBADEN //PORTB pins are configured as analog input
channels on RESET
#FUSES NOWRTC //configuration not registers write protected
#FUSES NOWRTB //Boot block not write protected
#FUSES NOEBTR //Memory not protected from table reads
#FUSES NOEBTRB //Boot block not protected from table reads
#FUSES NOCPB //No Boot Block code protection
#FUSES LPT1OSC //Timer1 configured for low-power operation
#FUSES MCLR //Master Clear pin enabled
//#FUSES XINST //Extended set extension and Indexed Addressing
mode enabled
#use delay(clock=12000000)
#use
rs232(baud=9600,parity=N,xmit=PIN_C6,rcv=PIN_C7,bits=8)
#use Fast_IO(D) // thu vien cau hinh chan
void main(void)
{
set_tris_D(0x00);
set_tris_A(0x00);
set_tris_B(0x00);
set_tris_c(0x00);
//while(true)
while(true)
{
//donvi
output_D(0x99);
output_low(PIN_A0);
output_high(PIN_A1);
output_high(PIN_A2);
VŨ VĂN ĐƯỢC
6
BÁO CÁO THỰC HÀNH VI ĐIỀU KHIỂN PIC
output_high(PIN_A3);
delay_ms(200);
//nghin
output_D(0xa4);
output_high(PIN_A0);
output_low(PIN_A1);
output_high(PIN_A2);
output_high(PIN_A3);
delay_ms(200);
//tram
output_D(0xb0);
output_high(PIN_A0);
output_high(PIN_A1);
output_low(PIN_A2);
output_high(PIN_A3);
delay_ms(200);
//chuc
output_D(0x90);
output_high(PIN_A0);
output_high(PIN_A1);
output_high(PIN_A2);
output_low(PIN_A3);
delay_ms(200);
//output_bit(PIN_A0,0);
}
}
•
Kết quả
VŨ VĂN ĐƯỢC
7
BÁO CÁO THỰC HÀNH VI ĐIỀU KHIỂN PIC
•
Nhận xét
- Chương trình thực hiện chạy đúng theo nguyên lý đã đưa ra.
VŨ VĂN ĐƯỢC
8
BÁO CÁO THỰC HÀNH VI ĐIỀU KHIỂN PIC
Bài thực hành số 03: Điều khiển hiển thị LCD 16x02
Bài tập ứng dụng: Thực hành hiển thị trên LCD16x2 chữ:
“KIT PIC18F4520” ; “CHUC THANH CONG”.
Tín hiệu điều khiển và dữ liệu LCD được xuất ra cổng PORTD.
3.1.
Sơ đồ nguyên lý
VŨ VĂN ĐƯỢC
9
BÁO CÁO THỰC HÀNH VI ĐIỀU KHIỂN PIC
VŨ VĂN ĐƯỢC
10
BÁO CÁO THỰC HÀNH VI ĐIỀU KHIỂN PIC
Hình 3.1. Sơ đồ nguyên lý khối LCD16x02
Giải thuật
#include <18F4520.h>
#include"my_lcd.h"
#fuses NOWDT,NOLVP,XT
#use delay(clock=4Mhz)
#use Fast_IO(C)
//===========
char dong1 []="Hello,World";
char dong2 []="Chuc thanh cong";
//ham chinh
//
void main()
{
set_tris_C(0);// cac pin port C la cong ra
LCD_Init ();
LCD_Gotoxy(0,0);
LCD_Puts(dong1);
LCD_Gotoxy(0,1);
LCD_Puts(dong2);
while(true);
}
•
•
Kết quả
VŨ VĂN ĐƯỢC
11
BÁO CÁO THỰC HÀNH VI ĐIỀU KHIỂN PIC
•
-
Nhận xét
Chương trình thực hiện chạy đúng theo nguyên lý đã đưa ra.
Điều chỉnh độ tương phản của màn hình để nhìn rõ nhất ký
-
tự hiển thị.
Gửi dữ liệu hiển thị lên LCD phải biết chú ý địa chỉ hiển thị
của dữ liệu tránh bị ghi đè.
Bài thực hành số 04: Nhận biết phím đơn
Bài tập ứng dụng: Điều khiển hiển thị thông báo trạng thái
nút nhất lên LCD khi nút nhấn trong mô đun được tác động. Port
D được kết nối với LCD để hiển thị. PortB kết nối với nút nhấn.
4.1.
Sơ đồ nguyên lý
VŨ VĂN ĐƯỢC
12
BÁO CÁO THỰC HÀNH VI ĐIỀU KHIỂN PIC
Hình 4.1. Sơ đồ nguyên lý khối nút nhấn
•
Giải thuật
#include <18F4520.h>
#device adc=8
#include "my_lcd.h"
// khoi tao phan cung
#use fast_IO(D)
#use fast_IO(B)
#define button1
pin_B0
#define button2
pin_B1
#define button3
VŨ VĂN ĐƯỢC
13
BÁO CÁO THỰC HÀNH VI ĐIỀU KHIỂN PIC
pin_B2
#define button4 pin_B3
char dong1[]="\fTEST 4 BUTTON";
char dong2[]="\fphim vua bam: 1";
char dong3[]="\fphim vua bam: 2";
char dong4[]="\fphim vua bam: 3";
char dong5[]="\fphim vua bam: 4";
void main()
{
set_tris_D(0);
set_tris_B(0);
LCD_Init();
while(true)
{
if(!input(button1))
{
LCD_Gotoxy(0,0);
LCD_Puts(dong1);
LCD_Gotoxy(0,1);
LCD_Puts(dong2);
VŨ VĂN ĐƯỢC
14
BÁO CÁO THỰC HÀNH VI ĐIỀU KHIỂN PIC
delay_ms(5);
}
if(!input(button2))
{
LCD_Gotoxy(0,0);
LCD_Puts(dong1);
LCD_Gotoxy(0,1);
LCD_Puts(dong3);
delay_ms(5);
}
if(!input(button3))
{
LCD_Gotoxy(0,0);
LCD_Puts(dong1);
LCD_Gotoxy(0,1);
LCD_Puts(dong4);
delay_ms(5);
}
if(!input(button4))
{
VŨ VĂN ĐƯỢC
15
BÁO CÁO THỰC HÀNH VI ĐIỀU KHIỂN PIC
LCD_Gotoxy(0,0);
LCD_Puts(dong1);
LCD_Gotoxy(0,1);
LCD_Puts(dong5);
delay_ms(5);
}
}
}
•
Kết quả
VŨ VĂN ĐƯỢC
16
BÁO CÁO THỰC HÀNH VI ĐIỀU KHIỂN PIC
•
-
Nhận xét
Chương trình thực hiện chạy đúng theo nguyên lý đã đưa ra.
VŨ VĂN ĐƯỢC
17
BÁO CÁO THỰC HÀNH VI ĐIỀU KHIỂN PIC
Bài thực hành số 05: Nhận biết ma trận phím 3x4
Bài tập ứng dụng: Thực hành nhận biết ma trận phím nhấn
hiện thị lên LCD. Cổng PORTD điều khiển hiển thị LCD, cổng
PORTB quét phím nhấn.
5.1.
Sơ đồ nguyên lý
Hình 5.1. Sơ đồ nguyên lý khối bàn phím 3x4
•
Giải thuật
/*=================
thiet ke: phung thang
thang7, 2015
file: vd2_io_4550.c
==========
#use Fast_IO()
set_tris_x( valu)
cac ham vao ra trong ccs
Chuong trinh bat tat 8 led tai port B
=======================*/
#include <18F4520.h>
#device adc=8
VŨ VĂN ĐƯỢC
18
BÁO CÁO THỰC HÀNH VI ĐIỀU KHIỂN PIC
#include"my_lcd.h"
#FUSES NOWDT
#FUSES WDT128
Postscale
#FUSES LP
#FUSES NOPROTECT
reading
#FUSES BROWNOUT
detected
//#FUSES BORV25
#FUSES NOPUT
#FUSES NOCPD
#FUSES STVREN
reset
#FUSES NODEBUG
#FUSES LVP
B3(PIC16) or B5(PIC18)
#FUSES NOWRT
protected
#FUSES NOWRTD
protected
#FUSES IESO
mode enabled
#FUSES FCMEN
#FUSES PBADEN
//No Watch Dog Timer
//Watch Dog Timer uses 1:128
//Low power osc < 200 khz
//Code not protected from
//Reset when brownout
//Brownout reset at 2.5V
//No Power Up Timer
//No EE protection
//Stack full/underflow will cause
//No Debug mode for ICD
//Low Voltage Programming on
//Program memory not write
//Data EEPROM not write
//Internal External Switch Over
//Fail-safe clock monitor enabled
//PORTB pins are configured as
analog input channels on RESET
#FUSES NOWRTC
//configuration not registers
write protected
#FUSES NOWRTB
#FUSES NOEBTR
//Boot block not write protected
//Memory not protected from
table reads
#FUSES NOEBTRB
//Boot block not protected from
table reads
#FUSES NOCPB
#FUSES LPT1OSC
VŨ VĂN ĐƯỢC
//No Boot Block code protection
//Timer1 configured for low19
BÁO CÁO THỰC HÀNH VI ĐIỀU KHIỂN PIC
power operation
#FUSES MCLR
//#FUSES XINST
//Master Clear pin enabled
//Extended set extension and
Indexed Addressing mode enabled
#Define Button1 PIN_B0
#Define Button2 PIN_B1
#Define Button3 PIN_B2
#Define Button4 PIN_B3
#use delay(clock=4Mhz)
#use
rs232(baud=9600,parity=N,xmit=PIN_C6,rcv=PIN_C7,bits=8)
//#use Fast_IO(D)//thu vien cau hinh chan
#fuses NOWDT,NOLVP,XT
#use Fast_IO(C)
//==============
//ham chinh
//
void main()
{
set_tris_B(0xff);
set_tris_D(0);
LCD_Init ();
while(true)
{
LCD_Gotoxy (0,0);
printf(LCD_Putchar("TEST
KEY 4x3"));
output_low(PIN_B6);
{
if(!input(button1))
{
LCD_Gotoxy (0,1);
printf(LCD_Putchar("TEST
BAT DAU :1"));
Delay_ms(10);
}
if(!input(button2))
{
VŨ VĂN ĐƯỢC
20
BÁO CÁO THỰC HÀNH VI ĐIỀU KHIỂN PIC
LCD_Gotoxy (0,1);
printf(LCD_Putchar("CHAO VAN DUOC :1"));
Delay_ms(10);
}
if(!input(button3))
{
LCD_Gotoxy (0,1);
printf(LCD_Putchar("RAT VUI DUOC GAP BAN :1"));
}
if(!input(button4))
{
LCD_Gotoxy (0,1);
printf(LCD_Putchar("TEST DA HET :1"));
}
output_high(PIN_B6);
output_low(PIN_B5);
if(!input(button1))
{
LCD_Gotoxy (0,1);
printf(LCD_Putchar("TEST BAT DAU :2"));
}
if(!input(button2))
{
LCD_Gotoxy (0,1);
printf(LCD_Putchar("CHAO VAN DUOC :2"));
if(!input(button3))
{
LCD_Gotoxy (0,1);
printf(LCD_Putchar("BAN KHOE KHONG :2"));
}
if(!input(button4))
{
LCD_Gotoxy (0,1);
printf(LCD_Putchar("TEST DA HET :2"));
VŨ VĂN ĐƯỢC
21
BÁO CÁO THỰC HÀNH VI ĐIỀU KHIỂN PIC
}
output_high(PIN_B5);
output_low(PIN_B4);
if(!input(button1))
{
LCD_Gotoxy (0,1);
printf(LCD_Putchar("TEST BAT DAU:3"));
}
if(!input(button2))
{
LCD_Gotoxy (0,1);
printf(LCD_Putchar("CHAO VAN DUOC :3"));
}
if(!input(button3))
{
LCD_Gotoxy (0,1);
printf(LCD_Putchar("BAN KHOE KHONG :3"));
}
if(!input(button4))
{
LCD_Gotoxy (0,1);
printf(LCD_Putchar("TEST DA HET :3"));
output_high(PIN_B4);
}
}
}
}
}
•
Kết quả
VŨ VĂN ĐƯỢC
22
BÁO CÁO THỰC HÀNH VI ĐIỀU KHIỂN PIC
•
-
Nhận xét
Chương trình thực hiện chạy đúng theo nguyên lý đã đưa ra.
Cần thêm thuật toán chống dội phím do tác động nhiễu cơ khí
từ phím nhấn.
VŨ VĂN ĐƯỢC
23
BÁO CÁO THỰC HÀNH VI ĐIỀU KHIỂN PIC
VŨ VĂN ĐƯỢC
24