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
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.
có
nhấn?
Phím
giảm
có
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>
{ 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)
{
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]);
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;
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;
}
}
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]);
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);
}
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]);
{
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)
{
Đồ á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]);
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");
}
{ 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