THIẾT KẾ ĐỒNG HỒ ĐIỆN TỬ HIỂN THỊ BẰNG MÀN HÌNH TINH THỂ LỎNG (LCD) - Pdf 22

1
BỘ GIÁO DỤC ĐÀO TẠO
TRƯỜNG ĐẠI HỌC CÔNG NGHIỆP HÀ NỘI
ĐỒ ÁN MÔN HỌC
THIẾT KẾ ĐỒNG HỒ ĐIỆN TỬ HIỂN THỊ BẰNG
MÀN HÌNH TINH THỂ LỎNG (LCD)
GIÁO VIÊN HƯỚNG DẪN
NGUYỄN ANH DŨNG
SINH VIÊN THỰC HIỆN
NGUYỄN MINH ANH
HÀ NỘI-2014
A.GIỚI THIỆU TỔNG QUAN VỀ HỌ 8051
Vi điều khiển 8051 – Mô tả phần cứng
Vi điều khiển 8051 là một trong những họ vi điều khiển 8bit thông dụng
nhất trên thế giới. Vi điều khiển này được chế tạo lần đầu tiên bởi hãng Intel,
sau đó được các hãng khác chế tạo dưới dạng các dẫn xuất khác nhau. Các
dẫn xuất này đều có chung một kiến trúc giống với vi điều khiển 8051 kinh
điển. Thêm vào đo, tùy theo từng loại mà các chip dẫn xuất được tích hợp
thêm các ngoại vi khác nhau (như ADC, SPI, EEPROM, capture/compare
channels…), tính năng cũng được nâng cao để phù hợp với các ứng dụng
ngày càng phức tạp.
Trước hết xin giới thiệu một số tính năng của họ vi điều khiển 8051
(lưu ý là những tính năng này là của vi điều khiển 8051 kinh điển):
- CPU 8bit được thiết kế tối ưu cho các ứng dụng điều khiển.
- Co cac khả năng xử lý bit logic.
- Không gian bộ nhớ chương trình 64Kbyte.
- Không gian bộ nhớ dữ liệu 64 Kbyte.
- Tích hợp 4Kbyte bộ nhớ chương trình trên chip.
- Tích hợp 128byte bộ nhớ RAM trên chip.
- Có 32 đường vàoo/ra 2 chiều cố thể định địa chỉ đến từng bit.
- Tích hợp 02 timer 16bit.

CPU khi nó bị treo bởi một nguyên nhân nào đó. WDM ở AT89S52 gồm
một bộ Timer 14 bít, một bộ Timer 7 bít, thanh ghi WDTPRG( WDT
programable) điều khiển Timer 7 bit và một thanh ghi chớc năng WDTRST(
WDM register). Bình thường WDT không hoạt động( bị cấm), để cho phép
WDT, các giá trị 1EH và E1H cần phải được ghi liên tiếp vào thanh ghi
WDTRST. Timer 14 bit của WDT sẽ đếm tăng dần sau mỗi chu kỳ đồng hồ
cho đến giá trị 16383 thì xảy ra tràn. Khi xảy ra tràn, chân RTS sẽ được đặt
ở mức cao trong thời gian 96.Tosc (Tossc=1/Fosc) và AT89S52 sẽ được
reset. Khi WDT hoạt động, ngoại trừ reset phần cứng và reset do WDT tràn
thì không có cách nào cấm được WDT, vì vậy khi sử dụng WDT thì các
đoạn mã chương trình phải được đặt trong các khe thời gian từ khi giữa các
lần WDT được khởi tạo lại
5
Sơ đồ khối của bộ vi điều khiển 89S52
6
II- Sơ đồ các chân và chức năng
1. Port 0(P0.0-P0.7 hay từ chân 32 đến chân 39): Gồm 8 chân, ngoài chức
năng xuất nhập ra, Port 0 còn là Bus đa hợp dữ liệu và địa chỉ( AD0-AD7),
chức năng này sẽ được sử dụng khi AT89S52 giao tiếp với thiết bị ngoài có
kiến trúc Bus
7
2. Port 1( P1.0-P1,7 hay từ chân 1 đến chân 8) : Có chức năng xuất nhập
theo bit và byte. Ngoài ra, 3 chân P1.5, P1.6, P1.7 được dùng để nạp ROM
theo chuẩn ISP, 2 chân P1.0 và P1.1 được dùng cho bộ Timer 2

3. Port 2( P2.0- P2.7 hay từ chân 21 đến chân 28): Là một port có công
dụng kép: là đườ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.

4. Port 3( P3.0- P3.7 hay từ chân 10 đến chân 17): Mỗi chân trên port 3

thấp, chương trinh chỉ được thi hành từ bộ nhớ mở rộng.
8 .ALE( Address Latch Enable):
10
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 chu kỳ sau của bộ nhớ.
9 .PSEN( Program Store Enable):
PSEN là điều khiển để cho phép bộ nhớ chương trình mở rộng và
trườ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 đọc 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 bộ vi điều khiển để giải mã lệnh. Khi thi hành chương trình trong ROM
nội, PSEN sẽ ở mức thụ động( mức cao)
10 . Vcc, GND:
AT89S52 dùng nguồn một chiều có dải điện áp từ 4V-5.5V được cấp
qua chân 40(+) và chân 20(-).
11
B : NỘI DUNG
I.CODE
#include <REGX52.H>
#include <lcd_driver.h>
#define change P3_3
#define ok P3_4
#define up P3_5
#define down P3_6
unsigned char mode = 0;
unsigned char hrs,min,sec,date,month,year;
unsigned int i;
void setting(void);

}
void main(void)
{
setting();
khoi_tao_lcd();
lenh(xoa_man_hinh);
display();
while(1)
{
if(!change)
13
{
while(!change);
TR0 = 0;
TR1=0;
mode++;
while(mode != 0 || mode >= 7)
{
if(!change) //
{
while(!change);
mode++;
}
if(mode > 7)mode=0;
switch(mode)
{
case 1:
if (up==0)
{
hrs++;

if(ok==0 || mode==0) goto escape;
break;
case 3: //change seconds
if (up==0 || down==0)
{
15
sec=0;
}
display();
if(ok==0 || mode==0) goto escape;
break;
case 4: // chinh ngay
if (!up)
{
date ++;
if (month == 2 && date > 28 ) date = 1;
if ((month == 1 || month == 3 || month == 5 ||
month == 7 || month == 8 || month == 10 || month == 12) && date > 31)
date = 1;
if ((month == 4 || month == 6 || month == 9 ||
month == 11 ) && date > 30) date = 1;
while(!up);
display();
}
else if (!down)
{
date ;
if (date == 0 && month == 2 ) date = 28;
if ((month == 1 || month == 3 || month == 5 ||
month == 7 || month == 8 || month == 10 || month == 12) && date == 0)

year++;
if(year == 100 ) year = 1;
while(!up);
display();
}
else if (down==0)
{
year ;
if(year == 0)year = 99;
while(!down);
display();
}
if(ok==0 || mode == 0) goto escape;
break;
if(mode == 0)
{
display();
break;
}
}
escape:
TR1=1;
18
TR0 = 1;
mode = 0;
}
}
}
void ngat_timer_1(void)interrupt 3
{

month = 1;
year ++;
if(year == 100) year = 0;
}
}
if ((month == 2 || month == 4 || month == 6 || month == 9
|| month == 11 ) && date >30)
{
date = 1;
month ++;
}
}
}
}
}
}
20
void ngat_hien_thi_thoi_gian_timer_0 (void) interrupt 1
{
TF0 = 0;
display();
}
#define xoa_man_hinh 0x01
#define tat_con_tro 0x0c
#define ve_dau_dong_thu_nhat 0x80
#define lcd_rs P0_5
#define lcd_rw P0_6
#define lcd_en P0_7
#define port_data P2
char x;

busy_flag();
port_data = LCDcmd;
lcd_rs=0;
lcd_rw=0;
lcd_en=1;
delay(5);
lcd_en=0;
delay(5);
}
22
void write_data(unsigned LCD_data)
{
busy_flag();
port_data = LCD_data;
lcd_rs = 1;
lcd_rw = 0;
lcd_en = 1;
delay(5);
lcd_en = 0;
delay(5);
}
void write(char *s)
{
while (*s)
{
write_data(*s);
s++;
}
}
void khoi_tao_lcd(void)

II. Sơ Đồ Nguyên Lý và Mạch In
III.Nguyên Lý hoạt Động
Dùng timer đếm xung để định thời gian,dùng thạch anh 12MHz tức là
trong 1 giây nó sẽ tạo ra 12 triệu xung.con 89 thực hiện lệnh sau mỗi 12
xung thạch anh. tức là timer đếm đc 1 triệu xung thỡ sẽ được 1 giây cứ thế ta
sẽ có được thời gian cần tính trong con này có tất cả 3 timer, ta dùng 1 timer
để đếm thời gian dùng 1 timer để hiển thị. timer này sẽ ngắt liên tục để đọc
thời gian mà bộ timer kia làm được
C.ĐÁNH GIÁ
Ưu Điểm: Chi phí sản xuất thấp
Dể sử dụng
Tuy nhiên trong quá trinh thực hiện chúng em vẫn còn gặp nhiều những
sai sót. Mong quý thầy(cô) tham gia đóng góp ý kiến để chúng em hoàn
thiện hơn.
Chúng em xin chân thành cảm ơn!
25


Nhờ tải bản gốc

Tài liệu, ebook tham khảo khác

Music ♫

Copyright: Tài liệu đại học © DMCA.com Protection Status