Tải bản đầy đủ (.doc) (21 trang)

thiết kế đồng hồ thời gian hiển thị lcd

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (394.76 KB, 21 trang )

Trường Đại Học Công Nghiệp Hà Nội Khoa Điện tử
BỘ CÔNG THƯƠNG
TRƯỜNG ĐẠI HỌC CÔNG NGHIỆP HÀ NỘI
KHOA : ĐIỆN TỬ
ĐỒ ÁN MÔN HỌC
ĐỀ TÀI: THIẾT KẾ ĐỒNG HỒ THỜI GIAN HIỂN THỊ LCD .
File đính kèm 005.rar
GVHD: Nguyễn Anh Dũng
SVTH: Nguyễn Xuân Tư
Lê Thị Nhung
Đồ án môn VĐK Lớp ĐT2-K9
1
Trường Đại Học Công Nghiệp Hà Nội Khoa Điện tử
MỤC LỤC
Phần 1: Giới thiệu về vi điều khiển AT89S52…………………………………… 4
Phần 2: Thiết kế mạch…………………………………………………………… 6
I.Thiết kế phần cứng……………………………………………………………… 6
II.Thiết kế phần mềm……………………………………………………………….8
Code của chương trình………………………………………………………… 9
Phần 3: Ứng dụng của mạch…………………………………………………… 21
Đồ án môn VĐK Lớp ĐT2-K9
2
Trường Đại Học Công Nghiệp Hà Nội Khoa Điện tử
LỜI NÓI ĐẦU
Kỹ thuật vi điều khiển hiện nay rất phát triển, nó được ứng dụng vào rất nhiều lĩnh
vực sản xuất công nghiệp, tự động hóa, trong đời sống và còn nhiều lĩnh vực khác nữa. So
với kỹ thuật số thì kỹ thuật vi điểu khiển nhỏ gọn hơn rất nhiều do nó được tích hợp lại và
có khả năng lập trình được để điều khiển. Nên rất tiện dụng và cơ động. Với tính ưu việt
của vi điều khiển thì trong phạm vi đồ án nhỏ này, em chỉ dùng vdk thiết kế đông hồ thời
gian hiển thị lên LCD.
Mục đích của đề tài hướng đến: tạo ra bước đầu cho sinh viên thử nghiệm những


ứng dụng của vdk trong thực tiễn để rồi từ đó tìm tòi, phát triển nhiều ứng dụng khác trong
đời sống hằng ngày cần đến.
Việc thực hiện xong đồ án môn học bằng các kiến thức đã học, một số sách tham
khảo và một số nguồn tài liệu khác nên không tránh khỏi những thiếu sót. Vì vậy nhóm rất
mong được sự góp ý của thầy cô và các bạn.
Chúng em xin chân thành cảm ơn!
Nhóm sinh viên thực hiện: Nguyễn Xuân Tư
Lê Thị Nhung
Đồ án môn VĐK Lớp ĐT2-K9
3
Trường Đại Học Công Nghiệp Hà Nội Khoa Điện tử
Phần 1: Giới thiệu về vi điều khiển AT89S52
AT89S52 là chíp được sản xuất bởi hãng Atmel kiểu DIP 40 chân. Sau đây là sơ đồ chân
của chíp:
AT89S52 gồm 4 port ,từ chân 32 đến chân 39 là port 0, từ chân 1 đến chân 8 là port 1, từ
chân 21 đến chân 28 là port 2, và từ chân 10 đến chân 17 là port 3.
Ngoài ra chíp còn 1 số chân khác như: PSEN,ALE,EA,RST,XTAL1,XTAL2,Vcc,GND.
AT89S52 có 8 kbyte Flash ROM trên chip, khi chân EA được đặt ở mức logic cao vi điều
khiển sẽ thực hiện chương trình trong bộ nhớ này bắt đầu từ địa chỉ 0000H.
Khi EA được đặt ở mức logic thấp bộ vi điều khiển sẽ thực hiện chương trình ở bộ nhớ
ngoài EPROM.
AT89S52 có 256 byte RAM nội và được chia làm 4 bank.
Đồ án môn VĐK Lớp ĐT2-K9
4
Trường Đại Học Công Nghiệp Hà Nội Khoa Điện tử
Sau đây là sơ đồ cấu trúc bên trong của vi điều khiển 8051(8052):
Các hoạt động của AT89S52:
*Hoạt động định thời/đếm:
AT89S52 có 3 bộ định thời/đếm là timer0,timer1,timer2.
Các thanh ghi của timer0 và timer1 gồm có:

Thanh ghi chế độ định thời TMOD dùng để đặt chế độ làm việc cho timer0 và timer1.
Thanh ghi điều khiển timer TCON chứa các bit trạng thái và bit điều khiển cho timer0 và
timer1.
Thanh ghi chứa giá trị cửa các bộ định thời.
Riêng timer2 thì có thanh ghi riêng là T2CON và T2MOD. Timer2 ít dùng nên ở đây chỉ
giới thiệu qua.
*Hoạt động port nối tiếp :
AT89S52 có 1 cổng nối tiếp trên chip có thể hoạt động ở nhiều chế độ khác nhauvoiws các
tốc độ khác nhau. Chức năng chính của cổng nối tiếp là thực hiện chuyển đổi song song
sang nối tiếp dữ liệu xuất và chuyển đổi nối tiếp sang song song với dữ liệu nhận để có thể
giao tiếp với máy tính.
Các thanh ghi của cổng nối tiếp là SBUF và SCON là 2 thanh ghi chức năng đặc biệt cho
phép phần mềm truy xuất đến cổng nối tiếp
Đồ án môn VĐK Lớp ĐT2-K9
5
Trường Đại Học Công Nghiệp Hà Nội Khoa Điện tử
*Hoạt động của ngắt :
Trong thực tế người ta muốn tận dụng khả năng của CPU để làm thêm nhiều công việc
khác nữa, chỉ khi nào có cần trao đổi dữ liệu mới cần yêu cầu CPU tạm dừng công việc
hiện tại để phục vụ việc trao đổi dữ liệu. Vì vậy 1 hệ thống sử dụng ngắt có thể đáp ứng
nhanh các yêu cầu trao đổi dữ liệu trong khi vẫn có thể làm được các công việc khác.
Tổ chức ngắt ở AT89S52 bao gồm:
- Ngắt ngoài đến từ chân INT0.
- Ngắt ngoài đến từ chân INT1.
- Ngắt do bộ timer0.
- Ngắt do bộ timer1.
- Ngắt do bộ timer2.
- Ngắt do port nối tiếp.
Sáu nguồn ngắt này được xóa khi reset và được đặt riêng bằng phần meemfboiwr các bit
trong thanh ghi cho phép ngắt IE và thanh ghi ưu tiên ngắt IP.

Phần 2: Thiết kế mạch
I.Thiết kế phần cứng:
Sơ đồ nguyên lý:
Đồ án môn VĐK Lớp ĐT2-K9
6
Trường Đại Học Công Nghiệp Hà Nội Khoa Điện tử
Trong mạch sử dụng 1 chip AT89S52, 1 màn hình LCD, 4 nút nhấn tự phục hồi, 6 điện trở,
2 diod, 1 pin dự phòng, 6 điện trở, 3 tụ điện, và 1 thạch anh 12MHz.
Các nút nấn SW1,SW2,SW3 được nối vào các chân 10, 11,12 của chíp để điều chỉnh tăng
giảm.
Sau đây là sơ đồ mạch in của mạch:

Đồ án môn VĐK Lớp ĐT2-K9
7
Trường Đại Học Công Nghiệp Hà Nội Khoa Điện tử
II.Thiết kế phần mềm:
Lưu đồ thuật toán:
không
có có


không

không
Đồ án môn VĐK Lớp ĐT2-K9
8
Chương trình
chính
Phím
tăng


nhấn?
Phím
giảm

nhấn?
Giảm thông số đi
một đi vị
Gọi chương trình
hiển thị
Tăng thông số lên
một đơn vị
Phím mode có
nhấn không?
Nhấn lần
thứ nhất
Chỉnh
ngày/tháng/
năm
Nhấn lần
thứ hai
Chỉnh giờ
phút
Nhấn lần
thứ ba
Chỉnh thứ
Trường Đại Học Công Nghiệp Hà Nội Khoa Điện tử
Code của chương trình:
#include <reg52.h>
#include <intrins.h>

#include<stdio.h>
#include<string.h>
typedef unsigned char bit_8;
sbit rs=P3^5; // register select is port 3.5
sbit rw=P3^4; // read/write is port 3.4
sbit en=P3^3; // chan EN cua LCD noi voi P3^3
sbit d7=P1^7; // co ban P0^7
sbit nutchinh=P3^2; // khai bao nut chinh gio
sbit nutchinhtang=P3^1; // khai bao nut chon tang
sbit nutchinhgiam=P3^0;
bit_8 code *days[]={"Cnhat","T.hai","T.ba ","T.tu
","T.nam","T.sau","T.bay"}; // day mang ngay
bit_8 code *val[]={"0","1","2","3","4","5","6","7","8","9","10","11","12"};
// day mang so
bit flag;
int t;
bit_8 month=12,date=13,hh,lmin,hmin,hsec,lsec,day=0,lyear=9,hyear=0,date_count;
//khai bao cac bien
void ini(void);
void command(bit_8);
void data_in(bit_8*);
void busy(void);
void tre1s(void);
void month_select(bit_8);
void date_in(bit_8);
void set_clock();
void delay(void);
#define DISABLE_INT IE=0x0; //cam toan bo
#define ENABLE_INT IE=0x81;//chon ngat ngoaitimer 0
void main()

{ bit_8 temp;
ENABLE_INT
ini();
command(0x01);
data_in("DO MON VDK");
for(t=0;t<=4;t++)
{delay();}
command(0xc0);
data_in("NHOM SVTH:");
for(t=0;t<=4;t++)
{delay();}
command(0x01);
data_in("NGUYEN XUAN TU");
for(t=0;t<=4;t++)
Đồ án môn VĐK Lớp ĐT2-K9
9
Trường Đại Học Công Nghiệp Hà Nội Khoa Điện tử
{delay();
}
command(0xc0);
data_in("LE THI NHUNG");
for(t=0;t<=4;t++)
{delay();
}
command(0x01);
nutchinh=1; //doc trang thai nut nhan
nutchinhtang=1;
nutchinhgiam=1;
month_select(month);
while(1)

{ month_select(month); // chon ngay ,thang
while(date<=date_count)
{ command(0x88);
date_in(date);
command(0x8a);
data_in("/");
if(month<=9)
data_in(val[0]);
data_in(val[month]);
command(0x8d);
data_in("/");
data_in(val[hyear]);
data_in(val[lyear]);
for(hh=1;hh<=24;hh++)
{ command(0x80);
data_in(days[day]);
command(0xc3);
if(hh<=12)
{ if(hh<=9)
data_in(val[0]);
data_in(val[hh]);
}
else
{
temp=hh-12;
if(temp<=9)
data_in(val[0]);
data_in(val[temp]);
}
if(hh<12)

{
command(0xcc);
data_in("am");
}
else
{
Đồ án môn VĐK Lớp ĐT2-K9
10
Trường Đại Học Công Nghiệp Hà Nội Khoa Điện tử
command(0xcc);
data_in("pm");
}
for(hmin=0;hmin<=5;hmin++)
{
command(0xc5);
data_in(":");
data_in(val[hmin]);
for(lmin=0;lmin<=9;lmin++)
{
command(0xc7);
data_in(val[lmin]);
for(hsec=0;hsec<=5;hsec++)
{
command(0xc8);
data_in(":");
data_in(val[hsec]);
for(lsec=0;lsec<=9;lsec++)
{
command(0xca);
data_in(val[lsec]);

tre1s();
if(_testbit_(flag))
set_clock();
}
}
}
}
if(hh==23&&lmin==0&&hmin==0)
{
day=day+1;
if(day==7)
day=0;
}
}
hh=1;
date=date+1;
}
month=month+1;
date=1;
if(month==13)
{
month=1;
lyear=lyear+1;
if(lyear==10)
{
lyear=0;
hyear=hyear+1;
}
Đồ án môn VĐK Lớp ĐT2-K9
11

Trường Đại Học Công Nghiệp Hà Nội Khoa Điện tử
}
}
}
void ini()
{
command(0x38); //thiet dat font chu 5x7 ,che do 8 bit
command(0x0c); //bat hhien thi,tat con tro
command(0x01); //xoa man hinh
command(0x06); // tang con tro
}
void busy()
{
d7=1;
rs=0;
rw=1;
while(d7!=0)
{
en=0;
en=1;
}
}
void command(bit_8 val)
{
busy();
P1=val;
rs=0;
rw=0;
en=1;
en=0;

}
void data_in(bit_8 *string)
{
bit_8 i;
busy();
for(i=0;string[i]!='\0';i++)
{
P1=string[i];
rs=1;
rw=0;
en=1;
en=0;
}
}
void tre1s()
{
bit_8 i;
TMOD=0x11; //chon che do timer 0,1 mode 1
for(i=0;i<5;i++)
Đồ án môn VĐK Lớp ĐT2-K9
12
Trường Đại Học Công Nghiệp Hà Nội Khoa Điện tử
{TH0=(65536-46080)/256;
TL0=(65536-46080)%256;
TR0=1 ;
while(!TF0);
TR0=TF0=0;
TR0=1;
TH0=(65536-46080)/256;
TL0=(65536-46080)%256;

while(!TF0);
TR0=TF0=0;
TH0=(65536-46080)/256;
TL0=(65536-46080)%256;
TR0=1 ;
while(!TF0);
TR0=TF0=0;
TR0=1;
TH0=(65536-46080)/256;
TL0=(65536-46080)%256;
while(!TF0);
TR0=TF0=0;}
}
void month_select(bit_8 month)
{
bit_8 year;
switch(month)
{
case 1:
date_count=31;
break;
case 2:
year=hyear*10+lyear;
if(year%4==0)
date_count=29;
else
date_count=28;
break;
case 3:
date_count=31;

break;
case 4:
date_count=30;
break;
case 5:
date_count=31;
break;
case 6:
date_count=30;
break;
Đồ án môn VĐK Lớp ĐT2-K9
13
Trường Đại Học Công Nghiệp Hà Nội Khoa Điện tử
case 7:
date_count=31;
break;
case 8:
date_count=31;
break;
case 9:
date_count=30;
break;
case 10:
date_count=31;
break;
case 11:
date_count=30;
break;
case 12:
date_count=31;

break;
}
}
void date_in(bit_8 a)
{
bit_8 j;
j=a/10;
data_in(val[j]);
j=a%10;
data_in(val[j]);
}
void clock_flag(void) interrupt 0
{
flag=1;
}
void set_clock(void)
{
bit_8 temp;
DISABLE_INT
command(0x01);
command(0x80);
data_in("set date");
command(0x0f);//bat hien thi ,bat con tro ,bat nhap nhay
command(0xc4);
date_in(date);
command(0xc6);
data_in("/");
if(month<=9)
data_in(val[0]);
data_in(val[month]);

command(0xc9);
data_in("/");
Đồ án môn VĐK Lớp ĐT2-K9
14
Trường Đại Học Công Nghiệp Hà Nội Khoa Điện tử
data_in(val[hyear]);
data_in(val[lyear]);
command(0xcb);
up2:while(nutchinhtang!=0&&nutchinhgiam!=0&&nutchinh!=0);
if(nutchinhtang==0)
{
lyear++;
if(lyear==10)
{
lyear=0;
hyear++;
}
command(0xca);
data_in(val[hyear]);
data_in(val[lyear]);
month_select(month);
command(0x10);//dich con tro sang trai
delay();
goto up2;
}
if(nutchinhgiam==0)
{
lyear ;
if(lyear==-1)
{

lyear=9;
hyear ;
if(hyear==-1)
hyear=9;
}
command(0xca);
data_in(val[hyear]);
data_in(val[lyear]);
month_select(month);
command(0x10);
delay();
goto up2;
}
command(0xc8);
delay();
up1:while(nutchinhtang!=0&&nutchinhgiam!=0&&nutchinh!=0);
if(nutchinhtang==0)
{
month++;
if(month==13)
month=1;
command(0xc7);
if(month<=9)
data_in(val[0]);
Đồ án môn VĐK Lớp ĐT2-K9
15
Trường Đại Học Công Nghiệp Hà Nội Khoa Điện tử
data_in(val[month]);
month_select(month);
command(0x10);

delay();
goto up1;
}
if(nutchinhgiam==0)
{
month ;
if(month==0)
month=12;
command(0xc7);
if(month<=9)
data_in(val[0]);
data_in(val[month]);
month_select(month);
command(0x10);
delay();
goto up1;
}
command(0xc5);
delay();
up: while(nutchinhtang!=0&&nutchinhgiam!=0&&nutchinh!=0);
if(nutchinhtang==0)
{
date++;
if(date>date_count)
date=1;
command(0xc4);
date_in(date);
command(0x10);
delay();
goto up;

}
if(nutchinhgiam==0)
{
date ;
if(date==0)
date=date_count;
command(0xc4);
date_in(date);
command(0x10);
delay();
goto up;
}
command(0x01);
command(0x80);
data_in("set time");
command(0xc4);
Đồ án môn VĐK Lớp ĐT2-K9
16
Trường Đại Học Công Nghiệp Hà Nội Khoa Điện tử
if(hh<=12)
{
if(hh<=9)
data_in(val[0]);
data_in(val[hh]);
}
else
{
temp=hh-12;
if(temp<=9)
data_in(val[0]);

data_in(val[temp]);
}
data_in(":");
data_in(val[hmin]);
data_in(val[lmin]);
command(0xca);
if(hh<12)
{
data_in("am");
}
else
{
data_in("pm");
}
command(0xc5);
delay();
up3: while(nutchinhtang!=0&&nutchinhgiam!=0&&nutchinh!=0);
if(nutchinhtang==0)
{
hh++;
if(hh==24)
hh=1;
command(0xc4);
if(hh<=12)
{
if(hh<=9)
data_in(val[0]);
data_in(val[hh]);
}
else

{
temp=hh-12;
if(temp<=9)
data_in(val[0]);
data_in(val[temp]);
}
command(0xca);
if(hh<12)
Đồ án môn VĐK Lớp ĐT2-K9
17
Trường Đại Học Công Nghiệp Hà Nội Khoa Điện tử
{
data_in("am");
}
else
{
data_in("pm");
}
command(0xc5);
delay();
goto up3;
}
if(nutchinhgiam==0)
{
hh ;
if(hh==0)
hh=24;
command(0xc4);
if(hh<=12)
{

if(hh<=9)
data_in(val[0]);
data_in(val[hh]);
}
else
{
temp=hh-12;
if(temp<=9)
data_in(val[0]);
data_in(val[temp]);
}
command(0xca);
if(hh<12)
{
data_in("am");
}
else
{
data_in("pm");
}
command(0xc5);
delay();
goto up3;
}
command(0xc8);
delay();
up4: while(nutchinhtang!=0&&nutchinhgiam!=0&&nutchinh!=0);
if(nutchinhtang==0)
{
lmin++;

Đồ án môn VĐK Lớp ĐT2-K9
18
Trường Đại Học Công Nghiệp Hà Nội Khoa Điện tử
if(lmin==10)
{
lmin=0;
hmin++;
if(hmin==6)
hmin=0;
}
command(0xc7);
data_in(val[hmin]);
data_in(val[lmin]);
command(0x10);
delay();
goto up4;
}
if(nutchinhgiam==0)
{
lmin ;
if(lmin==-1)
{
lmin=9;
hmin ;
if(hmin==-1)
hmin=5;
}
command(0xc7);
data_in(val[hmin]);
data_in(val[lmin]);

command(0x10);
delay();
goto up4;
}
command(0xcc);
delay();
command(0x01);
command(0x80);
data_in("set Day");
command(0xc4);
data_in(days[day]);
delay();
up6: while(nutchinhtang!=0&&nutchinhgiam!=0&&nutchinh!=0);
if(nutchinhtang==0)
{
day++;
if(day==7)
day=0;
command(0xc4);
data_in(days[day]);
delay();
goto up6;
Đồ án môn VĐK Lớp ĐT2-K9
19
Trường Đại Học Công Nghiệp Hà Nội Khoa Điện tử
}
if(nutchinhgiam==0)
{
day ;
if(day==-1)

day=6;
command(0xc4);
data_in(days[day]);
delay();
goto up6;
}
delay();
ini();
command(0x80);
data_in(days[day]);
command(0x88);
date_in(date);
command(0x8a);
data_in("/");
if(month<=9)
data_in(val[0]);
data_in(val[month]);
command(0x8d);
data_in("/");
data_in(val[hyear]);
data_in(val[lyear]);
command(0xcc);
if(hh<12)
{
data_in("am");
}
else
{
data_in("pm");
}

command(0xc3);
if(hh<=12)
{
if(hh<=9)
data_in(val[0]);
data_in(val[hh]);
}
else
{
temp=hh-12;
if(temp<=9)
data_in(val[0]);
data_in(val[temp]);
}
Đồ án môn VĐK Lớp ĐT2-K9
20
Trường Đại Học Công Nghiệp Hà Nội Khoa Điện tử
command(0xc5);
data_in(":");
data_in(val[hmin]);
command(0xc7);
data_in(val[lmin]);
command(0xc8);
data_in(":");
data_in(val[hsec]);
data_in(val[lsec]);
delay();
ENABLE_INT
}
void delay(void)

{ int i;
TMOD=0x01;
for(i=0;i<5;i++)
{
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
TR0=1;
while(!TF0);
TR0=TF0=0;
}}
Phần 3: Ứng dụng của mạch
Mạch được ứng dụng nhiều trong thực tế vì mạch đơn giản dễ làm. Song bên cạnh đó còn
có nhiều nhược điểm như code viết dài độ chính xác không cao so với dùng bộ thời gian
thực real time.
Hướng phát triển của đề tài: kết hợp vối bộ cảm biến nhiệt độ và cảm biến độ ẩm để tạo ra
LỊCH VẠN NIÊN.
Đồ án môn VĐK Lớp ĐT2-K9
21

×