1. Trang chủ
  2. » Kỹ Thuật - Công Nghệ

MẠCH ĐỒNG hồ số HIỂN THỊ THỜI GIAN THỰC TRÊN LCD DÙNG PIC16F877A (có code và sơ đồ mạch)

52 2,6K 22

Đ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 52
Dung lượng 1,69 MB

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

Nội dung

MẠCH ĐỒNG hồ số HIỂN THỊ THỜI GIAN THỰC TRÊN LCD DÙNG PIC16F877A (có code và sơ đồ mạch) MẠCH ĐỒNG hồ số HIỂN THỊ THỜI GIAN THỰC TRÊN LCD DÙNG PIC16F877A (có code và sơ đồ mạch) MẠCH ĐỒNG hồ số HIỂN THỊ THỜI GIAN THỰC TRÊN LCD DÙNG PIC16F877A (có code và sơ đồ mạch) MẠCH ĐỒNG hồ số HIỂN THỊ THỜI GIAN THỰC TRÊN LCD DÙNG PIC16F877A (có code và sơ đồ mạch)

Trang 1

MẠCH ĐỒNG HỒ SỐ HIỂN THỊ THỜI GIAN THỰC TRÊN LCD DÙNG PIC

16F877A

Trang 2

MỤC LỤC

THƯC TRÊN LCD DÙNG PIC 16F877A 1

1.1 Giới thiệu 1

1.2 Mô tả chức năng hoạt động của mạch 1

1.3 Nguyên lý chung 1

1.3.1 Giao tiếp I2C 1

1.3.1.1 Giới thiệu 1

1.3.1.2 Đặc điểm giao tiếp I2C 2

1.3.1.3 Các chế độ truyền dữ liệu của giao tiếp I2C 2

1.4 Giới thiệu linh kiện 4

1.4.1 PIC 16F877A 4

1.4.1.1 Giới thiệu chung 4

1.4.1.2 Sơ đồ chân và chức năng từng chân PIC 16F877A 6

1.4.2 DS1307 10

1.4.2.1 Giới thiệu về DS1307 10

1.4.2.2 Bộ nhớ DS1307 11

1.4.2.3 Các thanh ghi của Ds1307 11

1.4.3 LCD 12

1.4.4 Tụ điện 13

1.4.5 IC ổn áp 7805 14

1.4.6 Pin CMOS 3V 14

1.4.7 LED 14

1.4.8 Điện trở 15

Trang 3

1.4.9 Thạch anh 15

CHƯƠNG 2 THIẾT KẾ MẠCH 16

2.1 Sơ đồ hệ thống 16

2.2 Sơ đồ nguyên lý 16

2.2.1 Khối nguồn 16

2.2.2 Khối điều khiển và hiển thị 17

2.3 Mạch Layout (PCB) 17

2.3.1 Layout mạch nguồn 17

2.3.2 Layout mạch chính 18

2.4 Mạch thực tế 18

CHƯƠNG 3 GIẢI THUẬT 18

3.1 Lưu đồ giải thuật 18

3.1.1 Cài đặt giờ 19

3.1.2 Cài đặt phút 20

3.1.3 Cài đặt giây 21

3.2 Code chương trình 21

CHƯƠNG 4 TỔNG KẾT 45

4.1 Quá trình thực hiện 45

4.1.1 Quá trình thiết kế 45

4.1.2 Quá trình thi công 45

4.2 Ưu điểm, nhược điểm 45

4.2.1 Ưu điểm 45

4.2.2 Nhược điểm 45

Trang 4

4.3 Ý tưởng phát triển đề tài 45

CHƯƠNG 5 TÀI LIỆU THAM KHẢO 46

DANH MỤC HÌNH ẢNH Hình 1-1: BusI2C và các thiết bị ngoại vi 1

Hình 1-2: Kết nối thiết bị vào bus I2C 2

Hình 1-3: Quá trình Start / Stop trong I2C 3

Hình 1-4: Quá trình truyền dữ liệu I2C 3

Hình 1-5: Truyền từ Master sang Slave (Ghi dữ liệu) 3

Hình 1-6: Truyền từ Slave sang Master ( Đọc dữ liệu) 4

Hình 1-7: Hình ảnh PIC 16F877A 5

Hình 1-8: Sơ đồ chân PIC 16F877A 6

Hình 1-9: Sơ đồ chân DS1307 10

Hình 1-10: Tổ chức bộ nhớ của DS1307 11

Hình 1-11: Tổ chức thanh ghi của DS1307 11

Hình 1-12: Hình ảnh LCD thực tế 12

Hình 1-13: Sơ đồ chân LCD 12

Hình 1-14: Bộ nhớ CGROM của LCD 13

Hình 1-15: Hình ảnh các loại tụ 13

Hình 1-16: Sơ đồ chân Ic ổn áp 7805 14

Hình 1-17: Pin COMS 3V 14

Hình 1-18: LED 14

Hình 1-19: Điện trở 15

Hình 1-20: Thạch anh 15

Hình 2-1: Sơ đồ hệ thống 16

Hình 2-2: Sơ đồ nguyên lý khối nguồn 16

Hình 2-3: Sơ đồ nguyên lý khối vi điều khiển và hiển thị 17

Hình 2-4: Layout mạch nguồn 17

Trang 5

Hình 2-5: Layout mạch chính 18

Hình 2-6: Mạch thực tế 18

Hình 3-1: Nạp dữ liệu thời gian 19

Hình 3-2: Cài đặt giờ 20

Hình 3-3: Cài đặt phút 21

Hình 3-4: Cài đặt giây 22

Trang 6

CHƯƠNG 1 TỔNG QUAN VỀ MẠCH ĐỒNG HỒ SỐ HIỂN THỊ

THỜI GIAN THƯC TRÊN LCD DÙNG PIC 16F877A

1.1 Giới thiệu

Mạch đồng hồ số hiển thị thời gian thực trên LCD dùng PIC 16F877A cho hiển thịchính xác thời gian thực do sử dụng IC DS1307 Ngoài ra ta có thể tùy chỉnh thờigian theo ý muốn bằng các nút nhấn cài đặt, tăng, giảm và ok

1.2 Mô tả chức năng hoạt động của mạch

Thời gian sẽ tự động lưu vào bộ nhớ ta chỉ cài đặt thời gian một lần

Để chỉnh giờ ta nhấn nút cài đặt một lần và nhấn nút tăng hoặc giảm để chỉnh giờtheo ý muốn Sau đó nhấn ok để hoàn tất phần chỉnh giờ Tương tự vậy ta thựchiện cho phần chỉnh phút và chỉnh giây Nhấn nút cài đặt thêm lần nữa để chỉnhngày, tháng, năm tương tự như chỉnh giờ phút giây Nhấn nút cài đặt thêm lần nữa

Trang 7

1.3.1.2 Đặc điểm giao tiếp I2C

Một giao tiếp I2C gồm có 2 dây : SDA( Serial Data) vàSCL( Serial Clock) SDA là đường truyền dữ liệu hai hướng,còn SCL là đường xung đồng hồ và chỉ theo 1 hướng

Hình 1- 2:Kết nối thiết bị vào bus I2CTrong một giao tiếp I2C thì hoạt động truyền hay nhận còntùy thuộc vào thiết bị đó là Master( thiết bị chủ ) hay Slave(thiết bị tớ) Trong đó quyền điều khiển thuộc về thiết bị chủ

Thiết bị chủ có vai trò tạo xung clock cho toàn hệ thống vàquản lí địa chỉ của thiết bị tớ

Dựa vào hình có thể thấy dữ liệu có thể truyền từ thiết bị chủsang thiết bị tớ hay ngược lại, nhưng xung clock chỉ truyềntheo 1 hướng từ thiết bị chủ sang thiết bị tớ

1.3.1.3 Các chế độ truyền dữ liệu của giao tiếp I2C

+ Standard mode : Chế độ chuẩn

+ Fast mode : Chế độ nhanh

+ High-Speed mode : Chế độ cao tốc

Hình 1-2: Kết nối thiết bị vào bus I2C

Trang 8

- Quá trình truyền dữ liệu trong giao tiếp I2C: bao gồm haiquá trình là đọc và ghi dữ liệu

- Dấu hiệu Start và Stop là những điều kiện bắt buộc khimột Master muốn thiết lập giao tiếp với 1 Slave

- Dấu hiệu Start : SDA được đưa từ mức 1 sang mức 0trong khi SCL ở mức 1

- Dấu hiệu Stop : SDA được đưa từ mức 0 sang mức 1trong khi SCL ở mức 1

C

3

Hình 1-3: Quá trình Start / Stop trong I2C

Hình 1-4: Quá trình truyền dữ liệu I2C Hình 1-5: Truyền từ Master sang Slave (Ghi dữ liệu)

Trang 9

1.4 Giới thiệu linh kiện

1.4.1 PIC 16F877A

1.4.1.1 Giới thiệu chung

PIC16F877A có các chân với sự phân chia cấu trúc như sau :

+ Có 5 port xuất/nhập + Có 8 kênh chuyển đổi A/D 10-bit + Có 2 bộ PWM

+ Có 3 bộ định thời: Timer0, timer1 và timer2 + Có giao tiếp truyền nối tiếp: chuẩn RS 232, I2C… + Có giao tiếp LCD

Hình 1-7: Hình ảnh PIC 16F877A

Trang 10

1.4.1.2 Sơ đồ chân và chức năng từng chân PIC 16F877A

Hình 1-8: Sơ đồ chân PIC 16F877A

Trang 11

 AN1: ngõ vào tương tự kênh 1

 Chân RA2/AN2/VREF-/CVREF:

 RA2: xuất / nhập số

 AN2: ngõ vào tương tự của kênh thứ 2

 VREF-: ngõ vào điện áp chuẩn (thấp) của bộ ADC

 CVREF: điện áp tham chiếu VREF ngõ ra bộ so sánh

 Chân RA3/AN3/VREF+:

 RA3: xuất / nhập số

 AN3: ngõ vào tương tự kênh 3

 VREE+: ngõ vào điện áp chuẩn (cao) của bộ A/D

 Chân RA4/TOCKI/C1OUT:

 RA4: xuất / nhập số - mở khi được cấu tạo là ngõ ra

 TOCKI: ngõ vào xung clock từ bên ngoài cho Timer0

 C1OUT: ngõ ra bộ so sánh 1

 Chân RA5/AN4/ SS /C2OUT:

 RA5: xuất / nhập số

 AN4: ngõ vào tương tự kênh 4

 SS: ngõ vào chọn lựa SPI phụ

 C2OUT: ngõ ra bộ so sánh 2

 Chân RE0/ RD /AN5:

 RE0: xuất / nhập số

 RD: điều khiển đọc port song song

 AN5: ngõ vào tương tự kênh5

 Chân RE1/ WR /AN6:

 RE1: xuất / nhập số

 WR: điều khiển ghi port song song

 AN6: ngõ vào tương tự kênh6

 Chân RE2/ CS /AN7:

Trang 12

 RE2: xuất / nhập số

 CS: Chip chọn lựa điều khiển port song song

 AN7: ngõ vào tương tự kênh 7

 Chân OSC1/CLKI:

 OSC1: ngõ vào dao động thạch anh hoặc ngõ vào nguồn xung

ở bên ngoài Ngõ vào có mạch Schmitt Trigger nếu sử dụngdao động RC

 CLKI: ngõ vào nguồn xung bên ngoài

 T1OSO: ngõ ra của bộ dao động Timer1

 T1CKI: ngõ vào xung Clock từ bên ngoài Timer1

 Chân RC1/T1OSI/CCP2:

 RC1: xuất / nhập số

 T1OSI: ngõ vào của bộ dao động Timer1

 CCP2: ngõ vào Capture2, ngõ ra Compare2, ngõ ra PWM2

Trang 13

 SCL: ngõ vào xung clock nối tiếp đồng bộ/ngõ ra của chế độ

 SDI: dữ liệu vào SPI

 SDA: xuất nhập dữ liệu I2C

 Chân RC5/SDO:

 RC5: xuất / nhập số

 SDO: dữ liệu ra SPI

Trang 14

ra phụ và 56 thanh ghi trống có thể dùng như RAM.

1.1.1.2 Sơ đồ chân

Hình 1-9: Sơ đồ chân DS1307

Các chân DS1307 được mô tả như sau:

X1vàX2 là 2ngõ kết nối với thạch anh 32.768KHz -> tạo dao động cho chip

VBAT kết nối với cực dương của pin dự phòng ở đây ta dùng Pin CMOS 3V.GND nối đất

Trang 15

VCC nối với nguồn chính 5VDC.SQW / OUT ngõ xuất xung vuông.

SCL chân nhận xung clock đồng bộ khi két nối bus I2C

SDA chân dữ liệu khi kết nối với I2C

1.4.2.2 Bộ nhớ DS1307

Hình 1-10: Tổ chức bộ nhớ của DS1307

1.4.2.3 Các thanh ghi của Ds1307

Hình 1-11: Tổ chức thanh ghi của DS1307

Thanh ghi giây (SECONDS) có địa chỉ là 0x00

Thanh ghi phút (MINUTES) có địa chỉ là 0x01

Thanh ghi giờ ( HOURS) có địa chỉ 0x02 Thanh ghi giờ có 2 chế độ hoạtđộng là hiển thị chế độ 12h (Từ 1h đến 12h) và hiển thị chế độ 24h (Từ 1hđến 24h) giờ Bit thứ 6 của thanh ghi giờ quyết định chế độ 12 hay 24 Nếubit6 = 0 chế độ 24h hoạt động, bit6 = 1 chế độ 12h hoạt động

Trang 16

Thanh ghi thứ ( DAY) có địa chỉ 0x03 Thanh ghi thứ mang giá trị từ 1 đến

7 tương ứng từ thứ 2 đến chủ nhật trong 1 tuần Các thanh ghi ngày(DATE), tháng ( MONTH), năm ( YEAR) có có cấu trúc tương tự

1.4.3 LCD

Hình 1-12: Hình ảnh LCD thực tế

Hình 1-13: Sơ đồ chân LCD

Trang 17

Hình 1-14: Bộ nhớ CGROM của LCD

1.4.4 Tụ điện

Hình 1-15: Hình ảnh các loại tụ

Trang 18

Chân 2 (GND): Chân nối đất.

Chân 3 (Vout): Chân nguồn đầu ra, điện áp ngõ ra ổn định là 5V

1.4.6 Pin CMOS 3V

Hình 1-17: Pin COMS 3V

1.4.7 LED

Hình 1-18: LED

Trang 19

1.4.8 Điện trở

Điện trở là sự cản trở dòng điện của một vật dẫn điện, nếu một vậtdẫn điện tốt thì điện trở nhỏ, vật dẫn điện kém thì điện trở lớn, vậtcách điện thì điện trở là vô cùng lớn

Hình 1-19: Điện trở

1.4.9 Thạch anh

Thạch anh là bộ dao động khá ổn định để tạo ra tần số dao động cho

vi điều khiển Có rất nhiều loại khác nhau , mỗi loại tạo ra 1 xung nhịp khác nhau

Hình 1-20: Thạch anh

Trang 21

2.2.2 Khối điều khiển và hiển thị

Hình 2-23: Sơ đồ nguyên lý khối vi điều khiển và hiển thị

2.3.1 Layout mạch nguồn

Hình 2-24: Layout mạch nguồn

Trang 22

2.3.2 Layout mạch chính

Hình 2-25: Layout mạch chính

2.4 Mạch thực tế

Hình 2-26: Mạch thực tế

Trang 23

CHƯƠNG 3 GIẢI THUẬT3.1 Lưu đồ giải thuật

Hình 3-27: Nạp dữ liệu thời gian

Trang 24

3.1.1 Cài đặt giờ

Hình 3-28: Cài đặt giờ

Trang 25

3.1.2 Cài đặt phút

Hình 3-29: Cài đặt phút

Trang 26

3.1.3 Cài đặt giây

Hình 3-30: Cài đặt giây

Trang 27

// -// Dinh nghia dia chi DS1307

#define Device_Address_DS1307_EEPROM 0xD0//dia chi mac dinh

// Dinh nghia che do thoi gian(sang hay chieu, 24h)

Trang 28

unsigned char pRTCArray[4];//mang chu du lieu doc duoc DS1307

unsigned char Temp;

void _Init_I2C(void);//ham khoi tao khoi I2C - ngat truyen nhan du lieu

void _Send_Data(int8 data, int8 slave_addr);//ham gui du lieu theo giao thucI2C

int8 _Receive_Data(int8 slave_addr);//ham nhan du lieu theo giao thuc I2C//Ghi mot byte len DS1307

//Address: Dia chi slave can ghi

//DataByte: Du lieu se duoc ghi

void Write_Byte_To_DS1307_RTC(unsigned char Address, unsigned charDataByte);

//Doc 1 byte DS1307

//Address: Dia chi slave de doc data

unsigned char Read_Byte_From_DS1307_RTC(unsigned char Address);

//Ghi mot chuoi data len DS1307

//Address: Dia chi slave de ghi data

// pData: Chuoi du lieu data se duoc ghi

//NoOfBytes: So byte data se duoc ghi

void Write_Bytes_To_DS1307_RTC(unsigned char Address,unsigned char*pData,unsigned char NoOfBytes);

//Doc 1 chuoi data tu DS1307

//Address: Dia chi slave muon doc data

//pData: Chuoi du lieu se duoc doc tu DS1307

//NoOfBytes: So byte data se duoc doc

void Read_Bytes_From_DS1307_RTC(unsigned char Address, unsigned char*pData, unsigned int NoOfBytes);

//Ham cai dat thoi gian(gio-phut-giay)

Trang 29

//Mode: Che do AM/PM/24H

//Ham doc thoi gian(gio-phut-giay)

//Ham se tra ve mot chuoi data

unsigned char* Get_DS1307_RTC_Time(void);

//Ham cai dat thoi gian(ngay-thang-nam)

//Ham doc thoi gian(Ngay-Thang-Nam)

//Ham se tra ve mot chuoi data

unsigned char* Get_DS1307_RTC_Date(void);

void DisplayTimeToLCD( unsigned char* pTimeArray ); //Hien thi thoigian(gio-phut-giay)

void DisplayDateOnLCD( unsigned char* pDateArray ); //Hien thi thoigian(ngay-thang-nam)

Trang 30

void _Send_Data(int8 data, int8 slave_addr)

{

i2c_start();//khoi tao lenh khi no o che do master

i2c_write(slave_addr);//gui di dia chi slave muon giao tiep

i2c_start();//khoi tao lenh khi no o che do master

i2c_write(slave_addr+1);//gui di dia chi slave muon giao tiep

value_re=i2c_read(0);//doc du lieu

i2c_stop();//phat lenh dung giao dich khi no o che do master

return value_re;//phan hoi du lieu vua nhan duoc ve

i2c_start();//khoi tao lenh khi no o che do master

while(i2c_write(Device_Address_DS1307_EEPROM + 0) == 1)//Kiem traxem slave co ban ron gi khong

Trang 31

{

i2c_start();

}

i2c_write(Address);//gui 1 byte dia chi toi slave

i2c_write(DataByte);//gui 1 byte du lieu

i2c_stop();//phat lenh dung giao dich khi no o che do master

i2c_start();//khoi dong i2c

while(i2c_write(Device_Address_DS1307_EEPROM + 0) == 1)//Kiem traxem slave co ban ron gi khong

{

i2c_start();

}

i2c_write(Address);//gui 1 byte dia chi

i2c_start();//khoi dong lai i2c

i2c_write(Device_Address_DS1307_EEPROM + 1);//khi muon doc du lieu

tu slave thi phai cong them: 1

_Byte=i2c_read(0);//dau tien la doc du lieu sau do no se gui tin hieu NACK

de dung viec doc du lieu

i2c_stop();//phat lenh dung giao dich khi no o che do master

return _Byte;

}

Trang 32

void Write_Bytes_To_DS1307_RTC(unsigned char Address,unsigned char*pData,unsigned char NoOfBytes)

{

unsigned int i;

i2c_start();//khoi dong i2c

while(i2c_write(Device_Address_DS1307_EEPROM + 0) == 1)//Kiem traxem slave co ban ron gi khong

i2c_start();//khoi dong i2c

while(i2c_write(Device_Address_DS1307_EEPROM + 0) == 1)//Kiem traxem slave co ban ron gi khong

Trang 33

{

i2c_start();

}

i2c_write(Address);//gui lenh lam viec voi thoi gian

i2c_start();//khoi dong lai i2c

i2c_write(Device_Address_DS1307_EEPROM + 1);//khi muon doc du lieu

tu slave thi phai cong them: 1

pData[0] =i2c_read(1);//doc du lieu

temp=i2c_read(0);//phat tin hieu NACK de dung doc du lieu

i2c_stop();//phat lenh dung giao dich khi no o che do master

//chuyen ve gia tri BCD

pRTCArray[0] = (((unsigned char)(Secs/10))<<4)|((unsigned char)(Secs

Trang 34

switch(Mode)//cai che do thoi gian

{

case AM_Time: pRTCArray[2] |= 0x40; break;

case PM_Time: pRTCArray[2] |= 0x60; break;

default: break; // do nothing for 24HoursMode

}

Write_Bytes_To_DS1307_RTC(0x00, pRTCArray, 3); }

unsigned char* Get_DS1307_RTC_Time(void)

{

//doc thoi gian(gio-phut-giay)

Read_Bytes_From_DS1307_RTC(0x00, pRTCArray, 3); //chuyen doi gia tri giay tu dang BCD ve gia tri so decimal Temp = pRTCArray[0];

pRTCArray[0] = ((Temp&0x7F)>>4)*10 + (Temp&0x0F);

Temp = pRTCArray[1];

pRTCArray[1] = (Temp>>4)*10 + (Temp&0x0F);

if(pRTCArray[2]&0x40) // neu o che do 12h

Trang 35

// chuyen do cac gia tri sau ve gia tri BCD

pRTCArray[0] = (((unsigned char)(Day/10))<<4)|((unsigned char)(Day

Trang 36

unsigned char* Get_DS1307_RTC_Date(void)

Trang 37

//! case AM_Time: printf(lcd_putc,"AM"); break;

//! case PM_Time: printf(lcd_putc,"PM"); break;

Trang 38

//! case Saturday: printf(lcd_putc,"SAT"); break;//! case Sunday: printf(lcd_putc,"SUN"); break;

Trang 39

void lcd_init(void); // Ham dung de khoi dong C.LCD.

byte lcd_read_byte(void); // Ham xu ly doc thong tin (dang 8 bit) tu thongtin dang 4 bit tu C.LCD

byte lcd_read_nibble(void); // Ham doc thong tin (dang 4 bit / nibble) tuC.LCD

void lcd_send_byte(byte address, byte n); // Ham gui thong tin (byte) toiC.LCD tai dia chi (address)

void lcd_send_nibble(byte n); // Ham gui thong tin (dang 4 bit / nibble)sang C.LCD

void lcd_gotoxy(byte x, byte y); // Ham thiet lap vi tri ghi tren C.LCD

char lcd_getc(byte x, byte y); // Ham tra ve ky tu tai vi tri (x,y) tren C.LCD.void lcd_putc(char c); // Ham se hien thi ky tu c tai vi tri ke tiep trenC.LCD

// Khai bao bien

// Dinh nghia cac thong so

#define LCD_RS_PIN PIN_D1 // Cach ket noi cac chan LCD voi cacchan vi dieu khien

#define LCD_RW_PIN PIN_D2

#define LCD_ENABLE_PIN PIN_D3

#define LCD_DATA4 PIN_D4

#define LCD_DATA5 PIN_D5

#define LCD_DATA6 PIN_D6

Ngày đăng: 02/03/2018, 16:53

TỪ KHÓA LIÊN QUAN

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

TÀI LIỆU LIÊN QUAN

🧩 Sản phẩm bạn có thể quan tâm

w