PIC Vietnam

Go Back   PIC Vietnam > Microchip PIC > Cơ bản về vi điều khiển và PIC

Tài trợ cho PIC Vietnam
Trang chủ Đăng Kí Hỏi/Ðáp Thành Viên Lịch Bài Trong Ngày Vi điều khiển

Cơ bản về vi điều khiển và PIC Những bài hướng dẫn cơ bản nhất để làm quen với vi điều khiển PIC

 
 
Ðiều Chỉnh Xếp Bài
Prev Previous Post   Next Post Next
Old 27-07-2010, 11:50 PM   #1
billnee
Nhập môn đệ tử
 
billnee's Avatar
 
Tham gia ngày: Jul 2010
Nơi Cư Ngụ: http://www.laptrinhc.co.cc/
Bài gửi: 7
:
Send a message via Yahoo to billnee
Talking Làm chữ chạy trên LCD bằng 16f887???

E mới học PIC. Cho em hỏi để định nghĩa hàm delete char (xóa kí tự) và hàm copy char (coppy kí tự) làm kiểu gì???.Em định dùng 2 hàm trên để làm chữ chạy cho LCD(5x10) dùng 16f887.Các tiềm bối giúp em.E viết bằng ngôn ngữ C??Help! Thanks!

em tìm đc code này trong diễn đàn
Trích:
Nguyên văn bởi DSP View Post
Chương trình đơn giản hiển thị LCD, ĐK 4bit đây:
;************************************************* ************************************************** ***********************************************
; DIEU KHIEN HIEN THI LCD ;
; CHE DO 4 BIT ;
; Start: 19/09/09 ;
; Complete:19/09/09 ;
; AUTHOR: DN ;
; COMPANY: COMPANY ;
; VERSION:1.0 ;
; DESCRIPTION: ;
; PIC16F688,LCD LM032L ;
; PORTA: KHOI TAO LCD ;
; PORTB: XUAT DL ;
; HIEN THI: PICVIETNAM.COM ;
;************************************************* ************************************************** ***********************************************

TITLE DIEU KHIEN HIEN THI LCD - CHE DO4 BIT
PROCESSOR PIC16F688
INCLUDE <P16F688.INC>
INCLUDE <lm032l.h>

__CONFIG _CP_OFF & _CPD_OFF & _WDT_OFF & _PWRTE_ON & _INTRC_OSC_NOCLKOUT & _BOD_OFF & _FCMEN_OFF

RS EQU 0X00
RW EQU 0X01
E EQU 0X02
PA EQU PORTA
PC EQU PORTC
TEMP1 EQU 0x070
TC EQU TRISC
TA EQU TRISA

ORG 0000h
Goto MAIN
;************************************************* ************************************************** ************************************************
SEND_CMD
MOVWF CHAR ; Character to be sent is in W
CALL BUSY_CHECK ; Wait for LCD to be ready
SWAPF CHAR, W
ANDLW 0x0F ; Get upper nibble
MOVWF PC ; Send data to LCD
BCF PA, RW ; Set LCD to read
BCF PA, RS ; Set LCD to command mode
BSF PA, E ; toggle E for LCD
BCF PA, E
MOVF CHAR, W
ANDLW 0x0F ; Get lower nibble
MOVWF PC ; Send data to LCD
BSF PA, E ; toggle E for LCD
BCF PA, E
RETURN
BUSY_CHECK
bsf STATUS,RP0
bcf STATUS,RP1
MOVLW 0xFF ; Set PortC for input
MOVWF TC
bcf STATUS,RP0
bcf STATUS,RP1
BCF PA, RS ; Set LCD for Command mode
BSF PA, RW ; Setup to read busy flag
BSF PA, E ; Set E high
BCF PA, E ; Set E low
SWAPF PC, W ; Read upper nibble busy flag, DDRam address
ANDLW 0xF0 ; Mask out lower nibble
MOVWF TEMP ;
BSF PA, E ; Toggle E to get lower nibble
BCF PA, E
MOVF PC, W ; Read lower nibble busy flag, DDRam address
ANDLW 0x0F ; Mask out upper nibble
IORWF TEMP, F ; Combine nibbles
BTFSC TEMP, 7 ; Check busy flag, high = busy
GOTO BUSY_CHECK ; If busy, check again
BCF PA, RW
bsf STATUS,RP0
bcf STATUS,RP1
MOVLW 0xF0 ;
MOVWF TC ;
bcf STATUS,RP0
bcf STATUS,RP1
RETURN

SEND_CHAR
MOVWF CHAR ; Character to be sent is in W
CALL BUSY_CHECK ; Wait for LCD to be ready
SWAPF CHAR, W
ANDLW 0x0F ; Get upper nibble
MOVWF PC ; Send data to LCD
BCF PA, RW ; Set LCD to read
BSF PA, RS ; Set LCD to data mode
BSF PA, E ; toggle E for LCD
BCF PA, E
MOVF CHAR, W
ANDLW 0x0F ; Get lower nibble
MOVWF PC ; Send data to LCD
BSF PA, E ; toggle E for LCD
BCF PA, E
RETURN
;************************************************* ************************************************** *******
MAIN
;External ossilator
bcf STATUS,RP0 ; bank0
bcf STATUS,RP1
clrf PA
clrf PC ;Digital I/O
movlw 07h
movwf CMCON0
bsf STATUS,RP0 ;bank1
bcf STATUS,RP1
bcf OSCCON,SCS ;external osscilator mode bit select
clrf ANSEL
clrf TA
clrf TC
;
;KHOI TAO LCD
bcf STATUS,RP0 ; bank0
bcf STATUS,RP1
clrf PA
movlw 0x02
movwf PC
bsf PA,E
bcf PA,E

LCD_DELAY MOVLW 200h ;
MOVWF MSD ; Use MSD and LSD Registers to Initilize LCD
CLRF LSD ;
LOOP2 DECFSZ LSD, F ; Delay time = MSD * ((3 * 256) + 3) * Tcy
GOTO LOOP2 ;
DECFSZ MSD, F ;
END_LCD_DELAY
GOTO LOOP2

;che do 4 bit
movlw 0x02
movwf PC
bsf PA,E
bcf PA,E
;2dong,5*7 dots
movlw 0x08
movwf PC
bsf PA,E
bcf PA,E

MOVLW DISP_ON ;
CALL SEND_CMD ;

movlw 'D'
call SEND_CHAR
movlw 'i'
call SEND_CHAR
movlw 'e'
call SEND_CHAR
movlw 'n'
call SEND_CHAR
movlw ' '
call SEND_CHAR
movlw 'd'
call SEND_CHAR
movlw 'a'
call SEND_CHAR
movlw 'n'
call SEND_CHAR
movlw ':'
call SEND_CHAR
movlw B'11000000' ;Address DDRam first character, second line
call SEND_CMD
movlw 0 ;Table address of start of message

dispmsg
movwf TEMP1 ;TEMP1 holds start of message address
call Table
andlw 0FFh ;Check if at end of message (zero
btfsc STATUS,Z ;returned at end)
goto $;out
call SEND_CHAR ;Display character
movf TEMP1,w ;Point to next character
addlw 1
goto dispmsg


Table
addwf PCL, F
retlw 'P'
retlw 'I'
retlw 'C'
retlw 'V'
retlw 'I'
retlw 'E'
retlw 'T'
retlw 'N'
retlw 'A'
retlw 'M'
retlw '.'
retlw 'C'
retlw 'O'
retlw 'M'
Table_End
retlw 0

END
ko bít có dùng đc ko???
billnee vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
 


Quyền Sử Dụng Ở Diễn Ðàn
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is Mở
Smilies đang Mở
[IMG] đang Mở
HTML đang Tắt

Chuyển đến


Múi giờ GMT. Hiện tại là 10:14 AM.


Được sáng lập bởi Đoàn Hiệp
Powered by vBulletin®
Page copy protected against web site content infringement by Copyscape
Copyright © PIC Vietnam