Hiện nay có rất nhiều họ Vi điều khiển trên thị trường với nhiều ứng dụng khác nhau, trong đó họ Vi điều khiển họ MCS-51 được sử dụng rất rộng rãi trên thế giới và ở Việt nam.
Vào năm 1980 Intel công bố chíp 8051(80C51), bộ vi điều khiển đầu tiên của họ vi điều khiển MCS-51. Tiếp theo sau đó là sự ra đời của chip 8052, 8053, 8055 với nhiều tính năng được cải tiến.
Hiện nay Intel không còn cung cấp các loại Vi điều khiển họ MCS-51 nữa, thay vào đó các nhà sản xuất khác như Atmel, Philips/signetics, AMD, Siemens, Matra & Dallas, Semiconductors được cấp phép làm nhà cung cấp thứ hai cho các chip của họ MSC-51. Chip vi điều khiển được sử dụng rộng rãi trên thế giới cũng như ở Việt Nam hiện nay là vi điều khiển của hãng Atmel với nhiều chủng loại vi điều khiển khác nhau.
19 trang |
Chia sẻ: tuandn | Lượt xem: 3243 | Lượt tải: 2
Bạn đang xem nội dung tài liệu Đề tài Hiển thị chữ trên màn LCD với các hiệu ứng khác nhau, để tải tài liệu về máy bạn click vào nút DOWNLOAD ở trên
LỜI NÓI ĐẦU:
Ngày nay,các bộ vi điều khiển đang có ứng dụng ngày càng rộng rãi và thâm nhập ngày càng nhiều trong các lĩnh vực kĩ thuật và đời sống xã hội.Hầu hết các thiết bị kĩ thuật từ phức tạp cho đến đơn giản như thiết bị điều khiển tự động,thiết bị văn phòng cho đến các thiết bị trong gia đình đều có dùng các bộ vi điều khiển.Và một số ứng dụng đơn giản cho các hệ thống nhúng là điều khiển điều khiển chữ chạy trên màn LCD, làm ma trận LED, điều khiển động cơ..
Và với những kiến thức cơ bản nhất về vi điều khiển và kĩ thuật lập trình. Nhóm của chúng em đã thực hiện một trong những ứng dụng đơn giản của bộ vi điều khiển. Đó là hiển thị chữ trên màn LCD với các hiệu ứng khác nhau.(Mạch điện gồm LCD ghép nối với vi điều khiển 8051) Bài tập được viết theo ngôn ngữ lập trình C.
Với vốn kiến thức còn hạn chế. Và thời gian tiếp xúc, làm quen các linh kiện điện tử còn chưa được nhiều. Nên trong bài làm của nhóm em có gì sai xót, Mong thầy nhận xét và chỉ bảo chúng em để bài tập được hoàn thiện hơn.
Em xin chân thành cảm ơn !
Phần I: Sơ lược cấu trúc vi điều khiển 8051
Hiện nay có rất nhiều họ Vi điều khiển trên thị trường với nhiều ứng dụng khác nhau, trong đó họ Vi điều khiển họ MCS-51 được sử dụng rất rộng rãi trên thế giới và ở Việt nam.
Vào năm 1980 Intel công bố chíp 8051(80C51), bộ vi điều khiển đầu tiên của họ vi điều khiển MCS-51. Tiếp theo sau đó là sự ra đời của chip 8052, 8053, 8055 với nhiều tính năng được cải tiến.
Hiện nay Intel không còn cung cấp các loại Vi điều khiển họ MCS-51 nữa, thay vào đó các nhà sản xuất khác như Atmel, Philips/signetics, AMD, Siemens, Matra & Dallas, Semiconductors được cấp phép làm nhà cung cấp thứ hai cho các chip của họ MSC-51. Chip vi điều khiển được sử dụng rộng rãi trên thế giới cũng như ở Việt Nam hiện nay là vi điều khiển của hãng Atmel với nhiều chủng loại vi điều khiển khác nhau.
Hãng Atmel có các chip vi điều khiển có tính năng tương tự như chip vi điều khiển MCS-51 của Intel, các mã số chip được thay đổi chút ít khi được Atmel sản xuất. Mã số 80 chuyển thành 89, chẳng hạn 80C52 của Intel khi sản xuất ở Atmel mã số thành 89C52 (Mã số đầy đủ: AT89C52) với tính năng chương trình tương tự như nhau. Tương tự 8051, 8053, 8055 có mã số tương đương ở Atmel là 89C51, 89C53, 89C55.Vi điều khiển Atmel sau này ngày càng được cải tiến và được bổ sung thêm nhiều chức năng tiện lợi hơn cho người dùng.
Các đặc điểm của 89C51 được tóm tắt như sau :
8 KB EPROM bên trong.
128 Byte RAM nội.
4 Port xuất /nhập I/O 8 bít.
Giao tiếp nối tiếp.
64 KB vùng nhớ mã ngoài
64 KB vùng nhớ dữ liệu ngoại.
Xử lí Boolean (hoạt động trên bít đơn).
210 vị trí nhớ có thể định vị bít.
4 μs cho hoạt động nhân hoặc chia.
89C51 của Atmel 8051 của Intel
Sơ đồ khối của 89C51
Sơ đồ các chân 89C51
a.Port0: là Port có 2 chức năng ở trên chân từ 32 đến 39 trong các thiết kế cỡ nhỏ (không dùng bộ nhớ mở rộng ) có hai chức năng như các đường I/O. Đối với các thiết kế cỡ lớn (với bộ nhớ mở rộng) nó được kết hợp kênh giữa các bus.
b.Port1: Port1 là một port I/O trên các chân 1-8. Các chân được ký hiệu P1.0, P1.1, P1.2 … có thể dùng cho các thiết bị ngoài nếu cần. Port1 không có chức năng khác, vì vậy chúng ta chỉ được dùng trong giao tiếp với các thiết bị ngoài.
c.Port2: Port2 là một port công dụng kép trên các chân 21 - 28 được dùng như các đường xuất nhập hoặc là byte cao của bus địa chỉ đối với các thiết kế dùng bộ nhớ mở rộng.
d.Port3: Port3 là một port công dụng kép trên các chân 10 - 17. Các chân của port này có nhiều chức năng, các công dụng chuyển đổi có liên hệ với các đặc tín đặc biệt của 8051 / 8031 như sau :
Bit Tên Chức năng chuyển đổi
P3.0 RXD Dữ liệu nhận cho port nối tiếp
P3.1 TXD Dữ liệu phát cho port nối tiếp
P3.2 INTO Ngắt 0 bên ngoài
P3.3 INT1 Ngắt 1 bên ngoài
P3.4 TO Ngõ vào của timer/counter 0
P3.5 T1 Ngõ vào của timer/counter 1
P3.6 WR Xung ghi bộ nhớ dữ liệu ngoài
P3.7 RD Xung đọc bộ nhớ dữ liệu ngoài
e. PSEN (Program Store Enable) : 8051/8031 có 4 tín hiệu điều khiển
PSEN là tín hiệu ra trên chân 29. Nó là tín hiệu điều khiển để cho phép bộ nhớ chương trình mở rộng và thường được nối đến chân OE (Output Enable) của một EPROM để cho phép đọc các bytes mã lệnh.
PSEN sẽ ở mức thấp trong thời gian lấy lệnh. Các mã nhị phân của chương trình được đọc từ EPROM qua bus và được chốt vào thanh ghi lệnh của 8051 để giải mã lệnh. Khi thi hành chương trình trong ROM nội (8051), PSEN sẽ ở mức thụ động (mức cao).
f.ALE (Address Latch Enable)
tín hiệu ra ALE trên chân 30 tương hợp với các thiết bị làm việc với các xử lí 8585, 8088, 8086, 8051 dùng ALE một cách tương tự cho làm việc giải các kênh các bus địa chỉ và dữ liệu. Khi Port 0 được dùng trong chế độ chuyển đổi, vừa là bus dữ liệu vừa là bus thấp của địa chỉ, ALE là tín hiệu để chốt địa chỉ vào một thanh ghi bên ngoài trong nửa đầu của chu kỳ bộ nhớ. Sau đó, các đường Port 0 dùng để xuất hoặc nhập dữ liệu trong nửa sau chu kỳ của bộ nhớ.
Các xung tín hiệu ALE có tốc độ bằng 1/6 lần tần số dao động trên chip và có thể được dùng là nguồn xung nhịp cho các hệ thống. Nếu xung trên 8051 là 12MHz thì ALE có tần số 2MHz. Chỉ ngoại trừ khi thi hành lệnh MOVX, một xung ALE sẽ bị mất. Chân này cũng được làm ngõ vào cho xung lập trình cho EPROM trong 8051.
g. EA (External Access)
Tín hiệu vào EA trên chân 31 thường được mắc lên mức cao (+5V) hoặc mức thấp (GND). Nếu ở mức cao, 8051 thi hành chương trình từ ROM nội trong khoảng địa chỉ thấp (4K). Nếu ở mức thấp, chương trình chỉ được thi hành từ bộ nhớ mở rộng. Khi dùng 8031, EA luôn được nối mức thấp vì không có bộ nhớ chương trình trên chip. Nếu EA được nối mức thấp bộ nhớ bên trong, chương trình 8051 sẽ bị cấm và chương trình thi hành từ EPROM mở rộng.
h. RST (Reset)
Ngõ vào RST trên chân 9 là ngõ reset của 8051. Khi tín hiệu này được đưa lên múc cao (trong ít nhất 2 chu kỳ máy), các thanh ghi trong 8051 được tải những giá trị thích hợp để khởi động hệ thống.
i. Các ngõ vào bộ dao động trên chip
Như đã thấy trong các hình trên, 8051 có một bộ dao động trên chip. Nó thường được nối với thạch anh giữa hai chân 18 và 19. Các tụ giữa cũng cần thiết như đã vẽ. Tần số thạch anh thông thường là 12MHz.
j. Các chân nguồn
8051 vận hành với nguồn đơn +5V. Vcc được nối vào chân 40 và Vss (GND) được nối vào chân 20
Phần II: Sơ đồ và các linh kiện trong mạch
Các linh kiện sử dụng:
AT89S52
Màn LCD 16x2
Thạch Anh 12MHz
Tụ gốm 33pF
Tụ hóa 10μF
Trở 10KΩ, 4,7KΩ, 220Ω
Hình ảnh và chức năng của các linh kiện:
AT89S52
Chức năng: Là vi điều khiển chính của mạch.
8 KB EPROM bên trong.
256 Byte RAM nội.
4 Port xuất /nhập I/O 8 bít.
3 bộ định thời 16 bit
Watch dog timer
Các đặc điểm khác giống AT89C51
Màn LCD
Có 16 chân như sau:
Chân
Ký hiệu
I/O
Mô tả
1
VSS
-
Đất
2
VCC
-
Dương nguồn 5v
3
VEE
-
Cấp nguồn điều khiển phản
4
RS
I
RS = 0 chọn thanh ghi lệnh. RS = 1 chọn
thanh dữ liệu
5
R/W
I
R/W = 1 đọc dữ liệu. R/W = 0 ghi
6
E
I/O
Cho phép
7
DB0
I/O
Các bít dữ liệu
8
DB1
I/O
Các bít dữ liệu
9
DB2
I/O
Các bít dữ liệu
10
DB3
I/O
Các bít dữ liệu
11
DB4
I/O
Các bít dữ liệu
12
DB5
I/O
Các bít dữ liệu
13
DB6
I/O
Các bít dữ liệu
14
DB7
I/O
Các bít dữ liệu
Dùng để hiển thị chữ theo ý bạn thông qua IC 89S52
Thạch anh 12 MHz
Chức năng: Là nguồn tạo xung nhịp dao động clock ổn định (12 MHz) cho dao động của 8051. Thạch anh sẽ được gắn vào chân XTAL1 và XTAL2 (Chân số 18 và 19) của 8051 .Tần số thạch anh thường dùng trong các ứng dụng là : 11.0592Mhz(giao tiếp với cổng com máy tính) và 12Mhz Tần số tối đa 24Mhz. Tần số càng lớn VĐK xử lí càng nhanh.
Tụ gốm 33pF
Chức năng: Lọc nhiễu cho dao động thạch anh. 2 tụ gốm 33pF sẽ được nối một đầu với chân của thạch anh, đầu còn lại đấu ra Mass.
Tụ hóa 10μF
Chức năng: Tụ hóa 10μF được gắn đầu âm vào chân reset, đầu dương lên nguồn. Khi cấp điện cho mạch, tụ sẽ phóng điện khiến chân reset bật lên mức cao, khi đó toàn bộ hệ thống sẽ được nạp lại từ đầu. Khi đang vận hành thì tụ hóa ngăn dòng đi vào chân reset.
Phần III- Nguyên Lý Hoạt Động Của Mạch.
Như trên hình vẽ các bạn đã thấy. Mạch gồm 1 IC điều khiển chính 89S52 điều khiểu toàn bộ hoạt động của mạch.
Chương trình Code C được viết riêng và chuyển thành đuôi .hex nhờ phần mềm Keil C và nạp vào IC 89S52 thông qua bộ nạp nối cổng LPT bằng chương trình nạp Aec_isp.exe.
Code lập trình cho cổng P2 của IC 89S52. Hiển thị chữ tất cả các chữ và các hiệu ứng trên màn LCD theo ý mình mong muốn.
Chân 4(RS) của LCD nối với chân P3.0(RXD) của 89S52: để chấp nhận dữ liệu nối tiếp. Nếu RS = 0 thì thanh ghi mà lệnh được chọn để cho phép người dùng gửi một lệnh chẳng hạn như xoá màn hình, đưa con trỏ về đầu dòng v.v… Nếu RS = 1 thì thanh ghi dữ liệu được chọn cho phép người dùng gửi dữ liệu cần hiển thị trên LCD
Chân P2.0 đến P2.7 sẽ được nối với lần lượt các chân từ 7 đến 14 của màn LCD: đây là 8 chân dữ liệu bít, được dung để gửi thông tin lên LCD của các thanh ghi trong LCD. ( Nói rõ hơn: ta sẽ viết những dòng chữ mà ta mong muốn )
Phần IV – Chương trình C lập trình cho mạch
#include
#include
// Khai báo các chân của LCD gắn với các cổng:
sfr LCDdata=0xA0; //cong P2
sbit BF=0xA7;
sbit RS=P3^0;
sbit RW=P3^1;
sbit EN=P3^2;
//Hàm trễ:
void delay(long time)
{
long n;
for(n=0;n<time;n++);
}
//Hàm điều khiển LCD thực hiện 1lệnh
void LCDcontrol(unsigned char x)
{
EN=1;//Đưa chân cho phép lên cao
RS=0;//Chọn thanh ghi lệnh
RW=0;//Ghi lên LCD
LCDdata=x;//Giá trị x
EN=0;//Xung cao xuống thấp
delay(1000);
//buzy();
}
//Hàm khởi tạo LCD
void LCDinit(void)
{
LCDcontrol(0x30);// Chế độ 8bit
LCDcontrol(0x38);//1 ô ma trận 5x7 và 2dòng của màn LCD
LCDcontrol(0x0C);//Bật con trỏ
LCDcontrol(0x06);//Tăng con trỏ sang phải
LCDcontrol(0x01);//Xóa màn hình
}
//Hàm xuất 1chuỗi kí tự lên LCD
void LCDputs(unsigned char *s,unsigned char row)
{
unsigned char len;
if(row==1) LCDcontrol(0x80);// Đưa con trỏ về đầu dòng 1
else LCDcontrol(0xC0);//Đưa con trỏ về đầu dòng 2
len=strlen(s);//Lấy độ dài biến được trỏ bởi con trỏ
while(len!=0) //Khi độ dài # 0
{
LCDwrite(*s); //Ghi ra giá trị LCD được chỉ bởi con trỏ
s++;//Tăng con trỏ
len--;//Trừ độ dài
}
}
//Chương trình chính:
void main(void)
{
char x;
LCDinit();
LCDputs(" COK COK COK !!!",1);
delay(30000);
LCDcontrol(0x01);
LCDputs("...... HELLO :) ",2);
delay(30000);
LCDcontrol(0x01);
LCDputs(" NHOM THAO LUAN ",1);
delay(40000);
LCDcontrol(0x01);
LCDputs(" NGUYEN X.NAM A",2);
delay(40000);
LCDcontrol(0x01);
LCDputs("NGO TH.CH MO",1);
delay(40000);
LCDcontrol(0x01);
LCDputs("NGUYEN X.NAM B",2);
delay(30000);
LCDcontrol(0x01);
LCDputs(" BUI THANH HANG",1);
delay(30000);
LCDcontrol(0x01);
LCDputs(" DO VAN TUAN",2);
delay(30000);
LCDcontrol(0x01);
LCDputs("HOANG NGOC SON",1);
delay(30000);
LCDcontrol(0x01);
while(1)
{
for(x=0;x<3;x++)
{
LCDputs("WELLCOME TO.....",1); LCDputs(" ...... DTVT K7B",2);
delay(30000);
LCDcontrol(0x01);
LCDputs("KUOI 1KAI COI !!!",1); LCDputs(":D :D :D :D :D",2);
delay(30000);
LCDcontrol(0x01);
LCDputs("TIEN KO PHAI LA..",1);
LCDputs(" ...... TAT CA",2);
delay(30000);
LCDcontrol(0x01);
LCDputs("TREN TIEN CON CO",1); LCDputs("VANG VA DOLA$ ^^~",2);
delay(30000);
}
}
}
Sau khi hoàn thành các bước. Chúng ta thu được kết quả …:
…. ( VIDEO xem tại bản powerpoint )
Bài làm của chúng em đến đây là kết thúc. Mong thầy và các bạn góp thêm ý kiến cho bài tập của chúng em hoàn chỉnh hơn.
Em xin chân thành cảm ơn !
Ý KIẾN GIÁO VIÊN:
………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………….……………………………………………………………………………………………………………………………………………………………………………………………………………………………
……………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………
………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………
.........................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................
Hết !