原帖由 ktktkt 於 2007-7-6 19:36 發表


當大家見完 Intelligent Lift, 就知什麼是 "真强", 强毅力! 强決心! 我果o的 code, 只係 ABC 而已!


But it seems to be a research project but not a home hobby interest.

TOP

原帖由 tnovicet 於 2007-7-7 01:32 發表
But it seems to be a research project but not a home hobby interest.

What is the different?
one with money ,information, tools support from others!
one with money, information, tools support from himself/herself !

[ 本帖最後由 dino_lo 於 2007-7-7 09:31 編輯 ]

TOP

原帖由 ktktkt 於 2007-7-6 19:36 發表


當大家見完 Intelligent Lift, 就知什麼是 "真强", 强毅力! 强決心! 我果o的 code, 只係 ABC 而已!


我都想買塊玩.......................................

你地呢個project 係發揮到 上網 合各人之力研究, 成功運用forum 既 優點

[ 本帖最後由 阿死 於 2007-7-8 22:30 編輯 ]

TOP

原帖由 阿死 於 2007-7-8 22:28 發表


我都想買塊玩.......................................

你地呢個project 係發揮到 上網 合各人之力研究, 成功運用forum 既 優點

唔好只做cd-rom,  come and join the world, 唔好話:;不是原創;人地都造過;好簡單;要好多錢;要好多時間;唔識做;唔知點做;沒人教;.........,
不要一步登天,不要天才,不要高難度,不要十全十美.

只要你!

TOP

PARALLEL /SERIAL MODE

This demo program can be used in either parallel or serial mode of operation.
Setting 'PARALLEL EQU 1' enable parallel operation ( 'J1'  to 'VCC' ),
Setting 'PARRALE EQU 0' enable serial operation ( 'J1'  to 'GND' ).



$MOD52
$PAGEWIDTH(132)
$DEBUG
$OBJECT
$NOPAGING

;PARALLEL        EQU 1                        ; PARALLEL MODE
PARALLEL        EQU 0                        ; SERIAL MODE
;---------------------------------------------------------
; YOU CAN CHANGE THE FOLLOWING PORT TO SUIT YOUR DESIGN
;---------------------------------------------------------
IF (PARALLEL)
; PARALLEL CONFIG
LCD_RD                BIT        P3.2
LCD_WR                BIT        P3.3
LCD_RS                BIT P3.4
LCD_RESET        BIT P3.5
LCD_CS                BIT P3.6
LCD_DATA_BUS        EQU        080H        ; PORT 0

ELSE
; SERIAL CONFIG
LCD_RS                BIT P3.4
LCD_RESET        BIT P3.5
LCD_CS                BIT P3.6
LCD_SID                BIT P0.7
LCD_SCLK        BIT P0.6
ENDIF
;---------------------------------------------------------

        ORG        0000H                        ; POWER ON/RESET VECTOR
        JMP ON_RESET

ON_RESET:
        CLR LCD_RESET      
        CALL DELAY_1S     
        SETB LCD_RESET      

;---------------------------
;        INITIALIZATION OF THE LCD
;---------------------------
        MOV A,#0E2H   
        CALL LCD_CMD      
        MOV A,#0A0H   
        CALL LCD_CMD      
        MOV A,#0C8H   
        CALL LCD_CMD      
        MOV A,#0A3H   
        CALL LCD_CMD      
        MOV A,#2FH     
        CALL LCD_CMD      
        MOV A,#23H     
        CALL LCD_CMD      
        MOV  A,#81H     
        CALL LCD_CMD      
        MOV  A,#11H     
        CALL LCD_CMD      
        MOV A,#40H     
        CALL LCD_CMD      
        MOV A,#0A6H   
        CALL LCD_CMD      
        MOV A,#0A4H   
        CALL LCD_CMD      
        MOV A,#0AFH   
        CALL LCD_CMD      

;------------------
; ENTIRE DISPLAY ON
;------------------
        MOV A,#0A5H                        ; ENTIRE DISPLAY ON
        CALL LCD_CMD
        CALL DELAY_1S
        CALL DELAY_1S
        CALL DELAY_1S
        CALL DELAY_1S
        MOV A,#0A4H                        ; ENTIRE DISPLAY NORMAL
        CALL LCD_CMD
       
        CALL LCD_CLR      

; FILLING THE DISPLAY DATA
        MOV A,#0A7H   
        CALL LCD_CMD      
        MOV DPTR,#TABLE1
        CALL LCD_FILL_DATA      
        CALL DELAY_1S      

LOOP1:
;------------------
; FLASH THE DISPLAY
;------------------
        MOV R1,#02                        ; FLASH THE DISPLAY 2 TIMES
FLASH_LOOP:
        MOV A,#0AEH                        ; DISPLAY OFF
        CALL LCD_CMD
        CALL DELAY_1S
        MOV A,#0AFH                        ; DISPLAY ON
        CALL LCD_CMD
        CALL DELAY_1S
        DJNZ R1,FLASH_LOOP

;------------------
; INVERT THE DISPLAY
;------------------

        MOV A,#0A6H   
        CALL LCD_CMD      
        CALL DELAY_1S     

        MOV A,#0A7H   
        CALL LCD_CMD      
        CALL DELAY_1S
       
;------------------
; DIRECTION CHANGE
;------------------
        MOV A,#0C0H                        ; NORMAL DIRECTION   
        CALL LCD_CMD      
        CALL DELAY_1S     

        MOV A,#0C8H                 ; REVERSE DIRECTION   
        CALL LCD_CMD      
        CALL DELAY_1S

        JMP LOOP1      
   
;------------------------------------------------------
; CLEAR THE DISPLAY, FILL IN DATA '00' TO ALL LOCATION
;------------------------------------------------------
LCD_CLR:
        MOV R6,#0B0H   
LCD_CLR_LOOP:
        MOV A,R6      
        CALL LCD_CMD      
        MOV A,#10H     
        CALL LCD_CMD      
        MOV A,#00H     
        CALL LCD_CMD      
        MOV R1,#84H   
LCD_CLR_LOOP_1:
        MOV A,#00H     
        CALL LCD_DATA      
        DJNZ R1,LCD_CLR_LOOP_1   
        INC R6         
        CJNE R6,#0B8H,LCD_CLR_LOOP
        RET                 

;--------------------------------------------------------
; FILL THE DATA WHICH ARE POINTED BY DPTR TO THE DISPLAY
;--------------------------------------------------------
LCD_FILL_DATA:
        MOV R6,#0B0H   
LCD_FILL_DATA_LOOP:
        MOV A,R6                                        ; SET PAGE NO. (0-8)      
        CALL LCD_CMD      
        MOV A,#10H                                ; SET COLUMN ADDRESS MSB=0000     
        CALL LCD_CMD      
        MOV A,#00H                                ; SET COLUMN ADDRESS LSB=0000  
        CALL LCD_CMD      
        MOV R1,#84H                                ; 84H(132)->FILL 132 BYTES OF DATA
LCD_FILL_DATA_LOOP_1:
        MOV A,#00H     
        MOVC A,@A+DPTR  
        CALL LCD_DATA      
        INC DPTR      
        DJNZ R1,LCD_FILL_DATA_LOOP_1        ; NEXT COLUMN DATA
        INC R6                                                ; NEXT PAGE         
        CJNE R6,#0B8H,LCD_FILL_DATA_LOOP
        RET                 

;------------------------------
; SEND COMMAND CODE TO THE LCD
;------------------------------
LCD_CMD:
        NOP                 
        CLR LCD_RS      
        SJMP LCD_WR_CODE     

;------------------------------
; SEND DISPLAY DATA TO THE LCD
;------------------------------
LCD_DATA:
        NOP                 
        SETB LCD_RS      
LCD_WR_CODE:
        CLR LCD_CS      

;**************************************************
IF (PARALLEL)
        SETB LCD_RD      
        MOV LCD_DATA_BUS,A      
        CLR LCD_WR      
        NOP                 
        SETB LCD_WR      
ELSE
        MOV R0,#08H
NEXT_BIT:
        RLC A
        MOV LCD_SID,C
        CLR LCD_SCLK
        SETB LCD_SCLK
        DJNZ R0,NEXT_BIT
ENDIF
;**************************************************

        SETB LCD_CS      
        RET                 

;-----------------------
; WAIT A PERIOD OF TIME
;-----------------------
; **********************************************************
; DELAY ROUTINE
; **********************************************************
DELAY_0S5:
        MOV A,#250
        CALL MDELAY
        MOV A,#250
        CALL MDELAY
        RET       

DELAY_1S:
        MOV A,#250
        CALL MDELAY
        MOV A,#250
        CALL MDELAY
        MOV A,#250
        CALL MDELAY
        MOV A,#250
        CALL MDELAY

        RET
       
; DELAY TIME = ACC * 1MS
MDELAY:
        CALL SDLY1MS
        DJNZ ACC,MDELAY
        RET

SDLY1MS:
        PUSH ACC                ; 2+3*(1+(152*2))+2+2=921
        MOV A,#152                ; (1/(11059200/12))*921 = 1mS
        DJNZ ACC,$               
        MOV A,#152
        DJNZ ACC,$
        MOV A,#152
        DJNZ ACC,$
        POP ACC
        RET
   
;-------------------------------------------
; FILL IN THE DATA THAT YOU WANT TO DISPLAY
;-------------------------------------------
TABLE1:
;-- 132x64  --
DB  0FFH,0FFH,003H,003H,0F3H,0F3H,033H,033H,033H,033H,033H,033H,033H,033H,033H,033H
DB  033H,033H,033H,033H,033H,033H,033H,033H,033H,033H,033H,033H,033H,033H,033H,033H
DB  033H,033H,033H,033H,033H,033H,033H,033H,033H,033H,033H,033H,033H,033H,033H,033H
DB  033H,033H,033H,033H,033H,033H,033H,033H,033H,033H,033H,033H,033H,033H,033H,033H
DB  033H,033H,033H,033H,033H,033H,033H,033H,033H,033H,033H,033H,033H,033H,033H,033H
DB  033H,033H,033H,033H,033H,033H,033H,033H,033H,033H,033H,033H,033H,033H,033H,033H
DB  033H,033H,033H,033H,033H,033H,033H,033H,033H,033H,033H,033H,033H,033H,033H,033H
DB  033H,033H,033H,033H,033H,033H,033H,033H,033H,033H,033H,033H,033H,033H,0F3H,0F3H
DB  003H,003H,0FFH,0FFH,0FFH,0FFH,000H,000H,0FFH,0FFH,000H,000H,0FFH,0FFH,003H,003H
DB  0F3H,0F3H,033H,033H,033H,033H,033H,033H,033H,033H,033H,033H,033H,033H,033H,033H
DB  033H,033H,033H,033H,033H,033H,033H,033H,033H,033H,033H,033H,033H,033H,033H,033H
DB  033H,033H,033H,033H,033H,033H,033H,033H,033H,033H,033H,033H,033H,033H,033H,033H
DB  033H,033H,033H,033H,033H,033H,033H,033H,033H,033H,033H,033H,033H,033H,033H,033H
DB  033H,033H,033H,033H,033H,033H,033H,033H,033H,033H,033H,033H,033H,033H,033H,033H
DB  033H,033H,033H,033H,033H,033H,033H,033H,033H,033H,033H,033H,033H,033H,033H,033H
DB  033H,033H,033H,033H,033H,033H,033H,033H,033H,033H,0F3H,0F3H,003H,003H,0FFH,0FFH
DB  000H,000H,0FFH,0FFH,000H,000H,0FFH,0FFH,0FFH,0FFH,000H,000H,0FFH,0FFH,000H,000H
DB  0FFH,0FFH,000H,000H,0FFH,0FFH,000H,000H,0FFH,0FFH,003H,003H,0F3H,0F3H,033H,033H
DB  033H,033H,033H,033H,033H,033H,033H,033H,033H,033H,033H,033H,033H,033H,033H,033H
DB  033H,033H,033H,033H,033H,033H,033H,033H,033H,033H,033H,033H,033H,033H,033H,033H
DB  033H,033H,033H,033H,033H,033H,033H,033H,033H,033H,033H,033H,033H,033H,033H,033H
DB  033H,033H,033H,033H,033H,033H,033H,033H,033H,033H,033H,033H,033H,033H,033H,033H
DB  033H,033H,033H,033H,033H,033H,033H,033H,033H,033H,033H,033H,033H,033H,033H,033H
DB  033H,033H,033H,033H,033H,033H,0F3H,0F3H,003H,003H,0FFH,0FFH,000H,000H,0FFH,0FFH
DB  000H,000H,0FFH,0FFH,000H,000H,0FFH,0FFH,000H,000H,0FFH,0FFH,0FFH,0FFH,000H,000H
DB  0FFH,0FFH,000H,000H,0FFH,0FFH,000H,000H,0FFH,0FFH,000H,000H,0FFH,0FFH,000H,000H
DB  0FFH,0FFH,000H,000H,0FFH,0FFH,003H,003H,003H,003H,003H,003H,003H,003H,003H,003H
DB  043H,0E3H,043H,043H,043H,003H,003H,003H,043H,0C3H,083H,043H,043H,083H,003H,003H
DB  083H,043H,043H,043H,043H,083H,003H,043H,0C3H,043H,003H,003H,043H,0C3H,043H,003H
DB  003H,043H,043H,0D3H,003H,003H,003H,003H,083H,043H,043H,043H,083H,0C3H,003H,003H
DB  083H,043H,043H,043H,043H,083H,003H,003H,043H,0E3H,043H,043H,043H,003H,003H,003H
DB  003H,003H,003H,003H,003H,003H,0FFH,0FFH,000H,000H,0FFH,0FFH,000H,000H,0FFH,0FFH
DB  000H,000H,0FFH,0FFH,000H,000H,0FFH,0FFH,000H,000H,0FFH,0FFH,000H,000H,0FFH,0FFH
DB  0FFH,0FFH,000H,000H,0FFH,0FFH,000H,000H,0FFH,0FFH,000H,000H,0FFH,0FFH,000H,000H
DB  0FFH,0FFH,000H,000H,0FFH,0FFH,000H,000H,0FFH,0FFH,0C0H,0C0H,0C0H,0C0H,0C0H,0C0H
DB  0C0H,0C0H,0C0H,0C0H,0C0H,0C7H,0C8H,0C8H,0C8H,0C4H,0C0H,0C0H,0C8H,0CFH,0C8H,0C0H
DB  0C8H,0CFH,0C8H,0C0H,0C7H,0C8H,0C8H,0C8H,0C8H,0C7H,0C0H,0C0H,0C0H,0C3H,0CCH,0CCH
DB  0C3H,0C0H,0C0H,0C0H,0C0H,0C8H,0C8H,0CFH,0C8H,0C8H,0C0H,0C0H,0C7H,0C8H,0C8H,0C8H
DB  0C8H,0C4H,0C0H,0C0H,0C7H,0C9H,0C9H,0C9H,0C9H,0C9H,0C0H,0C0H,0C0H,0C7H,0C8H,0C8H
DB  0C8H,0C4H,0C0H,0C0H,0C0H,0C0H,0C0H,0C0H,0C0H,0C0H,0FFH,0FFH,000H,000H,0FFH,0FFH
DB  000H,000H,0FFH,0FFH,000H,000H,0FFH,0FFH,000H,000H,0FFH,0FFH,000H,000H,0FFH,0FFH
DB  000H,000H,0FFH,0FFH,0FFH,0FFH,000H,000H,0FFH,0FFH,000H,000H,0FFH,0FFH,000H,000H
DB  0FFH,0FFH,000H,000H,0FFH,0FFH,0C0H,0C0H,0CFH,0CFH,0CCH,0CCH,0CCH,0CCH,0CCH,0CCH
DB  0CCH,0CCH,0CCH,0CCH,0CCH,0CCH,0CCH,0CCH,0CCH,0CCH,0CCH,0CCH,0CCH,0CCH,0CCH,0CCH
DB  0CCH,0CCH,0CCH,0CCH,0CCH,0CCH,0CCH,0CCH,0CCH,0CCH,0CCH,0CCH,0CCH,0CCH,0CCH,0CCH
DB  0CCH,0CCH,0CCH,0CCH,0CCH,0CCH,0CCH,0CCH,0CCH,0CCH,0CCH,0CCH,0CCH,0CCH,0CCH,0CCH
DB  0CCH,0CCH,0CCH,0CCH,0CCH,0CCH,0CCH,0CCH,0CCH,0CCH,0CCH,0CCH,0CCH,0CCH,0CCH,0CCH
DB  0CCH,0CCH,0CCH,0CCH,0CCH,0CCH,0CCH,0CCH,0CCH,0CCH,0CCH,0CCH,0CCH,0CCH,0CCH,0CCH
DB  0CCH,0CCH,0CFH,0CFH,0C0H,0C0H,0FFH,0FFH,000H,000H,0FFH,0FFH,000H,000H,0FFH,0FFH
DB  000H,000H,0FFH,0FFH,000H,000H,0FFH,0FFH,0FFH,0FFH,000H,000H,0FFH,0FFH,000H,000H
DB  0FFH,0FFH,0C0H,0C0H,0CFH,0CFH,0CCH,0CCH,0CCH,0CCH,0CCH,0CCH,0CCH,0CCH,0CCH,0CCH
DB  0CCH,0CCH,0CCH,0CCH,0CCH,0CCH,0CCH,0CCH,0CCH,0CCH,0CCH,0CCH,0CCH,0CCH,0CCH,0CCH
DB  0CCH,0CCH,0CCH,0CCH,0CCH,0CCH,0CCH,0CCH,0CCH,0CCH,0CCH,0CCH,0CCH,0CCH,0CCH,0CCH
DB  0CCH,0CCH,0CCH,0CCH,0CCH,0CCH,0CCH,0CCH,0CCH,0CCH,0CCH,0CCH,0CCH,0CCH,0CCH,0CCH
DB  0CCH,0CCH,0CCH,0CCH,0CCH,0CCH,0CCH,0CCH,0CCH,0CCH,0CCH,0CCH,0CCH,0CCH,0CCH,0CCH
DB  0CCH,0CCH,0CCH,0CCH,0CCH,0CCH,0CCH,0CCH,0CCH,0CCH,0CCH,0CCH,0CCH,0CCH,0CCH,0CCH
DB  0CCH,0CCH,0CCH,0CCH,0CCH,0CCH,0CCH,0CCH,0CCH,0CCH,0CCH,0CCH,0CCH,0CCH,0CFH,0CFH
DB  0C0H,0C0H,0FFH,0FFH,000H,000H,0FFH,0FFH,000H,000H,0FFH,0FFH,0FFH,0FFH,0C0H,0C0H
DB  0CFH,0CFH,0CCH,0CCH,0CCH,0CCH,0CCH,0CCH,0CCH,0CCH,0CCH,0CCH,0CCH,0CCH,0CCH,0CCH
DB  0CCH,0CCH,0CCH,0CCH,0CCH,0CCH,0CCH,0CCH,0CCH,0CCH,0CCH,0CCH,0CCH,0CCH,0CCH,0CCH
DB  0CCH,0CCH,0CCH,0CCH,0CCH,0CCH,0CCH,0CCH,0CCH,0CCH,0CCH,0CCH,0CCH,0CCH,0CCH,0CCH
DB  0CCH,0CCH,0CCH,0CCH,0CCH,0CCH,0CCH,0CCH,0CCH,0CCH,0CCH,0CCH,0CCH,0CCH,0CCH,0CCH
DB  0CCH,0CCH,0CCH,0CCH,0CCH,0CCH,0CCH,0CCH,0CCH,0CCH,0CCH,0CCH,0CCH,0CCH,0CCH,0CCH
DB  0CCH,0CCH,0CCH,0CCH,0CCH,0CCH,0CCH,0CCH,0CCH,0CCH,0CCH,0CCH,0CCH,0CCH,0CCH,0CCH
DB  0CCH,0CCH,0CCH,0CCH,0CCH,0CCH,0CCH,0CCH,0CCH,0CCH,0CCH,0CCH,0CCH,0CCH,0CCH,0CCH
DB  0CCH,0CCH,0CCH,0CCH,0CCH,0CCH,0CCH,0CCH,0CCH,0CCH,0CFH,0CFH,0C0H,0C0H,0FFH,0FFH


        END

TOP

問對應port....

LCD_RD                即是RW_WR?
LCD_WR               唔知是那個
LCD_RS                即是A0(RS)?
LCD_RESET          即是RES?
LCD_CS                即是CS

另有關寫Control這段,LCD_WR 的部份我應該看那張時序圖?P.15 的External Signals和Internal Signals我看不明
LCD_DATA:
        NOP                 
        SETB LCD_RS      
LCD_WR_CODE:
        CLR LCD_CS      

;**************************************************
IF (PARALLEL)
        SETB LCD_RD      
        MOV LCD_DATA_BUS,A      
        CLR LCD_WR      
        NOP                 
        SETB LCD_WR


LCD BIAS SELECT又會影響甚麼?
Duty Ratio ,Duty 1, Duty 0 又如何控制?

[ 本帖最後由 KSC 於 2007-7-15 21:33 編輯 ]

TOP

原帖由 KSC 於 2007-7-15 15:38 發表
問對應port....

LCD_RD                即是RW_WR?
LCD_WR               唔知是那個
LCD_RS                即是A0(RS)?
LCD_RESET          即是RES?
LCD_CS                即是CS

另有關寫Control這 ...


LCD_RESET is RES (the reset pin)
LCD_CS is CS (the Chip Select pin)
LCD_RS is the RS (Register Select i.e. A0)

For the two other pins:
If pin 3 of the lcd is connected to GND, you are using 8080 interface, then
the two pins are defined as RD and WR.
If pin 3 of the lcd is connected to Vdd, you are using 6800 interface, then
the two pins are defined as E and RW.

For timing diagrams, figures 3 and 4 (especially the dummy read) is important to READ operations. Figures 34 and 35 shows the timing requirements (hold time, setup time etc.)

For LCD bias, which is related to the LCD technology and I don't know much about that. My personal understanding is that the duty ratio is specify by the LCD manufacturers and related to the voltages V0-V4 and the type of LCD (physical characteristics). Table 17 and "Select LCD bias" command description show the relationships. For the 18pin LCD, it is 1/65 duty and 1/9 bias, so the setting is A3. But I check that I seem mis-coded it as A2 (i.e. 1/7), and has no significant problem. You may try A2 (1/7) and A3 (1/9) and share with us your result.

TOP

原帖由 KSC 於 2007-7-15 15:38 發表
問對應port....

LCD_RD                即是RW_WR?
LCD_WR               唔知是那個
LCD_RS                即是A0(RS)?
LCD_RESET          即是RES?
LCD_CS                即是CS

另有關寫Control這 ...


I guess one thing which may confuse you when reading the codes is that you may have difficulty in matching the the "delay" with the timing diagrams in the datasheet. In fact, many programs just IGNORE the timing requirements and they work! As you may find that the timings (in datasheet) are in ns, for a normal speed 8051 driven by a 11.0592M or (12M) crystal (many people wrote programs based on it), one instruction is already 1us. So many programmers just ignore the detail timings and the program is still OK. Problems only occur when the program is to be used in a high speed uC (for example DS89C450 @12Mhz, one instruction may be down to approx. 33ns). I mentioned the timing requirements simply wants to point out the importance of timing issues, so we can write tidy programs which can be run on various speeds/types of uC, no matter they are PIC, AVR, or MSP....

TOP

原帖由 ktktkt 於 2007-7-15 22:37 發表


I guess one thing which may confuse you when reading the codes is that you may have difficulty in matching the the "delay" with the timing diagrams in the datasheet. In fact, many pro ...

學到野了......雖然我不是因delay的時序煩惱
we can write tidy programs which can be run on various speeds/types of uC
這正是未跟過project的學生(我)的通病
現在被點醒總好過寫到7788時有問題發生

TOP

原帖由 ktktkt 於 2007-7-15 22:07 發表


LCD_RESET is RES (the reset pin)
LCD_CS is CS (the Chip Select pin)
LCD_RS is the RS (Register Select i.e. A0)

For the two other pins:
If pin 3 of the lcd is connected to GND, you are usi ...

即是說上邊的字是這樣看?
MI = “H”: 6800 series MPU interface
MI = “L”: 8080 series MPU interface

RW_WR
E_RD

對吧

TOP