|
Tài trợ cho PIC Vietnam |
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 |
|
09-04-2010, 11:32 PM | #1 |
Nhập môn đệ tử
Tham gia ngày: Nov 2009
Bài gửi: 10
: |
Mạch chữ chạy để kiểm tra LCD
Chào các bạn! Mình đang cần một mạch càng đơn giản càng tốt dùng PIC 16F84A để chạy một LCD 16x2 nhằm mục đích kiểm tra xem màn hình còn sống hay chết! Bất kể hiện chữ gì cũng được! Giúp mình với nhé!
|
16-04-2010, 08:52 AM | #2 |
Đệ tử 2 túi
Tham gia ngày: Oct 2008
Bài gửi: 44
: |
Có Pic6f877a lấy không?
|
16-04-2010, 10:18 AM | #3 |
Đệ tử 6 túi
Tham gia ngày: Apr 2009
Bài gửi: 132
: |
|
17-04-2010, 10:33 PM | #4 |
Nhập môn đệ tử
Tham gia ngày: Nov 2009
Bài gửi: 10
: |
Nếu có thì pác gửi lên diễn đàn cho mọi người cùng dùng sao phải gửi riêng qua email?
|
18-04-2010, 12:17 AM | #5 |
Đệ tử 1 túi
Tham gia ngày: Dec 2008
Bài gửi: 17
: |
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 |
18-04-2010, 10:49 PM | #6 |
Nhập môn đệ tử
Tham gia ngày: Nov 2009
Bài gửi: 10
: |
Cái này là ASM của 16F84 chăng?
|
19-04-2010, 08:56 PM | #7 |
Đệ tử 1 túi
Tham gia ngày: Dec 2008
Bài gửi: 17
: |
code này của P16F688.mình đã chỉ ở đầu chương trình!
|
|
|