Tải bản đầy đủ (.pptx) (31 trang)

Mạch đếm up down sử dụng 8051

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 (830.57 KB, 31 trang )

MẠCH ĐẾM BA CHỮ SỐ SỬ DỤNG LED 7 ĐOẠN
Các nội dung tìm hiểu:
I.
II.
III.
IV.
V.

Tóm tắt đề tài
Lựa chọn linh kiện chính
Lưu đồ thuật tốn
Chương trình điều khiển ( code )
Mạch mô phỏng proteus


I/ TÓM TẮT ĐỀ TÀI
1/ Giới thiệu chung
- Mạch đếm ba chữ số sử dụng led 7 đoạn có nút UP/DOWN để điều chỉnh đếm lên hay đếm xuống .

2/ Yêu cầu
- Mạch đếm 3 chữ số có thể đếm lên và đếm xuống thay đổi chế độ đếm bằng nút nhấn.
- Lập trình bằng hợp ngữ ASM và ngơn ngữ C, có sử dụng chương trình ngắt.


II/ LỰA CHỌN LINH KIỆN CHÍNH
2.1/ Vi xử lí AT89C52
2.1.1/ Đặc điểm
- 8KB ROM
- 256 byte RAM
- 04 port xuất nhập (I/O port) 8 bit
- 03 bộ định thời 16 bit


- Mạch giao tiếp nối tiếp
- Không gian nhớ chương trình (mã) ngồi 64K
- Khơng gian nhớ dữ liệu ngồi 64K
- Bộ xử lí bit ( thao tác trên các bit riêng rẽ)
- 210 vị trí nhớ được định địa chỉ, mỗi vị trí 1 bit
- Nhân / chia 4ms
- Tần số xung Clock 1Mhz (đối với thạch anh 12Mhz)


II/ LỰA CHỌN LINH KIỆN CHÍNH
2.1.2/ Sơ đồ chân vi xử lí AT89C52


II/ LỰA CHỌN LINH KIỆN CHÍNH
2.2/ LED 7 đoạn
2.2.1/ Cấu tạo
- Led 7 đoạn có cấu tạo bao gồm 7 led đơn có dạng thanh xếp theo hình dạng số 8 và có thêm một led đơn hình trịn
nhỏ thể hiện dấu chấm trịn ở góc dưới, bên phải của led 7 đoạn 8 led đơn trên led 7 đoạn có Anode(cực +) hoặc
Cathode(cực -) được nối chung với nhau vào một điểm, được đưa chân ra ngoài để kết nối với mạch điện. 8 cực còn
lại trên mỗi led đơn được đưa thành 8 chân riêng, cũng được đưa ra ngoài để kết nối với mạch điện.
- Nếu led 7 đoạn có Anode(cực +) chung, đầu chung này được nối với +Vcc, các chân còn lại dùng để điều khiển
trạng thái sáng tắt của các led đơn, led chỉ sáng khi tín hiệu đặt vào các chân này ở mức 0. Nếu led 7 đoạn có
Cathode(cực -) chung, đầu chung này được nối xuống Ground (hay Mass), các chân còn lại dùng để điều khiển
trạng thái sáng tắt của các led đơn, led chỉ sáng khi tín hiệu đặt vào các chân này ở mức 1.


II/ LỰA CHỌN LINH KIỆN CHÍNH
2.2.2/ Bảng mã hiển thị LED 7
Bảng mã hiển thị led 7 đoạn dành cho led 7 đoạn có Anode chung (các led đơn sáng ở mức 0):
Số hiển thị trên led 7

đoạn
 
0
1
2
3
4
5
6
7
8
9
A
B
C
D
E
F
-

Mã hiển thị led 7 đoạn dạng nhị phân

Mã hiển thị led 7 đoạn dạng thập lục phân

hgfedcba
11000000
11111001
10100100
10110000
10011001

10010010
11000010
11111000
10000000
10010000
10001000
10000011
11000110
10100001
10000110
 1 0 0 0 1 1 1 0
10111111

 
C0
F9
A4
B0
99
92
82
F8
80
90
88
83
C6
A1
86
8E

BF


II/ LỰA CHỌN LINH KIỆN CHÍNH
Bảng mã hiển thị led 7 đoạn dành cho led 7 đoạn có Cathode chung (các led đơn sáng ở mức 1): 

Số hiển thị trên led 7 đoạn
0
1
2
3
4
5
6
7
8
9
A
B
C
D
E
F
-

Mã hiển thị led 7 đoạn dạng nhị phân
00111111
00000110
01011011
01001111

01100110
01101101
01111101
00000111
01111111
01101111
01110111
01111100
00111001
01011110
01111001
01110001
01000000

Mã hiển thị led 7 đoạn dạng thập lục phân
3F
06
5B
4F
66
6D
7D
07
7F
6F
77
7C
39
5E
79

71
40


III/ LƯU ĐỒ THUẬT TOÁN
3.1/ Hợp ngữ asembly



III/ LƯU ĐỒ THUẬT TỐN
3.2/ Ngơn ngữ lập trình C



VI/ CHƯƠNG TRÌNH ĐIỀU KHIỂN ( CODE )
4.1/ Hợp ngữ ASM
DV_UP EQ R2
CHUC_UP EQU R3
TRAM_UP EQU R4
DV_DOWN EQU R5
CHUC_DOWN EQU R6
TRAM_DOWN EQU R7
ORG 000H
JMP MAIN
ORG 0003H
JMP INT_EXT0
ORG 000BH
JMP INT_TIMER0
ORG 0013H
JMP INT_EXT1

ORG 001BH
JMP INT_TIMER1


VI/ CHƯƠNG TRÌNH ĐIỀU KHIỂN ( CODE )
MAIN:MOV TMOD,#11H
MOV TL0,#0B0H
MOV TH0,#3CH
MOV TL1,#0B0H
MOV TH1,#3CH
MOV IE,#8FH
SETB TR0
SETB TR1
SETB IT0
SETB IT1
MOV TRAM_UP,#0
MOV CHUC_UP,#0
MOV DV_UP,#0
MOV 21H,#0
LOOP:
MOV A,21H
CJNE A,#'A',SKIP2
CALL BCD_7DOAN_DOWN
CALL DISPLAY
SJMP LOOP


VI/ CHƯƠNG TRÌNH ĐIỀU KHIỂN ( CODE )
SKIP2:
CALL BCD_7DOAN_UP

CALL DISPLAY
SJMP LOOP
BCD_7DOAN_UP:
MOV DPTR,#MA_LED_7DOAN
MOV R0,#02H
MOV R1,#30H
SKIP:
MOV A,@R0
MOVC A,@A+DPTR
MOV @R1,A
INC R0
INC R1
CJNE R0,#05H,SKIP
RET
BCD_7DOAN_DOWN:
MOV DPTR,#MA_LED_7DOAN
MOV R0,#05H
MOV R1,#30H


VI/ CHƯƠNG TRÌNH ĐIỀU KHIỂN ( CODE )
SKIP3:
MOV A,@R0
MOVC A,@A+DPTR
MOV @R1,A
INC R0
INC R1
CJNE R0,#08H,SKIP3
RET
DISPLAY:

MOV R0,#30H
MOV A,#08H
SKIP1:
MOV P0,@R0
MOV P2,A
CALL DELAY
MOV P2,#00H
INC R0
RR A
CJNE A,#01H,SKIP1
RET


VI/ CHƯƠNG TRÌNH ĐIỀU KHIỂN ( CODE )
DELAY:
MOV 26H,#0FFH
DJNZ 26H, $
RET
INT_EXT0:
SETB EX1
CLR EX0
MOV 21H,#'B'
MOV 22H,DV_DOWN
MOV DV_UP,22H
MOV 23H,CHUC_DOWN
MOV CHUC_UP,23H
MOV 24H,TRAM_DOWN
MOV TRAM_UP,24H
RETI



VI/ CHƯƠNG TRÌNH ĐIỀU KHIỂN ( CODE )
INT_EXT1:
SETB EX0
CLR EX1
MOV 21H,#'A'
MOV 22H,DV_UP
MOV DV_DOWN,22H
MOV 23H,CHUC_UP
MOV CHUC_DOWN,23H
MOV 24H,TRAM_UP
MOV TRAM_DOWN,24H
RETI


VI/ CHƯƠNG TRÌNH ĐIỀU KHIỂN ( CODE )
INT_TIMER0:
CLR TF0
INC 27H
MOV R0,27H
CJNE R0,#20,X0
MOV 27H,#0
DEC DV_DOWN
CJNE DV_DOWN,#0,X0
MOV DV_DOWN,#9
DEC CHUC_DOWN
CJNE CHUC_DOWN,#-1,X0
MOV CHUC_DOWN,#0
MOV CHUC_DOWN,#9
DEC TRAM_DOWN

CJNE TRAM_DOWN,#-1,X0
MOV TRAM_DOWN,#0
MOV TRAM_DOWN,#9


VI/ CHƯƠNG TRÌNH ĐIỀU KHIỂN ( CODE )
X0:
MOV TL0,#0B0H
EXIT0:
RETI
INT_TIMER1:
CLR TF1
INC 28H
MOV R0,28H
CJNE R0,#20,X1
MOV 28H,#0
INC DV_UP
CJNE DV_UP,#10,X1
MOV DV_UP,#0
INC CHUC_UP
CJNE CHUC_UP,#10,X1
MOV CHUC_UP,#0
INC TRAM_UP
CJNE TRAM_UP,#10,X1
MOV TRAM_UP,#0

;


VI/ CHƯƠNG TRÌNH ĐIỀU KHIỂN ( CODE )

X1:
MOV TL1,#0B0H
MOV TH1,#3CH
EXIT1:
RETI
MA_LED_7DOAN:
DB 0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H
END CJNE DV_UP,#10,EXIT
MOV DV_UP,#0
INC CHUC_UP
CJNE CHUC_UP,#10,EXIT
MOV CHUC_UP,#0
INC TRAM_UP
CJNE TRAM_UP,#10,EXIT
MOV TRAM_UP,#0
EXIT:
RET


VI/ CHƯƠNG TRÌNH ĐIỀU KHIỂN ( CODE )
PROCESS_DOWN:
DEC DV_DOWN
CJNE DV_DOWN,#0,EXIT1
MOV DV_DOWN,#9
DEC CHUC_DOWN
CJNE CHUC_DOWN,#-1,EXIT1
MOV CHUC_DOWN,#0
MOV CHUC_DOWN,#9
DEC TRAM_DOWN
CJNE TRAM_DOWN,#-1,EXIT1

MOV TRAM_DOWN,#0
MOV TRAM_DOWN,#9
EXIT1:
RET


VI/ CHƯƠNG TRÌNH ĐIỀU KHIỂN ( CODE )
DELAY_2500US:
MOV TL1,#3CH
MOV TH1,#0F6H
CLR TF1
SETB TR1
JNB TF1,$
CLR TR1
RETI
INT_EXT0:
MOV 21H,#'B'
MOV 22H,DV_DOWN
MOV DV_UP,22H
MOV 23H,CHUC_DOWN
MOV CHUC_UP,23H
MOV 24H,TRAM_DOWN
MOV TRAM_UP,24H
RETI


VI/ CHƯƠNG TRÌNH ĐIỀU KHIỂN ( CODE )
INT_EXT1:
MOV 21H,#'A'
MOV 22H,DV_UP

MOV DV_DOWN,22H
MOV 23H,CHUC_UP
MOV CHUC_DOWN,23H
MOV 24H,TRAM_UP
MOV TRAM_DOWN,24H
RETI
MA_LED_7DOAN:
DB 0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H
END


VI/ CHƯƠNG TRÌNH ĐIỀU KHIỂN ( CODE )
4.2/ Ngơn ngữ lập trình C
#include <REGX51.H>
#define hang_tram P2_1
#define hang_chuc P2_2
#define hang_donvi P2_3
char ma_led_7_doan[] = {0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90};
int donvi = 0, chuc = 0, tram = 0, flag = 0, demxuong = 0, demlen = 0, count1 = 0, count2 = 0;
void delay(int ms)
{
while(ms--)
{
}
} void xulychuso(int dem)
{
int

t = 0;


tram = dem/100;
t = dem%100;
chuc = t/10;
donvi = t%10;
}


VI/ CHƯƠNG TRÌNH ĐIỀU KHIỂN ( CODE )
void hienthi()
{
hang_tram = 1;
P0 = ma_led_7_doan[tram];
delay(100);
hang_tram = 0;
hang_chuc = 1;
P0 = ma_led_7_doan[chuc];
delay(100);
hang_chuc = 0;
hang_donvi = 1;
P0 = ma_led_7_doan[donvi];
delay(100);
hang_donvi = 0;
}


×