1. Trang chủ
  2. » Giáo Dục - Đào Tạo

BÁO CÁO BÀI TẬP LỚN Môn học Kĩ thuật vi xử lý Đề tài Chạy chữ quảng cáo lên LCD

11 16 0

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Tiêu đề Chạy chữ quảng cáo lên LCD
Tác giả Nhóm Bài Tập Lớn: 11
Người hướng dẫn PTS. Nguyễn Văn A
Trường học Học viện Công nghệ Bưu chính Viễn thông
Chuyên ngành Kỹ thuật vi xử lý
Thể loại Báo cáo bài tập lớn
Năm xuất bản 2023
Thành phố Hà Nội
Định dạng
Số trang 11
Dung lượng 169,73 KB

Các công cụ chuyển đổi và chỉnh sửa cho tài liệu này

Nội dung

Bình thường, khi không có điện áp, các tinh thể này được xếp thẳng hàng giữa hai lớp cho phép ánh sáng truyền qua theo hình xoắn ốc.. Hai bộ lọc phân cực, 2 bộ lọc màu và 2 bộ cân chỉnh

Trang 1

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

BÁO CÁO BÀI TẬP LỚN

Môn học : Kĩ thuật vi xử lý Nhóm bài tập lớn: 11

Đề tài: Chạy chữ quảng cáo lên LCD Thành viên:

1 Phạm Minh Phú – B19DCVT285

2 Nguyễn Thành Nam – B19DCVT269

3 Nguyễn Văn Nguyên – B19DCVT277

4 Đoàn Ngọc Phúc – B19DCVT288

I Giới thiệu về LCD 16x2 (LM016L)

Trang 2

LCD là gì?

LCD là một loại vật chất phản xạ ánh sáng khi điện thế thay đổi Nó hoạt

động dựa trên nguyên tắc ánh sáng nền (Back Light) Nó bao gồm một lớp chất lỏng nằm giữa 2 lớp kính phân cực ánh sáng Bình thường, khi không có điện áp, các tinh thể này được xếp thẳng hàng giữa hai lớp cho phép ánh sáng truyền qua theo hình xoắn ốc Hai bộ lọc phân cực, 2 bộ lọc màu và 2 bộ cân chỉnh sẽ xác định cường độ ánh sáng đi qua và màu nào được tạo ra trên một pixel.

Khi có điện áp cấp vào, lớp canh chỉnh sẽ tạo một vùng điện tích, canh chỉnh lại các tinh thể lỏng đó Nó không cho phép ánh sáng đi qua để hiện thị lên hình ảnh tại vị trí điểm ảnh đó Các điểm ảnh trong màn hình LCD là một transistor cực nhỏ ở một trong 2 chế độ: cho phép ánh sáng đi qua hoặc không.

Điểm ảnh bao gồm 3 yếu tố màu: đỏ, xanh lá, xanh dương Các màn hình LCD trước đây thường tiêu thụ điện năng nhiều, độ tương phản thấp cho đến khi các nhà khoa học người Anh tìm ra “Biphenyl” – vật liệu chính của tinh thể lỏng, thì LCD mới thực sự phổ biến LCD xuất hiện đầu tiên trong các máy tính cầm tay, trò chơi điện tử cầm tay, đồng hồ điện tử

Ngày nay, thiết bị hiển thị LCD 1602 (Liquid Crystal Display) được sử dụng trong rất nhiều các ứng dụng của vi điều khiển LCD 1602 có rất nhiều ưu điểm so với các dạng hiển thị khác như: khả năng hiển thị kí tự đa dạng (chữ, số, kí tự đồ họa); dễ dàng đưa vào mạch ứng dụng theo nhiều giao thức giao tiếp khác nhau, tiêu tốn rất ít tài nguyên

hệ thống, giá thành rẻ,…

Cấu tạo:

Màn hình LCD1602 cấu

tạo từ 3 phần:

● Chip driver: Điều

khiển LCD, giao tiếp

với vi điều khiển theo

interface LCD

● LCD Panel: Hiển thị ra

bên ngoài

● Back Light: Đèn nền

LC D

Thông số kĩ thuật :

● Điện áp hoạt

động là 5 V.

Trang 3

● Kích thước: 80 x 36 x 12.5 mm

● Chữ đen, nền xanh lá

● Khoảng cách giữa hai chân kết nối là 0.1 inch tiện dụng khi kết nối với Breadboard.

● Tên các chân được ghi ở mặt sau của màn hình LCD hổ trợ việc kết nối,

đi dây điện.

● Có đèn led nền, có thể dùng biến trở hoặc PWM điều chình độ sáng để sử dụng ít điện năng hơn.

● Có thể được điều khiển với 6 dây tín hiệu

Chức năng của từng chân LCD 1602:

- Chân số 1 - VSS : chân nối đất cho LCD được nối với GND của mạch điều khiển

- Chân số 2 - VDD : chân cấp nguồn cho LCD, được nối với VCC=5V của mạch điều khiển

- Chân số 3 - VE : điều chỉnh độ tương phản của LCD

- Chân số 4 - RS : chân chọn thanh ghi, được nối với logic "0" hoặc logic "1": + Logic “0”: Bus DB0 - DB7 sẽ nối với thanh ghi lệnh IR của LCD (ở chế độ

“ghi” - write) hoặc nối với bộ đếm địa chỉ của LCD (ở chế độ “đọc” - read)

+ Logic “1”: Bus DB0 - DB7 sẽ nối với thanh ghi dữ liệu DR bên trong LCD

- Chân số 5 - R/W : chân chọn chế độ đọc/ghi (Read/Write), được nối với logic “0”

để ghi hoặc nối với logic “1” đọc

- Chân số 6 - E : chân cho phép (Enable) Sau khi các tín hiệu được đặt lên bus DB0-DB7, các lệnh chỉ được chấp nhận khi có 1 xung cho phép của chân này:

Trang 4

+ Ở chế độ ghi: Dữ liệu ở bus sẽ được LCD chuyển vào thanh ghi bên trong khi phát hiện một xung (high-to-low transition) của tín hiệu chân E

+ Ở chế độ đọc: Dữ liệu sẽ được LCD xuất ra DB0-DB7 khi phát hiện cạnh lên (low-to-high transition) ở chân E và được LCD giữ ở bus đến khi nào chân E xuống mức thấp

- Chân số 7 đến 14 - D0 đến D7: 8 đường của bus dữ liệu dùng để trao đổi thông tin với MPU Có 2 chế độ sử dụng 8 đường bus này là: Chế độ 8 bit (dữ liệu được truyền trên cả 8 đường, với bit MSB là bit DB7) và Chế độ 4 bit (dữ liệu được truyền trên 4 đường từ DB4 tới DB7, bit MSB là DB7)

II Quá trình gửi lệnh lcd

Bước 1: Kéo chân RW xuống mức

thấp nhất để chọn chế độ là

“ghi”

Bước 2: Kéo chân rs xuống mức thấp

nhất để cho led LCD hiểu

được là ghi lệnh chứ không

phải ghi dữ liệu

Bước 3: Gửi byte lệnh ra các chân

D7->D0

Bước 4: Tạo xung trên chân E bằng

cách kéo chân E xuống mức

không rồi lại kéo lên 1 hoặc

ngược lại

Bước 5: Delay 1 khoảng thời gian để

led LCD thực hiện xong lệnh

III Code

#include "stm32f10x.h"

#include "stm32f10x_conf.h"

#include "stm32f10x_gpio.h"

////// khoi tao cac chan led LCD BUTTON va cac chan pin///////////////////

#define LCD_RW GPIO_Pin_13

Trang 5

#define LCD_RS GPIO_Pin_14 // Chan chon thanh ghi RS = 0 cho phep ghi RS = 1 thanh ghi doc

#define LCD_EN GPIO_Pin_15 // chan cho phep hoat dong LCD va tao xung

#define LCD_D4 GPIO_Pin_0

#define LCD_D5 GPIO_Pin_1

#define LCD_D6 GPIO_Pin_2

#define LCD_D7 GPIO_Pin_3

#define BT1 GPIO_Pin_0

#define BT2 GPIO_Pin_1

#define BT3 GPIO_Pin_2

//////cau hinh cho led LCD//////////////

void LCD_Configure(){

// cap clock cho port C RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC, ENABLE);

GPIO_InitTypeDef GPIO_InitStructure; //tao ham GPIO_InitStructure //cau hinh cho LCD là out put _ push-pull

GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;

// khai bao cac chan su dung GPIO_InitStructure.GPIO_Pin = LCD_RW | LCD_RS | LCD_EN | LCD_D4 | LCD_D5 | LCD_D6 | LCD_D7;

// cau hinh toc do cho cac chan GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;

// luu cac gia tri vao ham GPIO_ InitStructure GPIO_Init(GPIOC, &GPIO_InitStructure);

}

/////cau hình cho button///////////////

void Button_Configue(){

RCC -> APB2ENR |= 0x00000008; //cap clock cho port B GPIOB -> CRL |= 0xFFFFF000; // cau hinh cho chan pin 0,1,2 GPIOB -> CRL |= 0x00000888; // moi chan set cau hình input : 1000 GPIOB -> ODR &=~(0x07); // cau hinh cho push down

Trang 6

/////tao ham delay ms/////////////

void delay_ms(unsigned int time){

while(time){

SysTick -> LOAD = 71999;// luu bien dem count = 72000 vao thanh ghi LOAD SysTick -> VAL = 0;// dat gia tri cuoi cung là 0

SysTick -> CTRL = 5;

while(!(SysTick -> CTRL & ( 1 << 16))){ //kiem tra co countflag da bat len 1 chua

}//nêu chua tiep tuc giam bien load ve 0 time;//sau khi co countflag bat len 1 nghia la chay het 1ms , giam time di 1 }

}

/////tao ham delay us////////////

void delay_us(unsigned int time){

while(time){

SysTick -> LOAD = 72 - 1;

SysTick -> VAL = 0;

SysTick -> CTRL = 5;

while(!(SysTick -> CTRL & (1 << 16))){

} time;

} }

/////tao ham bat led lcd bang cach tao xung cho chan E cua led lcd////////////

void LCD_Enable(){

GPIO_SetBits(GPIOC, LCD_EN); ////////set bit 1 cho chan E cua led lcd

delay_us(3);/////////set bit 1 cho chan E cua led lcd trong vong 3 us

GPIO_ResetBits(GPIOC, LCD_EN);///////set bit 0 cho chan E

delay_us(50); ///////set bit 0 cho chan E trong vong 50 us

}

////tao ham gui 4 bit cho led lcd//////////////////////////////////////

Trang 7

void LCD_Send4Bit(unsigned int data){

GPIO_WriteBit(GPIOC, LCD_D4, data & 0x01);// bat bit 1 cho chan d4 va tat toan bo

//chan d5 d6 d7 GPIO_WriteBit(GPIOC, LCD_D5, (data >> 1) & 1);// bat bit 1 cho chan d5 va tat toan

// o chan d4 d6 d7 GPIO_WriteBit(GPIOC, LCD_D6, (data >> 2) & 1);// bat bit 1 cho chan d6 va tat toan

// bo chan d4 d5 d7 GPIO_WriteBit(GPIOC, LCD_D7, (data >> 3) & 1);// bat bit 1 cho chan d7 va tat toan

// bo chan d4 d5 d6 }

////tao ham SendCommand cho led lcd///////////

void LCD_SendCommand(unsigned int data){ //data 8bit

LCD_Send4Bit(data >> 4); // dich phai 4 bit LCD_Enable();

LCD_Send4Bit(data); // gui 4 bit còn lai LCD_Enable();

}

///tao ham int cho lcd///////////

void LCD_Init(){

LCD_Configure();//goi ham LCD_Configure() LCD_Send4Bit(0x00);//set bit 0 cho cac chan d4->d7 delay_ms(20);//delay 20ms cho LCD hoat dong on dinh GPIO_WriteBit(GPIOC, LCD_RS, 0);//reset chan rs ve 0 GPIO_WriteBit(GPIOC, LCD_RW, 0);//reset chan rw ve 0 LCD_Send4Bit(0x03);//mac dinh

LCD_Enable();//tao xung cho chan e delay_ms(5);//delay 4ms

LCD_Enable();//tao xung cho chan e delay_us(100);//delay cho LCD hoat dong on dinh LCD_Send4Bit(0x02);//nhap nhay con tro

LCD_Enable();

LCD_SendCommand(0x28);//giao tiep mac dinh 4 bit

Trang 8

LCD_SendCommand(0x0C);//bat ta con tro LCD_SendCommand(0x06);//tu dong di chuyn con tro to vi tri ke tiep LCD_SendCommand(0x01);// xoa toan man hinh

}

///tao ham clear cho led lcd//////////////

void LCD_Clear(){

LCD_SendCommand(0x01);

delay_ms(10);

}

/////tao ham dia chi cua con tro////////////////

void LCD_Gotoxy(unsigned int x, unsigned int y){

unsigned int address;

if(!y){//neu y khac 0 address = (0x80 + x);//con tro nhay len dong dau tien }

else address = (0xC0 + x);// con tro nhay xuong dong 2 delay_us(1000);

LCD_SendCommand(address);

delay_us(50);

}

/////tao hàm truyen du lieu//////////////

void LCD_PutChar(unsigned char data){

GPIO_WriteBit(GPIOC, LCD_RS, 1);////keo chan RS ve 1//////////// LCD_SendCommand(data); ////gui ki tu //////////

GPIO_WriteBit(GPIOC, LCD_RS, 0);////keo chan RS ve 0////////// }

/////tao ham gui nhieu du lieu/////////////////

void LCD_Puts(char *s){

while(*s){

LCD_PutChar(*s);

s++;

Trang 9

} }

//////ham main////////////////////

int main(){

LCD_Init();///// khai báo ham LCD_Init delay_ms(20);/// cho 20 ms cho LCD phan hoi Button_Configue();// khai bao ham Button_Configue uint16_t k=0; // khai bao bien k

while(1){

if((GPIOB -> IDR & 0x01) != 0x01){ // khi button 1 dc nhan cho 20ms

// sau do tang bien k len 1 delay_ms(20);

k = 1;

} if((GPIOB -> IDR & 0x02) != 0x02){ // khi button 2 dc nhan cho 20ms

// sau do tang bien k len 2 delay_ms(20);

k = 2;

} if((GPIOB -> IDR & 0x04) != 0x04){ // khi button 3 dc nhan cho 20ms

// sau do tang bien k len 3 delay_ms(20);

k = 3;

} switch(k){

case 1: // neu k = 1

LCD_SendCommand(0x01);//xoa toàn bo man hinh LCD_Gotoxy(0,0); // dua con tro vao vi tri cot 0 hang 0 LCD_Puts("Nhom 11 De tai 6");// gui du lieu cho led lcd

delay_ms(10);

LCD_SendCommand(0x02); // chuyen led ve man hinh home break;

Trang 10

case 2: // khi button 2 duoc nhan

LCD_SendCommand(0x18); // dich man hinh sang trai

delay_ms(10);

break;

case 3:// khi button 3 duoc nhan

LCD_SendCommand(0x1C);// dich man hinh sang phai

delay_ms(10);

break;

} } }

Ngày đăng: 20/05/2022, 20:51

TỪ KHÓA LIÊN QUAN

TÀI LIỆU CÙNG NGƯỜI DÙNG

TÀI LIỆU LIÊN QUAN

🧩 Sản phẩm bạn có thể quan tâm

w