Thiết kế đồng hồ số hiển thị trên LCD 16*2 gồm đầy đủ thứ, ngày, tháng, năm dương lịch, giờ, phút, giây và có sử dụng bàn phím để thay đổi được thời gian. Thời gian 1 giây được tạo ra bằng cách sử dụng Timer 0.” Sử dụng IC AT89S52. Đề tài gồm 3 chương: Chương I: Tổng quan về đề tài Chương II: Hiện thực hóa đề tài Chương III: Kết Luận
Trang 1Bất cứ một biến cố, sự việc, sự kiện gì xảy ra, hay làm bất cứ một việc gì
đó cũng cần có thời gian, thời gian gắn với mọi sự vật, sự việc không trừ một vật nào
Thời gian rất quan trọng và cần thiết trong cuộc sống của mỗi chúng ta, từ xa xưa người ta đã sử dụng mặt trời, mặt trăng làm thước đo thời gian Xã hội dần phát triển đã có sự xuất hiện của đồng hồ (đồng hồ cát, đồng hồ cơ học ) với
sự tiến bộ của khoa học và công nghệ ngày này chúng ta có thể thay thế những vật dụng đo, xác định thời gian cồng kềnh, đồng hồ cơ học bằng đồng đồng hồ
số, đồng hồ điện tử có độ chính xác cao, nhỏ gọn, tiện lợi, dễ sử dụng, sửa chữa
Và đó là những lý do chúng em chọn đề tài : “ Thiết kế đồng hồ số hiển thị trên LCD 16*2 gồm đầy đủ thứ, ngày, tháng, năm dương lịch, giờ, phút, giây và có
sử dụng bàn phím để thay đổi được thời gian Thời gian 1 giây được tạo ra bằng cách sử dụng Timer 0.” Sử dụng IC AT89S52.
Đề tài gồm 3 chương:
Chương I: Tổng quan về đề tài
Chương II: Hiện thực hóa đề tài
Chương III: Kết Luận
Em xin chân thành cảm ơn sự giúp đỡ ,chỉ bảo tận tình của thầy hướng dẫn trong suốt khoảng thời gian chúng em thực hiện đề tài này!
Trang 2Mục lục
CHƯƠNG I TỔNG QUAN VỀ ĐỀ TÀI 2
1 Yêu cầu của đề tài 2
2 Lưu đồ thuật toán tổng quát 2
3 Chức năng, nhiệm vụ của các khối trong lưu đồ 3
a Khối khai báo các biến, định nghĩa cổng sử dụng trên ic 3
b Khối khởi tạo LCD, ngắt ngoài, ngắt Timer 0, các giá trị ban đầu cho thời gian 3
c Khối hiển thị thời gian lên LCD và khởi động Timer 0 3
d Khối kiểm tra DEM_S 4
e Khối thay đổi thời gian 4
f Khối kiểm tra thời gian 8
g Khối hiển thị thời gian lên LCD 10
CHƯƠNG II: HIỆN THỰC HÓA ĐỀ TÀI 11
1 Giới thiệu chung về phần cứng 11
a Vi điều khiển AT89S52 11
b Màn hình LCD 16x2 13
c Mạch tạo dao động 14
d Mạch RESET 15
2 Thiết kế phần cứng 15
a Sơ đồ khối 15
b Xây dựng phần mềm (chương trình nguồn) 16
c Thiết kế và hiện thực hóa phần cứng 16
3 Kết quả trên mạch mô phỏng và mạch thực tế 21
a Kết quả mô phỏng trên máy tính 21
b Kết quả trên mạch thực tế 21
c So sánh giữa mô phỏng và thực tế 21
d Ưu nhược điểm của thiết kế và hướng đi của đề tài 22
CHƯƠNG III: KẾT LUẬN 23
Phục lục 24
Trang 3CHƯƠNG I TỔNG QUAN VỀ ĐỀ TÀI
1 Yêu cầu của đề tài
Thiết kế đồng hồ số hiện thị lên LCD 16x2 gồm đầy đủ thứ, ngày, tháng, năm dương lịch, giờ, phút, giây có thể sử dụng bàn phím thay đổi được thời gian Thời gian được tạo ra bằng cách sử dụng Timer 0.
2 Lưu đồ thuật toán tổng quát
START
KHAI BÁO CÁC BIẾN, CÁC CỔNG SỬ DỤNG TRÊN IC
KHỞI TẠO LCD, NGẮT NGOÀI 1, NGẮT TIMER 0, CÁC GIÁ TRỊ BAN ĐẦU CHO THỜI GIAN
HIỂN THỊ THỜI GIAN LÊN LCDKHỞI ĐỘNG TIMER 0
Trang 43 Chức năng, nhiệm vụ của các khối trong lưu đồ
a Khối khai báo các biến, định nghĩa cổng sử dụng trên ic
KHAI BÁO CÁC BIẾN, CÁC CỔNG SỬ DỤNG TRÊN IC
Ở khối này, ta sẽ khai báo các cổng (chân) được sử dụng trên chip(AT89S52), cổng điều khiển hoạt động của LCD, cổng gửi dữ liệu, lệnh cho LCD thực thi Ngoài ra còn khai báo một số biến sử dụng trong chương trình nguồn.
On-b Khối khởi tạo LCD, ngắt ngoài, ngắt Timer 0, các giá trị ban đầu cho thời gian
KHỞI TẠO LCD, NGẮT NGOÀI 1, NGẮT TIMER 0, CÁC
GIÁ TRỊ BAN ĐẦU CHO THỜI GIAN
- Khởi tạo LCD : khởi tạo cho LCD cho LCD hoạt động
- Khởi tạo ngắt ngoài: cho phép ngắt ngoài hoạt động, sử dụng ngắt ngoài để tăng giá trị biến DEM_S
Kích hoạt ngắt ngoài bằng cách nhấn phím SELECT
- Khởi tạo ngắt Timer 0: chọn chế độ và nạp giá trị cho TH0,TL0 Sau 20 lần vào ngắt Timer0 tăng biến lưu giá trị giây thêm 1.
- Khởi tạo các giá trị ban đầu cho thời gian : khởi tạo các giá trị thời gian ban đầu
c Khối hiển thị thời gian lên LCD và khởi động Timer 0
HIỂN THỊ THỜI GIAN LÊN LCDKHỞI ĐỘNG TIMER 0
- Hiển thị các giá tri thời gian ban đầu đã khởi tạo lên LCD [(g)]
- Khởi động ngắt Timer 0 : Timer 0 bắt đầu hoạt động
Trang 5d Khối kiểm tra DEM_S
DEM_S = 0?
KIỂM TRA THỜI GIAN
THAY ĐỔI THỜI GIAN
NO
YES
Nếu DEM_S khác 0 thì chuyển đến khối thay đổi thời gian, nếu
DEM_S bằng 0 chuyển đến khối kiểm tra thời gian
e Khối thay đổi thời gian
DEM_S=0? KIỂM TRA THỜI
GIAN
NHẤN BACK
YES
KIỂM TRA DEM_S
- Do chương trình sử dụng ngắt ngoài nên sau khi khởi tạo ngắt ngoài
và cho phép ngắt ngoài hoạt động, thì bất cứ khi nào nhấn SELECT chương trình dừng mọi công việc và vào thực hiện công việc trong
Trang 6ngắt ngoài Sau khi thực hiện xong công việc trong ngắt sẽ tự động trở về thực hiện tiếp công việc đang làm.
- Nếu DEM_S khác 0 ta sẽ kiểm tra xem phím BACK có được nhấn không:
+ Nếu phím BACK được nhấn : giảm DEM_S đi 1 đơn vị, sau đó kiểm tra phím OK
+ Nếu BACK không được nhấn : đi đến kiểm tra phím OK + Nếu phím OK được nhấn : gán DEM_S=0 sau đó thoát khỏi chương trình thay đổi thời gian và đi đến khối kiểm tra thời gian
+Nếu OK không được nhấn : đi đến kiểm tra DEM_S (khối kiểm tra DEM_S )
- Khối kiểm tra DEM_S
Ứng với mỗi giá trị của DEM_S ta sẽ chọn thay đổi từng giá trị thời gian tương ứng
Sau khi thực hiện thay đổi, quay trở lại kiểm tra xem phím BACK
có được nhấn hay không( thoát khỏi kiểm tra DEM_S).
Trang 7THAY ĐỔI 2 SỐ CUỐI CỦA NĂM
Trang 8- Các khối thay đổi thời gian (giờ, phút, giây, thứ )
- Sau khi chọn được giá trị thời gian cần thay đổi, ta sẽ kiểm tra phím
UP có được nhấn hay không:
+ Nếu UP được nhấn thì giá trị cần thay đổi tăng thêm 1 đơn vị
+ Nếu UP không được nhấn thì chuyển qua kiểm tra phím DOWN
+ Nếu DOWN được nhấn thì giảm giá trị cần thay đổi đi 1 đơn vị
+ Nếu DOWN không được nhấn thì quay lại khối kiểm phím BACK
Trang 9f Khối kiểm tra thời gian
Trang 11- Khối kiểm tra thứ, ngày, tháng
Trang 12g Khối hiển thị thời gian lên LCD
Trang 14CHƯƠNG II: HIỆN THỰC HÓA ĐỀ TÀI
1 Giới thiệu chung về phần cứng
a Vi điều khiển AT89S52
AT89S52 là họ IC vi điều khiển do hãng Atmel sản xuất Các sản phẩm AT89S52 thích hợp cho những ứng dụng điều khiển Việc xử lý
Trang 15trên byte và các toán số học ở cấu trúc dữ liệu nhỏ được thực hiện bằng nhiều chế độ truy xuất dữ liệu nhanh trên RAM nội Tập lệnh cung cấp một bảng tiện dụng của những lệnh số học 8 bit gồm cả lệnh nhân và lệnh chia.
AT89S52 là một vi điều khiển CMOS 8 bit hiệu năng cao, công suất thấp với :
+ 8Kbyte EPROM có thể xóa và lập trình nhanh lên đến 10000 chu kỳ ghi/xóa.
AT89S52 được nâng cấp và phát triển dựa trên nền tảng của các vi điều khiển trước đó( 89C51,89C52,89S51…) nên mọi câu lệnh,
chương trình chạy được trên các vi điều khiển trước cũng sẽ chạy được trên 89S52 Ngoài ra các dòng 89S của Atmel có thêm một timer 2 và khả năng nạp chương trình theo chế độ nối tiếp rất đơn giản và tiện lợi ( các chân sử dụng nạp chương trình MOSI, MISO, SCK, RST)
b Màn hình LCD 16x2
Trang 16Mô tả chân của LCD
3 VEE - Nguồn điều khiển tương phản
4 RS I RS= 0: chọn thanh ghi lệnh
RS=1: chọn thanh ghi dữ liệu
5 R/W I R/W =0 : ghi dữ liệu vào LCD
R/W =1đọc từ LCD module
7 DB0 I/O Bus dữ liệu 8 bit
8 DB1 I/O Bus dữ liệu 8 bit
9 DB2 I/O Bus dữ liệu 8 bit
10 DB3 I/O Bus dữ liệu 8 bit
11 DB4 I/O Bus dữ liệu 8 bit
12 DB5 I/O Bus dữ liệu 8 bit
13 DB6 I/O Bus dữ liệu 8 bit
14 DB7 I/O Bus dữ liệu 8 bit
Trang 17Mã(Hexa) Lệnh đến thanh ghi của LCD
1 Xóa màn hình hiển thị
2 Trở về đầu dòng
4 Giả con trỏ ( dịch con trỏ sang trái)
6 Tăng con trỏ (dịch con trỏ sang phải)
5 Dịch hiển thị sang phải
7 Dịch hiển thị sang trái
8 Tắt con trỏ, tắt hiển thị
A Tắt hiển thị, bật con trỏ
C Bật hiển thị, tắt con trỏ
E Bật hiển thị ,nhấp nháy con trỏ
F Tắt con trỏ, nhấp nháy con trỏ
10 Dịch vị trí con trỏ sang trái
14 Dịch vị trí con trỏ sang phải
18 Dịch toàn bộ hiển thị sang trái
1C Dịch toàn bộ hiển thị sang phải
80 Đưa con trỏ về đầu dòng thứ nhất
C0 Đưa con trỏ về đầu dòng thứ hai
38 Hai dòng và ma trận 5 *7
c Mạch tạo dao động
Gồm 1 thạch anh 12Mhz, 2 tụ C1 và C2 như nhau và có giá trị điện dung 22pF Sơ đồ ghép nối với AT89S52 như hình vẽ
Trang 19- Khối nguồn : cung cấp nguồn DC 5V cho toàn bộ hệ thống hoạt động
- Khối xử lý trung tâm : sử dụng chip AT89S52
Xử lý mọi công việc của hệ thống, đọc tín hiệu từ khối Reset, bàn phím, đưa dữ liệu ra khối hiển thị.
Lưu trữ dữ liệu của hệ thống.
- Khối tạo dao động : tạo dao động cho IC AT89S52 hoạt động
- Khối Reset : Reset lại hệ thống về trạng thái ban đầu
- Khối bàn phím : thay đổi dữ liệu
- Khối hiển thị: hiện thị dữ liệu
b Xây dựng phần mềm (chương trình nguồn)
Chương trình nguồn được viết bằng ngôn ngữ Assembly, là chương trình điều khiển hoạt động của IC AT89S52.
Chương trình chi tiết được in cuối phục lục
c Thiết kế và hiện thực hóa phần cứng
Sử dụng phần mềm Altium Designer để thiết kế phần cứng gồm có : + Thiết kế sơ đồ nguyên lý
+ Thiết kế mạch in
+ Dựng mô hình 3D mạch thực trên máy tính
Sơ đồ nguyên lý :
Trang 20Tác dụng và nguyên lý hoạt động của các khối trong sơ đồ nguyên lý:
Trang 21+ Khối nguồn (POWER DC 5V) : Cung cấp nguồn một chiều 5V cho toàn bộ mạch hoạt động.
+ Khối tạo dao động (DAO ĐỘNG 12 MHz) : tạo dao động có tần
số 12MHz đưa đến IC
+ Khối RESET ( RESET ) : Reset lại toàn bộ mạch trở về trạng thái ban đầu AT89S52 được reset bằng cách giữ chân RST ở mức cao tối thiểu là 2 chu kỳ máy, khi mạch RESET được cấp nguồn, tụ hóa 10uF được nạp và xả qua điện trở 10k xuống đất nên chân RST của IC vẫn giữ mức thấp, khi nhấn phím RESET chân RST đưa lên mức cao và IC được reset về trạng thái ban đầu.
+ Khối bàn phím ( PHÍM NHẤN ): thay đổi thời gian.
Các phím được nối với các chân tương ứng của IC chân 13 đến chân 17 Bình thường các chân này đều ở mức tích cực cao, khi được đưa xuống mức tích cực thấp thông qua phím bấm thì sẽ thực hiện chức năng như trong chương trình nguồn đã lập trình + Khối xử lý trung tâm(VI ĐIỀU KHIỂN) : sử dụng vi điều khiển AT89S52 điều khiển mọi hoạt động của mạch Khi được cấp nguồn IC sẽ hoạt động, nhận tín hiệu điều khiển từ khối bàn phím, điều khiển hoạt động của LCD và đưa dữ liệu lên hiển thị trên LCD qua cổng P0.
+ Khối hiển thị( LCD 16x2 ): hiển thị dữ liệu từ AT89S52 gửi đến
Sơ đồ mạch in:
Trang 22Cách sử dụng mạch thực tế:
Trang 23Sau khi cấp nguồn, mạch sẽ hoạt động, sử dụng 5 phím nhấn
SELECT/NEXT, BACK, OK, UP, DOWN để thay đổi các giá trị thời gian theo ý mình mong muốn.
Khi mạch đang hoạt động bình thường nếu phím SELECT/NEXT chưa được nhấn thì các phím còn lại không có tác dụng khi nhấn.
Để bắt đầu quá trình thay đổi thời gian ta thực hiện như sau:
- Nhấn phím SLECT/NEXT khi đó sẽ vào chương trình thay đổi thời gian, màn hình LCD ban đầu sẽ hiển thị giờ, phút, giây và giá trị giờ
sẽ nhấp nháy, nghĩa là giá trị giờ đang được chọn để thay đổi Nhấn phím UP để tăng giờ và phím DOWN để giảm giờ đi một đơn vị Nếu nhấn giữ phím UP hoặc DOWN thì giá trị tăng giảm nhanh hơn.
Để thay đổi phút ta nhấn phím SLECT/NEXT một lần nữa lúc này giá trị phút trên màn hình LCD sẽ nhấp nháy và ta cũng sử dụng 2 phím UP và DOWN để tăng hoặc giảm phút…
Muốn quay lại thay đổi giá trị giờ thì ta nhấn phím BACK khi này giá trị giờ sẽ được chọn và nhấp nháy.
Cứ như vậy khi ta nhấn phím SELECT/NEXT thì từng giá trị được chọn để thay đổi sẽ nhấp nháy và phím BACK để quay lại giá trị được chọn lúc trước.
Sau khi hoàn thành việc thay đổi thời gian, nhấn phím OK để xác nhận kết thúc quá trình thay đổi thời gian.
3. Kết quả trên mạch mô phỏng và mạch thực tế
Trang 24a Kết quả mô phỏng trên máy tính
Sử dụng máy mô phỏng Oscilloscope trong protus để kiểm tra quá trình tạo thời gian 1s trên mạch mô phỏng, kết quả cho ra thời gian tạo được 1s tương đối chính xác Như vậy có thể nói mạch thực tế và mô phỏng hoạt động không sai, nhưng do phần mềm nên mạch mô phỏng hoạt động chậm hơn so với thời gian thực tế.
Trang 25d Ưu nhược điểm của thiết kế và hướng đi của đề tài
- Ưu điểm :
Đơn giản, dễ thực hiện, dễ sử dụng cũng như sửa chữa và thay thế linh kiện
- Nhược điểm :
Không giữ được thời gian thực khi cắt nguồn DC 5V.
- Hướng đi của đề tài:
Phát triển lên thành những ứng dụng liên quan đến thời gian như : đồng hồ bấm giây, đồng hồ đếm ngược, đồng hồ hẹn giờ, lịch van niên, âm lịch
Trang 26CHƯƠNG III: KẾT LUẬN
Qua đồ án môn học đã giúp chúng em nâng cao được về kỹ năng lập trình, thiết kế, trình bày báo cáo, làm, sửa chữa và kiểm tra những vấn đề cơ bản trên mạch thực tế Cơ bản sử dụng thành thạo các phần mềm liên quan đến đề tài cần
sử dụng như :
- Phần mềm viết chương trình nguồn : Notepad++
- Phần mềm biên dịch chương trình : Keil uVision4
- Phần mềm mô phỏng : Protus
- Phần mềm thiết kế phần cứng : Altium Designer
Đối với đề tài : chúng em đã xây dựng được lưu đồ thuật toán, chương trình nguồn, hiển thị đồng hồ số lên màn hình LCD theo đúng yêu cầu của đề tài Bên cạnh những việc đã làm được thì vẫn còn một vài việc chưa làm cho đề tài được tối ưu như : Khi mạch hoạt động bình thường, nếu ngắt nguồn DC 5V ra khỏi mạch thì mạch không giữ được thời gian thực đang chạy.
Hướng phát triển tiếp theo của đề tài :
- Giải quyết vấn đề đang còn tồn tại.
- Xây dựng các ứng dụng có liên quan đến thời gian, có thể ứng dụng được trong thực tế.
Trang 27DATABUS EQU P0 ; CHAN DL LCD
SELECT EQU P3.3 ; KICH HOAT NGAT NGOAI BACK EQU P3.4 ; PHIM THAY DOI THOI GIAN
OK EQU P3.5 ; PHIM THAY DOI THOI GIAN
UP EQU P3.6 ; PHIM THAY DOI THOI GIAN DOWN EQU P3.7 ; PHIM THAY DOI THOI GIAN
XY EQU 30H ; VI TRI CON TRO
DAY EQU 31H ; CHON NGAY HIEN THI
DEM_TIMER0 EQU 32H ; DEM SO LAN VAO NGAT
CD EQU 33H ; 2 SO DAU CUA NAM
EF EQU 34H ; 2 SO CUOI CUA NAM
TEMP EQU 35H ; BIEN LUU TRU CAC GIA TRI
Trang 28MOV R3,#23 ;GIO
MOV R5,#10 ;THANG
MOV CD,#20 ;2 SO DAU CUA NAM
MOV EF,#10 ;2 SO CUOI CUA NAM
SETB EX1 ;CHO PHEP NGAT NGOAI 1
SETB IT1 ; NGAT NGOAI THEO SUON
;==================CAI DAT NGAT TRAN TIMER 0==============
; SETB EA DA KHAI BAO TRONG NGAT NGOAI
SETB ET0 ;CHO PHEP NGAT TRONG TIMER 0MOV TMOD,#01 ;TIMER 0 CHE DO 1
MOV TL0,#0BEH ;giai thich trong timer 0MOV TH0,#3CH
;=========IN CAC GIA TRI THOI GIAN KHOI TAO BAN DAU ======
Trang 30MOV R4,#1THANG:
LJMP CHANGE_TIME ;NHAY DEN CHUONG TRINH THAY DOI TG
;==============HIEN THI SO BCD LEN LCD====================SHOW_BCD:
Trang 31MOV A,XYMOV DATABUS,AACALL SEND_COMMANDMOV DATABUS,#' 'ACALL SEND_DATAMOV DATABUS,#' 'ACALL SEND_DATAACALL DELAY_SW
MOV DATABUS,AACALL SEND_COMMAND
ACALL SHOW_BCDACALL DELAY_SWRET
;========================================================POINTER_DAY:
PUSH DPHPUSH DPLMOV DATABUS,#0C0HACALL SEND_COMMANDMOV DPTR,#CHAR_SPACEACALL WRITE
ACALL DELAY_SWMOV DATABUS,#0C0HACALL SEND_COMMANDACALL DISPLAY_DAYACALL DELAY_SW
ACALL DISPLAY_DAYMOV DATABUS,#' 'ACALL SEND_DATA
Trang 32MOV A,R4ACALL SHOW_BCDMOV DATABUS,#'-'ACALL SEND_DATA
ACALL SHOW_BCDMOV DATABUS,#'-'ACALL SEND_DATA
PUSH ACCMOV DATABUS,#0C4H ACALL SEND_COMMAND
ACALL SHOW_BCDMOV DATABUS,#':'ACALL SEND_DATA
ACALL SHOW_BCDMOV DATABUS,#':'ACALL SEND_DATA
Trang 33SJMP EXIT_DAYTHU_2:
CJNE A,#02,THU_3MOV DPTR,#THU2ACALL WRITE
SJMP EXIT_DAYTHU_3:
CJNE A,#03,THU_4MOV DPTR,#THU3ACALL WRITE
SJMP EXIT_DAYTHU_4:
CJNE A,#04,THU_5MOV DPTR,#THU4ACALL WRITE
SJMP EXIT_DAYTHU_5:
CJNE A,#05,THU_6MOV DPTR,#THU5ACALL WRITE
SJMP EXIT_DAYTHU_6:
CJNE A,#06,THU_7MOV DPTR,#THU6ACALL WRITE
SJMP EXIT_DAYTHU_7:
CJNE A,#07,EXIT_DAYMOV DPTR,#THU7ACALL WRITE
Trang 34MOV DATABUS,#0CHACALL SEND_COMMANDACALL DELAY
MOV DEM_S,#0LJMP EXIT_CHANGE_TIMEKT_DEM_S: ;QUAY VONG CHON GIA TRI THAY DOI
CJNE DEM_S,#0,DEM_S1MOV DEM_S,#8
LJMP LCD_PART2
CJNE DEM_S,#1,DEM_S2CJNE R6,#1,DEM_S11ACALL DISPLAY_CHANGE
DEM_S11:
MOV XY,#0C4HACALL POINTERACALL SCAN_UP