1. Viết chương trình hiển thị các led tắt dần D1 đến D8; lặp lại quá trình 10 lần; thời gian delay giữa các led là 250ms dùng timer 0, mod 2
code:
" MAIN:
MOV R1,#10
BEGIN:
MOV R0,#0
MOV DPTR,#MALED
LAP:
MOV A,R0
MOVC A,@A+DPTR
MOV P2,A
CALL DELAY
INC R0
CJNE R0,#9,LAP
DJNZ R1,BEGIN
SJMP $
MALED: DB 0FFH,0FEH,0FCH,0F8H,0F0H,0E0H,0C0H,80H,00H
;-----------------------------------------------
DELAY:
MOV TMOD,#02H
MOV R6,#10
LOOP:
MOV R7,#100
LOOP1:
MOV TH0,#(-250)
MOV TL0,#(-250)
SETB TR0
JNB TF0,$
CLR TF0
DJNZ R7,LOOP1
DJNZ R6,LOOP
RET
END
"
2. Hiển thị chữ "Chao ban" tren 8 led 7 đoạn
code:
" LED1 EQU 30H
LED2 EQU 31H
LED3 EQU 32H
LED4 EQU 33H
LED5 EQU 34H
LED6 EQU 35H
LED7 EQU 36H
LED8 EQU 37H
LED_POS EQU 38H
ORG 0000H
LJMP MAIN
ORG 000BH
LJMP TIMER0_ISR
MAIN:
SETB EA
SETB ET0
MOV LED1,#0C6H
MOV LED2,#089H
MOV LED3,#088H
MOV LED4,#0C0H
MOV LED5,#0FFH
MOV LED6,#83H
MOV LED7,#088H
MOV LED8,#0C8H
MOV LED_POS,#01H
MOV R0,#LED1
MOV TMOD,#01H
MOV TH0,#(-200)
MOV TL0,#(-200)
SETB TR0
SJMP $
;---------------------------------------------
TIMER0_ISR:
MOV TH0,#HIGH(-200)
MOV TL0,#LOW(-200)
MOV A,LED_POS
MOV P1,A
RL A
MOV LED_POS,A
MOV A,@R0
MOV P2,A
INC R0
CJNE R0,#LED_POS,EXITTIMER0
MOV LED_POS,#01H
MOV R0,#LED1
EXITTIMER0:
RETI
END
"
Phần mềm sinh code led 7 đoạn :
để sinh code số 0 dùng cho led 7 đoạn chung Cathode ban thiết lập như hình sau:
mã số 0 sinh ra 0C0H
link download
3. Viết chương trình hiển thị các led tắt dần từ D1 đến D8; lặp lại quá trình 356 lần ; thời gian delay giữa các led là 400ms dùng timer 1, mode 2
code:
"
MAIN:
MOV R2,#2
BEGIN:
MOV R1,#178
SCANLED:
MOV R0,#0
MOV DPTR,#MALED
LAP:
MOV A,R0
MOVC A,@A+DPTR
MOV P2,A
CALL DELAY
INC R0
CJNE R0,#9,LAP
DJNZ R1,SCANLED
DJNZ R2,BEGIN
SJMP $
MALED: DB 00H,01H,03H,07H,0FH,1FH,3FH,7FH,0FFH
;---------------------------------------------------
DELAY:
MOV TMOD,#20H
MOV R6,#20
LOOP:
MOV R7,#100
LOOP1:
MOV TH1,#(-200)
MOV TL1,#(-200)
SETB TR1
JNB TF1,$
CLR TF1
DJNZ R7,LOOP1
DJNZ R6,LOOP
RET
END
"
4. Cho mạch sau:
a, Thành lập mã led 7 đoạn từ 0 đến 9
Lưu ý Led 7 đoạn trên là led chung Anode, nhưng khi kết nối qua cổng đệm đảo thì code đưa vào giống code của led chung Cathode
sử dụng phần mềm sinh code led 7 đoạn , chọn kiểu chung Cathode, nhấn Auto tự động sinh code từ 0 đến 9
Viết chương trình:
b. Cho phép ngắt tại Timer0, Timer1, ngắt ngoài 1.
c. Hiển thị các số tăng dần từ 0000 đến 2011 trên 4 led 7 đoạn và dừng tại giá trị này.
Thời gian tăng q đơn vị là 500ms dùng timer0 mode 1; dùng ngắt timer1 để quét led với chu kỳ quét cho 4 led là 5ms.
d. Nếu có quá trình ngắt tại ngắt ngoài thì reset giá trị trên 4 led về 0 và bắt đầu thực hiện lại quá trình đếm.
code:
"
;-----------------------------------------------------------------------------------------------------------
; BILLNEE ; http://laptrinhc.co.cc
;-----------------------------------------------------------------------------------------------------------
LED1 EQU 30H ;dia chi luu cac gia tri led 7 doan nen dat theo tu
LED2 EQU 31H ;tang dan giup cho viec quet led de dang hon
LED3 EQU 32H ;http://laptrinhc.co.cc
LED4 EQU 33H ;http://laptrinhc.co.cc
LED_POS EQU 34H ;dia chi luu vi tri hien tai cua led , thu tu cua dia chi cua o nho nay phai nam cuoi sau cac dia chi luu gia tri led
DONVI EQU 35H ;dia chi luu gia tri hang don vi
CHUC EQU 36H ;dia chi luu gia tri hang chuc
TRAM EQU 37H ;dia chi luu gia tri hang tram
NGHIN EQU 38H ;dia chi luu gia tri hang nghin, do ma led khac ma thap phan nen can khai bao them cac o nho nay
ORG 0000H ; Ham main bat dau tu dia chi 0000H
LJMP MAIN
ORG 000BH ;dia chi timer0, cu 500ms se dem 1 lan, nhay den vecto ngat timer0 nay
LJMP COUNT
ORG 0013H ;dia chi ngat ngoai 1, khi nut bam duoc bam vecto ngat nhay den chuong trinh ngat reset cac so ve 0 0 0 0
LJMP RESET1
ORG 001BH ;dia chi ngat timer1,timer1 dung de quet led, cu 5ms quet led 1 lan
LJMP SCAN_LED
;-------------------------------------------
MAIN:
MOV TMOD,#11H ;khai bao timer0 mod 1 16bit, timer1 mod 1 16 bit
MOV TH0,#HIGH(-50000) ;gia tri nap ban dau la 50000 = 50ms
MOV TL0,#LOW(-50000) ;can lap lai
MOV R7,#10 ;10 lan de duoc 500ms
MOV TH1,#HIGH(-5000) ;nap gia tri ban dau cho timer1 la 5000 = 5ms
MOV TL1,#LOW(-5000) ;http://laptrinhc.co.cc
MOV DONVI,#0 ;gia tri ban dau cua hang don vi
MOV CHUC,#0 ;hang chuc
MOV TRAM,#0 ;hang tram
MOV NGHIN,#0 ;hang nghin la 0 0 0 0
MOV R0,#LED1 ;R0 nhan gia tri o nho cua led1, R0 nhan gia tri dau la gia tri o nho 30H
MOV LED_POS,#08H ;P1.3 ket noi voi anode cua led 1, de sang led 1 P1 = 00001000b = 08h
SETB EA ; enble ngat cuc bo
SETB EX1 ;enble ngat ngoai 1
SETB IT1 ; chon cach ngat ngoai 1
SETB ET0 ;enble ngat timer0
SETB ET1 ;enble ngat timer1
SETB TR0 ;chay timer0 ( timer0 run)
SETB TR1 ;chay timer1
JMP $ ; chuong trinh chinh gio ko lam gi nua do cac chuong trinh ngat lam viec lien tuc
;----------------------------------------
COUNT:
MOV TH0,#HIGH(-50000) ;gia tri nap ban dau lon nhat co the nap 2^16 > 65000,chon gia chi 50.000
MOV TL0,#LOW(-50000) ; ma gia tri can delay la 500000 = 500ms
DJNZ R7,EXIT_TIMER0 ;can lap 10 lan 50ms de duoc 500ms
MOV R7,#10 ;nap lai gia tri R7
CALL INCRE ; cu het 500 ms bat dau tang 1 don cua so
;-----------------------------------------
EXIT_TIMER0:
RETI
;-----------------------------------------
RESET1:
MOV DONVI,#0 ; dua cac gia tri don vi
MOV CHUC,#0 ;chuc
MOV TRAM,#0 ;tram
MOV NGHIN,#0 ;nghin ve 0 0 0 0
SETB ET0 ; sau do bat dau dem lai
SETB TR0 ; bang timer0
RETI
;----------------------------------------
SCAN_LED: ;chuong trinh quet led
MOV TH1,#HIGH(-5000) ; nap lai gia tri timer1
MOV TL1,#LOW(-5000) ;cu 5ms quet led 1 lan
MOV A,LED_POS ;thanh ghi a nhan gia tri vi tri tam thoi cua led dang duoc quet
MOV P1,A ;vi du muon led 1 sang thi P1 nhan gia tri 80h, led2 sang P1 = 04h,led3 sang P1 = 02h
RR A ; do vay muon sang led tiep theo can dich bit sang ben phai
MOV LED_POS,A ; luu lai gia tri sau ghi dich
MOV A,@R0 ;doc gia tri led 7 doan vao A, mac dinh dau tien la led 1 sang dau tien
MOV P2,A ;xuat gia tri qua P2 de hien thi len led 7 doan
INC R0 ; chuyen sang gia tri led 7 doan tiep theo lan luot 30h,31h,32h,33h
MOV A,R0 ; chuyen gia tri led 7 doan hien thoi vao A
CJNE A,#LED_POS,EXIT_TIMER1 ; de so sanh voi gia tri 34h, thi lap lai qua trinh quet
MOV R0,#LED1 ; tu dau
MOV LED_POS,#08H
EXIT_TIMER1:
RETI
;-------------------------------------------
INCRE:
INC DONVI ;tang don vi
CALL CHUYENMA ; chuyen ma thap phan sang ma led 7 doan
MOV A,DONVI
CJNE A,#10,TEST ;trong qua trinh dem luon kiem tra xem gia tri so da dem duoc 2011 chua
MOV DONVI,#0 ; khi don vi dem den 10 thi reset don vi ve 0
INC CHUC ; va bat dem hang truc, cac hang tran, nghin tuong tu
CALL CHUYENMA ;http://laptrinhc.co.cc
MOV A,CHUC ;http://laptrinhc.co.cc
CJNE A,#10,TEST ;http://laptrinhc.co.cc
MOV CHUC,#0 ;http://laptrinhc.co.cc
INC TRAM ;http://laptrinhc.co.cc
CALL CHUYENMA ;http://laptrinhc.co.cc
MOV A,TRAM ;http://laptrinhc.co.cc
CJNE A,#10,TEST
MOV TRAM,#0
INC NGHIN
CALL CHUYENMA
MOV A,NGHIN
CJNE A,#10,TEST
MOV NGHIN,#0
;------------------------------------------
TEST: ;ham kiem tra so xem so dat duoc gia tri 2011 chua??
MOV A,DONVI ;ham se kiem tra 4 so lan luot
CJNE A,#1,EXIT ; neu hang don vi bang 1
MOV A,CHUC ; thi nhay sang kiem tra hang chuc
CJNE A,#1,EXIT ; hang chuc bang 1 thi nhay sang kiem tra
MOV A,TRAM ; hang tram
CJNE A,#0,EXIT ; hang tram bang 0 thi nhay sang
MOV A,NGHIN ; kiem tra hang nghin
CJNE A,#2,EXIT ; neu hang nghin bang 2
CLR ET0 ; dung qua trinh
CLR TR0 ; ngat timer0
EXIT:
RET
;---------------------------------------
CHUYENMA: ; ham chuyen ma thap phan sang ma led 7 doan
MOV A,DONVI ; ham SCAN_Led se lay tung gia tri LED 1,2,3,4
CALL BCD2LED7 ; xuat ra P2 de hien thi
MOV LED4,A ;http://laptrinhc.co.cc
MOV A,CHUC ;http://laptrinhc.co.cc
CALL BCD2LED7 ;http://laptrinhc.co.cc
MOV LED3,A
MOV A,TRAM
CALL BCD2LED7
MOV LED2,A
MOV A,NGHIN
CALL BCD2LED7
MOV LED1,A
RET
;---------------------------------------
BCD2LED7:
MOV DPTR,#MALED7
MOVC A,@A+DPTR
RET
MALED7:DB 03fH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH
RET
END
;----------------------------------------------------------------------------------
;http://laptrinhc.co.cc COCC nghia la "con ong chau cha" kaka
kết quả here:
5. Viết chương trình chữ chạy hiển thị trên led 7 đoạn .
KAKA , ngồi viết code đói quá viết chữ " BILLNEE HI PIF " , viết lộn thành " PIF HI BILLNEE " ka ka
code đây nè :
LED1 EQU 30H
LED2 EQU 31H
LED3 EQU 32H
LED4 EQU 33H
LED5 EQU 34H
LED6 EQU 35H
LED7 EQU 36H
LED8 EQU 37H
LED_POS EQU 38H
ORG 0000H
LJMP MAIN
ORG 000BH
LJMP TIMER0_ISR
ORG 001BH
LJMP DICH_LED
MAIN:
CALL DEFAULT
MOV LED_POS,#01H
MOV R0,#LED1
MOV R1,#50
MOV R6,#8
MOV R3,#0
MOV TMOD,#11H
MOV TH0,#(-200)
MOV TL0,#(-200)
MOV TH1,#(-5000)
MOV TL1,#(-5000)
SETB EA
SETB ET0
SETB ET1
SETB TR0
SETB TR1
JMP $
DEFAULT:
MOV LED1,#0FFH
MOV LED2,#0FFH
MOV LED3,#0FFH
MOV LED4,#0FFH
MOV LED5,#0FFH
MOV LED6,#0FFH
MOV LED7,#0FFH
MOV LED8,#0FFH
RET
;---------------------------------------------
LED_JMP:
MOV A,LED7
MOV LED8,A
MOV A,LED6
MOV LED7,A
MOV A,LED5
MOV LED6,A
MOV A,LED4
MOV LED5,A
MOV A,LED3
MOV LED4,A
MOV A,LED2
MOV LED3,A
MOV A,LED1
MOV LED2,A
INC R3
MOV A,R3
MOV DPTR,#MALED
MOVC A,@A+DPTR
MOV LED1,A
CJNE R3,#18,EXIT_JMP
MOV R3,#0
CALL DEFAULT
EXIT_JMP:
RET
MALED: DB 0FFH,86H,86H,0C8H,0C7H,0C7H,0CFH,083H,0FFH,0F9H,08 9H,0FFH,08EH,0F9H,08CH,0FFH,0FFH,0FFH
;---------------------------------------------
TIMER0_ISR:
MOV TH0,#HIGH(-200)
MOV TL0,#LOW(-200)
MOV A,LED_POS
MOV P1,A
RL A
MOV LED_POS,A
MOV A,@R0
MOV P2,A
INC R0
CJNE R0,#LED_POS,EXITTIMER0
MOV LED_POS,#01H
MOV R0,#LED1
EXITTIMER0:
RETI
;-------------------------------------
DICH_LED:
MOV TH1,#HIGH(-5000)
MOV TH1,#LOW(-5000)
DJNZ R1,EXIT_TIMER1
MOV R1,#10
CALL LED_JMP
EXIT_TIMER1:
RETI
END
file .hex nè
:03000000020800F3
:0C080000787FE4F6D8FD75810702000047
:0300000002001EDD
:03000B0002009D53
:10001B000200B71146753801783079327E087B00C3
:10002B00758911758C38758A38758D78758B78D282
:10003B00AFD2A9D2ABD28CD28E80FE7530FF753188
:10004B00FF7532FF7533FF7534FF7535FF7536FF5E
:10005B007537FF22E536F537E535F536E534F535F9
:10006B00E533F534E532F533E531F532E530F5318D
:10007B000BEB90008B93F530BB12047B00114622E7
:10008B00FF8686C8C7C7CF83FFF989FF8EF98CFF20
:10009B00FFFF758CFF758A38E538F59023F538E648
:1000AB00F5A008B83805753801783032758DEC75C8
:0900BB008D78D904790A115F3235
:00000001FF
6. Cho mạch kết nối AT89C51 như hình dưới ( giả sử tần số thạch anh 12MHZ). Thực hiện các yêu cầu sau:
a. Xác định bảng mã hiển thị các kí hiệu *C và 0->9 cho Led 7 đoạn
b.Viết chương trình con Delay ( thời gian 0,5s dùng timer 0, mode 1).
c.Kiểm tra công tắc nhấn:
SW1: Đọc các dữ liệu từ P0, lưu vào ô nhớ 30h sau đó delay khoảng thời gian 0,5s
SW2: Xuất giá trị trong ô nhớ 30h ra led1, led2 ( giả sử dữ liệu luôn <100), led3,led4 hiện *C
CODE
"
LED1 EQU 31H
LED2 EQU 32HLED3 EQU 33H
LED4 EQU 34H
LED_POS EQU 35H
ORG 0000H
LJMP MAIN
ORG 001BH
LJMP SCAN_LED
;----------------------------
MAIN:
MOV TMOD,#21H
MOV R7,#10
MOV TH1,#(-200)
MOV TL1,#(-200)
MOV 30H,#00
CALL CHUYENDOI
MOV LED3,#9CH
MOV LED4,#0C6H
MOV R0,#LED1
MOV LED_POS,#0FEH
SETB EA
SETB ET1
SETB TR1
BEGIN:
JNB P1.0,SW1
JNB P1.1,SW2
JMP BEGIN
;---------------------------------
DELAY_05S:
MOV R7,#10
LOOP:
MOV TH0,#HIGH(-50000)
MOV TL0,#LOW(-50000)
SETB ET0
SETB TR0
JNB TF0,$
CLR TF0
CLR TR0
DJNZ R7,LOOP
RET
;----------------------------------
SW1:
MOV A,P0
MOV 30H,A
CALL DELAY_05S
SJMP BEGIN
RET
;-----------------------------------
SW2:
MOV A,30H
CALL CHUYENDOI
CALL CHUYENDOI
CALL CHUYENDOI
SJMP BEGIN
RET
;------------------------------------
SCAN_LED:
MOV A,LED_POS
MOV P3,A
RL A
MOV LED_POS,A
MOV A,@R0
MOV P2,A
INC R0
MOV A,R0
CJNE A,#LED_POS,EXIT
MOV R0,#LED1
MOV LED_POS,#0FEH
EXIT:
RETI
;-----------------------------------
CHUYENDOI:
MOV A,30H
MOV B,#10
DIV AB
CALL BCD2LED7
MOV LED1,A
MOV A,B
CALL BCD2LED7
MOV LED2,A
RET
;-----------------------------------
BCD2LED7:
MOV DPTR,#MALED7
MOVC A,@A+DPTR
RET
MALED7: DB 0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H
END
7. Cho sơ đồ dưới đây , viết chương trình hiển thị các led sáng dần từ D1 đến D8;lặp lại quá trình vô hạn; thời gian delay giữa các led là x100ms dùng timer 1,mode 1, trong đó x là một số thay đổi 1-5 cho phép nhập từ nút bấm và hiển thị trên led (mặc định x =1) theo yêu cầu sau:
- Nhấn SW1: tăng x một đơn vị (1-5)
- Nhấn SW2 ; giảm x một đơn vị (5-1)
- Nhấn SW3 ; x = 1
code:
MAIN:
CLR P2.0
MOV TMOD,#10H
MOV 30H,#1
CALL CHUYENMA
BEGIN:
MOV R1,#0
LOOP:
MOV A,R1
MOV DPTR,#MALED
MOVC A,@A+DPTR
MOV P0,A
INC R1
JNB P2.3,SW1
JNB P2.4,SW2
JNB P2.5,SW3
FLAG:
CALL DELAY_XTIME
CJNE R1,#9,LOOP
JMP BEGIN
MALED: DB 0FFH,0FEH,0FCH,0F8H,0F0H,0E0H,0C0H,080H,00H
;--------------------------------------------------------
DELAY_XTIME:
MOV R3,30H
MOV TMOD,#10H
LOOP1:
MOV R2,#100
LOOP2:
MOV TH1,#HIGH(-1000)
MOV TL1,#LOW(-1000)
CLR TF1
SETB TR1
JNB TF1,$
CLR TF1
CLR TR1
DJNZ R2,LOOP2
DJNZ R3,LOOP1
RET
;---------------------------
SW1:
INC 30H
CALL CHUYENMA
MOV A,30H
CJNE A,#6,FLAG
MOV 30H,#5
CALL CHUYENMA
JMP FLAG
RET
;--------------------------
SW2:
DEC 30H
CALL CHUYENMA
MOV A,30H
CJNE A,#0,FLAG
MOV 30H,#1
CALL CHUYENMA
JMP FLAG
RET
;----------------------------
SW3:
MOV 30H,#1
CALL CHUYENMA
JMP FLAG
RET
;----------------------------
CHUYENMA:
MOV A,30H
MOV DPTR,#LED
MOVC A,@A+DPTR
MOV P1,A
RET
LED: DB 0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H
END
No comments:
Post a Comment