1. Trang chủ
  2. » Luận Văn - Báo Cáo

Báo cáo:Mạch hiển thị thời gian, ngày, tháng, năm, giờ phút giây bằng LCD, sử dụng vi điều khiển họ 8051 và IC thời gian thực DS1307. Có chỉnh thời gian, ngày tháng

75 463 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

Định dạng
Số trang 75
Dung lượng 1 MB

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

Nội dung

Với tính ưu việt của vi điều khiển thì trong phạm vi đồ án nhỏ này, chúng em đã chọn đề tài " Mạch hiển thị thời gian, ngày, tháng, năm, giờ phút giây bằng LCD, sử dụng vi điều khiển họ

Trang 1

MỤC LỤC

MỤC LỤC 1

DANH MỤC HÌNH ẢNH 15

LỜI NÓI ĐẦU 17

CHƯƠNG 1 PHÂN TÍCH YÊU CẦU 18

1.1 Khảo sát và phân tích bài toán 18

1.1.1 Cách hiển thị thời gian 18

1.1.2 Mục đích 19

1.1.3 Các công nghệ ứng dụng trong thiết kế thời gian thực 20

1.1.4 Giải pháp thiết kế 21

1.1.5 Các tham số cho hệ thống 21

CHƯƠNG 2: THIẾT KẾ HỆ THỐNG 22

2.1 Sơ đồ tổng quát 22

2.2 Sơ đồ Call graph 23

2.3 Sơ đồ đặc tả 23

2.5 Các module trong hệ thống 26

2.5.1 Khối nguồn 26

2.5.2 Khối điều khiển trung tâm 26

2.5.3 Khối tạo thời gian thực 27

2.5.4 Khối hiển thị 28

2.5.5 Khối giao tiếp phím bấm 28

2.6 Giới thiệu một số linh kiện 29

2.6.1 Vi điều khiển AT89C51 29

2.6.2 IC thời gian thực DS1307 36

2.6.4 IC ổn áp 7805 48

2.6.5 Tụ điện 49

2.6.6 Điện trở 49

2.6.7 Nút bấm button 49

2.6.8 Biến trở 50

2.6.9 Thạch anh 50

2.6.10 Pin CMOS 3V 50

Trang 2

3.1 Thiết kế phần cứng 51

3.2 Lập trình vi điều khiển 52

Chương trình 52

} 54

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~// 54

void ghilenhLCD(unsigned char x) 54

{ 54

busy(); 54

congLCD=x; // gia tri x 54

rs=0; // chon thanh ghi lenh 54

rw=0; // ghi len lcd 54

en=1; // cho phep muc cao 54

en=0; //xung cao xuong thap 54

} 54

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~// 54

void khoitaoLCD(void) 54

{ 54

ghilenhLCD(0X38); // hai dong va ma tran 5x7 54

ghilenhLCD(0X0C); //bat man hinh , tat con tro 54

ghilenhLCD(0X01); //xoa man hinh 54

ghilenhLCD(0X06); // dich hien thi sang phai(tang con tro sang phai) 54

} 54

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~// 54

void ghi_kytu(unsigned char value) 54

{ 54

busy(); 54

congLCD=value; 54

rs=1; 54

rw=0; 54

en=1; 54

en=0; 54

} 55

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~// 55

void ghi_chuoi(unsigned char *string) 55

Trang 3

unsigned char i; 55

for(i=0;string[i]!='\0';i++) 55

ghi_kytu(string[i]); 55

} 55

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~// 55

void ghiso(unsigned char a) 55

{ 55

unsigned char i; 55

i=a/10; 55

ghi_chuoi(rtc[i]); 55

i=a%10; 55

ghi_chuoi(rtc[i]); 55

} 55

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~// 55

void hienthi_dulieu_rtc(unsigned char x) 55

{ 55

unsigned char temp; 55

temp = x/16; 55

ghi_chuoi(rtc[temp]); 55

temp = x%16; 55

ghi_chuoi(rtc[temp]); 55

} 55

**********************************************************************/ 56

//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~// 56

// CAC CHUONG TRINH CON GIAO TIEP VOI RTC // 56

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~// 56

ca 2 dk start va stop dc tao ra boi thiet bi chu 56

void start_rtc(void) //dk start: 1 su cdoi tthai tu cao xuong thap tren duong sda trong khi 56

{ //duong scl dang o muc cao 56

scl=1; 56

sda=1; 56

_nop_(); 56

_nop_(); 56

Trang 4

scl=0; 56

} 56

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~// 56

void stop_rtc(void) //dk stop: 1 su cdoi trang thai tu muc thap len cao tren duong sda trong khi duong 56 { // slc dang o muc cao 56

sda=0; 56

scl=1; 56

_nop_(); 56

_nop_(); 56

sda=1; 56

} 56

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~// 56

void gui_rtc(unsigned char x) 56

{ 56

unsigned char i; 57

for(i=0;i<8;i++) 57

{ 57

sda=(x&0x80)? 1:0; //dua bit du lieu ra chan SDA 57

scl=1; 57

_nop_(); 57

_nop_(); 57

scl=0; 57

x<<=1; //bit co trong so lon hon dc truyen truoc 57

} 57

scl=1; //nhan bit ACK tu SLAVER bao hieu ket thuc mot byte du lieu 57

_nop_(); 57

_nop_(); 57

scl=0; 57

} 57

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~// 57

unsigned char nhan_rtc(void) 57

{ 57

Trang 5

for(i=0;i<8;i++) // nhan vao 8 bit 57

{ 57

scl=1; 57

Data<<=1; 57

Data=Data|sda; 57

scl=0; 57

} 57

sda=1; // trong qua trinh doc mot chuoi byte tu slaver master gui bit ACK=> sda=1 57

scl=1; //master nhan/gui bit du lieu(sda) khi scl o muc cao 58

_nop_(); 58

scl=0; 58

_nop_();//du lieu(sda) thay doi khi scl muc thap/ 58

return Data;//tra gia tri cho ham 58

} 58

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~// 58

char docdulieu(unsigned char diachi) 58

{ 58

unsigned char Data; 58

start_rtc(); 58

gui_rtc(0xd0); 58

gui_rtc(diachi); 58

start_rtc(); 58

gui_rtc(0xd1); //0xd0 + 0xd1 la dia chi cua ds107 va che do doc du lieu 58

Data=nhan_rtc(); 58

stop_rtc();//Stop I2C 58

return Data; 58

} 58

~~~~~~~~~~~~~~~~~~~~~~~~~~~~// 58

void ghivaoDS1307(void) 58

{ 58

unsigned char t; 58

for(t=0;t<9;t++) 58

{ 58

start_rtc(); 58

Trang 6

gui_rtc(t); 58

gui_rtc(giatrikhoitao_rtc[t]); 59

stop_rtc(); 59

} 59

} 59

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~// 59

// HIEN THI GIO , NGAY THANG TREN LCD // 59

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~// 59

void hienthi_rtc(void) 59

{ 59

ghilenhLCD(0xca); // ep con tro den vi tri thu 11 dong thu 2 59

hienthi_dulieu_rtc(docdulieu(0)); //hien thi giay , du lieu doc ra la ma bcd nhung ham hienthi_dulieu_rtc da chuyen 59

sang dec roi 59

ghilenhLCD(0xc7); // ep con tro den vi tri thu 8 dong thu 2 59

hienthi_dulieu_rtc(docdulieu(1)); // hien thi phut 59

ghi_kytu(':'); 59

ghilenhLCD(0xc4); // ep con tro den vi tri thu 5 dong thu 2 59

hienthi_dulieu_rtc(docdulieu(2)); //hien thi gio 59

ghi_kytu(':'); 59

ghilenhLCD(0x80); //ep con tro den dau dong thu 1 59

ghi_chuoi(day[docdulieu(3)-1]); //hien thi thu 59

ghi_kytu(','); 59

ghilenhLCD(0x86); //ep con tro den vi tri thu 7 dong thu 1 59

hienthi_dulieu_rtc(docdulieu(4));//hien thi ngay 59

ghi_kytu('-'); 59

hienthi_dulieu_rtc(docdulieu(5));//hien thi thang 59

ghi_chuoi("-20"); 60

hienthi_dulieu_rtc(docdulieu(6)); //nam 60

} 60

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~// 60

// TAO THOI GIAN TRE DUNG TIMER 0 // 60

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~// 60

Trang 7

while(time ) 60

{ 60

TMOD=0x01;// che do 16 bit khong tu nap lai 60

TH0=0xFC;TL0=0x67; // 6*( 65536 - FC67+1)*(1/12000)=1000us =1ms 60

TR0=1; 60

while(TF0!=1){}; 60

TF0=0; 60

TR0=0;} 60

} 60

/ **********************************************************************************/ .60

//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~// 60

// CHUONG TRINH CON THUC HIEN VIEC CAI DAT NGAY GIO, THANG NAM // .60

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~// 60

unsigned char bcd_dec(unsigned char bcd)//chuyen tu bcd sang decima 60

{ return((bcd/16)*10+(bcd%16)); //vd bcd=66 -> dec =42 60

} 60

unsigned char dec_bcd(unsigned char dec)// chuyen tu decima sang bcd 61

{ 61

return((dec/10)*16+(dec%10)); 61

} 61

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~// 61

void caidat_rtc() 61

{ 61

unsigned char giay,phut,gio,thu,ngay,thang,nam; 61

giay = bcd_dec(docdulieu(0)&0x7f); // de bit 7 (bit clock halt) cua thanh ghi giay = 0 => ko bi treo) 61 phut = bcd_dec(docdulieu(1)); 61

gio = bcd_dec(docdulieu(2)& 0x3f); //che do 24 h 61

thu = bcd_dec(docdulieu(3)); 61

ngay = bcd_dec(docdulieu(4)); 61

thang = bcd_dec(docdulieu(5)); 61

nam = bcd_dec(docdulieu(6)); 61

Trang 8

// CAI DAT GIO 61

ghilenhLCD(1); 61

ghi_chuoi("CHINH"); 61

ghi_chuoi(" GIO :"); 61

ghilenhLCD(0x0e); 61

ghilenhLCD(0xc4); 61

ghiso(gio); 61

ghi_kytu(':'); 61

ghiso(phut); 61

ghi_kytu(':'); 61

ghiso(giay); 61

///////////////////////////////////////// 62

ghilenhLCD(0xC5); 62

while(menu==0); 62

caidatgio:while(tang!=0 && giam!=0 && menu!=0); 62

if(tang==0) 62

{ 62

gio++; 62

if(gio==24) gio=0; 62

ghilenhLCD(0xC4); 62

ghiso(gio); 62

ghilenhLCD(0xC5); 62

delay(300); 62

goto caidatgio; } 62

if(giam==0) 62

{ 62

gio ; 62

if(gio==0xff) gio=23; 62

ghilenhLCD(0xC4); 62

ghiso(gio); 62

ghilenhLCD(0xC5); 62

delay(300); 62

goto caidatgio;} 62

Trang 9

while(menu==0); 62

ghilenhLCD(0xC8); 62

caidatphut: while(tang!=0 && giam!=0 && menu!=0); 62

if(tang==0) 62

{ 63

phut++; 63

if(phut==60) phut=0; 63

ghilenhLCD(0xC7); 63

ghiso(phut); 63

ghilenhLCD(0x10); 63

delay(300); 63

goto caidatphut;} 63

if(giam==0) 63

{ 63

phut ; 63

if(phut==0xff) phut=59; 63

ghilenhLCD(0xC7); 63

ghiso(phut); 63

ghilenhLCD(0x10); 63

delay(300); 63

goto caidatphut; 63

} 63

////////////////////////////////////////////// 63

while(menu==0); 63

ghilenhLCD(0xCB); 63

caidatgiay: while(tang!=0 && giam!=0 && menu!=0); 63

if(tang==0) 63

{ 63

giay++; 63

if(giay==60) giay=0; 63

ghilenhLCD(0xCA); 63

ghiso(giay); 64

ghilenhLCD(0xCB); 64

Trang 10

goto caidatgiay; 64

} 64

if(giam==0) 64

{ 64

giay ; 64

if(giay==0xff) giay=59; 64

ghilenhLCD(0xCA); 64

ghiso(giay); 64

ghilenhLCD(0xCB); 64

delay(100); 64

goto caidatgiay; 64

} 64

//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~// 64

// CAI DAT NGAY - THANG - NAM 64

while(menu==0); 64

ghilenhLCD(1); 64

ghi_chuoi("CHINH NGAY :"); 64

ghilenhLCD(0xc4); 64

ghiso(ngay); 64

ghi_kytu('-'); 64

ghiso(thang); 64

ghi_chuoi("-20"); 64

ghiso(nam); 64

/////////////////////////////////////////////////// 65

ghilenhLCD(0xc5); 65

caidatngay:while (tang!=0 && giam!=0 && menu!=0); 65

if(tang==0) 65

{ 65

ngay++; 65

if(ngay==32) ngay=1; 65

ghilenhLCD(0xC4); 65

ghiso(ngay); 65

ghilenhLCD(0x10); 65

Trang 11

goto caidatngay; 65

} 65

if(giam==0) 65

{ 65

ngay ; 65

if(ngay==0) ngay=31; 65

ghilenhLCD(0xC4); 65

ghiso(ngay); 65

ghilenhLCD(0x10); 65

delay(300); 65

goto caidatngay; 65

} 65

//////////////////////////////////////////////////// 65

while(menu==0); 65

ghilenhLCD(0xC8); 65

caidatthang:while(tang!=0 && giam!=0 && menu!=0); 66

if(tang==0) 66

{ 66

thang++; 66

if(thang==13) thang=1; 66

ghilenhLCD(0xC7); 66

ghiso(thang); 66

ghilenhLCD(0x10); 66

delay(300); 66

goto caidatthang; 66

} 66

if(giam==0) 66

{ 66

thang ; 66

if(thang==0) thang=12; 66

ghilenhLCD(0xC7); 66

ghiso(thang); 66

ghilenhLCD(0x10); 66

Trang 12

goto caidatthang; 66

} 66

//////////////////////////////////////////////////////// 66

while(menu==0); 66

ghilenhLCD(0xCD); 66

caidatnam:while(tang!=0 && giam!=0 && menu!=0); 66

if(tang==0) 66

{ 66

nam++; 67

if(nam==100) nam=0; 67

ghilenhLCD(0xCC); 67

ghiso(nam); 67

ghilenhLCD(0xCD); 67

delay(300); 67

goto caidatnam; 67

} 67

if(giam==0) 67

{ 67

nam ; 67

if(nam==0xff) nam=99; 67

ghilenhLCD(0xCC); 67

ghiso(nam); 67

ghilenhLCD(0xCD); 67

delay(300); 67

goto caidatnam; 67

} 67

//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~// 67

// CAI DAT THU 67

while(menu==0); 67

ghilenhLCD(1); 67

ghi_chuoi("CHINH THU :"); 67

ghilenhLCD(0xc4); 67

ghi_chuoi(day[thu-1]); 67

Trang 13

caidatthu:while(tang!=0 && giam!=0 && menu!=0); 68

if(tang==0) 68

{ thu++; 68

if(thu==8) thu=1; 68

ghilenhLCD(0xC4); 68

ghi_chuoi(day[thu-1]); 68

delay(300); 68

goto caidatthu; 68

} 68

if(giam==0) 68

{ thu ; 68

if(thu==0) thu=7; 68

ghilenhLCD(0xC4); 68

ghi_chuoi(day[thu-1]); 68

delay(300); 68

goto caidatthu; 68

} 68

while(menu==0); // ket thuc cai dat 68

ghilenhLCD(1); //thi thuc hien xoa man hinh 68

ghilenhLCD(0x0C); //bat hien thi tat con tro 68

//CAP NHAT THOI GIAN VAO RTC 68

giatrikhoitao_rtc[0] = dec_bcd(giay); 68

giatrikhoitao_rtc[1] = dec_bcd(phut); 68

giatrikhoitao_rtc[2] = dec_bcd(gio); 68

giatrikhoitao_rtc[3] = dec_bcd(thu); 68

giatrikhoitao_rtc[4] = dec_bcd(ngay); 68

giatrikhoitao_rtc[5] = dec_bcd(thang); 69

giatrikhoitao_rtc[6] = dec_bcd(nam); 69

giatrikhoitao_rtc[7] = 0x00; 69

giatrikhoitao_rtc[8] = 'c'; //ghi vao vi tri dau tien cua ram 1 co (flag) 69

ghivaoDS1307(); 69

ghilenhLCD(1); 69

} 69

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~// 69

Trang 14

// CHUONG TRINH CON KIEM TRA DU LIEU TU DS1307 KHI KHOI DONG // 69

void kiemtra_rtc(void) 69

{ 69

unsigned char temp; 69

start_rtc(); 69

gui_rtc(0xd0); 69

gui_rtc(0x08);//doc du lieu tu thanh ghi co dia chi 0x08 (vi tri ram dau tien) 69

start_rtc(); 69

gui_rtc(0xd1); 69

temp=nhan_rtc();//con tro dang tro toi dia chi 0x08 chua du lieu flag (co?`) xem da cai dat hay chua 69

stop_rtc(); 69

if(temp!='c') // neu gia tri thu 8 nhan duoc khac voi co 'c' cap nhat khi cai dat gio 69

{ // thi tuc la lan dau duoc khoi tao, ta se chon gia tri ghi vao ban dau theo y minh 69

giatrikhoitao_rtc[0]=0x50; 69

giatrikhoitao_rtc[1]=0x59; 69

giatrikhoitao_rtc[2]=0x09; 69

giatrikhoitao_rtc[3]=0x04; 69

giatrikhoitao_rtc[4]=0x04; 70

giatrikhoitao_rtc[5]=0x05; 70

giatrikhoitao_rtc[6]=0x11; 70

giatrikhoitao_rtc[7]=0x00; 70

giatrikhoitao_rtc[8]='c'; 70

ghivaoDS1307(); 70

} 70

} 70

void doccacdulieu(void){ int i; 70

for(i=0;i<=6;i++){docdulieu(i);} } 70

CHUONG TRINH CHINH // 70

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~// 70

bit co=0; 70

void caidatco() interrupt 0 //ngat ngoai 0 thi co =1 70

{ 70

co=1; 70

} 70

Trang 15

void main() 70

{ 70

khoitaoLCD(); 70

ghilenhLCD(1); 70

ghilenhLCD(1); 70

kiemtra_rtc(); 70

IE=0x81;// EA_ET2.ES.ET1.EX1.ET0.EX0 => cho phep ngat ngoai 0 ta co 1(0)00 0001 = 81 70

doccacdulieu(); 70

while(1) 71

{ doccacdulieu(); 71

hienthi_rtc(); 71

if(co==1) //co =1 ngat 0 xay ra => cai dat gio 71

{ 71

caidat_rtc(); 71

co=0; 71

} 71

} 71

} 71

3.3.Kết quả mô phỏng 71

KẾT LUẬN 72

DANH MỤC TÀI LIỆU THAM KHẢO 73

Trang 16

Hình 2.14 Mạch reset tác động bằng tay và tự động reset khi khởi động máy 20

Trang 18

LỜI NÓI ĐẦU

Sự ra đời của các bộ vi xử lí nói chung, các bộ vi điều khiển nói riêng đã tạo ra một bước ngoặt lớn trong việc thiết kế các hệ thống xử lí thông tin, đo lường điều khiển và truyền thông Kết quả là đã tạo ra được những sản phẩm như máy ảnh số, máy chơi nhạc MP3, đầu đĩa DVD, các bộ biến tần,PLC…ngày càng rẻ hơn, nhỏ gọn hơn, thông minh hơn và tiện dụng hơn.

Hơn nữa, 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, chúng em đã chọn

đề tài " Mạch hiển thị thời gian, ngày, tháng, năm, giờ phút giây bằng LCD, sử dụng vi điều khiển họ 8051 và IC thời gian thực DS1307 Có chỉnh thời gian, ngày tháng"

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 vi điều khiển 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.

Hà Nội, ngày 22 tháng 12 năm 2012

Nhóm sinh viên

Trang 19

CHƯƠNG 1 PHÂN TÍCH YÊU CẦU

1.1 Khảo sát và phân tích bài toán

Đồng hồ là một công cụ để đo đạc những mốc thời gian nhỏ hơn một ngày; đối lập với lịch, là một công cụ để đo thời gian dài hơn một ngày Những loại đồng hồ dùng trong kĩ thuật thường có độ chính xác rất cao và cấu tạo rất phức tạp Trong khi đó, người

ta có thể tạo ra những loại đồng hồ nhỏ để dễ dàng mang theo bên mình (gọi là đồng hồ đeo tay) Những loại đồng hồ hiện đại thường thể hiện ba thông tin: giờ, phút, giây

1.1.1 Cách hiển thị thời gian

 Đồng hồ cơ:

Đồng hồ cơ thể hiện thời gian sử dụng các góc Mặt đồng hồ có những con số từ 1 đến

12 và sử dụng kim để chỉ giờ và cả phút Từ một số đến một con số kế cận là 5 phút (đối với kim phút), 1 giờ (đối với kim giờ) hay 5 giây (đối với kim giây)

Một loại đồng hồ cơ khác được sử dụng là đồng hồ mặt trời Nó hoạt động nhờ theo dọi thường xuyên ánh sáng Mặt Trời, và người ta theo dõi bằng cách nhìn bóng của chúng

 Đồng hồ điện tử:

Đồng hồ điện tử sử dụng hệ thống số để thể hiện thời gian Thông thường có 2 cách thể hiện:

- 24 giờ để đếm giờ từ 00-23h

- 12 giờ với kí hiệu AM / PM (chủ yếu ở Mĩ).

Những đồng hồ điện tử sử dụng màn hình LCD hay LED, ống catode để thể hiện hình ảnh những con số Khi những đồng hồ điện tử thay pin, chúng thường "quên" dữ liệu về thời gian trước đó

 Đồng hồ âm thanh:

Để tiện lợi hơn, có một số đồng hồ sử dụng âm thanh để bào hiệu giờ Âm thanh có thể được sử dụng như ngôn ngữ tự nhiên ("Bây giờ là mười sáu giờ ba mươi phút) hay một mã (số tiếng chuông báo hiệu số giờ)

Trang 20

 Đồng hồ chữ:

Loại đồng hồ này hiện thời gian ở dạng chữ Nếu như ở đồng hồ điện tử chúng ta đọc được những con số 12:35 thì ở đồng hồ chữ, chúng ta có thể đọc được "Mười hai giờ ba mươi lăm phút" Một số loại đồng hồ khác sử dụng cơ chế gần đúng khiến người sử dụng cảm thấy dễ chịu hơn khi sử dụng đồng hồ (ví dụ "Khoảng mười hai giờ rưỡi")

1.1.2 Mục đích

Đồng hồ treo tường được dùng trong nhà và văn phòng, đồng hồ đeo tay được mang trên tay, và những loại đồng hồ lớn được đặt ở những nơi công cộng (nhà thờ hay bến xe) Hầu hết những máy tính và điện thoại di động đều có góc dưới màn hình hiển thị giờ Tuy nhiên, đồng hồ không phải lúc nào cũng được sử dụng để hiển thị thời gian Nó còn có thể sử dụng để điều khiển một vật theo thời gian Ví dụ như đồng hồ chuông có thể được dùng làm chuông báo tiết học Nó có thể được gọi chính xác hơn là một hệ thống đếm giờ

Máy tính sử dụng những tín hiệu đồng hồ để đồng bộ quá trình xử lý (mặc dầu có một

số nghiên cứu về bộ xử lí không đồng bộ) Máy tính lưu trữ thời gian để báo hiệu hay chỉ

là để hiển thị thời gian Bên trong máy tính có một đồng hồ được nuôi bằng pin Máy tính vẫn có thể hoạt động ngay cả khi đồng hồ trong máy bị chết nhưng khi khởi động máy lại, đồng hồ của máy tính sẽ được khởi động lại

Thời gian là một khái niệm cơ bản trong môn vật lý Do đó, chế tạo dụng cụ đo thời gian chính xác có ý nghĩa quan trọng trong các thí nghiệm

Hình 1.1 Đồng hồ điện tử

Trang 21

Hình 1.2 Đồng hồ điện tử trên một lò vi sóng

1.1.3 Các công nghệ ứng dụng trong thiết kế thời gian thực

IC thời gian thực, vi điều khiển, cách thức hiển thị thời gian thực

 IC thời gian thực:

Hiện nay trên thị trường có 2 loại IC thời gian thực phồ biến là DS1307 và DS12887 Các IC này đều có chức năng chạy thời gian thực và lưu giờ khi mất điện, với DS1307 cần có thêm nguồn nuôi là một pin cmos 3V, với DS12887 có sẵn pin tích hợp ở bên trong Các IC này thực hiện giao tiếp với vi điều khiển để hiện thị thời gian và cài đặt giờ…

Trên cơ sở đó thì chúng ta có thể sử dụng cả 2 loại IC này, đề tài của nhóm em được giao là dùng DS1307.

 Vi điều khiển:

Có rất nhiều loại vi điều khiển khác nhau có thể sử dụng trong mạch đồng hồ này như

vi điều khiển pic, avr, 8051… Các loại vi điều khiển pic hay avr có nhiều ưu điểm hơn so với 8051 như hỗ trợ kết nối ngoại vi tốt hơn, tốc độ xử lý nhanh hơn, lập trình đơn giản hơn Nhưng giá thành thì lại cao hơn nhiều so với 8051 mà trong mạch này chúng em sử dụng AT89C51.

 Hiển thị:

Chúng ta có 2 cách hiển thị đó là: sử dụng LED 7 đoạn và sử dụng LCD

LED 7 đoạn:

- Ưu điểm: hiển thị rõ ràng và thu hút được sự chú ý vì có thể nhìn ở xa

- Nhược điểm: mạch điện phức tạp cần thêm các IC chốt

LCD 16x2:

Trang 22

- Ưu điểm: hiển thị dễ dàng, có thể linh động hơn trong việc hiển thị thời gian, kết nối đơn giản mạch điện không phức tạp…

- Nhược điểm: không thu hút được sự chú ý bằng LED 7 đoạn, giá thành cao…

 Hệ thống lưu được thời gian khi mất nguồn cấp (có nguồn dự trữ)

 Nguồn nuôi (pin CMOS) cho IC thời gian thực đảm bảo

 Làm việc trong điều kiện môi trường bình thường

Trang 23

Sơ đồ tổng quát các khối của mạch:

Hình 2.1 Sơ đồ khối hệ thống

 Khối Nguồn: cung cấp nguồn cho hệ thống

 Khối Thời gian thực: lưu trữ thời gian thực, thời gian cài đặt

 Khối Xử lý: Dùng vi điều khiển AT89C51 để lấy dữ liệu từ khối thời gian thực, lưu trữ và đưa ra khối hiển thị và nhận tín hiệu từ khối giao tiếp

 Khối Hiển thị: lấy tín hiệu ra từ vi điều khiển, thực hiện giao tiếp với vi điều khiển

để hiển thị giờ và ngày

 Khối giao tiếp: là khối bàn phím, thực hiện cài đặt giờ để vi điều khiển lưu dữ liệu vào trong khối thời gian thực

Trang 24

Chương trình điều khiển chính

Module xử lý thời gian thực Module xử lý chương trình

Đọc

Ghi

Hiển thị

2.2 Sơ đồ Call graph

Hình 2.2 Sơ đồ Call graph của mạch

2.3 Sơ đồ đặc tả

Hình 2.3 Sơ đồ đặc tả của mạch

Trang 25

Có ngắt ngoài 0S

Cài đặt + hiển thị thời gian cài đặt trên LCD

2.4 Sơ đồ thuật toán

Hình 2.4 Sơ đồ thuật toán khối điều khiển

Trang 27

Kiểm tra tăng

Kiểm tra giảm

Đ

S

Kiểm tra tăng

Kiểm tra giảm

Đ

S

Kiểm tra tăng

Kiểm tra giảm

Đ

S

Kiểm tra tăng

Kiểm tra giảm

Đ

S

Kiểm tra tăng

Kiểm tra giảm

Đ

S

Kiểm tra tăng

Kiểm tra giảm

Đ

S

Kiểm tra tăng

Kiểm tra giảm

(2)

Đ Đ

Đ

Thay đổi giờ Thay đổi phút

Thay đổi giây Thay đổi ngày

Thay đổi tháng Thay đổi năm

Trang 28

2.5 Các module trong hệ thống

2.5.1 Khối nguồn

Đây là module dùng để tạo ra nguồn điện áp chuẩn +5V Sử dụng IC7805

Đầu vào là điện áp xoay chiều sau khi được biến đổi qua máy biến áp, đưa vào bộ Diode cầu để cho ra dòng điện một chiều (lúc này điện áp nằm trong khoảng từ 7->10V) Sau khi đi qua IC ổn áp 7805 sẽ tạo ra nguồn điện áp chuẩn +5V cung cấp cho mạch

Hình 2.6 Sơ đồ khối nguồn

2.5.2 Khối điều khiển trung tâm

Khối điều khiển trung tâm sử dụng vi điều khiển AT89C51, qua chương trình đã lập trình được nạp cho chip, vi điều khiển sẽ điều khiển việc đọc, ghi thời gian thực, hiển thị thời gian lên khối hiển thị là LCD

Trang 29

Bộ dao động thạch anh có tác dụng tạo xung nhịp với tần số 12MHz cho VĐK hoạt động Hai đầu này được nối vào 2chân XTAL1 và XTAL2 của VĐK

Bộ RESET có tác dụng đưa vi điều khiển về trạng thái ban đầu Khi nút Reset được

ấn điện áp +5V từ nguồn được nối vào chân Reset của vi điều khiển được chạy thẳng xuống đất lúc này điện áp tại chân vi điều khiển thay đổi đột ngột về 0, VĐK nhận biết được sự thay đổi này và khởi động lại trạng thái ban đầu cho hệ thống

2.5.3 Khối tạo thời gian thực

DS1307 là một IC thời gian thực với nguồn cung cấp nhỏ, dùng để cập nhật thời gian

và ngày tháng với 56 bytes SRAM Địa chỉ và dữ liệu được truyền nối tiếp qua 2 đường bus 2 chiều Nó cung cấp thông tin về giờ, phút, giây, thứ, ngày, tháng, năm Ngày cuối tháng sẽ tự động được điều chỉnh với các tháng nhỏ hơn 31 ngày, bao gồm cả việc tự động nhảy năm Đồng hồ có thể hoạt động ở dạng 24h hoặc 12h với chỉ thị AM/PM

Để không phải điều chình lại thời gian vào những lúc bị mất nguồn, có thể nối thêm 1pin 3V vào chân số 3 của IC DS1307 (sao cho chân (+) của pin nối vào IC và chân (–) của pin nối xuống đất) Hai chân 1 và 2 của DS1307 được nối vào bộ dao động thạch anh

có tần số 32, 768KHz để tạo dao động cho IC hoạt động

Hình 2.8 Khối tạo thời gian thực.

2.5.4 Khối hiển thị

Sử dụng LCD 16x2, hiển thị thời gian linh hoạt, hiển thị được nhiều ký tự, giúp cho việc quan sát thời gian khi đồng hồ chạy bình thường cũng như lúc cài đặt trực quan và linh hoạt hơn

Trang 30

Hình 2.9 Khối hiển thị

2.5.5 Khối giao tiếp phím bấm

Gồm 3 nút ấn, hoạt động tương tự nút Reset Khi ấn nút thì các chân vi điều khiển được nối với phím bấm đưa điện áp xuống đất lúc này điện áp tại các chân vi điều khiển bằng 0 làm cho vi điều khiển nhận biết được sự thay đổi này và thực hiện lệnh cần điều khiển Nút thứ ba có tác dụng thiết đặt chế độ cho vi điều khiển làm việc

Hình 2.10 Các nút điều khiển mạch.

2.6 Giới thiệu một số linh kiện

2.6.1 Vi điều khiển AT89C51

Đặc điểm và chức năng hoạt động của các IC họ MSC-51 hoàn toàn tương tự như nhau Ở đây giới thiệu IC AT89C51 là một họ IC vi điều khiển do hãng Intel của Mỹ sản xuất Chúng có các đặc điểm chung như sau:

Trang 31

- 4KBytes Flash rom

- 128 Bytes Ram

- 4 port 8 bit

- 2 bộ định thời 16 bit

- Có port nối tiếp

- Có thể mở rộng bộ nhớ chương trình ngoài 64 K Byte

- Bộ xử lý bit

AT89C51 là một bộ vi xử lý 8 bit, loại CMOS, có tốc độ cao và công suất thấp với bộ nhớ Flash có thể lập trình được Nó được sản xuất với công nghệ bộ nhớ không bay hơi mật độ cao của hãng Atmel, và tương thích với họ MCS-51TM về chân ra và tập lệnh AT89C51 có các đặc trưng cơ bản như sau: 4 Kbytes Flash, 128 byte RAM, 32 đường xuất nhập, hai bộ định thời/đếm 16-bit, một cấu trúc ngắt hai mức ưu tiên và 5 nguyên

nhân ngắt, một port nối tiếp song công, mạch dao động và tạo xung clock trên chip

AT89C51 được thiết kế với logic tĩnh cho hoạt động có tần số giảm xuống 0 và hỗ trợ hai chế độ tiết kiệm năng lượng được lựa chọn bằng phần mềm Chế độ nghỉ dừng CPU

trong khi vẫn cho phép RAM, các bộ định thời/đếm, port nối tiếp và hệ thống ngắt tiếp

tục hoạt động Chế độ nguồn giảm duy trì nội dung của RAM nhưng không cho mạch dao

động cung cấp xung clock nhằm vô hiệu hoá các hoạt động khác của chip cho đến khi có reset cứng tiếp theo

Hình 2.11 Hình ảnh AT89C51

Trang 32

Hình 2.12 Sơ đồ khối của AT89C51 2.6.1.1 Mô tả các chân

AT89C51 có tất cả 40 chân với các chức năng như sau:

- Vcc (40): Chân cung cấp điện (5V)

- GND (20): Chân nối đất (0V)

- Port 0 (32-39):

Port 0 là port xuất nhập 8-bit hai chiều Nó còn được cấu hình làm bus địa chỉ (byte thấp) và bus dữ liệu đa hợp trong khi truy xuất bộ nhớ dữ liệu ngoài và bộ nhớ chương trình ngoài Nó cũng nhận các byte mã trong khi lập trình cho Flash và xuất các byte mã

Trang 33

trong khi kiểm tra chương trình (Các điện trở kéo lên bên ngoài được cần đến trong khi kiểm tra chương trình)

Hình 2.13 Sơ đồ các chân AT89C51

- Port 1 (1-8):

Port 1 là port xuất nhập 8-bit hai chiều Port 1 cũng nhận byte địa chỉ thấp trong thời

gian lập trình cho Flash

- Port 2 (21-28):

Port 2 là port xuất nhập 8-bit hai chiều Port 2 tạo ra các byte cao của bus địa chỉ

trong thời gian tìm nạp lệnh từ bộ nhớ chương trình ngoài và trong thời gian truy xuất bộ nhớ dữ liệu ngoài sử dụng các địa chỉ 16-bit Trong thời gian truy xuất bộ nhớ dữ liệu

ngoài sử dụng các địa chỉ 8-bit, Port 2 phát các nội dung của thanh ghi chức năng đặc biệt P2 Port 2 cũng nhận các bit địa chỉ cao và vài tín hiệu điều khiển trong thời gian lập

trình cho Flash và kiểm tra chương trình

- Port 3 (10-17):

Port 3 là Port xuất nhập 8-bit hai chiều Port 3 cũng còn làm các chức năng khác của

AT89C51 Các chức năng này được liệt kê như sau:

Trang 34

3 0 RxD Ngõ vào Port nối tiếp

3.1 TxD Ngõ ra Port nối tiếp

3.4 T0 Ngõ vào bên ngoài của bộ định thời 1

3.5 T1 Ngõ vào bên ngoài của bộ định thời 0

3.6 WR Điều khiển ghi bộ nhớ dữ liệu ngoài

3.7 RD Điều khiển đọc bộ nhớ dữ liệu ngoài

Port 3 cũng nhận một vài tín hiệu điều khiển cho việc lập trình Flash và kiểm tra

Trang 35

ALE là một xung ngõ ra để chốt byte thấp của địa chỉ trong khi truy xuất bộ nhớ

ngoài Chân này cũng làm ngõ vào xung lập trình ( PROG ) trong thời gian lập trình cho

Flash Khi hoạt động bình thường, xung ngõ ra ALE luôn có tần số không đổi là 1/6 tần

số của mạch dao động, có thể được dùng cho các mụch đích định thời từ bên ngoài và tạo

xung clock Tuy nhiên, lưu ý là một xung ALE sẽ bị bỏ qua trong mỗi một chu kỳ truy

xuất bộ nhớ dữ liệu ngoài Khi cần, hoạt động ALE có thể được vô hiệu hoá bằng cách

set bit 0 của thanh ghi chức năng đặc biệt có địa chỉ 8Eh Khi bit này được set, ALE chỉ

tích cực trong thời gan thực hiện lệnh MOVX hoặc MOVC Ngược lại, chân này sẽ được

kéo lên cao Việc set bit không cho phép hoạt động chốt byte thấp của địa chỉ sẽ không có

tác dụng nếu bộ vi điều khiển đang ở chế độ thực thi chương trình ngoài

- PSEN (29):

PSEN (Program Store Enable) là xung điều khiển truy xuất bộ nhớ chương trình

ngoài Khi AT89C52 đang thực thi chương trình từ bộ nhớ chương trình ngoài, PSEN

được kích hoạt hai lần mỗi chu kỳ máy, nhưng hai hoạt động PSEN sẽ bị bỏ qua mỗi

khi truy cập bộ nhớ dữ liệu ngoài

- EA /Vpp (31):

EA (External Access Enable) là chân cho phép truy xuất bộ nhớ chương trình ngoài

(bắt đầu từ địa chỉ từ 0000H đến FFFFH) EA = 0 cho phép truy xuất bộ nhớ chương

trình ngoài, ngược lại EA =1 sẽ thực thi chương trình bên trong chip Tuy nhiên, lưu ý

rằng nếu bit khoá 1 (lock-bit 1) được lập trình, EA sẽ được chốt bên trong khi reset.

Chân này cũng nhận điện áp cho phép lập trình Vpp=12V khi lập trình Flash (khi đó điện

áp lập trình 12V được chọn)

- XTAL1 và XTAL2:

XTAL1 và XTAL2 là hai ngõ vào và ra của một bộ khuếch đại đảo của mạch dao

Trang 36

động, được cấu hình để dùng như một bộ dao động trên chip

Hình 2.15 Mạch tạo xung clock

- Không có yêu cầu nào về chu kỳ nhiệm vụ của tín hiệu xung clock bên ngoài do tín hiệu này phải qua một flip-flop chia hai trước khi đến mạch tạo xung clock bên

trong, tuy nhiên các chi tiết kỹ thuật về thời gian mức thấp và mức cao, điện áp cực tiểu và cực đại cần phải được xem xét

2.6.1.2 Các chế độ đặc biệt

 Chế độ nghỉ

Trong chế độ nghỉ, CPU tự đi vào trạng thái ngủ trong khi tất cả các ngoại vi bên

trong chip vẫn tích cực Chế độ này được điều khiển bởi phần mềm Nội dung của RAM trên chip và của tất cả các thanh ghi chức năng đặc biệt vẫn không đổi trong khi thời gian

tồn tại chế độ này Chế độ nghỉ có thể được kết thúc bởi một ngắt bất kỳ nào được phép

hoặc bằng cách reset cứng

Ta cần lưu ý rằng khi chế độ nghỉ được kết thúc bởi một reset cứng, chip vi điều

khiển sẽ tiếp tục bình thường việc thực thi chương trình từ nơi chương trình bị tạm dừng,

trong vòng 2 chu kỳ máy trước khi giải thuật reset mềm nắm quyền điều khiển

Ở chế độ nghỉ, phần cứng trên chip cẫm truy xuất RAM nội nhưng cho phép truy xuất các chân của các port Để tránh khả năng có một thao tác ghi không mong muốn đến một chân port khi chế độ nghỉ kết thúc bằng reset, lệnh tiếp theo yêu cầu chế độ nghỉ không nên là lệnh ghi đến chân port hoặc đến bộ nhớ ngoài

Trang 37

 Chế độ nguồn giảm

Trong chế độ này, mạch dao động ngừng hoạt động và lệnh yêu cầu chế độ nguồn

giảm là lệnh sau cùng được thực thi RAM trên chip và các thanh ghi chức năng đặc biệt

vẫn duy trì các giá trị của chúng cho đến khi chế độ nguồn giảm kết thúc Chỉ có một

cách ra khỏi chế độ nguồn giảm, đó là reset cứng

Việc reset sẽ xác định lại các thanh ghi chức năng đặc biệt nhưng không làm thay đổi RAM trên chip Việc reset không nên xảy ra (chân reset ở mức tích cực) trước khi Vcc

được khôi phục lại mức điện áp bình thường và phải kéo dài trạng thái tích cực của chân

reset đủ lâu để cho phép mạch dao động hoạt động trở lại và đạt trạng thái ổn định

Trạng thái của các chân trong thời gian tồn tại chế độ nghỉ va chế độ nguồn giảm được cho trong bảng sau:

Chế

độ

Bộ nhớ chương trình

2.6.1.3 Các bit khoá bộ nhớ chương trình

Trên chip có ba bit khoá, các bit này có thể không cho phép lập trình hoặc cho phép

lập trình, các bit này cho ta thêm một số đặc trưng nữa của AT89C51 như sau Khi bit

khoá 1 LB1 được lập trình, mức logic ở chân EA được lấy mẫu và được chốt trong khi

Ngày đăng: 04/04/2019, 13:21

TỪ KHÓA LIÊN QUAN

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

TÀI LIỆU LIÊN QUAN

w