• slider image 442
  • slider image 483
  • slider image 484
  • slider image 485
  • slider image 486
  • slider image 487
  • slider image 488
  • slider image 491
:::


Browsing this Thread:   1 Anonymous Users






關於App025的LCD
#1
資深會員
資深會員


查看用戶資訊
大家好
我今天想問的事
關於App025實驗版LCD的問題
APP025一出場所搭配的就是18F4250
我用18F4550 可以正常驅動LCD

但~

如果我用16F877-20/P
然後我抓右邊範例程式裡面的<LCD.ASM>
卻怎樣都不能正常顯示

後來我有發現 右邊提供的範例程式 應該是For LCDs with a HD44780 type controller
因為是用PORTB去驅動的~

但 APP025 是用PORTD去驅動資料塊的

我有更改裡面關於PORT的設定
但 還是不能正常顯示出任何結果
請問 是我哪裡改錯了嗎 @@?

還是 哪邊可以抓組語LCD FOR 16F @APP025 ???
我目前所找到的 W201 裡面也是用PORTB驅動資料塊的 = =

發表於: 2007/12/11 0:54
Twitter Facebook Google Plus Linkedin Del.icio.us Digg Reddit Mr. Wong 頂部


Re: 關於App025的LCD
#2
版主
版主


查看用戶資訊
1. PIC16F877 & 16F877A & 16F887 都可以直接使用在 APP025 的實驗版。

2. 這些 LCD 程式不管是用 C 或 組合語言寫的,都適用於 HD44780 的 LCD 驅動 IC 。也許會有接腳線路的不同,但都與要修改 H 檔或組語的 INC 或 程式裡的 define 就可以了。

3. APP025 組語的 LCD 驅動程式在 曾百由老師的 組合語言與PIC18控制器醫書裡就有。

4. 右邊的範例程式裡也有 LCD 驅動程式,組語部分是用 PIC16F877 寫的。

發表於: 2007/12/11 9:17
Twitter Facebook Google Plus Linkedin Del.icio.us Digg Reddit Mr. Wong 頂部


Re: 關於App025的LCD
#3
資深會員
資深會員


查看用戶資訊
我用W201裡面的(LAB_ANS\lcd.asm)設定檔
主程式也是用用W201範例裡的(LAB_ANS\lab2.asm)
(W201 is FOR APP001)
然後依照APP025的設定 更改如下
MCU PIC16F877-20/P
ICD2

但 燒錄後 LCD只出現第一排的方塊 只有方塊 = =

請問LCD 定義檔設定錯在哪 ?

;************************************************
;* LCD.ASM *
;************************************************
;* Contains subroutines to control an external *
;* lcd panel in 4-bit mode. These routines *
;* were designed specifically for the panel on *
;* the MCU201 workshop demo board, but should *
;* work with other LCDs with a HD44780 type *
;* controller. *
;* Routines include: *
;* - InitLCD to initialize the LCD panel *
;* - putcLCD to write a character to LCD *
;* - SendCmd to write a command to LCD *
;* - clrLCD to clear the LCD display *
;* - L1homeLCD to return cursor to line 1 home*
;* - L2homeLCD to return cursor to line 2 home*
;* - PutHexLCD to write a HEX Code to LCD *
;* - Hex2ASCII to convert 4 bits to ASCII Code*
;************************************************
;
list p=16f877
#include <p16f877.inc>
;
; Defines for I/O ports that provide LCD data & control
; PORTB.0 - PORTB.3 are Data Pins for LCD Module => PORTE,2 --> [E] : LCD operation start signal control
; PORTB.4 is E Control Signal for LCD => PORTE,0 --> [RS]:
; PORTB.5 is RS Control Signal for LCD => PORTE,1 --> [RW]:
; PORTC.2 is BackLight Control pin for LCD Module
;
global InitLCD
global putcLCD
global clrLCD
global L1homeLCD
global L2homeLCD
global SendCmd
global PutHexLCD
global Hex2ASCII
;
LCD_DATA equ PORTD
LCD_CNTL equ PORTD

; Defines for I/O pins that provide LCD control
#define RS PORTE,0
#define RW PORTE,1
#define E PORTE,2

; LCD Module commands
DISP_ON EQU 0x00C ; Display on
DISP_ON_C EQU 0x00E ; Display on, Cursor on
DISP_ON_B EQU 0x00F ; Display on, Cursor on, Blink cursor
DISP_OFF EQU 0x008 ; Display off
CLR_DISP EQU 0x001 ; Clear the Display
ENTRY_INC EQU 0x006 ;
ENTRY_INC_S EQU 0x007 ;
ENTRY_DEC EQU 0x004 ;
ENTRY_DEC_S EQU 0x005 ;
DD_RAM_ADDR EQU 0x080 ; Least Significant 7-bit are for address
DD_RAM_UL EQU 0x080 ; Upper Left coner of the Display
;

; Directs linker to provide 4 variables in GPR memory
UDATA
Byte RES 1
Byte1 RES 1
Count RES 1
Count1 RES 1
W_BUFR RES 1
Hex_Bfr RES 1
;
PROG1 CODE
;*******************************************************************
;* The LCD Module Subroutines *
;* Command sequence for 2 lines of 5x16 characters *
;*******************************************************************
InitLCD
BANKSEL TRISD
bcf TRISE,2
clrf TRISE

movlw 0x0F ; Initialize inputs/outputs for LCD
movwf TRISD
BANKSEL LCD_DATA
CLRF PORTE
clrf LCD_DATA ; Clear LCD data & control bits
;
movlw .50 ; Power=On delay 50mS
Call Delay_MS
;
movlw 0x02 ; Init for 4-bit interface
call Send_4bit
movlw .10 ; Delay 10 mS
Call Delay_MS
;
movlw b'00000011' ; Fully Initial LCD module
call Send_4bit ; Sent '0011' data 4 time
movlw .5 ; Delay 5mS
Call Delay_MS
movlw b'00000011'
call Send_4bit
call Delay_1MS ; Delay 1mS
movlw b'00000011'
call Send_4bit
movlw b'00000010'
call Send_4bit
;
movlw b'00101000' ; Set 2 lines & 5 x 7 dots
call SendCmd
movlw DISP_ON ; Turn display on (0x0C)
call SendCmd
movlw ENTRY_INC ; Configure cursor movement
call SendCmd
movlw DD_RAM_ADDR ; Set writes for display memory
call SendCmd
return
;
;*******************************************************************
;*SendChar - Sends character to LCD *
;*This routine splits the character into the upper and lower *
;*nibbles and sends them to the LCD, upper nibble first. *
;*******************************************************************
putcLCD
banksel Byte
movwf Byte ; Save WREG in Byte variable
call Delay_1MS
swapf Byte,W ; Write upper nibble first
andlw 0x0f
movwf LCD_DATA
bsf RS ; Set for data
bsf E ; Clock nibble into LCD
bcf E
movf Byte,W ; Write lower nibble last
andlw 0x0f
movwf LCD_DATA
bsf RS ; Set for data
bsf E ; Clock nibble into LCD
bcf E
return
;
;*********************************************************************
;* To put the HEX value to LCD Display ,,
;* High nibble first than Low nibble
;* Input : W Reg.
;*********************************************************************
PutHexLCD
banksel W_BUFR
movwf W_BUFR ; Save W Register !!
swapf W_BUFR,W ; High nibble first !!
call Hex2ASCII
call putcLCD
;
movf W_BUFR,W
call Hex2ASCII
call putcLCD
return
;
;******************************************************************
;* Convert a low nibble to ASCII code
;* Input : W Reg.
;* Output: W Reg.
;******************************************************************
Hex2ASCII
andlw 0x0f ; Mask Bit 4 to 7
movwf Hex_Bfr
sublw .09
btfsc STATUS,C ; If W less than A (C=1) --> only add 30h
goto Add_W_30
Add_W_37 movlw 0x37
goto Hex_cont
Add_W_30 movlw 0x30
Hex_cont addwf Hex_Bfr,W ; The correct ASCII code for this char !!
return
;
;*******************************************************************
;* SendCmd - Sends command to LCD *
;* This routine splits the command into the upper and lower *
;* nibbles and sends them to the LCD, upper nibble first. *
;*******************************************************************
SendCmd
banksel Byte
movwf Byte ; Save WREG in Byte variable
call Delay_1MS
swapf Byte,W ; Send upper nibble first
andlw 0x0f
movwf LCD_DATA
bcf RS ; Clear for command
bsf E ; Clock nibble into LCD
bcf E
movf Byte,W ; Write lower nibble last
Send_4bit andlw 0x0f
movwf LCD_DATA
bcf RS ; Clear for command
bsf E ; Clock nibble into LCD
bcf E
return
;
;*******************************************************************
;* clrLCD - Clear the contents of the LCD *
;*******************************************************************
clrLCD
movlw CLR_DISP ; Send the command to clear display
call SendCmd
return
;
;*******************************************************************
;* L1homeLCD - Moves the cursor to home position on Line 1 *
;*******************************************************************
L1homeLCD
movlw DD_RAM_ADDR|0x00 ; Send command to move cursor to
call SendCmd ; home position on line 1
return

;*******************************************************************
;* L2homeLCD - Moves the cursor to home position on Line 2 *
;*******************************************************************
L2homeLCD
movlw DD_RAM_ADDR|0x28 ; Send command to move cursor to
call SendCmd ; home position on line 2
return


;*******************************************************************
;* Delay - Generic LCD delay (1.024mS @ 4MHz) *
;* Since the microcontroller can not read the busy flag of the *
;* LCD, a specific delay needs to be executed between writes to *
;* the LCD. *
;*******************************************************************
Delay_1MS ; 2 cycles for call
clrf Count ; 1 cycle to clear counter variable
Dloop
nop
decfsz Count,F ; These two instructions provide a
goto Dloop ; (256 * 3) -1 cycle count
return ; 2 cycles for return
;
;*******************************************************************
;* Delay - 1mS base delay *
;* input : W Reg. *
;* *
;*******************************************************************
Delay_MS
movwf Count1
;
DLop1 call Delay_1MS
decfsz Count1,F
goto DLop1
return
;
END

發表於: 2007/12/11 12:26
Twitter Facebook Google Plus Linkedin Del.icio.us Digg Reddit Mr. Wong 頂部


Re: 關於App025的LCD
#4
資深會員
資深會員


查看用戶資訊
沒人知道這檔案錯誤在哪嗎 ???

有人知道嗎 幫我解答一下 >"<

發表於: 2007/12/13 15:43
Twitter Facebook Google Plus Linkedin Del.icio.us Digg Reddit Mr. Wong 頂部


Re: 關於App025的LCD
#5
資深會員
資深會員


查看用戶資訊
16f877 LCD Example

你的控制線 R/S, R/W, E 用哪個 port , 也是 portD 嗎

你的程式好像是用 portE
參照:

; Defines for I/O pins that provide LCD control
#define RS PORTE,0
#define RW PORTE,1
#define E PORTE,2



有些範例 initLCD 並不會去設 I/O 的 TRIS 你得注意

另一方面 clock 的速度也會影響 delay 的時間

發表於: 2007/12/13 17:15
Twitter Facebook Google Plus Linkedin Del.icio.us Digg Reddit Mr. Wong 頂部


Re: 關於App025的LCD
#6
資深會員
資深會員


查看用戶資訊
參照:

timijk 寫到:
16f877 LCD Example

你的控制線 R/S, R/W, E 用哪個 port , 也是 portD 嗎

你的程式好像是用 portE
參照:

; Defines for I/O pins that provide LCD control
#define RS PORTE,0
#define RW PORTE,1
#define E PORTE,2



有些範例 initLCD 並不會去設 I/O 的 TRIS 你得注意

另一方面 clock 的速度也會影響 delay 的時間


您好 關於你所提供的程式
裡面的設定PORE ,TRISCE 我都有改過
RS, RW ,E
;
我上面PO的那個程式 就是APP001-WORKSHOP W201的範例程式
裡面的初始設定 關於PORTE TRISE 我也都改過 ~~
跟本網站上所提供的的16F877_LCD範例程式 裡面設定有小差異
;
只是我怎樣試, LCD都不能正常顯示出來
所以我才會問~~~
主程式我都沒改~~
只是 也真的不知道問題到底出在哪 >"<

發表於: 2007/12/13 19:34
Twitter Facebook Google Plus Linkedin Del.icio.us Digg Reddit Mr. Wong 頂部


Re: 關於App025的LCD
#7
版主
版主


查看用戶資訊
LCD 的控制線有沒有改對,找出線路圖利用ICD2設中斷點用示波器或三用電錶量一下控制線的位準就知道有沒有改對。
LCD 的控制是很基本的,花一點時間找一下 Bug 應該是很有成就感的。

發表於: 2007/12/14 11:28
Twitter Facebook Google Plus Linkedin Del.icio.us Digg Reddit Mr. Wong 頂部







You can view topic.
不可以 發起新主題
You cannot reply to posts.
You cannot edit your posts.
You cannot delete your posts.
You cannot add new polls.
You cannot vote in polls.
You cannot attach files to posts.
You cannot post without approval.
You cannot use topic type.
You cannot use HTML syntax.
You cannot use signature.
You cannot create PDF files.
You cannot get print page.

[進階搜尋]


:::

Microchip連結

https://www.facebook.com/microchiptechnologytaiwan/
http://www.microchip.com.tw/modules/tad_uploader/index.php?of_cat_sn=13
https://mu.microchip.com/page/tmu
http://elearning.microchip.com.tw/modules/tad_link/index.php?cate_sn=1
https://page.microchip.com/APAC-PrefCenters-TW.html
http://www.microchip.com/
http://www.microchip.com/treelink
http://www.microchipdirect.com/
http://www.microchip.com.cn/newcommunity/index.php?m=Video&a=index&id=103
http://www.microchip.com.tw/modules/tad_uploader/index.php?of_cat_sn=2
http://www.microchip.com.tw/Data_CD/eLearning/index.html
http://www.microchip.com.tw/RTC/RTC_DVD/
https://www.microchip.com/development-tools/
https://www.youtube.com/user/MicrochipTechnology
[ more... ]

教育訓練中心

!開發工具購買
辦法說明 [業界客戶] [教育單位]
----------------------------------
!校園樣品申請
辦法說明 [教師資格] [學生資格]
----------------------------------