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

thiết kế đồng hồ số hiển thị bằng 8 led 7 đoạn

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 (431.36 KB, 27 trang )

Trng HCN H Ni Khoa in 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:
Vi điều khiển
Đề tài: Thiết kế đồng hồ số hiển thị bằng 8 Led 7 đoạn
Sinh viên thực hiên: Đinh Thị Ngần
Đoàn Trọng Linh
Vũ Thị Thu


Giáo viên hớng dẫn: Nguyễn Anh Dũng

File ớnh kốm 001.rar
Hà nội -11/2009
1
Trng HCN H Ni Khoa in t

Mục lục
Chơng I: Giới thiệu chung về bộ vi điều khiển
I.Giới thiệu chung về bộ vi điều khiển.
II.Khảo sát bộ vi điều khiển 8051(89s52).
A. Kiến trúc phần cứng của 8051.
B. Sơ đồ,chức năng các chân của vi điều khiển.
1.Chân nguồn.
2.Chân điều khiển.
a.Nhóm vào điều khiển.
b.Nhóm ra điều khiển.


C. Các thanh ghi.
1.Các thanh ghi port xuất nhập.
2.Các thanh ghi timer.
3.Thanh ghi port nối tiếp.
4.Thanh ghi ngắt.
5.Hoạt động của bộ định thời
a.Thanh ghi chế độ (TMOD).
b.Thanh ghi điều khiển timer(TCON).
6.Hoạt động của port nối tiếp.
7.Các ngắt của 8051.
Chơng II: Đồng hồ số hiển thị bằng 8 led 7 thanh
I.Các thiết bị sử dụng trong mạch.
II.Lu đồ thuật toán.
Mã nguồn chơng trình.
2
Trng HCN H Ni Khoa in t

LờI NóI ĐầU
Hin nay th gii ang khụng ngng phỏt trin, cỏc thnh tu v khoa hc
v k thut ngy mt nhiu. Nm 1976 Intel gii thiu b vi iu khin u tiờn
7448, t ú n nay vi iu khin ó c s dng rt nhiu , ph bin nhiu lnh
vc trong i sng. Trong phm vi ỏn ln ny, chỳng em dựng vi iu khin
thiết kế mô hình đồng hồ số hiển thị bằng 8 led 7 thanh.õy ch l mt
trong nhng ng dng rt nh ca vi iu khin nhng qua quỏ trỡnh thit k v thi
cụng ti chỳng em ó rỳt ra c rt nhiu kinh nghiờm thc tin quý bỏu. Mc
ớch ca ti hng n: to ra bc u cho sinh viờn th nghim nhng ng
dng ca vi điều khiển trong thc tin ri t ú tỡm tũi, phỏt trin nhiu ng dng
khỏc trong i sng hng ngy cn n.
Mc dự ó c gng ht sc mỡnh hon thnh xong ỏn mụn hc nhng cng
khụng trỏnh khi nhng thiu sút và điều cha đợc về sản phẩm của mình. Do vy,

chỳng em rt mong c s gúp ý quý bỏu ca thy cụ v cỏc bn ti cú th
hon thin hơn.

Chỳng em xin chõn thnh cm n!
Sinh viên thực hiện: Đinh Thị Ngần
Đoàn Trọng Linh
Vũ Thị Thu
3
Trng HCN H Ni Khoa in t

Chơng I
Giới thiệu chung về bộ vi điều khiển
I.Giới thiệu chung về bộ vi điều khiển:
Bộ vi điều khiển viết tắt là Micro-contronller, là mạch tích hợp trên một chíp có thể lập
trình đợc, dùng để điều khiển hoạt động của hệ thống. Theo các tập lệnh của ngời lập trình,
bộ vi điều khiển tiến hành đọc, lu trữ thông tin, xử lý thông tin, đo lờng thời gian và tiến
hành đọc mở một cơ cấu nào đó.
Trong các thiết bị điện và điện tử dân dụng, thiết bị tự động hoá các bộ vi điều khiển,
điều khiển hoạt động của các thiết bị này Trong hệ thống sản xuất tự động, bộ vi điều
khiển đợc sử dụng trong điều khiển robot, dây chuyền tự động Các hệ thống càng thông
minh thì vai trò của vi điều khiển càng quan trọng.
II. Khảo sát bộ vi điều khiển 8051(89S52)
Họ vi điều khiển 8051 (còn gọi là họ C51) là một trong những họ vi điều khiển thông dụng
nhất. Đây là các bộ vi điều khiển 8bits, có kiến trúc theo kiểusản xuất theo công nghệ
CMOS, Một số loại vi điều khiển thuộc họ 8051 thông dụng có thể kể ra : AT89C2051(20
chân), AT89C4051(20 chân), AT89C51(40 chân), AT89C52(40 chân), AT89S51(40 chân),
AT89S52(40 chân), AT89S53(40 chân)
Trong chơng trình môn học này chúng ta tập trung nghiên cứu về bộ vi điều khiển 89S52.
Đây là một bộ vi điều khiển thông dụng, giá rẻ có khá nhiều chức năng hay đặc
biệt là có tích hợp sẵn bộ nạp trên chip giúp sinh viên có thể dễ dàng tự thực hiện các bài

thí nghiệm với chi phí rất thấp.
Cũng trong chơng trình môn học này, ngôn ngữ đợc sử dụng để trình bày các ví dụ
ứng dụng là ngôn ngữ C.
4
Trng HCN H Ni Khoa in t

Cụ thể họ vi điều khiển 8051 có các đặc điểm sau :
-8 kbyte ROM (đợc lập trình bởi nhà sản xuất chỉ có ở 8051 )
-256 byte RAM
-4 port I/0 8 bit
-3 bộ định thời 16 bit
-Giao tiếp nối tiếp
-64 KB khônh gian bộ nhớ dũ liệu mở rộng
-một bộ vi xử lí(thao tác trên các bit đơn)
-210 bit đợc địa chỉ hoá
-bộ nhân/chia 4us
A.Kiến trúc phần cứng của họ 8051
Phần chính của vi điều khiển 8051 là bộ vi xử lý trung tâm(CPU: central processing
unit) bao gồm:
- Thanh ghi tích luỹ A
- Thanh ghi tích luỹ phụ B, dùng cho phép nhân và phép chia
- Đơn vị logic học (ALU: arithmetic logical unit)
- Thanh ghi từ trạng thái chơng trình (PSW: program status word)
- Bốn băng thanh ghi
- Con trỏ ngăn xếp
- Ngoài ra còn có bộ nhớ chơng trình, bộ giải mã lệnh, bộ điều khiển thời gian và logic
5
Trng HCN H Ni Khoa in t

Hình 1 : Sơ đồ khối 89s52

Đơn vị xử lý trung tâm nhận trực tiếp xung từ bộ dao động, ngoài ra còn có khả năng đa
một tín hiệu giữ nhịp từ bên ngoài.
Chơng trình đang chạy có thể cho dừng lại nhờ một khối điều khiển ngắt ở bên trong. Các
nguồn ngắt có thể là: các biến cố ở bên ngoài, sự tràn của bộ đếm định thời hoặc cũng có
thể là giao diện nối tiếp.
ba bộ định thời 16 Bit hoạt động nh một bộ đếm.
Các cổng(Port 0, Port 1 Port 2 Port 3). Sử dụng vào mục đích điều khiển.
ở cổng 3 có thêm các đờng dẫn điều khiển dùng để trao đổi với bộ nhớ ở bên ngoài, hoặc để
đầu nối giao diện nối tiếp, cũng nh các đờng ngắt dẫn ở bên ngoài.
Giao diện nối tiếp có chứa một bộ truyền và một bộ nhận không đồng bộ, làm việc độc lập
với nhau. Tốc độ truyền qua cổng nối tiếp có thể đặt trong vảy rộng và đợc ấn định bằng
một bộ định thời.
Trong vi điều khiển 8051 có hai thành phần quan trọng khác đó là bộ nhớ và các thanh ghi:
Bộ nhớ gồm có bộ nhớ RAM và bộ nhớ ROM dùng để lu trữ dữ liệu và mã lệnh
6
Trng HCN H Ni Khoa in t

Các thanh ghi sử dụng để lu trữ thông tin trong quá trình xử lý. Khi CPU làm việc nó thay
đổi nội dung các thanh ghi.
B.Sơ đồ chân, chức năng các chân của họ vi điều khiển 8051(89s52)
Hỡnh 2.S chõn AT89S52
1.Chân nguồn.
89S52 nối với dơng nguồn một chiều điện áp đầu vào 4V đến 5.5V qua chân 40
còn âm nguồn nối vớimasst(GND) qua chân 20.
2.Chân điều khiển.
a.Nhóm vào diều khiển.
-Xtal1(chân18),Xtal2(chân19):nối tinh thể thạch anh cho phát xung nhịp chu
trình.
mạch dao động bên trong chip 8051 đợc ghép với thạch anh bên ngoài ở 2 chân
XTAL1 và XTAL2. Thờng tần số l 12MHz và các tụ ổn định có giá trị trong khoảng

30pF 33 pF.
-RST(reset)chân9:nối chuyển mạch để xoá về trạng thái ban đầu hay khởi động lại.
-/EA/CPP(chân31):chon nhớ ngoài ( nối đất);chọn nhớ trong(nối nguồn nuôi 5V).
-T2 hay P1.0(chân1):tín hiệu vào đếm cho timer2.
-T2EX(chân2):tín hiệu vào ngắt ngoài2.
-INTO hay P3.2(chân12):tín hiệu vào gây ngắt ngoài 0.
-INT1 hay P3.3(chân13):tín hiệu vào gây ngắt ngoài 1.
-T0 hay P3.4(chân14):tín hiệu vào đếm cho timer 0.
-T1 hay P3.5(chân15):tín hiệu vào đếm cho timer1.
b.Nhóm ra điều khiển.
7
Trng HCN H Ni Khoa in t

-ALE/prog(chân30):dùng dể định tín hiệu chốt địa chỉ khi có nhớ ngoài hay điều
khiển ghi trơng trình /prog.
Là tín hiệu xuất ra để giải đa hợp bus địa chỉ v bus dữ liệu. Trong 1/2 chu kỳ đầu
bộ nhớ, chân ALE xuất tín hiệu để chốt địa chỉ (byte thấp của bus địa chỉ 16 bit) và
thanh ghi ngoài khi ta sử dụng port 0 làm byte thấp địa chỉ. Trong 1/2 chu kỳ bộ nhớ
còn lại port 0 sẽ xuất/nhập dữ liệu. Tín hiệu ALE có tần số bằng 1/6 tần số của mạch
dao động bên trong chip vi điều khiển v có thể lm xung clock cho các phần còn lại
của hệ thống (trờng hợp ngoại lệ khi thực hiện lệnh MOVX, một xung ALE (vàs cả
/PSEN) sẽ bị bỏ qua). Chân ALE còn đợc dùng để nhập xung ngõ vo lập trình cho
EPROM hoặc Flash ROM trên chip đối với chip có loại ROM này.
-PSEN(chân29):đa tín hiệu điều khiển đọc bộ nhớ truơng trình Rom ngoài.
Chân này thờng đợc nối với chân cho phép xuất /OE (Output Entable) của
EPRROM (hoặc của ROM) để cho phép đọc các byte lệnh. Tín hiệu /PSEN ở lôgic 0
trong suốt thời gian tìm nạp lệnh. Các mã nhị phân của chơng trình (opcode) đợc
đọc từ EPROM, qua bus dữ liệu và đợc chốt với thanh ghi lệnh IR của 8051 để đợc
giải mã. Khi thực thi một chơng trình trong ROM nội, /PSEN đợc duy trì ở lôgic
không tích cực (logic 1).

-WR hay P3.6(chân số 16):đa tín hiệu ghi dữ liệu vào bộ nhớ ngoài.
- RD hay P3.7(chân số 17):đa tín hiệu đọc dữ liệu vào nhóm tín hiệu địa chỉ,dữ liệu.
-Cổng vào,ra địa chỉ/dữ liệu P0 hay P0.0-P0.7:(chân39-32):dùng trao đổi thông tin về
dữ liệu D0-D7 hoặc đa ra các địa chỉ thấp (A0-A7) theo chế độ dồn kênh(kết hợp với
tín hiệu chốt dịa chỉ ALE).
-Cổng vào ra địa chỉ/dữ liệu P2 hay P2.0-P2.7(chân21-28) dùng trao đổi thông tin
song song về dữ liệu(D0-D7)hoặc đua ra địa chỉ cao(A8-A15).
-Cổng vào ra dữ liệu P1 hay P1.0-P1.7(chân1-8)dùng trao đổi thông tin song song dữ
liệu(D0-D7).
-Cổng vào ra P3 hay(P3.0-P3.7)/:chân 10-17:
P3.0(chân10):đa vào tín hiệu nhận tin nối tiếp RXD.
P3.1(chân11):đua ra tín hiệu truyền tin nối tiếp TXD
/INTO hay P3.2(chân12) tín hiệu vào gây ngăt 0 của vi điều khiển.
/INT1 hay P3.3(chân13) tín hiệu vào gây ngắt 1 của vi điều khiển.
T0 hay P3.4(chân14) tịn hiệu vào đếm cho timer 0/counter 0 cho vi điều khiển
8051/8052.
T1 hay P3.5(chân15) tín hiệu vào đếm cho timer1
WR hay P3.6 (chân16) đa tín hiệu ghi vào bộ nhớ ngoài.
RD hay P3.7(chân17) đua tín hiệu đọc vào bộ nhớ ngoài.
-T2 hayP1.0(chân1) tín hiệu vào đếm cho timer 2/counter2.
8
Trường ĐHCN Hà Nội Khoa điện tử

-T2EX(ch©n2) tÝn hiÖu vµo g©y ng¾t 2 cña vi ®iÒu khiÓn.
-Cæng vµo/ra P3 cßn dïng ®Ó trao ®æi th«ng tin vÒ d÷ liÖu D7-D0
Díi ®©y lµ cÊu tróc cña c¸c ch©n trªn port0,port1vµ port3,port2
H×nh 3. CÊu tróc cña c¸c ch©n trªn port 0(P0.0-P0.7)
H×nh 4. CÊu tróc cña c¸c ch©n trªn port 1 vµ port 3(P1.0-P1.7vµ P3.0-P3.7)
9
Trng HCN H Ni Khoa in t


Hình 5. Cấu trúc của các chân trên port 2 (P2.0-P2.7)
C. Các thanh ghi.
1. Các thanh ghi Port xuất nhập:
Các Port cua 8051 bao gồm port 0 ỏ địa chỉ 80H.port1 ỏ dịa chỉ 90H,port2 ỏ địa chỉ
A0H và port 3 ỏ địa chỉ B0H.Tất cả các port dều đợc địa chỉ hoá tùng bit .Điều đó cung cấp
một khả năng giao tiếp thuận lợi.
2. Các thanh ghi TIMER:
8051 chứa 2 bộ định thời đếm 16bit đợc dùng trong việc định thời hoạc đém sự
kiện.Timer0 ở địa chỉ 8AH(TLO:byte thấp) và 8CH (THO:byte cao)Timer1 ở địa chỉ 8BH
(TL1 byte thấp)và 8DH(TH1:byte cao).Việc vận hành của Timer đợc set bởi thanh ghi
Timer MODE(TMOD)ở địa chỉ 89H cà thanh ghi điều khiển timer(TCON)ở địa chỉ
88H.Chỉ có TCON đợc địa chỉ hoá từng bit.
3. Các thanh ghi Port nối tiếp:
8051 chứa một port nối tiếp trên chip dành cho việc trao đổi thông tin với các thiết bị nối
tiếp nh máy tính, Modern hoặc cho việc giao tiếp với các IC khác có giao tiếp nối tiếp (có
bộ chuyển đổi A/D,các thanh ghi dịch ). Một thanh ghi gọi la bộ đệm dữ liệu nối tiếp
(SBUF) ở địa chỉ 99H sẽ dữ cả hai vai trò truyền và nhận dữ liệu.Khi truyền dữ liệu thì ghi
lên SBUF, khi nhận dữ liệu thì đọc SBUF. Các MODE vận hành khác nhau đợc lập trình
qua thanh ghi diều khiển Port nối tiếp (SCON) đợc dịa chỉ hoá từng bit ở địa chỉ 98H.
4. Các thanh ghi ngắt :
10
Trng HCN H Ni Khoa in t

8051 có cấu trúc 5 nguồn ngắt , 2 mức u tiên.Các ngắt bị cấm sau khi reset hệ thống và sẽ
đợc cho phép bằng việc thanh ghi cho phép ngắt (IE) ở địa chỉ 8AH. Cả hai thanh ghi đợc
địa chỉ hoá từng bit.
5. Hoạt động của bộ định thời(timer)
8051 có 3 timer 16 bit, mỗi timer có 4 cách làm việc. Ngời ta sử dụng các timer để :
.Định khoảng thời gian

.Đếm sự kiện
.Tạo tốc độ BAUD cho Port nối tiếp trong 8051
a) Thanh ghi chế độ(TMOD)
Thanh ghi TMOD chứa 2 nhóm 4bit dùng để đặt chế dộ làm việc cho timer0 và timer1.
b) Thanh ghi điều khiển timer (TCON)
Thanh ghi TCON chứa các bit trạng thái và các bit điều khiển cho timer 0 và timer 1.
Bit Ký hiệu địa chỉ Mô tả
TCON.7 TF1 8FH Cở báo tràn TIMER 1. Đợc đặt bởi phần cứng, khi
tràn đợc xóa bằng phần mềm, hay phần cững khi bộ
xử lý chỉ đến chơng trình phục vụ ngắt
TCON.6 TR1 8EH Bit điều khiển timer 1 chạy, đặt và xóa bằng phần
mềm.
11
Trng HCN H Ni Khoa in t

TCON.5 TF0 8DH Cờ báo tràn Timer 0, tơng tự nh Timer 1.
TCON.4 TR0 8CH Bit điều khiển chạy cho Timer 0. đặt xóa bằng phần
mềm.
TCON.3 IE1 8BH Cờ báo ngắt 1 bên ngoài.
TCON.2 IT1 8AH Cờ ngắt do Timer 1
TCON.1 IE0 89H Cờ báo ngắt do Timer 0
TCON.0 IT0 88h Cờ ngắt do Timer 0
c) Các chế độ timer.
.Chế độ 0-chế độ timer 13bit
Để tơng thích với 8048(có trớc 8051), ba bit cao của TLX(TL0 /hoặc TL1) không dùng
Xung nhịp timer
Cờ báo tràn
chế độ 1-chế độ timer 16bit.
Hoạt động nh timer 16 bit đầy đủ.Cờ báo tràn la bit TFx trong TCON có thế đọc hoạc ghi
bằng phần mềm .

MSB của giá trị trong các thanh ghi timer là bit7 của THx và LBS là bit 0 của TLx .Các
thanh ghi timer (TLx/THx)có thể đọc hoặc ghi bắt cứ lúc nào bằng phần mềm.

Xung nhịp timer

Cờ báo tràn
.Chế độ 2 chế độ 8 bit tự nạp lại
TLx hoạt động nh một timer 8 bit,trong khi đó THx vẫn giữ nguyên giá trị đợc nạp .Khi số
đếm tràn từ ffH đến 00H,không những cờ timer đợc set mà giá trị trong THx động thời đợc
nạp vào TLx .Việc đếm tiếp tục từ giá trị naỳ đến ffH xuống 00Hvà nạp lại CHế độ này rất
thông dụng vì sự tràn timer sảy ra trong khoảng thời gian nhất định và tuần hoàn khi đã
khởi động TMOD và THx.
12
TFxTLx THx
(5 bit) (8 bit)
TFxTLx THx
(8 bit) (8 bit)
Trng HCN H Ni Khoa in t



.Chế độ 3 chế độ tách timer
Timer 0 tách làm 2 titmer 8 bit (TL0&TH0) ,TL0 có cờ báo tràn là TF0 và TH0 có cờ báo
tràn là TF1 .
Timer 1 ngng ở chế độ 3 , nhng có thể đợc khởi động bằng cách chuyển sang chế độ khác
Giới hạn duy nhất là cờ báo tràn TF1 không còn bị tác động khi timer 1 bị tràn vì nó đẫ đợc
nối tới TH0.
Khi timer 0 ở chế độ 3 có thể cho timer 1 chạy và ngng bằng cách chuyển nó ra ngoài và
vào chế độ 3 . Nó vẫn có thể đợc sử dụng bằng port nối tiếp nh bộ tạo tốc độ baund hoặc nó
có thể đợc sử dụng bằng bất cứ cách nào không cần ngắt (vì nó không còn đợc nối với

TF1).
13
TFx
TLx THx
(5 bit) (8 bit)
Trng HCN H Ni Khoa in t

6. Hoạt động port nối tiếp.
Bit ký hiệu địa chỉ Mô tả
SCON.7 SM0 9FH
SCON.6 SM1 9EH
SCON.5 SM2 9DH
SCON.4 REN 9CH
SCON.3 TB8 9BH
SCON.2 RB8 9AH
SCON.1 TI 99H
SCON.0 RI 98H
-Bit 0 của chế độ port nối tiếp
-Bit 1 của chế độ port nối tiếp
-Bit 2 của chế độ 2 nối tiếp
Cho phép truyền thông đa xử lý trong các chế
độ 2 và 3 ,RI sẽ không bị tác động
Nếu bit thứ 9 thu đợc bằng 0
-cho phép thu (đặt bằng 1)
-bit 8 phát bit thứ 9 đợc phát các chế độ 2 và 3
-bit 8 thu bit thứ 9
-cờ ngắt phát ,đặt lên 1 khi kết thúc phát
-cờ ngắt thu ,đặt lên 1 khi kết thúc nhận
14
Trng HCN H Ni Khoa in t


Bảng 2.7:Tóm tắt thanh ghi chế độ port nối tiếp SCON.
Các chế độ hoạt động của PORT nối tiếp
Port nối tiếp có 4 chế độ hoạt động :
1) Chế độ 0 :
2) Chế độ 1 : -
3) Chế độ 2 :
4) Chế độ 3 :
7. Các ngắt của 8051:
Các ngắt Timer.
Các ngắt cổng nối tiếp.
Các ngắt ngoài.
Chơng II
đồng hồ số hiển thị bằng 8 led 7 đoạn
I. Các thiết bị sử dụng trong mạch :
Mch ng h s hin th ngày và giờ bằng 8 led 7 thanh thực chất là 1 mạch
điện chia và hiển thị thời gian bằng led 7 đoạn từ xung nhịp thạch anh ngày nay
c sử dụng rt rng rãi trong thc t.ở mạch này chúng ta sử dụng led 7 thanh
kép gồm 4 led đơn gắn trên cùng một con led gọi là MPX4-CA để hiển thị.
Nguyên lý hiển thị quét led:đa điện áp vào từng led một rồi đa dữ liệu ra các
thanh dữ liệu,tất cả các thanh hiển thị của led đều nối chung trên bus dữ liệu
7 bit,muốn sáng led nào thì đa dữ liệu ra bus đồng thời cấp nguồn riêng cho
katot cua led đó,ở mạch này hiển thị bằng 8 led 7 đoạn,để điều khiển cho 8
led 7 đoạn, ta sử dụng 8 đờng dây điều khiển để cấp nguồn cho các led và 8
đờng dây dữ liệu chung cho tất cả các led( 7 đờng nếu không cần dấu
chấm). Việc hiển thị đợc thực hiện bằng cách lần lợt cấp nguồn cho từng led
và đa số liệu tơng ứng của led đó ra 8 đờng dây dữ liệu. Nh vậy thực chất thì
tại 1 thời điểm chỉ có 1 led hoạt động, còn các led khác không hoạt động vì
15
Trng HCN H Ni Khoa in t


không đợc cấp nguồn. Tuy nhiên do đặc tính lu ảnh trên võng mạc của mắt
ngời mà ta nhìn thấy tất cả các led đang hoạt động.
Ngoài các linh kiện trên, ta còn dùng tới 4 nút nhấn,nguồn pin dự phòng, các
điện trở, các transistor .
Sử dụng tran thuận NPN(A1015) để kích mở cho tran vì có đặc tính hút dòng
( cấp nguồn gián tiếp qua tran)
2tụ và thạch anh12M để tạo xung.
16
Trường ĐHCN Hà Nội Khoa điện tử

17
Kiểm tra
phím MODE
có bấm
không
Chế độ hiển thị
ngày tháng năm
Chế độ hiển thị
giờ phút giây
đếm giây = số
lần tràn timer1
Kiểm tra
phím menu
Bấm?
Trng HCN H Ni Khoa in t

II- LƯU Đồ THUậT TOáN:





sai sai
đúng
Không cho ngắt bằng timer 1
18
Khởi tạo cho các timer
(Timer 0 cho tạo trễ, timer 1 cho đếm, cho phép ngắt bằng timer 1)
chỉnh sửa
giờ phút
giây
chỉnh sửa
ngày tháng
năm
Trường ĐHCN Hà Nội Khoa điện tử


M· nguån ch¬ng tr×nh
#include<reg52.h>
#include<stdio.h>
sbit mode = P1^4;
sbit status_ =P1^5;
sbit up_ = P1^6;
sbit down_ = P1^7;
unsigned int vi_tri,logic_mode;
unsigned long k;
unsigned char
so[10]={0XC0,0XF9,0XA4,0XB0,0X99,0X92,0X82,0XF8,0X80,0X90};
unsigned int gio,phut,giay,ngay,thang,nam;
void set_reg (void);

unsigned char date_mon (unsigned char month, unsigned char year );
void delay_ms (unsigned int time);
void clear (void);
void quet_gio (void);
void quet_phut (void);
void quet_giay (void);
void gio_phut_giay (void);
void quet_ngay (void);
void quet_thang (void);
void quet_nam (void);
void ngay_thang_nam (void);
void scan_mode (void);
void dat_gio (void);
void dat_phut (void);
void dat_giay(void);
void dat_ngay (void);
void dat_thang (void);
void dat_nam (void);
19
Trường ĐHCN Hà Nội Khoa điện tử

void scan_vitri (void);
void up_date (void);
void up_time (void);
//===========================================
=======
void main (void)
{
set_reg();
while (1)

{
scan_mode();
if (status_ ==0)
{
while (status_ ==0);
EA=0;TR1=0;
vi_tri =vi_tri+1;
if (vi_tri ==5)
{vi_tri=0;
IE=0X88;EA=1;
TH1=-1000/256;
TL1=-1000%256;
TF1 = 0;TR1=1;}
}
scan_vitri();
}
}
void set_reg (void)
////////////////////////////////
{
gio = 13; ngay = 22;
phut = 15; thang = 11;
giay = 30; nam = 9 ;
k = 0 ; vi_tri = 0 ;
logic_mode =1;
IE = 0X88;
TMOD = 0X10;
EA = 1 ;
TH1 = -1000/256;
TL1 = -1000%256;

20
Trường ĐHCN Hà Nội Khoa điện tử

TR1 = 1 ;
TF1 = 1 ;
}
unsigned char date_mon (unsigned char month, unsigned char year )
{
unsigned char date_m; //ham tinh toan cho nam nhuan
switch (month)
{
case 1: date_m = 31 ; break;
case 2: if ((year %4)==0)
date_m = 28;
else
date_m = 29 ; break;
case 3: date_m = 31 ; break;
case 5: date_m = 31 ; break;
case 7: date_m = 31 ; break;
case 8: date_m = 31 ; break;
case 10: date_m = 31 ; break;
case 12: date_m = 31 ; break;
case 4: date_m = 30 ; break;
case 6: date_m = 30 ; break;
case 9: date_m = 30 ; break;
case 11: date_m = 30 ; break;
}
return (date_m);
}
///////////////////////////////

void delay_ms (unsigned int time)
{
unsigned int i;//ham tre dung timer 0

//unsigned char j;
for (i=time;i>0;i )
{TMOD=0X01;
TH0=-1000/256;
TL0=-1000%256;TR0=1;
while(!TF0); TR0=0;TF0=0;
}
21
Trường ĐHCN Hà Nội Khoa điện tử

// for (j=100;j>0;j );*/
}
void clear (void)
{
P0=0XFF;
P2=0XFF;
delay_ms (2);
}
void quet_gio (void)
{
clear();P2=0X7F; //1
P0=so[gio/10]; delay_ms(2);
clear();P2=0XBF; //2
P0=so[gio%10]; delay_ms(2);
}
void quet_phut (void)

{
clear();P2=0XEF; //4
P0=so[phut/10];delay_ms(2);
clear();P2=0XF7; //5
P0=so[phut%10];delay_ms(2);
}
void quet_giay (void)
{
clear();P2=0XFD; //7
P0=so[giay/10];delay_ms(2);
clear();P2=0XFE; //8
P0=so[giay%10];delay_ms(2);
}
void gio_phut_giay (void)
{
quet_gio();
clear(); P2=0XDF; //3
P0=0XBF; delay_ms(2);
quet_phut();
clear();P2=0XFB; //6
P0=0XBF; delay_ms(2);
quet_giay();
}
22
Trường ĐHCN Hà Nội Khoa điện tử

void quet_ngay (void)
{
clear();P2=0X7F; //1
P0=so[ngay/10];delay_ms(2);

clear();P2=0XBF; //2
P0=so[ngay%10];delay_ms(2);
}
void quet_thang (void)
{
clear();P2=0XEF; //4
P0=so[thang/10];delay_ms(2);
clear();P2=0XF7; //5
P0=so[thang%10];delay_ms(2);
}
void quet_nam (void)
{
clear();P2=0XFD; //7
P0=so[nam/10];delay_ms(2);
clear();P2=0XFE; //8
P0=so[nam%10];delay_ms(2);
}
void ngay_thang_nam (void)
{
quet_ngay();
clear();P2=0XDF; //3
P0=0XBF;delay_ms(2);
quet_thang();
clear();P2=0XFB; //6
P0=0XBF;delay_ms(2);
quet_nam();
}
//
////////////////////////////
void scan_mode (void)

{
if ((logic_mode==1) && (mode==0))
{
while (mode==0);
logic_mode=0;
23
Trường ĐHCN Hà Nội Khoa điện tử

}
if ((logic_mode==0) && (mode==0))
{
while (mode==0);
logic_mode=1;
}
}
//===========================================
=======
void dat_gio (void)
{if (up_ ==0)
{while (up_ ==0);
gio = gio+1;
if (gio>=24) gio = 0;
}
if (down_ ==0)
{while (down_ ==0);
gio = gio -1;
if (gio==0) gio=24 ;
}
}
void dat_phut (void)

{if (up_ ==0)
{while (up_ ==0);
phut = phut +1;
if (phut>=60) phut=0;
}
if (down_ ==0)
{while (down_ ==0 );
phut = phut-1;
if (phut==0) phut=60;
}
}
void dat_giay (void)
{ if (up_==0)
{while(up_==0);
giay=giay+1;
if (giay==60) giay=0;
}
24
Trường ĐHCN Hà Nội Khoa điện tử

if (down_==0)
{ while(down_==0);
giay=giay-1;
if( giay==0) giay=59;
}
}
void dat_ngay (void)
{if (up_ ==0)
{while (up_ ==0);
ngay = ngay +1;

if (ngay >(date_mon (thang, nam)))ngay = 1;
}
if (down_ ==0)
{while (down_ ==0);
ngay = ngay -1;
if (ngay==0) ngay = date_mon (thang,nam);
}
}
void dat_thang (void)
{if (up_ ==0)
{while (up_ ==0);
thang = thang +1;
if (thang >12) thang =1;
}
if (down_ ==0)
{while (down_ ==0);
thang = thang -1;
if (thang == 0) thang=12;
}
}
void dat_nam (void)
{if (up_ ==0)
{while (up_ ==0);
nam = nam +1;
if (nam>99) nam=0;
}
if (down_ ==0)
{while (down_ ==0);
25

×