2. DKS_GROUP Microcontroller Training Center
DKS_GROUP - 2 - www.EmbestDKS.com 04868
M C L C
Bài 1: Gi i thi u v vi i u khi n 3
1.1.Tiêu chu n trong l a ch n m t b vi i u khi n 3
1.2.Vi i u khi n và vi x lí 3
1.3.Sơ chân vi i u khi n 8051 3
1.4.M ch 8051 t i thi u 6
1.5.C u trúc sơ kh i c a vi i u khi n 7
1.6.Các thành viên khác c a h 8051 9
1.7.Ram n i và các thanh ghi SFR c a 8051 11
Bài 2.Ngôn ng l p trình cho vi i u khi n (Ph n 1) 12
2.1.C u trúc m t chương trình 12
2.2.Các lo i bi n trong C 13
2.3.Hàm trong C 15
2.4.Toán t cơ b n 15
2.5.C u trúc l nh r nhánh 15
2.6.B ti n x lý 16
Bài 2.Hư ng d n s d ng keil C (Ph n 2) 17
2.1.Kh i t o project 17
2.2.So n th o chương trình 36
2.3.D ch chương trình 41
2.4.Mô ph ng 45
Bài 3. i u khi n O(out) v i Led ơn 50
3.1.L p m ch 50
3.2.Nguyên lý ho t ng 51
3.3.L p trình 52
3.4.N p chương trình 60
3.5.K t qu 61
3.6. i u khi n Led t ng chi c 1 62
3.7. i u khi n Out 62
Bài 4. i u khi n led 7 thanh 67
4.1.L p m ch 67
3. DKS_GROUP Microcontroller Training Center
DKS_GROUP - 3 - www.EmbestDKS.com 04868
4.2.Nguyên lý ho t ng 68
4.3.L p trình 69
4.4.N p chíp 75
4.5.K t qu 75
Bài 5. c bàn phím 78
5.1.L p m ch 78
5.2.Nguyên lý quét phím 79
5.3.L p trình 79
Bài 6. i u khi n LCD 16x2 94
6.1.L p m ch 94
6.2.Nguyên lý ho t ng c a LCD 97
6.3.L p trình 97
6.3.1. nh nghĩa con tr 99
6.3.2.Cách s d ng 99
Bài7. i u ch r ng xung 100
7.1.L p m ch theo sơ 101
7.2.Nguyên lý ho t ng 110
Bài 8.Led ma tr n 114
8.1.L p m ch 114
8.2.Nguyên lý ho t ng 116
8.2.Code 117
4. DKS_GROUP Microcontroller Training Center
DKS_GROUP - 4 - www.EmbestDKS.com 04868
Chú ý : ây hoàn toàn là ph n lí thuy t, mình ã rút g n t i a, do ó các b n nên c
h t. Chưa nên th c hành v i vì tôi s hư ng dân sau.
1.1 Tiêu chu n trong l a ch n m t b vi i u khi n
Là kh năng s n sàng áp ng v s lư ng trong hi n t i và tương lai. i v i m t s
nhà thi t k i u này là quan trong hơn c . Hi n nay, các b vi i u khi n 8 bit ng
u là h 8051 có s lương l n nh t các nhà cung c p a d ng (nhi u ngu n). Nhà
cung c p có nghĩa là nhà s n xu t bên c nh nhà sáng ch c a b vi i u khi n. Trong
trư ng h p 8051 thì nhà sáng ch c a nó là Intel, nhưng hi n nay có r t nhi u hãng
s n xu t nó (cũng như trư c kia ã s n xu t).
Các hãng này bao g m: Intel, Atmel, Philips/signe-tics, AMD, Siemens, Matra
và Dallas, Semicndictior.
B ng a ch c a m t s hãng s n xu t các thành viên c a h 8051.
Hãng a ch Website
Intel
Antel
Plips/ Signetis
Siemens
Dallas Semiconductor
www.intel.com/design/mcs51
www.atmel.com
www.semiconductors.philips.com
www.sci.siemens.com
www.dalsemi.com
8051 là m t b x lý 8 bit có nghĩa là CPU ch có th làm vi c v i 8 bit d
li u t i m t th i i m. D li u l n hơn 8 bit ư c chia ra thành các d li u 8 bit
cho x lý. 8051 có t t c 4 c ng vào - ra I/O m i c ng r ng 8 bit. Các nhà s n xu t ã
cho xu t xư ng ch v i 4K byte ROM trên chíp.
B ng các c tính c a 8051 u tiên.
c tính S lư ng
ROM trên chíp
RAM
B nh th i
Các chân vào - ra
C ng n i ti p
Ngu n ng t
4K byte
128 byte
2
32
1
6
1.2.Vi i u khi n và vi x lí:
Xin nh c n cái máy tính c a b n, con chíp Intel hay ADM c a b n là 1 b vi x lí,
nó không có RAM, ROM,c ng IO và các thi t b ngo i vi on Chip. Còn vi i u khi n
ch a 1 b vi x lí và RAM,ROM, c ng IO, và có th có các thi t b ngo i vi.
1.3. Sơ chân vi i u khi n 8051:
Là IC óng v d ng DIP có 40 chân, m i chân có m t kí hi u tên và có các ch c năng
như sau:
Chân 40: n i v i ngu n nuôI +5V.
Chân 20: n i v i t(Mass, GND).
Chân 29 (PSEN)(program store enable) là tín hi u i u khi n xu t ra c a 8051, nó
cho phép ch n b nh ngoài và ư c n i chung v i chân c a OE (Outout Enable) c a
EPROM ngoài cho phép c các byte c a chương trình. Các xung tín hi u PSEN
h th p trong su t th i gian thi hành l nh. Nh ng mã nh phân c a chương trình ư c
5. DKS_GROUP Microcontroller Training Center
DKS_GROUP - 5 - www.EmbestDKS.com 04868
c t EPROM i qua bus d li u và ư c ch t vào thanh ghi l nh c a 8051 b i mã
l nh.(chú ý vi c c ây là c các l nh (khác v i c d li u), khi ó VXL ch c
các bit opcode c a l nh và ưa chúng vào hàng i l nh thông qua các Bus a ch và
d li u)
Chân 30 (ALE : Adress Latch Enable) là tín hi u i u khi n xu t ra c a 8051, nó cho
phép phân kênh bus a ch và bus d li u c a Port 0.
Chân 31 (EA : Eternal Acess) ư c ưa xu ng th p cho phép ch n b nh mã ngoàI
i v i 8051.
i v i 8051 thì : EA = 5V : Ch n ROM n i. EA = 0V : Ch n ROM ngo i.
32 chân còn l i chia làm 4 c ng vào ra:
Vào ra t c là có th dùng chân ó c m c logic (0;1 tương ng v i 0V ; 5V)vào
hay xu t m c logic ra(0;1)
P0 t chân 39 32 tương ng là các chân P0_0 P0_7
P1 t chân 1 8 tương ng là các chân P1_0 P1_7
P2 t chân 21 28 tương ng là các chân P2_0 P2_7
P3 t chân 10 17 tương ng là các chân P3_0 P3_7
Riêng c ng 3 có 2 ch c năng m i chân như trên hình v :
P3.0 – RxD : chân nh n d li u n i ti p khi giao ti p RS232(C ng COM ).
P3.1 _ TxD : phân truy n d li u n i ti p khi giao ti p RS232.
P3.2 _ INTO : interrupt 0 , ng t ngoài 0.
P3.3 _ INT1: interrupt 1, ng t ngoài 1.
P3.4 _T0 : Timer0 , u vào timer0.
P3.5_T1 : Timer1, u vào timer 1.
P3.6_ WR: Write, i u khi n ghi d li u.
P3.7 _RD: Read , i u khi n c d li u.
Chân 18, 19 n i v i th ch anh t o thành m ch t o dao ng cho V K
P0 P1 P2 P3 Port's Bit
P0.0 P1.0 P2.0 P3.0 D0
P0.1 P1.1 P2.1 P3.1 D1
P0.2 P1.2 P2.2 P3.2 D2
P0.3 P1.3 P2.3 P3.3 D3
P0.4 P1.4 P2.4 P3.4 D4
P0.5 P1.5 P2.5 P3.5 D5
P0.6 P1.6 P2.6 P3.6 D6
P0.7 P1.7 P2.7 P3.7 D7
U1
AT89C51
31
19
18
9
12
13
14
15
1
2
3
4
5
6
7
8
39
38
37
36
35
34
33
32
21
22
23
24
25
26
27
28
17
16
29
3011
10
40
20
EA/VP
X1
X2
RESET
INT0
INT1
T0
T1
P1.0
P1.1
P1.2
P1.3
P1.4
P1.5
P1.6
P1.7
P0.0
P0.1
P0.2
P0.3
P0.4
P0.5
P0.6
P0.7
P2.0
P2.1
P2.2
P2.3
P2.4
P2.5
P2.6
P2.7
RD
WR
PSEN
ALE/PTXD
RXD
VCC
VSS
6. DKS_GROUP Microcontroller Training Center
DKS_GROUP - 6 - www.EmbestDKS.com 04868
T n s th ch anh thư ng dùng trong các ng d ng là : 11.0592Mhz(giao ti p v i c ng
com máy tính) và 12Mhz T n s t i a 24Mhz. T n s càng l n V K x lí càng
nhanh.
Dao ng c a th ch anh
S1 S2 S3 S4 S5
S6
P1 P2
Riêng c ng 3 có thêm ch c năng như dư i ây
P3.0 – RxD : chân nh n d li u n i ti p khi giao ti p RS232(C ng COM ).
P3.1 _ TxD : ph n truy n d li u n i ti p khi giao ti p RS232.
P3.2 _ INTO : interrupt 0 , ng t ngoài 0.
P3.3 _ INT1: interrupt 1, ng t ngoài 1.
P3.4 _T0 : Timer0 , u vào timer0.
P3.5_T1 : Timer1, u vào timer 1.
P3.6_ WR: Write, i u khi n ghi d li u.
P3.7 _RD: Read , i u khi n c d li u.
Chân 18, 19 n i v i th ch anh t o thành m ch t o dao ng cho V K
T n s th ch anh thư ng ư c dùng trong các ng d ng là : 11.0592Mhz(giao ti p
v i c ng com máy tính) và 12Mhz
T n s t i a 24Mhz. T n s càng l n V K x lý càng nhanh.
U3
8051
31
19
18
9
39
38
37
36
35
34
33
32
20
40
EA/VP
X1
X2
RESET
P0.0
P0.1
P0.2
P0.3
P0.4
P0.5
P0.6
P0.7
GND
VCC
R1
10K
5VDC
C1
33p
+ C3
10uF/25V
C2
33p
R7
R4
10Kx9
R9
12Mhz
7. DKS_GROUP Microcontroller Training Center
DKS_GROUP - 7 - www.EmbestDKS.com 04868
M ch này chưa có kh i ngu n t o ngu n 5V các b n dùng con IC sau:
Sơ chân:
Gi i thi u IC n áp 7805 : u vào > 7V u ra 5V 500mA. M ch n áp: c n cho
V K vì n u ngu n cho V K không n nh thì s treo V K, không ch y úng, ho c
reset liên t c, th m chí là ch t chíp.
M ch ngu n
U1
LM7805/TO
1
2
3
VIN
GND
VOUT
+ C3
10uF/25V
12VDC In
C2
104
5VDC Out
C1
104
1.4. M ch vi i u khi n cơ b n
12Mhz
U1
8051
19
18
9
40
20 X1
X2
RESET
VCC
VSS
+ C3
10uF/25V
5VDC
R1
10K
C2
33p
C1
33p
U6
LM7805/TO
1 3
2
VIN VOUT
GND
8. DKS_GROUP Microcontroller Training Center
DKS_GROUP - 8 - www.EmbestDKS.com 04868
1.5. C u trúc vi i u khi n 89c51
Chú ý:Sơ kh i bên trong con 8051 có nh ng tài nguy n . Interrupt, Ram, Timer,
Serial prort.
1.6.Các thành viên khác c a h 8051:
Có hai b vi i u khi n thành viên khác c a h 8051 là 8052 và 8031.
B vi i u khi n 8052: 8052 có t t c các c tính chu n c a 8051 ngoài ra nó có
thêm 128 byte RAM và m t b nh th i n a. Hay nói cách khác là 8052 có 256 byte
RAM và 3 b nh th i. Nó cũng có 8K byte ROM. Trên chíp thay vì 4K byte như
8051.
B ng : So sánh các c tính c a các thành viên h 8051.
c tính 8051 8052
ROM trên chip 4K byte 8K byte
RAM 128 byte 256 byte
B nh th i 2 3
C ng n i ti p 1 1
Ngu n ng t 6 8
Do v y t t c m i chương trình vi t cho 8051 u ch y trên 8052 nhưng i u
ngư c l i là không úng. c bi t : M t nhà s n xu t chính c a h 8051 khác n a là
Philips Corporation. Hàng này có m t d i l a ch n d ng l n cho các b vi i u khi n
COUNTER
INPUTS
OS
C
INTERRUP
T
CONTROL
4 I/O
PORTS
BUS
CONTRO
L
SERIAL
PORT
EXTERNAL
INTERRUPTS
CPU
ON -
CHIP
RAM
ETC
TIMER
0
TIMER
1
ADDRESS/DAT
A
TXD RXDP P P P
9. DKS_GROUP Microcontroller Training Center
DKS_GROUP - 9 - www.EmbestDKS.com 04868
h 8051. Nhi u s n ph m c a hãng ã có kèm theo các c tính như các b chuy n
i ADC, DAC, chân PWM, c ng I/0 m r ng .
Update s n ph m 8051 m i t i các trang web c a các nhà s n xu t a ch ã
có ph n gi i thi u. Ch y u:www.atmel.com
1.7.Ram n i và các thanh ghi
C c thanh ghi SFR
cú a ch n m gi a 80H
và FFH các a ch này
F0 F7 F6 F5 F4 F3 F2 F1 F0
E0 E7 E6 E5 E4 E3 E2 E1 E0
D0 D7 D6 6D 6C 6B 6A 69 68
B8 - - - BC BB BA B9 B8
B0 B7 B6 B5 B4 B3 B2 B1 B0
A8 AF AE AD AC AB AA A9 A8
A0 A7 A6 A5 A4 A3 A2 A1 A0
99 Không nh a ch t ng bít
98 9F 9E 9D 9C 9B 9A 99 98
90 97 96 95 94 93 92 91 90
8D Không nh a ch t ng bít
8C Không nh a ch t ng bít
8B Không nh a ch t ng bít
8A Không nh a ch t ng bít
89 Không nh a ch t ng bít
88 8F 8
E
8D 8C 8B 8A 89 88
87 Không nh a ch t ng bít
83 Không nh a ch t ng bít
82 Không nh a ch t ng bít
81 Không nh a ch t ng bít
80 87 86 8
5
84 83 82 81 80
THANH GHI CH C NĂNG ĂC BIÊT
10. DKS_GROUP Microcontroller Training Center
DKS_GROUP - 10 - www.EmbestDKS.com 04868
trên 80H, vì các a ch t 00 n 7FH là a ch c a b nh RAM bên trong
8051. Không ph i t t c m i a ch t 80H n FFH u do SFR s d ng, nhưng
v trí ngăn nh t 80H n FFH chưa dùnglà d tr và l p trình viên 8051 cũng
không ư c s d ng.
B ng : ch c năng c a thanh ghi ch c năng c bi t SFR
SFR nh a ch t ng bit( nh ng thanh ghi c n nh i khi l p trình cơ b n C)
Thanh ghi /
Bit
Ký hi u Ch c năng
TMOD Ch n model cho b nh th i 1
7 GATE Bít i u khi n c ng. Khi ư c set lên 1, b nh
th i ch ho t ng trong khi INT1 m c cao
6 C/T Bít ch n ch c năng m ho c nh th i:
1= m s ki n
0= nh th i trong m t kho ng th i gian
5 M1 Bit ch n ch th nh t
4 M0 Bit ch n ch th 2
M1 M0 Châ
®Ð
Chøc n¨ng
0 0 0 Ch nh th i 13 bit
0 1 1 Ch nh th i 16 bit
1 0 2 Ch t ng n p l i 8
bit
1 1 3 Ch nh th i chia x
3 GATE Bit i u khi n c ng cho b nh th i 0
2 C/T Bit ch n ch c năng m / nh th i cho b nh
th i 0
1 M1 Bit ch n ch th nh t cho b nh th i 0
0 M0 Bit ch n ch th 2 cho b nh th i 0
TF1 TR1 TF1 TR0 IE1 IT1 IE0 IT0
Thanh ghi / Bit Ký hi u Ch c năng
TCON i u khi n b inh th i
TCON.7 TF1 C tràn c a b nh th i 1. C này ư c set b i
ph n c ng khi có tràn, ư c xoá b i ph n m m,
ho c b i ph n c ng khi b vi x lý tr n trình
ph c v ng t
TCON.6 TR1 Bit i u khi n ho t ng c a b nh th i 1. Bit
này ư c set ho c xoá b i ph n m m i u
khi n b nh th i ho t ng hay ngưng
TCON.5 TF0 C tràn c a b nh th i 0
TCON.4 TR0 Bit i u khi n ho t ng c a b nh th i 0
TCON.3 IE1 C ng t bên ngoài 1 (kích kh i c nh). C này
ư c set b i ph n c ng khi có c nh âm (cu ng)
xu t hi n trên chân INT1, ư c xoá b i ph n
m m, ho c ph n c ng khi CPU tr n trình
ph c v ng t
11. DKS_GROUP Microcontroller Training Center
DKS_GROUP - 11 - www.EmbestDKS.com 04868
TCON.2 IT1 C ng t bên ngoài 1 (kích kh i c nh ho c m c).
C này ư c set ho c xoá b i ph n m m khi x y
ra c nh âm ho c m c th p t i chân ng t ngoài
TCON.1 IE0 C ng t bên ngoài 0 (kích kh i c nh)
TCON.0 IT0 C ng t bên ngoài 0 ( kích kh i c nh ho c m c)
EA ET2 ES ET1 EX1 EX0 ET0
i u khi n các ngu n ng t
IE (0: không cho phép; 1: cho phép)
IE.7 EA Cho phép/ không cho phép toàn c c
IE.6 --- Không s d ng
IE.5 ET2 Cho phép ng t do b nh th i 2
IE.4 ES Cho phép ng t do port n i ti p
IE.3 ET1 Cho phép ng t cho b nh th i 1
IE.2 EX1 Cho phép ng t t bên ngoài (ng t ngoài 1)
IE.1 EX0 Cho phép ng t t bên ngoài (ng t ngoài 0)
IE.0 ET0 Cho phép ng t do b nh th i 0
CHÚ Ý
3 thanh ghi này cũng r t cơ b n, nh tên thanh ghi, tên các bít trong thanh ghi,
ch c năng t ng thanh ghi và t ng bít trong thanh ghi.
1.8.Gi i thi u sơ qua các ngu n ng t:
Ng t do C a ch vector
Reset h th ng RST 0000H
Ng t ngoài 0 IE0 0003H
B nh th i 0 TF0 000BH
Ng t ngoài 1 IE1 0013H
B nh th i 1 TF1 001BH
Port n i ti p RI ho c TI 0023H
B nh th i 2 TF2 ho c EXF2 002BH
Timer
* ** * ** * **
Main Program
Main
ISR
Main
ISR
Main
ISR
Main
Program excution without interrut
Program excution with interrupt.
12. DKS_GROUP Microcontroller Training Center
DKS_GROUP - 12 - www.EmbestDKS.com 04868
M t chương trình chính không có ng t thì ch y liên t c, còn chương trình có
ng t thì c khi nào i u ki n ng t ư c m bào thì con tr s nh y sang hàm ng t
th c hi n xong hàm ng t l i quay v úng ch cũ và th c hi n ti p chương trình. Ta
có 1 ví d như sau: B n ang ăn cơm , có ti ng i n tho i , b n t bát cơm ra nghe
i n tho i , nghe xong l i quay v bưng bát cơm lên ăn ti p. Thì quá trình ăn cơm c a
b n là chương trình chính,có i n tho i g i n là i u ki n ng t, b n ra nghe i n
tho i là th c hi n chương trình ng t(Interrupt Service Rountine),quay v ăn cơm ti p
là ti p t c th c hi n chương trình chính.
Ng t i v i ngư i m i h c vi i u khi n là r t khó hi u, vì a s các tài li u u
không gi i thích ng t làm gì. Có nhi u lo i ng t khác nhau nhưng t t c u có
chung 1 c i m, ng t dùng cho m c ích a nhi m. a t c là nhi u, nhi m t c là
nhi m v . Th c hi n nhi u nhi m v .Các b n nhìn vào ti n trình c a hàm main v i
chương trình có ng t :
Chương trình chính ang ch y, ng t x y ra, th c hi n hàm ng t r i quay l i chương
trình chính. Chương trình trong vi i u khi n khác v i ví d ăn cơm nghe i n tho i
c a tôi ch , th i gian th c hi n hàm chính là r t l n,th i gian th c hi n hàm ng t
là r t nh , cho nên th i gian th c thi hàm ng t không nh hư ng nhi u l m ên ch c
năng hàm chính. Như v y trong hàm ng t các b n làm 1 vi c, trong hàm chính các
b n làm 1 vi c
như v y coi như các b n làm ư c 2 vi c( a nhi m) trong 1 quang th i gian tương i
ng n cõ mS, ch th c ra t i 1 th i i m vi i u khi n ch th c thi 1 l nh.
Ví d : B n th nghĩ xem làm th nào v a i u ch xung PWM i u ch nh t c
ng cơ , v a c các c m bi n u vào mà t c ng cơ ph thu c u vào c m
bi n.
2.1.C u trúc m t chương trình:
// ính kèm các file
#include <file.h>
#include <file.c>
//Khai báo bi n toàn c c
unsigned char x,y;
int z;
long n=0;
//Khai báo và nh nghĩa các hàm
void Hàm1(void)
{
…//Các câu l nh
}
void Hàm2(unsigned char x)
{
…//Các câu l nh
}
13. DKS_GROUP Microcontroller Training Center
DKS_GROUP - 13 - www.EmbestDKS.com 04868
//Hàm chính b t bu c chương trình nào cũng ph I có
void main(void)
{
…//Các câu l nh
}
Các câu l nh trong hàm chính có th có l i g i các hàm ã khai báo trên
ho c không
Khi có l i g i hàm nào thì chương trình nh y n hàm ó th c hi n hàm ó xong con
tr l i quay v chương trình chính(hàm main) th c hi n ti p các hàm ho c câu l nh.
Các câu l nh trong C k t thúc b ng d u “;”
Các l i gi I thích ư c t trong d u: M u b ng “/*” k t thúc b ng “*/”
N u l i gi I thích trên 1 dòng thì có th dùng d u: “//”
Khi l p trình nên gi I thích các câu l nh kh i l nh làm gì v sau khi chương trình
l n d s a l i.
2.2.Các lo i bi n trong C:
D ng bi n S Bit S Byte Mi n giá tr
char 8 1 -128 n +127
unsigned char 8 1 0 n 255
short 16 2 -32,768 n +32,767
unsigned short 16 2 0 n 65,535
int 16 2 -32,768 n +32,767
unsigned int 16 2 0 n 65,535
long 32 4
-2,147,483,648
n+2,147,483,647
unsigned long 32 4 0 n 4,294,697,295
Khai báo bi n
C u trúc : Ki u bi n Tên bi n
VD: unsigned char x;
Khi khai báo bi n có th gán luôn cho bi n giá tr ban u.
VD :
Thay vì: unsigned char x;
x=0;
Ta ch c n : unsigned char x=0;
Có th khai báo nhi u bi n cùng m t ki u m t lúc
VD: unsigned int x,y,z;
Ngoài ra dùng cho vi i u khi n trình d ch chuyên d ng còn h tr các lo i bi n
sau:
D ng bi n S Bit S Byte Mi n giá tr
bit 1 0 0 ; 1
sbit 1 0 0 ; 1
14. DKS_GROUP Microcontroller Training Center
DKS_GROUP - 14 - www.EmbestDKS.com 04868
sfr 8 1 0 n 255
sf16 16 2 0 n 65,535
VD:
Ngoài ra ,chúng ta có th nh nghĩa bi n ki u bít hay ki u SFR (special function
register)
Bit Kiemtra;
Sfr P10=0x90;
VD:
Bit Kiemtra;
Sfr P10=0x90;
Các SFR không c n ph i h c thu c ch c n bi t, và chúng ư c khai báo trong thư
vi n
AT89X51.H và AT89X52.H
2.3.Hàm trong C:
Hàm trong C có c u trúc như sau
Có 2 lo i hàm
Hàm tr l i giá tr :
C u trúc: Ki u giá tr hàm tr l ii Tên hàm (Bi n truy n vào hàm)
{
// Các l nh x lý ây
}
VD : unsigned char Cong(unsigned char x, unsigned char y)
{
// Các l nh x lý ây
}
Hàm không tr l i giá tr
C u trúc: void Tên hàm (Bi n truy n vào hàm)
{
// Các câu l nh x lý ây
}
VD d : void Cong(unsigned char x, unsigned char y)
{
// Các câu l nh x lý ây
}
Hàm có th truy n vào bi n ho c không
VD
Hàm không có bi n truy n vào:
unsigned char Tênhàm(void)
{
// Các câu l nh x lí ây
}
Hàm có bi n truy n vào:
void Tênhàm(unsigned char x)
15. DKS_GROUP Microcontroller Training Center
DKS_GROUP - 15 - www.EmbestDKS.com 04868
{
// Các câu l nh x lí ây
}
S bi n truy n vào tùy ý(mi n b nh ), ngăn cách b i d u “,”
Ví d :
Void TênHàm(unsigned char x, unsigned char y, unsigned char z)
{
// Các câu l nh x lí ây
}
Ngoài ra riêng cho vi i u khi n ph n ph m Keil C còn có m t lo i hàm ó là hàm
ng t:
C u trúc:
Void Tênhàm(void) interrupt ngu nng t using băngthanhghi
{
}
Hàm ng t không ư c phép tr l i giá tr hay truy n tham bi n vào hàm.
Tên hàm b t kì
Interrupt là t khóa ch hàm ng t
Ngu n ng t t 0 t i 5 theo b ng vector ng t
Ng t do C a ch vector
Reset h th ng RST 0000H
Ng t ngoài 0 IE0 0003H
B nh th i 0 TF0 000BH
Ng t ngoài 1 IE1 0013H
B nh th i 1 TF1 001BH
Port n i ti p RI ho c TI 0023H
B nh th i 2 TF2 ho c EXF2 002BH
Không tính ng t reset h th ng b t u m t ng t ngoài 0
Băng thanh ghi trên ram ch n t 0 n 3
2.4.Các toán t cơ b n:
PhÐp g¸n: =
VD: x=y; // x ph¶i là bi n y có th là bi n ho c giá tr nhưng ph i phù h p ki u
Phép c ng: +
Phép tr : -
Phép nhân: *
Phép chia: /
Các toán t logic:
B ng : ==
And: &&
Or: ||
Not: !
D ch trái: <<
D ch ph i: >>
2.5.Các c u trúc l nh r nhánh, ki m tra thư ng dùng:
Câu l nh r nhánh if:
16. DKS_GROUP Microcontroller Training Center
DKS_GROUP - 16 - www.EmbestDKS.com 04868
C u trúc: if ( i uki n) { // Các câu l nh x lí }
Gi i thích: N u i uki n úng thì x lí các câu l nh bên trong còn sai thì nh y
qua
Câu l nh l a ch n switch:
C u trúc: switch(Bi n)
{
case giatr 1: { // Các câu l nh break; }
case giatr 2: { // Các câu l nh break; }
case giatr 3: { // Các câu l nh break; }
…
case giatr n: { // Các câu l nh break; }
}
Gi i thích : Tùy vào Bi n có giatr 1 thì th c hi n các câu l nh sau ó tương ng r i
thoát kh i c u trúc nh câu l nh break;
Bi n có giatr 2 thì th c hi n các câu l nh sau ó tương ng r i
thoát
….
Bi n có giatr n thì th c hi n các câu l nh sau ó tương ng r i
thoát
Câu l nh vòng l p xác nh for:
C u trúc: for( n=m; n<l; n++) {// Các câu l nh x lí }
Gi I thích:
Trong ó m,l là giá tr (m>l), còn n là bi n
Th c hi n l p các câu l nh (l-m) l n
Câu l nh vòng l p không xác nh while:
C u trúc:
While( i u ki n)
{
//Các câu l nh
}
Gi I thích:
Th c hi n l p các câu l nh khi i u ki n úng, n u câu l nh sai thi thoát kh i
vòng l p
2.6. B ti n x lý:
#define : Dùng nh nghĩa. Ví d :
#define dung 1
#define sai 0
có nghĩa là dung có giá tr b ng 1. Trong chương trình có th có o n code như sau:
bit kiemtra
if (bit==dung) { // Các câu l nh}
if (bit==sai) { // Các câu l nh}
Vi c này giúp l p trình d s a l i hơn.
M t s web hay :
www.dientuvietnam.net www.atmel.com
www.svbkol.org www.keil.com
www.diendandientu.com www.iguanalabs.com
17. DKS_GROUP Microcontroller Training Center
DKS_GROUP - 17 - www.EmbestDKS.com 04868
www.microchip.com
www.elechtro-tech-online.com
www.diendansv.hutech.edu.vn
www.ttvnol.com
www.8052.com
www.kmitl.ac.th
www.ftdichip.com
Bài 2 (Ti p)
Ph n 2: S d ng Keil C.
Sau khi cài t
1> Kh i t o cho Project:
20. DKS_GROUP Microcontroller Training Center
DKS_GROUP - 20 - www.EmbestDKS.com 04868
ánh tên và chuy n n thư m c b n lưu project. B n nên t o m i m t thư m c cho 1 project.
R i ch n Save.
22. DKS_GROUP Microcontroller Training Center
DKS_GROUP - 22 - www.EmbestDKS.com 04868
Trong này có 1 lo t các hãng i n t s n xu t 8051. B n l p trình cho con nào thì ch n con y
,kích chu t vào các d u + m r ng các con IC c a các hãng. ây ta l p trình cho
AT89C51 c a hãng Atmel nên ta ch n như sau:
23. DKS_GROUP Microcontroller Training Center
DKS_GROUP - 23 - www.EmbestDKS.com 04868
Khi ch n chip thì ngay l p t c cái b ng hi n ra 1 s tính năng c a chíp các b n có th nhìn
th y. 8051 based Fully Static 24Mhz … . Nhap OK ư c c a s như sau:
24. DKS_GROUP Microcontroller Training Center
DKS_GROUP - 24 - www.EmbestDKS.com 04868
Ch n No. Ch n Yes ch làm cho file l p trình c a b n thêm n ng . ư c c a s sau:
25. DKS_GROUP Microcontroller Training Center
DKS_GROUP - 25 - www.EmbestDKS.com 04868
t o 1 file code các b n ch n File New ho c n Ctrl+N. Như sau:
28. DKS_GROUP Microcontroller Training Center
DKS_GROUP - 28 - www.EmbestDKS.com 04868
Ti p theo b n ch n File Save As… ho c Ctrl+S. nh file m c dù chưa có gì. Như sau:
30. DKS_GROUP Microcontroller Training Center
DKS_GROUP - 30 - www.EmbestDKS.com 04868
Các b n nh p tên vào text box file name. Chú ý tên gì cũng ư c nhưng không ư c thi u uôi
m r ng .C . Nh n Save. ư c c a s sau:
31. DKS_GROUP Microcontroller Training Center
DKS_GROUP - 31 - www.EmbestDKS.com 04868
Trong ô bên trái màn hình, c a s project workspace, các b n m r ng cái target 1 ra ư c như
sau:
32. DKS_GROUP Microcontroller Training Center
DKS_GROUP - 32 - www.EmbestDKS.com 04868
Nh p chu t ph i vào thư m c Suorce Group1 ư c hình như trên. Ch n Add files to Group
“Source Group1” add file vào project. ư c như sau:
33. DKS_GROUP Microcontroller Training Center
DKS_GROUP - 33 - www.EmbestDKS.com 04868
Ch n file .C mà các b n v a nh . C a tôi là Dieukhienled_IO . Nh n Add 1 l n r i n Close.
N u b n n Add 2 l n nó s thông báo là file ã add b n ch vi c OK r i nh n Close. ư c như
sau:
34. DKS_GROUP Microcontroller Training Center
DKS_GROUP - 34 - www.EmbestDKS.com 04868
Bây gi nhìn trong Source Group 1 ã th y file Dieukhienled_IO.C . Các b n nh p chu t ph i
vào vùng so n th o file Dieukhienled_IO.C như sau, thêm file thư vi n.Ch n Insert
‘#include <AT89X51.H>”
35. DKS_GROUP Microcontroller Training Center
DKS_GROUP - 35 - www.EmbestDKS.com 04868
Các b n ã bi t file ó là gì n u các b n ã h c bài trư c kí theo yêu c u c a tôi. ư c như
sau:
36. DKS_GROUP Microcontroller Training Center
DKS_GROUP - 36 - www.EmbestDKS.com 04868
Ph n cu i cùng c a công vi c kh i t o là các b n vi t l i gi i thích cho d án c a mình .Ph n
này r t c n thi t vì nó ngư i khác hi u mình làm gì tron project này và khi mình c n s d ng
l i code c l i mình còn bi t nó là cái gì.
Các b n t o l i gi i thích theo m u sau:
37. DKS_GROUP Microcontroller Training Center
DKS_GROUP - 37 - www.EmbestDKS.com 04868
2> So n th o chương trình:
Các b n vi t chương trình c a bài 3 vào ây làm ví d . Khi vi t xong 1 dòng l nh nên
gi i thích dòng l nh ó làm gì. Như sau:
38. DKS_GROUP Microcontroller Training Center
DKS_GROUP - 38 - www.EmbestDKS.com 04868
Các b n nên chia chương trình như tôi làm. V i 1 file nh thì nó hơi rư m rà. Nhưng v i 1 file
l n kho ng 1000 dòng code thì nó l i r t sáng s a. Các b n nên t o 1 file m u r i nh vào 1 file
text âu ó m i l n dùng ch vi c copy r i paste qua ch không nên m i l n t o m t cái
như v y l i ph n tác d ng. Phía trên là ph n b ti n x lí và khai báo bi n. Ti p theo là vi t
hàm tr .
40. DKS_GROUP Microcontroller Training Center
DKS_GROUP - 40 - www.EmbestDKS.com 04868
R i nh n Ctrl+S. Ho c ch n File Save nh file v a so n th o.
Các b n nhìn vào code có th các b n ã hi u con AT89C51 nó làm gì n u các b n ã n m
v ng các bài trư c. Còn n u không hi u thì tôi s gi i thích l i cho các b n.
41. DKS_GROUP Microcontroller Training Center
DKS_GROUP - 41 - www.EmbestDKS.com 04868
ây là sơ nguyên lí c a 1 led. Project là 8 led(vì ph c v cho bài 3) nhưng tôi ch gi i
thích 1 led là các b n hi u. M c ích là làm con led nh p nháy.
+ C3
10uF/25V
C2
33p
C1
33p X1
19
X2
18
RESET
9
P1.0
1
VCC
40
VSS
20
U1
8051
R1
10K
5VDC
12Mhz
D1
LED
R2
470
Bi n Led1 ư c khai báo (gán cho) ch n P0_1 c a vi i u khi n b ng câu l nh sbit
Led1=P1^0; . Giá tr b t bat ư c nh nghĩa là 0.
Khi các b n gán : Led1=bat; trong hàm main thì chân P1_0 c a AT89C51 có m c logic là 0V.
Theo sơ nguyên lí: 5V Tr 470 Led1 P1_0 (0 V). Có chênh l ch áp có dòng
i n qua led Led sáng. Các b n có th tính tóan ch này d dàng là t i sao l i là tr 470 Ôm.
i n áp m t led là Uak (0,6 n 0,7V) l y =0,6V. i n áp chân P1_0 là 0V. i n áp hai u
tr : 5V -0,6V = 4,4V. Dòng qua tr = dòng qua led = 4,4V/470 Ôm x p x 10 mA. V i dòng
10mA n 15mA là led dòng sáng và sáng r t p. N u dòng y u thì led m , còn dòng
l n thì các b n bi t sao r i y.
Khi các b n gán: Led1= tat; t c là chân P1_0 có giá tr 1 tương ng i n áp c a nó là
5V . Hi u i n th gi a hai u +5V và P1_0 là 0V . Nên không có dòng qua led Led
t t.Nhưng n u trong hàm main các b n vi t ch có như sau:
While(1)
{
Led1=bat;
Led1=tat;
}
Khi ch y debug thì v n th y led nh p nháy. Nhưng khi n p chương trình vào chíp l p vào m ch
thì led không nháy ho c ch sáng m ho c t t ngóm. Vì l nh Led1=bat; là l nh 1 chu kì máy ,
t n s th ch anh là 12 Mhz, 1 chu kì máy có th i gian là 1uS. V a b t lên 1 uS r i l i t t ngay.
Led không áp ng ư c t n s cao v y nên không nh p nháy. Do ó c n t i hàm tr . B t led
lên tr 1 th i gian khá lâu(0,5 gi y), r i t t led i khá lâu(0,5s) r i l i b t l i t o thành vòng l p
s ư c led nh p nháy.
Tác d ng c a câu l nh while(1) . i u ki n bên trong vòng while là 1 luôn luôn úng nên nó là
vòng l p vô h n l n. N u không có vòng while(1) thì led c a các b n ch sáng lên 1 l n r i t t
42. DKS_GROUP Microcontroller Training Center
DKS_GROUP - 42 - www.EmbestDKS.com 04868
vì h t chương trình r i còn âu. Ph n này n u b n nào m i h c i n t th nào cũng có câu h i
th c m c c nh n tin ho c g i mail.
3> D ch chương trình:
So n th o song nh n Ctrl +S nh . Nh xong các b n biên d ch chương trình b ng cách n
phím F7 ho c ch n Build target là bi u tư ng ngay trên c a s workspace như trên hình:
Các b n s th y như sau:
43. DKS_GROUP Microcontroller Training Center
DKS_GROUP - 43 - www.EmbestDKS.com 04868
Trong c a s Output Window ngay phía trên dòng ch này có các dòng ch Compiling …
Linking…
Program Size: data =17.0 code =96
… 0 error , 0 Warning .
Như v y là OK. N u không ư c như v y nó s báo l i và các b n ki m tra xem so n th o
úng chưa. Tôi ví d xóa 1 d u ; trong hàm main dòng : Led1=bat; , gi b i thành Led1=
bat .R i d ch l i ( n F7) trình biên d ch s báo như sau:
44. DKS_GROUP Microcontroller Training Center
DKS_GROUP - 44 - www.EmbestDKS.com 04868
Syntax error near tre. Sai cú pháp g n tr . Các b n nh p úp trái chu t vào dòng thông báo này
con tr s ngay dòng dư i dòng có l i thêm d u nhìn d u mũi tên màu xanh hình dư i ây,
gõ vào d u ; và d ch l i là OK.” Trong chương trình l n ôi khi con tr ch n g n ch có l i
thôi và b n ph i t tìm ra l i.”
46. DKS_GROUP Microcontroller Training Center
DKS_GROUP - 46 - www.EmbestDKS.com 04868
4> Ch y mô ph ng và s a l i.
Trư c khi debug chúng ta kh i t o như sau. Các ban vào Option for target 1.
47. DKS_GROUP Microcontroller Training Center
DKS_GROUP - 47 - www.EmbestDKS.com 04868
ư c b ng sau. Nh p t n s th ch anh là 12 Mhz úng v i t n s th ch anh.
48. DKS_GROUP Microcontroller Training Center
DKS_GROUP - 48 - www.EmbestDKS.com 04868
Ch n OK.
debug các b n nh n t h p phím Ctrl + F5. Ho c nh n vào icon có ch D m u trong cái
kính lúp trên thanh công c . ư c c a s sau:
49. DKS_GROUP Microcontroller Training Center
DKS_GROUP - 49 - www.EmbestDKS.com 04868
Trong menu Peripherals(các thi t b ngo i vi) ch n IO port , Port 1. ư c như sau:
50. DKS_GROUP Microcontroller Training Center
DKS_GROUP - 50 - www.EmbestDKS.com 04868
Các b n th y 1 c a s nh Parallel Port 1 xu t hi n ó là cái mô ph ng cho c ng 1 c a
AT89C51. D u tích tương ương chân m c cao(5V) , không tích chân m c th p (0V).
Trong menu peripherals còn các ngo i vi khác như timer , interrupt, serial. Các bài sau dùng
n các b n nh l y trong này.
ch y chương trình các b n nh p chu t ph i vào màn hình so n th o.
R i n F11. M i l n n s ch y 1 l nh. Khi debug n u các b n ch hàm delay lâu quá 1000 l n
l p . Các b n nh n Ctrl + F11 b qua hàm.
51. DKS_GROUP Microcontroller Training Center
DKS_GROUP - 51 - www.EmbestDKS.com 04868
Ho c n F10 ch y t ng dòng l nh. Các b n s th y chân P1_0 thay i giá tr .
B ng bên trái , ô Project workspace bây gi có các thanh ghi. Các b n có th th y chúng thay
i. Nhưng các b n không c n quan tâm n các thanh ghi này. Vì mình h c ngôn ng C mà.
N u h c asembly thì m i ph i s d ng chúng. Cũng m t y. Cái b n quan tâm nh t là cái sec.
Nó cũng thay i. Vì th ch anh là 12Mhz, nên m i chu kì máy là 10-6
giây. Các b n căn c vào
y bi t l nh nào m t bao nhiêu chu kì máy, làm th i gian th c thì c n l m y. Thoát kh i
debug l i n Ctrl+F5 ho c n vào icon debug.
.
3.1.L p m ch :
-Kh i ngu n 5V các b n như l p m ch èn nháy.
-Các b n l p m ch theo sơ sau:
+ C3
10uF/25V
C2
33p
C1
33p X1
19
X2
18
RESET
9
P1.0
1
VCC
40
VSS
20
P1.1
2
P1.2
3
P1.3
4
P1.4
5
P1.5
6
P1.6
7
P1.7
8
EA
31
P0.0
39
P0.1
38
P0.2
37
P0.3
36
P0.4
35
P0.5
34
P0.6
33
P0.7
32
U1
8051
R1
10K
5VDC
12Mhz
D1
D2
D3
D4
D5
D6
D7
D8
12
3
4
5
6
7
8
9
10
R11
RESISTOR SIP 10
- Hư ng d n l p m ch:
* Qui nh : n u linh ki n nào tôi không nh c n chi u thì các b n l p linh ki n chi u
nào cũng ư c.
Hàng d c ngoài là ngu n 5 V.
Hàng d c trong là GND.
Th t chân các b n ph i nh không gi ng th t s p x p tronh hình v m ch.
Cách m chân các b n con chip xuôi mà các b n nhìn dòng ch AT89C51/52
xuôi, chân 1 là chân g n d u tròn và hình tam giác nh m u tr ng. m t trên xu ng
dư i trái qua ph i. Sơ chân con IC th t s m úng th này. Khi l p m ch ph i
m chân.
52. DKS_GROUP Microcontroller Training Center
DKS_GROUP - 52 - www.EmbestDKS.com 04868
Không nên l p ngu n 12V vào v i ch khi n p chíp xong l p vào m ch m i l p
ngu n.
Khi mu n g chíp ra ph i rút ngu n ra r i m i g chíp.
* Chu n b board như sau:
L p 4 dây n i ng n n i các sông.
L p 1 dây n i n i hàng trên cùng v i hàng dư i cùng làm ngu n +5V.
L p 1 dây n i n i hàng g n trên cùng v i hàng g n dư i cùng làm GND.
L p chíp như hình.
* Bư c 1 l p m ch dao ng:
L p 1 con t 33pF t chân 19 xu ng chân 20.( ng h i t i sao).
L p 1 con t 33pF t chân 18 xu ng chân 20.
L y dây câu t chân 20 xu ng GND.
L p 1 con th ch anh 12M vào chân 18 và 19.
* Bư c 2 l p m ch reset.
L p 1 con tr 10K(nâu en cam) t chân 9 xu ng GND.
L p 1 con t 10uF/50V c c dương lên +5V, c c âm vào chân 9.
* Bư c 3 l p tr băng.
chíp ch y v i ROM trong chân EA ph i lên +5V qua 1 i n tr .
C ng 0 là c ng có c c máng h mu n th c hi n ư c IO thì ph i có i n tr
treo.(Th y cái này l xem l i bài 2). Nên l p 1 con tr băng 10 chân vào c ng 0 và
chân EA.
Chân 1 c a tr băng ( Chân u tiên có n t tròn m u tr ng) vào chân 40. Chân 10 c a
tr băng vào chân 31.
N u không có tr băng các b n có th thay tr băng 10 chân b ng 9 con tr thư ng vì
tr băng 10 chân chính là 9 con tr u chung 1 u như trong sơ m ch phía trên.
* Bư c 4 l p led:
d dàng khi l p m ch nên chúng ta l p led theo sơ như trên.
L p chân dài c a 1 led vào chân 1 vi i u khi n chân ng n vào GND.
Tương t l p 7 led còn l i vào chân 2 n chân 8.
* Bư c 5 câu 1 dây nh t chân 40 lên ngu n 5V.
3.2. Nguyên lí ho t ng:
Led n i t chân v k xu ng t v y n u chân vi i u khi n 5V thì led s sáng,
n u chân vi i u khi n 0V thì led s t i.
i n áp 5V vì sao led không cháy mà l i còn sáng y u?
U1
AT89C51
31
19
18
9
12
13
14
15
1
2
3
4
5
6
7
8
39
38
37
36
35
34
33
32
21
22
23
24
25
26
27
28
17
16
29
3011
10
40
20
EA/VP
X1
X2
RESET
INT0
INT1
T0
T1
P1.0
P1.1
P1.2
P1.3
P1.4
P1.5
P1.6
P1.7
P0.0
P0.1
P0.2
P0.3
P0.4
P0.5
P0.6
P0.7
P2.0
P2.1
P2.2
P2.3
P2.4
P2.5
P2.6
P2.7
RD
WR
PSEN
ALE/PTXD
RXD
VCC
VSS
53. DKS_GROUP Microcontroller Training Center
DKS_GROUP - 53 - www.EmbestDKS.com 04868
Vì vi i u khi n 8051 ch có th cung c p dòng nh không 10mA 1 chân nên led
sáng y u. Còn n u mu n led sáng p thì l p như sau t dương 5V Chân dài c a
led Chân ng n c a led Chân vi i u khi n. Cái này s nói sau.
* Bư c 5 l p ngu n:
L p 1 dây t chân 40 lên hàng ngu n 5V.
3.3. L p trình :
Trư c h t i u khi n 1 led. i u khi n 1 led thì các b n ch vi c gán chân n i v i
led ó b ng 0 ho c 1, thì i n áp chân ó s là 0V ho c 5V, tùy vào i n áp èn s
sáng ho c t i.
Code như sau:
/* ====================================================
Mo ta:
Dieu khien den led.
Phan cung:
8 led noi tu +5V qua dien tro han dong vao 8 chan cong 1.
Thach anh:
12 Mhz
Tac gia:
Nguyen Huy Thanh.
Thoi gian:
Bat dau: 1h03 16/7/2005
Hoan thanh: 1h07 16/7/2005
=====================================================*/
/******************Bo tien xu li*******************************/
#include <AT89X51.H>// Dinh kem file thu vien
#define bat 1 // Dinh nghia gia tri bat den led
#define tat 0// Dinh nghia gia tri tat den led
/************************************************************/
/*******************Khai bao bien toan cuc**********************/
sbit Led1=P1^0; //Khai bao bien Led1 kieu bit chan P1_0
sbit Led2=P1^1; // ...
sbit Led3=P1^2;
sbit Led4=P1^3;
sbit Led5=P1^4;
sbit Led6=P1^5;
sbit Led7=P1^6;
sbit Led8=P1^7;//Khai bao bien Led8 kieu bit chan P1_7
/***********************************************************/
/********************Khai bao ham****************************/
/*----------------Ham tre-------------------------------
Ham tao thoi gian tre.
Dau vao: 1 bien thoi gian.
54. DKS_GROUP Microcontroller Training Center
DKS_GROUP - 54 - www.EmbestDKS.com 04868
Dau ra:khong
------------------------------------------------------*/
void tre(long time)
{
long n;// Khai bao bien cuc bo
for(n=0; n<time; n++)//Lap time lan
{
; // Khong lam gi nop
}
}
/***********************************************************/
/*******************Ham chinh**************************/
void main(void)
{
while(1)// Lap vo han
{
Led1= bat;// Bat led 1
tre(1000);// Tre 1 khoang thoi gian
Led1= tat;// Tat led 1
tre(1000);// Tre 1 khoang thoi gian
}
}
/************************************************************/
Nên t gõ ch không nên copy paste.
* CHÚ Ý: Code này khác code trong bài 3 s d ng Keil C y nhé. Ch #define bat 1
và #define tat 0. Vì led l p ki u khác mà.
57. DKS_GROUP Microcontroller Training Center
DKS_GROUP - 57 - www.EmbestDKS.com 04868
* có th n p chương trình vào chíp thì f i t o ra file .hex. t o ra file .hex làm
như sau . Vào Option for target ch ch nh t n s th ch anh.
60. DKS_GROUP Microcontroller Training Center
DKS_GROUP - 60 - www.EmbestDKS.com 04868
Tích vào check : Create Hex File. Nh p OK. Nh n fím F7 biên d ch l i . Khi ó dư i c a
s output window ư c ch Creating hex file…
61. DKS_GROUP Microcontroller Training Center
DKS_GROUP - 61 - www.EmbestDKS.com 04868
Creating hex file from “Dieukhienled_IO” như ngay trên hình.
3.4.N p chíp:
C m u c ng COM vào c ng COM máy tính.
C m ngu n vào m ch n p.
Cho chíp vào socket 40 chân màu xanh. R t chú ý ph i cho úng chi u chíp không là
h ng. Chi u chíp gi ng chi u con chíp có s n trong m ch(Chíp MASTER).
M ph n m m EZDL4 lên. Th y có ch identifing target chip …. Nháy. G t c n nh
socket 40 chân k p chíp cho ti p xúc.
62. DKS_GROUP Microcontroller Training Center
DKS_GROUP - 62 - www.EmbestDKS.com 04868
Trên EZDL4 s th y ch AT89C51 ho c AT89C52 tùy các b n dùng lo i chíp
nào.
Kích vào Send. Ch n ư ng d n n thư m c lưu project c a b n ch n file :
Dieukhienled_IO.hex . Nh n OK. Ch m ch báo ch Complete thì g t n y trên socket
l y chíp ra c m vào m ch.
3.5. K t qu :
C m ngu n vào m ch . Chú ý không c m ngư c âm dương.
N u m ch không ch y rút ngu n ra ki m tra các ch sau:
1) Ki m tra m ch dao ng xem t úng giá tr không, l p úng sơ không,
l p có l ng không.
2) Ki m tra xem t m ch reset chân 9 l p úng c c không, có l ng không.
Dùng ng h o chân 9 n u 0V ho c x p x 0V là OK.
3) Tr băng l p úng chi u chưa, chân 1 vào chân 40. Dùng ng h o chân
31(EA) xem có b ng 5V không , n u 5V thì OK.
4) Ki m tra chân 20 n i GND chưa, chân 40 n i +5V chưa dùng ng h
o i n áp.
5) Ki m tra xem l p úng chi u led chưa.
6) Các b n có th l p l ng chíp ho c do ch t lư ng board l y tay tì m nh con
chíp xu ng board .
N u v n không ch y thì liên l c v i tôi.
3.6. i u khi n 8 led t ng chi c 1:
Các b n có th s a l i hàm main như sau:
void main(void)
{
while(1)// Lap vo han
{
Led1= bat;// Bat led 1
tre(1000);// Tre 1 khoang thoi gian
Led1= tat;// Tat led 1
tre(1000);// Tre 1 khoang thoi gian
Led2= bat;// Bat led 2
tre(1000);// Tre 1 khoang thoi gian
Led2= tat;// Tat led 2
tre(1000);// Tre 1 khoang thoi gian
Led3= bat;// Bat led 3
tre(1000);// Tre 1 khoang thoi gian
Led3= tat;// Tat led 3
tre(1000);// Tre 1 khoang thoi gian
Led4= bat;// Bat led 4
tre(1000);// Tre 1 khoang thoi gian
Led4= tat;// Tat led 4
tre(1000);// Tre 1 khoang thoi gian
Led5= bat;// Bat led 5
tre(1000);// Tre 1 khoang thoi gian
Led5= tat;// Tat led 5
tre(1000);// Tre 1 khoang thoi gian
Led6= bat;// Bat led 6
tre(1000);// Tre 1 khoang thoi gian
63. DKS_GROUP Microcontroller Training Center
DKS_GROUP - 63 - www.EmbestDKS.com 04868
Led6= tat;// Tat led 6
tre(1000);// Tre 1 khoang thoi gian
Led7= bat;// Bat led 7
tre(1000);// Tre 1 khoang thoi gian
Led7= tat;// Tat led 7
tre(1000);// Tre 1 khoang thoi gian
Led8= bat;// Bat led 8
tre(1000);// Tre 1 khoang thoi gian
Led8= tat;// Tat led 8
tre(1000);// Tre 1 khoang thoi gian
}
}
i u khi n 8 led.
V i chương trình này các b n có th cho th t các led t t b t khác nhau có các
ki u nháy khác nhau.
3.7. i u khi n out c c ng:
N u các b n nhàm chán v i vi c i u khi n t ng chân 1 vi t code r t t n công
các b n có th xu t giá tr ra c c ng.
Trư c h t các b n c n n m các i u như sau:
- 1 c ng có 8 bit t h p 8bit có 28
= 256 tr ng thái. Khi các b n ưa ra c ng 1
giá tr a(th p phân) t 0 n 255 thì s a s ư c i ra h nh phân r i ưa ra
các bit( chân) c a c ng. Ví d :
N u có l nh: P1=1; vì 1(10) = 0000 0001(2) nên chân P1_0(bit 0) s b ng 1(5V)
còn l i các t P1_1(bit 1) n P1_7(bit 7) s b ng 0(0V).
P1=10; vì 10(10) = 0000 1001(2) thì s có P1_0 và P1_3 b ng 1(5V) còn
l i các chân khác s là 0(0V).
- Các b n có th ưa ra c ng 1 giá tr s hex t 0 n ff tương ng t 0 n 255.
Các s cơ s trong h hex.
(HEX)0 1 2 3 4 5 6 7 8 9 A B C D E F
(10) 10 11 12 13 14 15
Cách s hex ra s th p phân: có s hex : N(16)=abf1 i ra h s 10
N(10)=1.160
+ 15.161
+ 11.162
+ 10.163
= B m máy tính h nhé.
i s nh phân sang hex: G p 4 s nh phân thành 1 s hex
Ví d : 0010 0001(2) = 21(16) 4 s u có bit 1 = 1 nên 1x21
= 2
4 s sau có bit 0 =1 nên 1x20
=1.
“Các b n th y v t v v i ph n này dù b n có hi u hay không hi u 1 lát n a s bi t
cách làm li n.”
Cách ưa ra như sau:
Ví d l nh P1=1; tương ương v i P1=0x01;
P1=10; tương ương v i P1=0x0A;
Chương trình xu t ra c c ng tương ương v i chương trình i u khi n 8 led t ng cái
1 như sau:
void main(void)
{
while(1)// Lap vo han
{
64. DKS_GROUP Microcontroller Training Center
DKS_GROUP - 64 - www.EmbestDKS.com 04868
P1=0x01;// Bat led 1
tre(1000);// Tre 1 khoang thoi gian
P1=0x00;// Tat led 1
tre(1000);// Tre 1 khoang thoi gian
P1=0x02;// Bat led 2
tre(1000);// Tre 1 khoang thoi gian
P1=0x00;// Tat led 2
tre(1000);// Tre 1 khoang thoi gian
P1=0x04;// Bat led 3
tre(1000);// Tre 1 khoang thoi gian
P1=0x00;// Tat led 3
tre(1000);// Tre 1 khoang thoi gian
P1=0x08;// Bat led 4
tre(1000);// Tre 1 khoang thoi gian
P1=0x00;// Tat led 4
tre(1000);// Tre 1 khoang thoi gian
P1=0x10;// Bat led 5
tre(1000);// Tre 1 khoang thoi gian
P1=0x00;// Tat led 5
tre(1000);// Tre 1 khoang thoi gian
P1=0x20;// Bat led 6
tre(1000);// Tre 1 khoang thoi gian
P1=0x00;// Tat led 6
tre(1000);// Tre 1 khoang thoi gian
P1=0x40;// Bat led 7
tre(1000);// Tre 1 khoang thoi gian
P1=0x00;// Tat led 7
tre(1000);// Tre 1 khoang thoi gian
P1=0x80;// Bat led 8
tre(1000);// Tre 1 khoang thoi gian
P1=0x00;// Tat led 8
tre(1000);// Tre 1 khoang thoi gian
}
}
Như v y gõ code v n m i tay l m t ư c m c ích 8 èn nháy liên ti p các b n
có th làm như sau:
/******************Ham chinh****************************/
void main(void)
{
unsigned char n; // Khai bao them bien n cho vong for
while(1)// Lap vo han
{
P1=0x01;// Bat led 1
for(n=0 ; n<8;n++)// Lap 8 lan
{
P1=P1<<1; // Dich bit xang trai
65. DKS_GROUP Microcontroller Training Center
DKS_GROUP - 65 - www.EmbestDKS.com 04868
tre(1000);
}
}
}
/***********************************************************/
Debug quan sát s thay i c a c ng 1 th y ư c l i h i c a phép d ch bit xang
trái.
hi u thao tác xu t ra c ng , chân, các các b n làm cho mình 1 ví d n a như sau:
/***********************Ham chinh*******************************/
void main(void)
{
unsigned char n; // Khai bao them bien n cho vong for
while(1)// Lap vo han
{
P1=0x01;// Bat led 1
for(n=0 ; n<256;n++)// Lap 8 lan
{
P1=n; // Dich bit xang trai
tre(5000);
}
}
}
/****************************************************************/
Debug th y s thay i các c ng.
3.8. Kinh nghi m :
* chuy n i gi a các h sô nhanh các b n dùng cái calculator có ngay
trong window. Ch n Start All programs Accessories Calculator.
Trong Calculator các b n ch n menu View Ch n scienctific. Cách chuy n i t
khám phá nhé.
* tính ra s hex nhanh nh t .
Tôi ví d mu n ưa chân P3.5 và chân P3.2 xu ng 0(0V) còn các chân còn l i ta làm
như sau:
C cho P3= 100 ; hay 1 giá tr b t kì .Vì code d ch không l i cú pháp m i debug ư c
nên ph i cho giá tr b t kì vào. D ch chương trình r i nh n Debug. Ra ư c như sau:
66. DKS_GROUP Microcontroller Training Center
DKS_GROUP - 66 - www.EmbestDKS.com 04868
Các b n th y trong c a s mô ph ng c ng 3 có ghi giá tr c a c ng 3 là : 0xFF tương
ng t t c 8 bit là 1111 1111. Gi các b n b d u tích trên chân 3.5 và 3.2 i . m t
trái qua ph i nhé.
67. DKS_GROUP Microcontroller Training Center
DKS_GROUP - 67 - www.EmbestDKS.com 04868
Th y c ng 3 có giá tr là 0xDB. Như v y các b n m t công nh m i s nh phân ra s hex.
N u không dùng cách này là như trên các b n ph i nghĩ trong u ra ư c dãy s 1101
1011 r i i qua s HEX k t qu s là 0xDB nhưng m t l m.
68. DKS_GROUP Microcontroller Training Center
DKS_GROUP - 68 - www.EmbestDKS.com 04868
4.1 L p m ch :
a b
dotcV-de
f g V-
1 2 3 4 5
678910
A
B
C
DOTD
E
F
G
D10
LED CATOT Chung
a b
dotcV+de
f g V+
1 2 3 4 5
678910
A
B
C
DOTD
E
F
G
D11
LED CATOT Chung
Có hai lo i led 7 thanh: An t chung và Cat t chung. Hình trên là sơ chân
c a hai lo i led. Nó có c u t o như sau:
3
7 6 4 2 1 10 9 5
A B C D E F G DP
8
D12A
Catot chung
3
7 6 4 2 1 10 9 5
8
D13A
Anot chung
Ch là 8 con led u chung 1 u: An t ho c Cat t.
M ch l p s d ng led An t chung như sau:
69. DKS_GROUP Microcontroller Training Center
DKS_GROUP - 69 - www.EmbestDKS.com 04868
+ C3
10uF/25V
C2
33p
C1
33p
R1
10K
5VDC
EA/VP
31
X1
19
X2
18
RESET
9
P2.0
21
P2.1
22
P2.2
23
P2.3
24
P2.4
25
P2.5
26
P2.6
27
VCC
40
VSS
20
U3
8051
R3
10K
12Mhz
A
B
D
C
G
F
E
- L p m ch: M ch bài trư c( i u khi n led ơn) nguyên,ch l p thêm vào.
+ Bư c1: L p 7 i n vào 7 chân c ng P2 t P2.0 n P2.7( T chân 21 Chân
27) c a vi i u khi n. Chú ý m bit c a c ng 2 t dư i lên trên.
+ Bư c2: L p led 7 thanh 5 chân phía trên sông, 5 chân phía dư i sông(Gi ng l p
AT89C51).
+ Bư c 3: Dùng dây i n câu t các chân theo sơ . Chân i u khi n thanh A
vào i n tr n i vào P2.0 và c th n chân i u khi n thanh G vào i n tr n i
vào P2.7. B qua chân i u khi n d u ch m(Dot chân 5 c a led 7 thanh).
+ Bư c 4: Dùng dây câu chân 3(ho c chân 8, ho c c hai chân 3 và 8) lên +5V.
L p m ch nên dây câu khác màu và rõ ràng tránh nh m l n.
- Test led:
Cho ngu n vào( Dĩ nhiên led ơn bài trư c v n nh p nháy).
Rút 1 u i n tr n i v i chân P2.0 c a V K c m xuông t th y led 7
thanh sáng èn A,c m l i i n tr v v trí cũ. Tương t test 6 thanh còn
l i. Thanh nào không sáng thì ki m tra l i xem c m dây ti p xúc chưa. V n
không sáng thì led ã h ng thay led khác vào.
4.2. Nguyên lí ho t ng:
Khi c m ngu n vào m ch t t c các chân c a các c ng IO c a V K là 5V(
N u c ng 0 không l p i n tr treo thì s là 0V). Nhìn sơ m ch không có chênh
l ch i n áp nên không có èn nào sáng. Chúng ta mu n sáng thanh nào ch vi c ưa
ra i n áp 0V chân vi i u khi n n i v i thanh ó.
Thanh hi n Thanh t t Giá tr (P2)
hi n th s 1: B,C các thanh còn l i 1111 1001
hi n th s 2: A,B,D,E,G các thanh còn l i 1010 0100
….
hi n th s 8: T t c các thanh không thanh nào 1000 0000
70. DKS_GROUP Microcontroller Training Center
DKS_GROUP - 70 - www.EmbestDKS.com 04868
gfe dcba
Bít th 8 P2.7 không
dùng.
Ngoài ra led 7 thanh còn có th hi n th 1 s ch
ê hi n th ch B: Gi ng sô 8
Hi n th ch A: A,B,C,E,F,G D 1000 1000
4.3.L p trình :
Cách 1: L p trình d hi u không c n ph i tính toán nhưng ph i vi t và copy,
past và s a nhìu.
Code như sau:
#include <AT89X52.H>
/* Khai bao cac bien bit gan voi chan vi dieu khien*/
sbit ThanhA = P2^0;
sbit ThanhB = P2^1;
sbit ThanhC = P3^5;
sbit ThanhD = P3^4;
sbit ThanhE = P3^3;
sbit ThanhF = P2^2;
sbit ThanhG = P2^3;
/* Khai bao bien */
long n;// Cho vong for
/* Khai bao ham */
/* Ham tre */
void delay(long time)
{
for(n=0; n<time; n++)
{
;
}
}
76. DKS_GROUP Microcontroller Training Center
DKS_GROUP - 76 - www.EmbestDKS.com 048
delay(20000);
chuO();
delay(20000);
chuP();
delay(20000);
chuR();
delay(20000);
chuS();
delay(20000);
chuU();
delay(20000);
chuY();
delay(20000);
}
}
Cách 2: Các b n vi t 1 chương trình ơn gi n r i dùng công c Debug xem s hex r i
vi t vào r t ng n g n.
Ví d :
Hàm hi n th s 1:
void so1(void)
{
tat();
P2=0xF5;
}
Các b n debug cho hi n th c ng P2 lên. d u tích các èn t t(1) , b d u tích các
èn c n b t(0). R i c giá tr hex như tôi hư ng d n bài trư c.
4.4.N p chíp:
ã hư ng d n. N u các b n g p ph i v n c a m ch n p. Thư ng là:
+ Treo chip Master: Rút ngu n m ch n p ra, i chút r i c m l i.
+ Không nh n c ng COM. Các b n nh p chu t ph i vào Mycomputer, ch n
Properties Device manage. Nh n vào Scan for hardware change máy tính nh n
l i c ng COM. R i kh i ng l i máy.
+ Lý do khác các b n th ki m tra ph n c ng m ch n p.
+ V n không ư c tôi ch u.
T bài sau s không có ph n này.
4.5.K t qu :
Nhìn vào hàm main các b n th y chương trình s hi n th s 1 led 7 thanh, tr 1
kho ng th i gian, r i nh y sang s 2 n sô 9 , r i n ch . N u các b n không có hàm
tr thì led s hi n th ra sao?
Led s hi n s 8. Vì t t c 8 led ư c b t t t quá nhanh (ch c n >24 Hz) do hi n tư ng
lưu nh m t các b n s nhìn th y t t c các led sáng ch không hi n s .
4.6.Kinh nghi m :
Sau khi ã th c hi n theo các rút g n như vi t hàm s 1 trên các b n áp d ng
c u trúc l nh switch case vi t l i chương trình thì chương trình s r t g n.
77. DKS_GROUP Microcontroller Training Center
DKS_GROUP - 77 - www.EmbestDKS.com 048
void Hienthiled(unsigned char x) // Co 1 bien dau vao de xac dinh xem la hien thi so nao
{
switch(x)
{
case 1: { tat(); P2=0xF5; break;} // So 1
case 2: { tat(); P2=0xFF; break;}// So 2
…
case 9: { tat(); P2=0xFF; break;}// So 9
case 10: { tat(); P2=0xFF; break;}// Chu A
….
case 20: { tat(); P2=0xFF; break; }// Chu Y
}
}
Các giá tr trên ch là ví d các b n ã rút g n và t copy vào. V i hàm hi n th led các
b n ã vi t hi n các s và các ch gi hàm main ch c n như sau:
void main (void)
{
while(1)
{
for(n=0; n<20; n++)
{
Hienthiled(n);
delay(20000);
}
}
}
78. DKS_GROUP Microcontroller Training Center
DKS_GROUP - 78 - www.EmbestDKS.com 048
Ph n 1: c 1 phím.
Nhi m v :
m s l n phím b m gi i h n t 0 n 9 hi n th ra led 7 thanh.
5.1.L p m ch như sau:
+ C3
10uF/25V
C2
33p
C1
33p X1
19
X2
18
RESET
9
P2.0
21
VCC
40
VSS
20
P2.1
22
P1.0
1
P1.1
2
P2.2
23
P2.3
24
P2.4
25
P2.5
26
P2.6
27
U1
8051
R1
10K
5VDC
12Mhz
1 2
SW1
C4
CAP NP
D12
LED
R29
1K
a b
dotcV+de
f g V+
1 2 3 4 5
678910
A
B
C
DOTD
E
F
G
D11
LED ANOT Chung
- M ch bài 5 led 7 thanh gi nguyên.
L p m ch: quá ơn gi n.
Bư c 1: L p 1 nút b m âu ó trên m ch.
Bư c 2: Dùng dây câu 1 chân nút b m v i P1.0( Thay th led bài 4).
Bư c 3: Dùng dây câu 1 chân nút b m xu ng t.
Bư c 4: L p 1 t 104 gi a 2 chân nút b m.
Bư c 5: L p tr vào chân P1.0 và led t +5V vào u tr còn l i(Chú ý úng
chi u led.
- Test nút b m: C m ngu n vào, nh n nút èn sáng. Nh nút èn t t.
79. DKS_GROUP Microcontroller Training Center
DKS_GROUP - 79 - www.EmbestDKS.com 048
5.2.Nguyên lí ho t ng:
- Ph n nút b m: (khi không có t 104) ban u chân P1.0 m c cao +5V, n u
b m nút 2 u nút b m thông v i nhau. Chân P1.0 thông v i GND. Led sáng do có chênh
áp. Chân P1.0 thông t.
N u có t 104 t i n ư c n p i n, khi b m nút t i n s phóng i n t c c
dương sang c c âm làm chân P1.0 thông v i GND nhưng lâu v 0 V hơn 1 chút( tr
c ng).
- Khi b m nút theo nguyên lí thi b m 1 cái là xu ng 0 li n, nhưng do ti p i m
cơ khí c a nút b m nên khi b m nút nó s có 1 s xung i n ch không ph i là
b m cái là nó xu ng 0 luôn. T 104 gi m nhi u ó. T 104 cũng có th b
i không l p vì ta có th kh nhi u b ng ph n m m.
5.3.L p trình:
Code bài 5 gi nguyên: so n thêm m t s hàm như sau hàm c phím b m.
Hàm c s l n n phím
83. DKS_GROUP Microcontroller Training Center
DKS_GROUP - 83 - www.EmbestDKS.com 048
ây là code các hàm b sung:
unsigned char i=0;// Khai bao them bien toan cuc de dem so lan an nut
unsigned char Doccongtac(void)// Ham tra lai gia tri unsigned char
{
if( P1_0 ==0)// Neu nut duoc bam
{
delay(300);// Tre 1 khoang thoi gian qua xung nhieu
while(P1_0 ==0) // Cho toi khi nha tay khoi nut bam
{
;//Khong lam gi
}
i++;// Nha ty thi tang i
if( i ==10) i=0;// Quay vong gia tri cua i
}
return i;
}
void hienthisolannhanphim(unsigned char solan)
{
switch(solan)// Tuy vao so lan
{
case 0: { so0(); break; }// Neu so lan =0 hien so 0 thoat khoi switch
case 1: { so1(); break; }// Neu so lan =1 hien so 1 thoat khoi switch
case 2: { so2(); break; }// ....
case 3: { so3(); break; }
case 4: { so4(); break; }
case 5: { so5(); break; }
case 6: { so6(); break; }
case 7: { so7(); break; }
case 8: { so8(); break; }
case 9: { so9(); break; }// Neu so lan =9 hien so 9 thoat khoi switch
}
}
void main(void)
{
while(1)
{
Doccongtac(); // Goi ham doc so lan nhan phim
hienthisolannhanphim(i);// Hien thi so lan nhan phim, bien i la bien toan cuc
}
}
84. DKS_GROUP Microcontroller Training Center
DKS_GROUP - 84 - www.EmbestDKS.com 048
5.4) Kinh nghi m:
- Xem các giá tr c a bi n trong Debug.
Sau khi vi t xong chương trình và biên d ch chương trình các b n vào công c Debug c a
Keil C. ư c màn hình sau: Ch n View Watch& Call Stack Window.
ư c như sau:
86. DKS_GROUP Microcontroller Training Center
DKS_GROUP - 86 - www.EmbestDKS.com 048
Trong khung phía dư i chính là Watch& Call Stack Window. Chuy n sang tab watch#1,
nh p chu t vào ch F2 to edit,nh n F2 và gõ vào tên bi n c n quan sát.
Ph n 1 k t thúc.
87. DKS_GROUP Microcontroller Training Center
DKS_GROUP - 87 - www.EmbestDKS.com 048
Chúng ta quan sát bi n I, nên gõ I vào và ư c hình như trên. Các b n nh n F11 ch y
mô ph ng. M i l n n phím, cho chân P1.0 xu ng 0 r i lên 1, tương ương v i n phím
và nh phím I s tăng 1 như sau: (Khi n phím ph i ch hàm delay(300) và hàm
while(P1_0 ==0) xong I m i tăng vì mình l p trình th mà.
Giá tr c a I hi n th theo s hex.
88. DKS_GROUP Microcontroller Training Center
DKS_GROUP - 88 - www.EmbestDKS.com 048
Ph n 2: c ma tr n phím.
Nhi m v :
Quét bàn phím 16 phím b m(4x4), xem phím nào ư c b m, các phím ư c ánh
s t 0 n 15 r i hi n th giá tr ra led 7 thanh.
6.1. L p m ch theo sơ sau:
5V
5V
C1
33p
C2
33p
+ C3
10uF/25V
R1
10K
5VDC
5V5V5V
EA/VP
31
X1
19
X2
18
RESET
9
P2.0
21
P2.1
22
P2.2
23
P2.3
24
P2.4
25
P2.5
26
P2.6
27
VCC40
VSS
20
P3.1
11
P3.2
12
P3.3
13
P3.4
14
P3.5
15
P3.6
16
P3.7
17
P3.0
10
U3
8051
R3
10K
12Mhz
C
B
A
E
D
G
F
P3.0
P3.1
P3.2
P3.3
P3.4
P3.5
P3.6
P3.7
5V
LED 7 THANH
HANG 2
HANG 1
COT 4
COT 3
COT 2
COT 1
HANG 4
HANG 3P3.2
R21
R
R22
R
R23
R
R24
R
R25
R
R26
10Kx8
R27
R
R28
R
P3.0
P3.1
1 2
PHIM 1
1 2
PHIM 2
1 2
PHIM 3
1 2
PHIM 4
1 2
PHIM 5
P3.3
1 2
PHIM 6
P3.4
1 2
PHIM 7
1 2
PHIM 8
1 2
PHIM 9
1 2
PHIM 10
1 2
PHIM 11
1 2
PHIM 12
P3.5
1 2
PHIM 13
P3.6
1 2
PHIM 14
1 2
PHIM 15
1 2
PHIM 16
P3.7
- L p m ch:m ch bài led 7 thanh gi nguyên và v i bàn phím các b n hàn ư c ch c n
câu vào c ng 3 úng th t chân và câu chân 5V lên +5V.
89. DKS_GROUP Microcontroller Training Center
DKS_GROUP - 89 - www.EmbestDKS.com 048
6.2 Nguyên lí quét phím:
- Vì sao m ch phím u theo ma tr n. N u c t 16 nút b m bình thư ng ph i
dùng 16 chân vi i u khi n. N u u theo d ng ma tr n thì ch m t 8 chân ta cũng có th
c ư c 16 phím b m.
- Có 2 cách quét phím theo c t và theo hàng, tôi ch n cách quét theo hàng, quét
theo c t các b n có th làm tương t .
- Bư c 1 : Ta ưa chân P3.0 n i v i Hàng 1 xu ng 0V.R i ta ki m tra giá tr logic
c a các chân P3.4,P3.5,P3.6,P3.7.N u phím 1 ư c b m thì C t 1_ P3.4 s có giá tr b ng
0. N u phím 2 ư c b m thì C t 2_ P3.5 s có giá tr b ng 0. N u phím 3 ư c b m thì
C t 3_ P3.6 s có giá tr b ng 0. N u phím 4 ư c b m thì C t 4_ P3.7 s có giá tr b ng
0. Ta căn c vào ó xác nh xem phím nào ư c b m.
- Bư c 2 : Ta ưa chân P3.1 n i v i Hàng 2 xu ng 0V.R i ta ki m tra giá tr logic
c a các chân P3.4,P3.5,P3.6,P3.7.N u phím 5 ư c b m thì C t 1_ P3.4 s có giá tr b ng
0. N u phím 6 ư c b m thì C t 2_ P3.5 s có giá tr b ng 0. N u phím 7 ư c b m thì
C t 3_ P3.6 s có giá tr b ng 0. N u phím 8 ư c b m thì C t 4_ P3.7 s có giá tr b ng
0. Ta căn c vào ó xác nh xem phím nào ư c b m.
- Bư c 3 : Ta ưa chân P3.2 n i v i Hàng 3 xu ng 0V.R i ta ki m tra giá tr logic
c a các chân P3.4,P3.5,P3.6,P3.7.N u phím 9 ư c b m thì C t 1_ P3.4 s có giá tr b ng
0. N u phím 10 ư c b m thì C t 2_ P3.5 s có giá tr b ng 0. N u phím 11 ư c b m thì
C t 3_ P3.6 s có giá tr b ng 0. N u phím 12 ư c b m thì C t 4_ P3.7 s có giá tr b ng
0. Ta căn c vào ó xác nh xem phím nào ư c b m.
- Bư c 4 : Ta ưa chân P3.3 n i v i Hàng 1 xu ng 0V.R i ta ki m tra giá tr logic
c a các chân P3.4,P3.5,P3.6,P3.7.N u phím 13 ư c b m thì C t 1_ P3.4 s có giá tr
b ng 0. N u phím 14 ư c b m thì C t 2_ P3.5 s có giá tr b ng 0. N u phím 15 ư c
b m thì C t 3_ P3.6 s có giá tr b ng 0. N u phím 16 ư c b m thì C t 4_ P3.7 s có giá
tr b ng 0. Ta căn c vào ó xác nh xem phím nào ư c b m.
Ta s dùng câu l nh if ki m tra.
6.3. L p trình:
- T o 1 project m i, copy ph n hi n th các sô 0…9 các ch A…Y c a bài tr ơc. R i b
sung các hàm sau. Hàm hi n th phím n.
void phim_duoc_an(unsigned char phim)
{
switch(phim)// Tuy vao so lan
{
case 0: { so0(); break; }// Neu so lan =0 hien so 0 thoat khoi switch
case 1: { so1(); break; }// Neu so lan =1 hien so 1 thoat khoi switch
case 2: { so2(); break; }// ....
case 3: { so3(); break; }
case 4: { so4(); break; }
case 5: { so5(); break; }
case 6: { so6(); break; }
case 7: { so7(); break; }
case 8: { so8(); break; }
case 9: { so9(); break; }// Neu so lan =9 hien so 9 thoat khoi switch
90. DKS_GROUP Microcontroller Training Center
DKS_GROUP - 90 - www.EmbestDKS.com 048
}
}
Hàm quét phím:
/*Khai bao 1 mang 4 phan tu nhu sau: quetphim[4]={P0=0xFE,0xFD,0xFB,0xF7}
De dua 0 ra lan luot cac hang phim, khi do neu nut nao duoc an thi chan vi dieu khien se
xuong 0.Chu y fai kiem tra phim khoang 100 lan.*/
unsigned char quetphim[4]={0xFE,0xFD,0xFB,0xF7};
// Dinh nghia so lan quet phim
#define solanquetphim 100 // Cac ban co the thay doi gia tri nay cho phu hop
unsigned char quetbanphim(void)
{
unsigned char giatribanphim;// Bien de luu gia tri phim an tu 0 den 15 ma hoa 16 phim
unsigned char x,y;
//Quet 4 hang phim
for(x=0; x<4;x++)
{
P3=quetphim[x];// Dua lan luot cac hang xuong 0
for(y=0;y<solanquetphim;y++)// Kiem tra solanquetphim lan
{
if(P3_4==0) giatribanphim=0+4*x;// Gia tri phim tuong ung
if(P3_5==0) giatribanphim=1+4*x;// Tuy thuoc vao hang x
if(P3_6==0) giatribanphim=2+4*x;// La may ma gia tri cua
if(P3_7==0) giatribanphim=3+4*x;// gia tri ban phim tuong ung.
}
}
return(giatribanphim);
}
Hàm Main.
void main(void)
{
unsigned char i;
while(1)
{
i=quetbanphim();
phim_duoc_an(i);
}
}
Thêm câu l nh #define vào u chương trình:
94. DKS_GROUP Microcontroller Training Center
DKS_GROUP - 94 - www.EmbestDKS.com 048
5.4. Kinh nghi m:
- Các b n ch y Debug xem s thay i giá tr c a bi n giá tr bàn phím.
- Các b n m i dùng 10 phím t 0…9 . Bài t p cho các b n là dùng phím 16
ch n mode: nh n phím 16 thì thay i ch hi n s thành hi n ch và phím 1 tương
ương ch A,phím 2 tương ương ch B và c như v y.
- Các b n th thay i giá tr #define solanquetphim 100 xem sao.
- ng lo l ng v các warning. Các warning nó c nh báo là b n có khai báo 1 s
hàm mà b n không dùng n. Như hàm delay(); hàm ch A, vv.
Nhi m v : i u khi n hi n th LCD 16x2 dòng ch “www.EmbestDKS.com”
ch y trên màn hình LCD.
Có 16 chân như sau:
Chân Ký hi u I/O Mô t
1 VSS - t
2 VCC - Dương ngu n 5v
3 VEE - C p ngu n i u khi n ph n
4 RS I RS = 0 ch n thanh ghi l nh. RS = 1 ch n
thanh d li u
5 R/W I R/W = 1 c d li u. R/W = 0 ghi
6 E I/O Cho phép
7 DB0 I/O Các bít d li u
8 DB1 I/O Các bít d li u
9 DB2 I/O Các bít d li u
10 DB3 I/O Các bít d li u
11 DB4 I/O Các bít d li u
12 DB5 I/O Các bít d li u
13 DB6 I/O Các bít d li u
14 DB7 I/O Các bít d li u
Chân 15 và chân 16: ghi là A và K. Nó là an t và kat t c a 1 con led dùng sáng LCD
trong bóng t i. Chúng ta không s d ng. N u các b n mu n dùng thì n i chân A qua 1
i n tr t 1K n 5K lên dương 5V, chân K xu ng t èn s sáng.
6.1.L p m ch theo sơ sau:
96. DKS_GROUP Microcontroller Training Center
DKS_GROUP - 96 - www.EmbestDKS.com 048
- Hư ng d n: C m luôn 8 bit d li u c a LCD t D0 n D7 vào c ng 2 c a 8051 mà
không c n câu dây. th a 6 chân ra ngoài là: EN,RW,RS,Ve, Vcc, GND ra ngoài. R i
dùng dây câu chân 1 xu ng GND, chân 2 lên +5V, chân 3 vào chân gi a c a bi n tr
tinh 5K, 2 chân còn l i c a bi n tr tinh 1 chân lên +5V,1 chân xu ng 0V.
6.2.Nguyên lý ho t ng c a LCD:
- Chân VCC, VSS và VEE: Các chân VCC, VSS và VEE: C p dương ngu n - 5v và t
tương ng thì VEE ư c dùng i u khi n tương ph n c a LCD.
- Chân ch n thanh ghi RS (Register Select): Có hai thanh ghi trong LCD, chân
RS(Register Select) ư c dùng ch n thanh ghi, như sau: N u RS = 0 thì thanh ghi mà
l nh ư c ch n cho phép ngư i dùng g i m t l nh ch ng h n như xoá màn hình, ưa
con tr v u dòng v.v… N u RS = 1 thì thanh ghi d li u ư c ch n cho phép ngư i
dùng g i d li u c n hi n th trên LCD.
- Chân c/ ghi (R/W): u vào c/ ghi cho phép ngư i dùng ghi thông tin lên
LCD khi R/W = 0 ho c c thông tin t nó khi R/W = 1.
- Chân cho phép E (Enable): Chân cho phép E ư c s d ng b i LCD ch t d
li u c a nó. Khi d li u ư c c p n chân d li u thì m t xung m c cao xu ng th p ph i
ư c áp n chân này LCD ch t d li u trên các chân d liêu. Xung này ph i r ng t i
thi u là 450ns.
- Chân D0 - D7: ây là 8 chân d li u 8 bít, ư c dùng g i thông tin lên LCD
ho c c n i dung c a các thanh ghi trong LCD. hi n th các ch cái và các con s ,
chúng ta g i các mã ASCII c a các ch cái t A n Z, a n f và các con s t 0 - 9 n
các chân này khi b t RS = 1.
Cũng có các mã l nh mà có th ư c g i n LCD xoá màn hình ho c ưa con
tr v u dòng ho c nh p nháy con tr .
- Chú ý:Chúng ta cũng s d ng RS = 0 ki m tra bít c b n xem LCD có s n
sàng nhân thông tin. C b n là bít D7 và có th ư c c khi R/W = 1 và RS = 0 như
sau:
N u R/W = 1, RS = 0 khi D7 = 1 (c b n 1) thì LCD b n b i các công vi c bên
trong và s không nh n b t kỳ thông tin m i nào. Khi D7 = 0 thì LCD s n sàng nh n
thông tin m i. Lưu ý chúng ta nên ki m tra c b n trư c khi ghi b t kỳ d li u nào lên
LCD.
- Sau ây là b ng mã l nh c a LCD:
Mã (Hex) L nh n thanh ghi c a LCD
1 Xoá màn hình hi n th
2 Tr v u dòng
4 Gi m 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
97. DKS_GROUP Microcontroller Training Center
DKS_GROUP - 97 - www.EmbestDKS.com 048
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 ép con tr v u dòng th nh t
C0 ép con tr v u dòng th hai
38 Hai dòng và ma tr n 5 × 7
- i u khi n LCD qua các bư c sau:
Bư c 0 : Chu n b ph n c ng. Dùng tu c vít hay cái gì b n có xoay bi n tr 5 K
i u ch nh tương ph n c a LCD. Xoay cho n khi các ô vuông(các i m nh) c a
LCD hi n lên thì xoay ngư c bi n tr l i 1 chút.
Bư c 1 : Kh i t o cho LCD.
Bư c 2 : Gán các giá tr cho các bit i u khi n các chân RS,RW,EN cho phù h p
v i các ch : Hi n th kí t lên LCD hay Th c hi n 1 l nh c a LCD.
Bư c 3: Xu t byte d li u ra c ng i u khi n 8 bit d li u c a LCD.
Bư c 4: Ki m tra c b n xem LCD s n sàng nh n d li u m i chưa.
Bư c 5: Quay vòng l i bư c 1.
6.3.L p trình:
- có th l p trình cho LCD ta thêm vào thư vi n string.h c a trình biên d ch
b ng câu l nh:
#include <string.h>
- Khai báo các chân c a LCD g n v i các c ng:
/*
RS chon thanh ghi
=0 ghi lenh
=1 ghi du lieu
RW doc ghi
=0 ghi
=1 doc
E cho fep chot du lieu
xung cao xuong thap toi thieu 450 ns.
Bit co ban D7
khi RS=0 RW=1 neu D7=1 LCD ban
D7=0 LCD san sang.
*/
sfr LCDdata = 0xA0;// Cong 2 , 8 bit du lieu P0 co dia chi 0x80, P1 0x90 , P2 0xA0
sbit BF = 0xA7; // Co ban bit 7
sbit RS = P3^5;
sbit RW = P3^4;
sbit EN = P3^3;
98. DKS_GROUP Microcontroller Training Center
DKS_GROUP - 98 - www.EmbestDKS.com 048
- Vi t 1 s hàm i u khi n LCD như sau:
* Hàm ki m tra LCD có b n hay không:
void wait(void)
{
long n = 0;
EN=1;// Dua chan cho fep len cao
RS=0;// Chon thanh ghi lenh
RW=1;// Doc tu LCD
LCDdata=0xFF;// Gia tri 0xFF
while(BF){n++; if(n>100) break;}// Kiem tra co ban
// Neu ban dem n den 100 roi thoat khoi while
EN=0;// Dua xung cao xuong thap de chot
RW=0;// Doc tu LCD
}
* Hàm i u khi n LCD th c hi n 1 l nh:
void LCDcontrol(unsigned char x)
{
EN=1;// Dua chan cho fep len cao
RS=0;// Chon thanh ghi lenh
RW=0;// Ghi len LCD
LCDdata=x;// Gia tri x
EN=0;// Xung cao xuong thap
wait();// Doi LCD san sang
}
Hàm có 1 bi n u vào là các giá tr trong b ng mã l nh c a LCD.
* Hàm kh i t o LCD:
void LCDinit(void)
{
LCDcontrol(0x30);//Che do 8 bit.
LCDcontrol(0x30);
LCDcontrol(0x30);
LCDcontrol(0x38);// 2 dong va ma tran 5x7
LCDcontrol(0x0C);// Bat con tro
LCDcontrol(0x06);// Tang con tro xang fai
LCDcontrol(0x01);// Xoa man hinh
}
* Hàm l nh cho LCD hi n th 1 kí t :
void LCDwrite(unsigned char c)
{
EN=1;// Cho fep muc cao
RS=1;// Ghi du lieu
RW=0;// Ghi len LCD
LCDdata=c;// Gia tri C
EN=0;// Xung cao xuong thap
99. DKS_GROUP Microcontroller Training Center
DKS_GROUP - 99 - www.EmbestDKS.com 048
wait();// Cho
}
Hàm có 1 bi n u vào là mã c a kí t trong b ng ASCII.
* Hàm l nh cho LCD hi n th 1 xâu kí t ( dòng ch ):
void LCDputs(unsigned char *s,unsigned char row)
{
unsigned char len;
if(row==1) LCDcontrol(0x80);// Ep con tro ve dau dong 1
else LCDcontrol(0xC0);// Ep con tro ve dau dong 2
len=strlen(s);// Lay do dai bien duoc tro boi con tro
while(len!=0)// Khi do dai van con
{
LCDwrite(*s);// Ghi ra LCD gia tri duoc tro boi con tro
s++;// Tang con tro
len--;// Tru do dai
}
}
Hàm có hai bi n u vào là : xâu kí t c n hi n th và dòng c n hi n th xâu ó(1 ho c 2).
*s là con tr , tr t i bi n s
6.3.1. nh nghĩa con tr
B nh c a V K các b n tư ng tư ng như 1 cái t nhi u ngăn. Khi khai báo 1
bi n, ví d bi n ki u unsigned char i; thì v k lưu bi n I vào 1 ngăn trong t _ 1 ô nh
trong b nh , dĩ nhiên xác nh các ngăn t ngư i ta ánh s cho t ng ngăn, còn v k
c p cho các ô nh trong b nh 1 a ch xác nh ô nh ó.Ví d ti p: I có giá tr là
100, thì n i dung c a ô nh lưu bi n I là 100,i=100, còn con tr tr n I có giá tr là a
ch c a ô nh ch a bi n I ó.
6.3.2. Cách s d ng con tr :
khai báo con tr có thêm d u * trư c tên bi n. *I là bi n ki u con tr , tr t i
bi n i(unsigned char). I mang giá tr t 0 n 255, *I mang i ch c a ô nh ch a i.
* Hàm hi n th 1 s integer:
void LCDwritei(int d)
{
unsigned char i,j,k,l;
i=d%10;// Chia lay phan du, duoc chu so hang don vi
d=d/10;// Chia lay phan nguyen, duoc nhung chu so da bo hang don vi
j=d%10;// Duoc chu so hang chuc
d=d/10;// Nhung chu so da bo hang don vi va hang chuc
k=d%10;// Duoc hang tram
l=d/10;// Duoc hang nghin
LCDwrite(48+l);// Hien thi ki tu trong bang ascii
LCDwrite(48+k);// Trong bang ascii so 0 co co so thu tu la 48
LCDwrite(48+j);
LCDwrite(48+i);
100. DKS_GROUP Microcontroller Training Center
DKS_GROUP - 100 - www.EmbestDKS.com 048
}
Hàm có 1 bi n u vào là s int l n n hàng nghìn c n hi n th .
* Hàm tr :
void delay(long time)
{
long n;
for(n=0;n<time;n++) ;
}
* Hàm main:
void main(void)
{
char x;
LCDinit();
LCDputs("8052 MCU",1);
delay(30000);
while(1)
{
for(x=0;x<16;x++)// Dich 16 lan.
{
LCDputs("8052 MCU",1);
LCDcontrol(0x18);// Dich hien thi sang trai.
delay(5000);// Tre
}
}
}
101. DKS_GROUP Microcontroller Training Center
DKS_GROUP - 101 - www.EmbestDKS.com 048
Nhi m v :
T o ra xung có r ng thay i, 10 c p, t n s 1Khz, i u khi n t c ng
cơ (10 c p t c ).
7.1. L p m ch theo sơ sau:
+ C3
10uF/25V
C2
33p
C1
33p
R1
10K
5VDC
1 2
SW1
1 2
SW2
X1
19
X2
18
RESET
9
P2.0
21
VCC
40
VSS
20
EA
31
P1.0
1
P1.1
2
U1
8051
12Mhz
3 B
2C1E
C828
12
A
-
+
DC Motor
12V
R2
10K
- Hư ng d n: Chân c a C828 là ECB, n u c m xuôi transitor nhìn vào m t có ch , tính t
bên trái sang.
7.2.L p trình:
- Cách t o xung có r ng thay i b ng V K.
+ Cách 1: Như các b n i u khi n nh p nháy 1 con led, ó là t o ra 1 xung 1
chân c a vi i u khi n, nhưng xung ó có r ng c nh, t n s l n, cách b n có th
i u ch nh l i hàm delay t n s c a nó úng 1 Khz. Tuy nhiên vì là dùng hàm delay
nên trong th i gian có xung lên 1(5V) và th i gian không có xung(0V) vi i u khi n
không làm gì c , hơn n a t o xung b ng vi c delay mà các b n có nhu c u c n 2 b phát
102. DKS_GROUP Microcontroller Training Center
DKS_GROUP - 102 - www.EmbestDKS.com 048
xung 2 kênh, có cùng t n s mà khác r ng xung thì tr nên r t khó khăn. Cho nên
chúng ta dùng b nh th i Timer c a vi i u khi n trong trư ng h p này r t ti n.
+ Cách 2: Dùng ng t Timer c a b vi i u khi n.
Trư c h t nh c l i v ng t c a vi i u khi n:
+ Ng t là gì ? tr l i câu h i này tôi xin trích an v ng t trong bài 2 ví d cho
ng t timer:
Timer
* ** * ** * **
M t chương trình chính không có ng t thì ch y liên t c, còn chương trình có ng t
thì c khi nào i u ki n ng t ư c m bào thì con tr s nh y sang hàm ng t th c hi n
xong hàm ng t l i quay v úng ch cũ th c hi n ti p chương trình chính. Tôi có 1 ví d
như sau: B n ang ăn cơm , có ti ng i n tho i , b n t bát cơm ra nghe i n tho i ,
nghe xong l i quay v bưng bát cơm lên ăn ti p. Thì quá trình ăn cơm c a b n là chương
trình chính,có i n tho i g i n là i u ki n ng t, b n ra nghe i n tho i là th c hi n
chương trình ng t(Interrupt Service Rountine),quay v ăn cơm ti p là ti p t c th c hi n
chương trình chính.
Ng t i v i ngư i m i h c vi i u khi n là r t khó hi u, vì a s các tài li u u
không gi i thích ng t làm gì. Có nhi u lo i ng t khác nhau nhưng t t c u có chung
1 c i m, ng t dùng cho m c ích a nhi m. a t c là nhi u, nhi m t c là nhi m v .
Th c hi n nhi u nhi m v .
Các b n nhìn vào ti n trình c a hàm main v i chương trình có ng t :
Chương trình chính ang ch y, ng t x y ra, th c hi n hàm ng t r i quay l i chương trình
chính. Chương trình trong vi i u khi n khác v i ví d ăn cơm nghe i n tho i c a tôi
ch , th i gian th c hi n hàm chính là r t l n,th i gian th c hi n hàm ng t là r t nh , cho
nên th i gian th c hi n hàm ng t không nh hư ng gì n th i gian th c hi n hàm chính
Như v y trong hàm ng t các b n làm 1 vi c, trong hàm chính c c b n làm 1 vi c
Main Program
Main
ISR
Main
ISR
Main
ISR
Main
Program excution without interrut
Program excution with interrupt.
103. DKS_GROUP Microcontroller Training Center
DKS_GROUP - 103 - www.EmbestDKS.com 048
như v y coi như các b n làm ư c 2 vi c( a nhi m) trong 1 quãng th i gian tương i
ng n c mS, ch th c ra t i 1 th i i m vi i u khi n ch th c thi 1 l nh.
Ví d : B n th nghĩ xem làm th nào v a i u ch xung PWM i u ch nh t c
ng cơ , v a c các c m bi n u vào mà t c ng cơ ph thu c u vào c m bi n.
V y ng t là 1 i u ki n nào ó x y ra ng u nhiên mà vi i u khi n có th bi t do
ph n c ng c a vi i u khi n, r i ta căn c vào ó l p tr nh.
* Ví d : V i ng t b nh th i timer, hay b m counter là khi tràn b m thì
ph n c ng c a vi i u khi n s b o có ng t x y ra và nh y n chương trình ph c v
ng t( ISR_ Interrupt Sevice Rountine) 1 cách t ng.
V i ng t ngoài, chân P3.2 ch ng h n, n u ta khai báo trư c chân s d ng chân
P3.2 s d ng cho ng t ngoài ch không ph i s d ng cho m c ích IO thi c khi cú 1
xung xu t hi n t m ch ngo i vi truy n vào chõn P3.2 thì ph n c ng c a vi i u khi n
nh n ra và chuy n t i chương trình ph c v ng t.
V i ng t n i ti p thì c khi có kí t truy n t máy tính xu ng vi i u khi n thì s
có hi n tư ng ng t x y ra.
- Hàm ng t:
C u trúc:
Void Tênhàm(void) interrupt ngu nng t using băngthanhghi
{
// Chuong trinh phuc vu ngat o day
}
Chỳ ý v hàm ng t:
+ Hàm ng t không ư c phép tr l i giá tr hay truy n bi n vào hàm.
+ Tên hàm b t kì.
+ interrupt là t khóa phân bi t hàm ng t v i hàm thư ng.
+ Ngu n ng t t 0 t i 5 theo b ng vector ng t.
+ Băng thanh ghi trên ram ch n t 0 n 3.
T y theo b n vi t hàm ng t cho ngu n nào b n ch n ngu n ng t t b ng sau:
Ng t do C a ch vector
Reset h th ng RST 0000H
Ng t ngoài 0 IE0 0003H
B nh th i 0 TF0 000BH
Ng t ngoài 1 IE1 0013H
B nh th i 1 TF1 001BH
Port n i ti p RI ho c TI 0023H
B nh th i 2 TF2 ho c EXF2 002BH
Riêng ng t Reset không tính, b t u m t 0 và t ng t ngoài 0. Ví d : tôi c n vi t hàm
ng t cho b nh th i timer 1 hàm ng t s là.
void timer1_isr(void) interrupt 3 using 0
{
// Lenh can thuc hien.
}
104. DKS_GROUP Microcontroller Training Center
DKS_GROUP - 104 - www.EmbestDKS.com 048
- V using 0: Có 4 băng thanh ghi b n có th ch n cho chương trình ph c v ng t, cái này
cũng không quan tr ng. Trong hàm ng t các b n có th b i t using 0, khi ó vi i u
khi n s t s p x p là dùng băng thanh ghi nào.
- Hàm ng t khác hàm bình thư ng ch nào. Hàm bình thư ng ví d hàm delay, c khi
b n g i nó thì nó s ư c th c hi n, có nghĩa là nó có v trí c nh trong ti n trình hàm
main, có nghĩa là b n bi t nó x y ra khi nào. Còn hàm ng t thì không có ti n trình c
nh, i u ki n ng t có th x y ra b t kì lúc nào trong ti n trình hàm main và c khi nào
có i u ki n ng t thì hàm ng t s ư c g i t ng.
- s d ng ng t ta ph i làm các công vi c sau:
1) Kh i t o ng t: dùng ng t nào thì cho phép ng t ó ho t ng b ng cách gán giá
tr tương ng cho thanh ghi cho phép ng t IE( Interrupt Enable):
EA ET2 ES ET1 EX1 EX0 ET0
i u khi n các ngu n ng t
IE (0: không cho phép; 1: cho phép)
IE.7 EA Cho phép/ không cho phép toàn c c
IE.6 --- Không s d ng
IE.5 ET2 Cho phép ng t do b nh th i 2
IE.4 ES Cho phép ng t do port n i ti p
IE.3 ET1 Cho phép ng t cho b nh th i 1
IE.2 EX1 Cho phép ng t t bên ngoài (ng t ngoài 1)
IE.1 EX0 Cho phép ng t t bên ngoài (ng t ngoài 0)
IE.0 ET0 Cho phép ng t do b nh th i 0
IE là thanh ghi có th x lí t ng bít. Ví d : b n mu n cho phép ngăt timer 1 b n dùng
l nh: ET1=1; Không cho phép n a b n dùng l nh : ET1=0; Ho c b n có th dùng l nh
IE= 0x08; thì bit 3 c a thanh ghi IE t c(IE) s lên 1. Nhưng cách th nh t ti n hơn.
2) C u hình cho ng t: Trong 1 ng t nó l i có nhi u ch ví d : v i ng t timer.
B n ph i c u hình cho nó ch y ch nào, ch timer hay counter, ch 16 bit, hay
8 bit,… b ng cách gán các giá tr tương ng cho thanh ghi TMOD( Timer MODe).
105. DKS_GROUP Microcontroller Training Center
DKS_GROUP - 105 - www.EmbestDKS.com 048
TMOD Ch n model cho b nh th i 1
7 GATE Ch n model cho b nh th i 1
6 C/T Bít ch n ch c năng m ho c nh th i:
5 M1 Bit ch n ch th nh t
4 M0 Bit ch n ch th 2
M1 M0 Ch Ch c năng
0 0 0 Ch nh th i 13 bit
0 1 1 Ch nh th i 16 bit
1 0 2 Ch t ng n p l i 8
bit
1 1 3 Ch nh th i chia x
3 GATE Bit i u khi n c ng cho b nh th i 0
2 C/T Bit ch n ch c năng m / nh th i cho b nh
th i 0
1 M1 Bit ch n ch th nh t cho b nh th i 0
0 M0 Bit ch n ch th 2 cho b nh th i 0
Ví d tôi c u hình cho b nh th i 1 ch timer,v i b m 8 bit t ng n p l i(auto
reload) dùng l nh sau: TMOD=0x20.
Các b n ng lo vì vi c ph i nh b ng thanh ghi này, các b n không ph i nh nói tr ng
ra như v y, chuy n sang ph n l p trình các b n s ư c hư ng d n làm th nào không
ph i nh , nhưng ch l p trình v i C m i làm ư c còn l p trình Asem thì b t bu c ph i
nh .
3)B t u chương trình có ng t:
-Trư c khi b t u cho ch y chương trình ta ph i cho phép ng t toàn c c ư c
x y ra b ng cách gán EA(Enable All interrupt) b ng 1, thì ng t m i x y ra.
-Thư ng thì ngay vào u chương trình(hàm main) trư c vòng while(1) chúng ta
t công vi c kh i t o, c u hình và cho phép ki m tra ng t. Ví d v i b nh th i timer
ta gán các giá tr phù h p cho thanh ghi TCON( Timer CONtrol).
TCON i u khi n b inh th i
TCON.7 TF1 C tràn c a b nh th i 1. C này ư c set b i
ph n c ng khi có tràn, ư c xoá b i ph n m m,
ho c b i ph n c ng khi b vi x lý tr n trình
ph c v ng t
TCON.6 TR1 Bit i u khi n ho t ng c a b nh th i 1. Bit
này ư c set ho c xoá b i ph n m m i u khi n
b nh th i ho t ng hay ngưng
TCON.5 TF0 C tràn c a b nh th i 0
TCON.4 TR0 Bit i u khi n ho t ng c a b nh th i 0
TCON.3 IE1 C ng t bên ngoài 1 (kích kh i c nh). C này ư c
set b i ph n c ng khi có c nh âm (cu ng) xu t hi n
106. DKS_GROUP Microcontroller Training Center
DKS_GROUP - 106 - www.EmbestDKS.com 048
trên chân INT1, ư c xoá b i ph n m m, ho c
ph n c ng khi CPU tr n trình ph c v ng t
TCON.2 IT1 C ng t bên ngoài 1 (kích kh i c nh ho c m c). C
này ư c set ho c xoá b i ph n m m khi x y ra
c nh âm ho c m c th p t i chân ng t ngoài
TCON.1 IE0 C ng t bên ngoài 0 (kích kh i c nh)
TCON.0 IT0 C ng t bên ngoài 0 ( kích kh i c nh ho c m c)
Ví d ch y b nh th i timer 1 ta dùng câu l nh: TR1=0;
TR1(Timer Run 1). Còn b n nào thích khó thì:TCON=0xxx;
Còn các lo i ng t khác quá trình tương t , ây là khóa h c cơ b n ch làm vi c v i ng t
timer, trong khóa nâng cao s có các ng t còn l i, tuy nhiên làm vi c ư c v i ng t timer
thì các ng t khác các b n cũng có th làm tương t , các b n làm n ng t nào thì dùng tài
li u tra b ng thanh ghi c a ng t ó. Tài li u tôi s g i cùng bài này.
- Quay tr l i bài h c:
Sau khi kh i t o song và cho ng t timer 1 ch y thì i u gì x y ra?
Khi b t u cho timer 1 ch y thì b m c a timer s m dao ng c a th ch anh, c 12
dao ng c a th ch anh(1 chu kì máy), b m c a timer 1 TL1(Timer Low1) s tăng
1,có th n nói timer 1 m s chu kì máy. i v i ch 8 bít.
TL1 là 1 thanh ghi 8 bít, là b m c a b nh th i rõ r i. Nó m ư c t 0, n 255.
N u nó m n 256 thì b m tràn, TL1 quay vòng l i b ng 0, và c ng t TF1(Timer
Flag 1) t ng ư c gán lên 1(b ng ph n c ng c a vi i u khi n) như 1 công t c t ng
b t, và ng t x y ra.
Còn v i ch 16 bít, b m c a b nh th i còn 1 thanh ghi 8 bít n a là
TH1(Timer high 1), n u c u hình cho timer 1 ho t ng ch 16 bit thì khi TL1 tràn
nó s m sang TH1(TH1 s tăng 1). Như v y ta có th m: 216
chu kì máy( 2 thanh ghi
8+8=16 bít).
Chú ý là khi b m tràn ng t s x y ra. N u ta c n m 256 chu kì máy thì khi kh i t o
ta cho TL1=0; , còn n u không mu n m 256 chu kì mày mà ta ch c n m 100 thôi
ng t ã x y ra r i thì ta f i làm như sau: 256-100 = 156; và khi kh i t o ta gán :
TL1=155; vì m t 155 n 255 là 100 l n thì ng t x y ra.
V i yêu c u c a bài. T o xung t n s 1Khz Chu kì = 1/103
= 0,001 giây= 1 mili
giây=1000 uS= 1000 chu kì máy. V i 10 c p t c , t c là b n ph i t o ra ư c xung
10%, 20%, 30%, 40%, …, 90%, 100%. 1 xung như sau:
5V
0V
T : Chu kì
1000 miro giây.
Kho ng th i gian xung kéo dài 5V là T1. Xung 10% t c là T1/ T= 10%=1/10. Xung 20%
T2/T=2/10…PWM(Thay i r ng xung)
Bây gi tôi m i xin nói v ph n 2.
107. DKS_GROUP Microcontroller Training Center
DKS_GROUP - 107 - www.EmbestDKS.com 048
7.3) Nguyên lí ho t ng:
- Xung PWM: ưa ra m transitor, xung v i r ng l n hơn transitor s m lâu
hơn ng cơ s quay nhanh hơn,dĩ nhiên không tuy n tính. Không có xung ng cơ s
không quay, có xung 100% ng cơ s quay max.Tuy nhiên xung ph i l n hơn 1 m c
nào ó thì m i kh i ng cho ng cơ. Các c tính này các b n tham kh o trong giáo
trình v máy i n, khí c i n, n u các b n c n thông s chính xác.
có th thay i 10 c p t c v i chu kì 1000uS, ta kh i t o cho ng t timer: 100 uS
ng t 1 l n. Trong hàm ng t ki m tra xem ta c n c p xung bao nhiêu % thì ta s gán giá tr
cho nó. C th như sau:
* Hàm kh i t o ng t.
Dùng ng t timer 0, 100 uS ng t 1 l n, dùng ch 2 8 bit t ng n p l i c a
timer (vì mình ch c n m n 100).TL0 n p b ng 156. i v i ch 2 khi tràn b m
TL0 s quay vòng giá tr b ng 0, nhưng sau ó nó l i ư c n p giá tr lưu trong TH0(giá
tr n p l i), do ó ta ch c n gán giá tr choTL0 và TH0 trong hàm kh i t o, còn các ch
khác 16 bit, 2 timer counter 8 bit, khi tràn b m TL0 không ư c n p l i mà ta ph i
t gán l i giá tr cho nó trong hàm ng t.
void khoitaotimer0(void)// Ham khoi tao
{
EA=0;// Cam ngat toan cuc
TMOD=0x02;// Timer 0 che do 2 8 bit auto reload
TH0=0x9B;// Gia tri nap lai 155 doi ra so hex
TL0=0x9B;// Gia tri khoi tao 155 doi ra so hex
ET0=1;// Cho phep ngat timer 0
EA=1;// Cho phep ngat toan cuc
TR0=1;// Chay timer 0 bat dau dem so chu ki may
}
109. DKS_GROUP Microcontroller Training Center
DKS_GROUP - 109 - www.EmbestDKS.com 048
* Hàm ng t:
unsigned char dem=0;// Khai bao bien dem de dem tu 1 den 10
unsigned char phantramxung;// Bien chua phan tram xung(0...10)
void timer0(void) interrupt 1 //Ngat timer 0
{
TR0=0;// Dung chay timer 0
TF0=0;// Xoa co, o che do co tu duoc xoa,che do khac can toi cu viet vao day
dem++;
if(dem<phantramxung) P2_0=1;// Neu bien dem < phan tram xung thi dua gia tri 1 ra
chan, xung 5V
else P2_0=0;// Neu dem = phan tram xung
if(dem==10) dem=0;// Neu dem du 10 thi gan lai bang 0 de bat dau chu ki moi
TR0=1;// Cho chay timer
}
có th thay i r ng xung thì ta lưu r ng xung vào 1 bi n, vì hàm ng t không
cho truy n bi n vào ta khai báo bi n ó là bi n toàn c c có th gán giá tr m i hàm.
100 uS ng t 1 l n xác nh chu kì 1000 uS ta c n m t 1 n 10 ta khai báo bi n
m.
void timer0(void) interrupt 1 //Ngat timer 0
{
TR0=0;// Dung chay timer 0
TF0=0;// Xoa co, o che do co tu duoc xoa,che do khac can toi cu viet vao day
TH0=0xAB;
TL0=0xAB;
….
TR0=1;// Cho chay timer
}
C u trúc hàm ng t timer nào cũng ph i theo, do ch 2 t ng n p l i nên kô c n gán
giá tr cho TH0 và TL0.
V bi n dem s m t 1 n 10 n u b ng 10 k t thúc 1 chu kì 10*100 =1000 uS, ta gán
l i nó b ng 0 sang chu kì m i.
if(dem<phantramxung) P2_0=1;// Neu bien dem < phan tram xung thi dua gia tri 1 ra
chan, xung 5V
else P2_0=0;// Neu dem = phan tram xung
Câu l nh này ki m tra n u m nh hơn phantramxung thì s ưa ra c ng giá tr 1, b ng
ho c l n hơn s ưa ra giá tr 0. Khi vào chương trình chính ta ch vi c thay i giá tr
bi n phantramxung thì r ng xung s thay i.
* Hàm main:
void main(void)
{
khoitaotimer0();
while(1)
{
110. DKS_GROUP Microcontroller Training Center
DKS_GROUP - 110 - www.EmbestDKS.com 048
phantramxung=9;
delaylong(20000);
phantramxung=4;
delaylong(20000);
}
}
Gi s khi các b n gán phantramxung=4; Thì c m i 100uS ng t x y ra 1 l n, và ki m tra
bi n m. L n u dem=1 <4 nên giá tr P2_0 = 1 m c cao, l n th 2 , 200 uS, dem =2<4
P2_0 = 1 m c cao, l n th 3, 300uS, dem=3<4, P2_0=1 m c cao, l n th 4, 400uS, dem
=4 <4 sai, P2_0=0, b t u xu ng m c th p, có xung t cao xuông th p, dem = 5<4 sai ,
111. DKS_GROUP Microcontroller Training Center
DKS_GROUP - 111 - www.EmbestDKS.com 048
P2_0=0 m c th p, …, dem =10 <4 sai P2_0 m c th p 1000 uS , 400uS cao, 600uS
th p quay vòng dem=0, ng t l n th 11, dem=1 < 4 , P2_0=1 m c cao, có xung th p lên
cao….
PWM 2 chân P2_0 và P3_5, các b n khai báo thêm 1 bi n phantramxung2 và ưa
thêm dòng l nh sau vào hàm ng t.
if(dem<phantramxung) P3_5=1;// Neu bien dem < phan tram xung thi dua gia tri 1 ra
chan, xung 5V
else P3_5=0;// Neu dem = phan tram xung
Chú ý: Th c ra 1 chu kí như ta v a làm không chính xác 100% là 1Khz, vì ta chưa tính
n dài c a hàm ng t,m i l n ng t 100uS, 10 l n là 1000uS ã , còn th i gian th c
hi n hàm ng t n a, như v y là chu kì c a ta l n hơn 1000uS, t n s s <1Khz, nhưng
th c s sai s ó không áng k . N u các b n mu n chính xác tôi cũng chi u lòng các
b n. Các b n ch y debug, th ch anh úng 12Mhz, quan sat dòng sec xem hàm ng t
di n ra trong bao nhiêu chu kì máy, khi n p giá tr cho TL0 và TH0 các b n l y 155 tr i
giá tr ó ư c gía tr a gán vào, như v y a+th i gian th c hi n hàm ng t úng 100uS.
113. DKS_GROUP Microcontroller Training Center
DKS_GROUP - 113 - www.EmbestDKS.com 048
Ch vào list mode: Ch n ch , r i quan sát giá tr TMOD r i quay l i i n vào
chương trình.
Chú ý: Vô cùng quan tr ng các b n ch ư c ch y v i ng cơ lo i nh , n u ng cơ lo i
to ph i có m ch i u khi n riêng không là s cháy chip. N u không có m ch i u khi n
các b n có th làm, có th mư n c a tôi, không thì ch u khó ch y mô ph ng.
114. DKS_GROUP Microcontroller Training Center
DKS_GROUP - 114 - www.EmbestDKS.com 048
Nhi m v :
i u khi n Led ma tr n 8x8. Hi n th dòng ch ch y “MTC”
Chu n b :
Led ma tr n 8x8
12345678
9 10 11 12 13 14 15 16
LED MATRIX 1
8x8
Sơ chân led ma tr n 8x8:
Chân C t Hàng Chân C t Hàng
1 4 9 8
2 2 10 5
3 7 11 3
4 6 12 5
5 1 13 8
6 4 14 7
7 3 15 2
8 6 16 6
8.1. L p m ch theo sơ sau:
116. DKS_GROUP Microcontroller Training Center
DKS_GROUP - 116 - www.EmbestDKS.com 048
8.2. Nguyªn lý ho¹t ®Ðng:
Hang 1
D4
LED
Cot6
D4
LED
D3
LED
Cot3
D6
LED
D8
LEDCot5
D8
LED
D6
LED
D5
LED
Cot4
Hang 3
D7
LED
D5
LED
D8
LED
D4
LED
D5
LED
D2
LED
D8
LED
D7
LED
D6
LED
D5
LED
Hang 7
D4
LED
D2
LED
D4
LED
D6
LED
D2
LED
D3
LED
D6
LED
D5
LED
D2
LED
D7
LED
D2
LED
D8
LED
Hang 5
D8
LED
D8
LED
D5
LED
D8
LED
D8
LED
Cot8
Cot2
D2
LED
D5
LED
D6
LED
D7
LED
D2
LED
D8
LED
D8
LED
D3
LED
D8
LED
D2
LED
Hang 2
D4
LED
D4
LED
D8
LED
D3
LED
Hang 4
D3
LED
D3
LED
Cot1
D8
LED
D6
LED
D4
LED
D6
LED
D7
LED
D7
LED
Hang 6
D8
LED
D3
LED
D7
LED
D8
LED
Hang 8
D7
LED
Cot7
D3
LED
D5
LED
Mu n cho led sáng, c p i n dương 5V vào hàng, 0V vào c t, dòng 10mA n 15 mA.
Ví d : mu n èn led v trí 5x4 sáng, ta ưa i n áp c t 4(P0_3) xu ng 0V, i n áp hàng
5(P2_5) lên 5V.
Hi n th ch : th ng kê các i m sáng thành ch r i cho các hàng c t i n áp tương ng.
Có th dùng công c debug l y giá tr c ng tương ng v i các led sáng.
Gi ng như quét bàn phím, ưa i n áp 0V ra t ng c t n i v i c ng 0. Như v y s có 8 giá
tr : 0xFE, 0xFD, 0xFB, 0xF7, 0xEF, 0xDF, 0xBF, 0x7F ph I ưa vào 1 m ng 8 ph n t ,
r i sau ó ưa vào 1 vòng for tăng d n 1 bi n tăng ph n t m ng cot[8].
V i m i l n 1 chân c ng 0 xu ng 0V ta dùng c ng 2 ưa ra 1 giá tr 8 bít i u khi n
trong 1 c t nh ng èn nào sáng. Ví d mu n hàng 1 và hàng 3 sáng thì hàng 1 và 3 có giá
tr 5V còn các hàng khác 0V, ta ư c giá tr 8 bít sau: 0x05 ( 1010 000).
T i m i th i i m ch có m t s èn trên 1 c t sáng, nhưng do ta quét 8 c t v i t n s
nhanh, vì m t có hi n tư ng lưu nh nên ta th y trong 1 th i i m ta th y toàn b kí t .
V i 8 c t l n lư t b ng 0V ta ph I ưa ra tương ng 8 giá tr 8 bit ra c ng 2, do ó ta f I
lưu 8 giá tr ó vào 1 m ng 8 kí t _ kytu1[8], ta s vi t các ký t trên 7 c t. m i kí t
s cách nhau 1 c t không sáng. Ta khai báo m ng kytu1[9] có 9 ph n t và ph n t u
tiên có giá tr y ra c ng 2 là 0x00 t t toàn b c t ó.
117. DKS_GROUP Microcontroller Training Center
DKS_GROUP - 117 - www.EmbestDKS.com 048
Quá trình i u khi n hi n th như sau:
C t 1, hàng 1, c t 2 hàng 2, …, c t 8 , hàng 8.
làm ch ch y:
Thêm 1 bi n vào i u khi n th t hi n th hàng.
Hi n 1 ch trên led như trên ã ưa ra:
C t 1, hàng 1, c t 2 hàng 2, …, c t 8 , hàng 8.
Mu n ch ó d ch chuy n sang tráI ta hi n th như sau:
C t 1, hàng 2, c t 2 hàng 3, …, c t 7, hàng 8,c t 8 , hàng 1 ký t sau.
C t 1, hàng 3, c t 2 hàng 4, …, c t 7 hàng 1 ký t sau,c t 8 , hàng 2 ký t sau.
8.3) Code:
#include <REGX51.H>
/* Cot tu P0.0 den P0.7
Hang tu P2.0 den P2.7
De quet dua muc logic 0 lan luot ra cong 0
*/
/* Ham tre */
void delay(long time)
{
long n;
for(n=0; n<time; n++)
{
;
}
}
unsigned char kytu1[9];// Mang 9 phan tu chua gia tri cac hang day ra cong 2
unsigned char k=0;// Bien xac dinh cac ky tu
/* Ham nap gia tri hien thi cac ky tu vao mang kytu1
co 8 gia tri dua ra va 1 gia tri khong bat den nao de cac ky tu cach nhau 1 cot */
void mahoa(unsigned char x)
{
switch(x)
{
// Dau trang
case 0: { kytu1[0]=0x00; kytu1[1]=0x00; kytu1[2]=0x00; kytu1[3]=0x00;
kytu1[4]=0x00; kytu1[5]=0x00; kytu1[6]=0x00; kytu1[7]=0x00; kytu1[8]=0x00;
break; }
// Chu M
case 1: { kytu1[0]=0x00; kytu1[1]=0xFF; kytu1[2]=0x02; kytu1[3]=0x04;
kytu1[4]=0x08; kytu1[5]=0x04; kytu1[6]=0x02; kytu1[7]=0xFF; kytu1[8]=0x00;
break;
}
// Chu T
case 2: { kytu1[0]=0x00; kytu1[1]=0x01; kytu1[2]=0x01; kytu1[3]=0x01;
118. DKS_GROUP Microcontroller Training Center
DKS_GROUP - 118 - www.EmbestDKS.com 048
kytu1[4]=0xFF; kytu1[5]=0x01; kytu1[6]=0x01; kytu1[7]=0x01; kytu1[8]=0x00;
break;
}
// Chu C
case 3: { kytu1[0]=0x00; kytu1[1]=0x7E; kytu1[2]=0x81; kytu1[3]=0x81;
kytu1[4]=0x81; kytu1[5]=0x81; kytu1[6]=0x42; kytu1[7]=0x00; kytu1[8]=0x00;
break; }
// Dau trang
case 4: { kytu1[0]=0x00; kytu1[1]=0x00; kytu1[2]=0x00; kytu1[3]=0x00;
kytu1[4]=0x00; kytu1[5]=0x00; kytu1[6]=0x00; kytu1[7]=0x00; kytu1[8]=0x00;
break; }
}
}
/* Ham quet led ma tran_ vua hien thi vua dich ky tu dan sang trai*/
void hienthi(void)
{
unsigned char n,m,lap;
unsigned char cot[8]={0xFE,0xFD,0xFB,0xF7,0xEF,0xDF,0xBF,0x7F}; // Cac
phan tu
quet cot
for(m=0; m<8 ; m++)// Dich hien thi
{
for(lap=0; lap<10; lap ++) // Lap hien thi
{
for(n=0; n<8 ; n++)// Quet cot
{
if((n+m)<9 )// Neu n+m < 9 hien thi ky tu 1
{
mahoa(k); // Nap cac gia tri ma hoa ky tu dua ra cac hang (Cong 2)
P0=cot[n]; // Day gia tri 0V ra cong 0 (cac cot)
P2=kytu1[n+m];// Day cac gia tri cac hang (ma hoa ky tu) ra cong 2(cac hang)
delay(45);// Tre du de led sang
}
if((n+m) > 7)// Neu n+m >7 hien thi ky tu 2
{
mahoa(k+1);// Nap gia tri ma hoa ky tu tiep de dua ra cac hang(Cong 2)
P0=cot[n];// Day gia tri logic 0V ra cong 0(cac cot)
P2=kytu1[n+m-8];// Day cac gia tri cac hang (ma hoa ky tu) ra cong 2(cac hang)
delay(45);// Tre du de led sang
119. DKS_GROUP Microcontroller Training Center
DKS_GROUP - 119 - www.EmbestDKS.com 048
}
P0=0xFF;// Day cac cot len cao
P2=0x00;// Dua cac hang xuong thap de tat toan bo cac led.
}
}
}
}
void main(void)
{
while(1)// Vong lap vo han.
{
hienthi(); // Hien thi 2 ky tu dau tien dau trang va chu M
k=k+1; // Tang k de hien thi chu M va chu T lan tiep
if(k==4) k=0;// Quay vong hien thi
}
}
Chú ý:
M ch led sáng u tuy nhiên sáng y u, do l p trên board chúng ta
không l p các linh ki n khuyêch i dòng v_ n dòng led sáng p, u.
Khi l_m m ch các b n thêm các linh ki n khuyêch i ho c n dòng èn
sáng u nh− ULN2003 ho c ULN 2803 −a giá tr logic ra h_ng, dùng
transitor ho c dùng luôn ULN quét c t.