• slider image 442
  • slider image 492
  • slider image 493
  • slider image 494
  • slider image 495
  • slider image 496
  • slider image 488
  • slider image 491
:::

論壇索引


Board index » All Posts (a691228)




d30f LCD
#1
新會員
新會員


大大您好 小弟又上來麻煩伱了 不好意思
這是APP023_3的GLCD測試程式
小弟只改了p30fxxxx.h-->p30F6010a.h
想說先看看這程式能run起來在修,可是好像不行,想請大大們給一下指導好嗎?
附檔是rum的結果與設定
請您幫忙一下 謝謝!
#include    <p30F6010a.h>

#include    "GLCD_30IO_APP023.h"

#define        CPU_FCY        16

#define        LCD_RS        LATBbits.LATB10        //    RS = 1 >> Data , =0 >> Command
#define        LCD_RW        LATBbits.LATB11        //  RW = 0 >> Write , = 1 >> Read
#define        LCD_E        LATGbits.LATG9

#define        DIR_LCD_RS    TRISBbits.TRISB10
#define        DIR_LCD_RW    TRISBbits.TRISB11
#define        DIR_LCD_E    TRISGbits.TRISG9

unsigned char    LCD_StatusByte ;

int    LCDIsBusy(void)
{
    
int    BusyLoop ;

    for (
BusyLoop BusyLoop 30 BusyLoop++) ;

        
LCD_StatusByte cmdreadLCD() ;

    for (
BusyLoop BusyLoop 30 BusyLoop++) ;

            return ((
LCD_StatusByte >> 7) & 0x0001) ;
}

void    LCD_Initial(void)
{
        
TRISD &= 0b1111011110000000 ;

        
LCD_E ;

        
DIR_LCD_RS ;
        
DIR_LCD_RW ;
        
DIR_LCD_E ;
        
        
LCD_E_Delay() ;

        
cmdwriteLCD(0x00) ;
        
LCD_Delay200usX(40) ;
        
cmdwriteLCD(0x30) ;
        
LCD_Delay200usX(25);            // Wait for > 4.1 ms --> 200us * 25 = 5 ms
        
cmdwriteLCD(0x30) ;
        
LCD_Delay200usX(20) ;
        
cmdwriteLCD(0x30) ;
        
LCD_Delay200usX(10) ;
        
cmdwriteLCD(0x08) ;
        
LCD_Delay200usX(10) ;
        
cmdwriteLCD(0x01) ;
        
LCD_Delay200usX(50) ;                // Display OFF
        
cmdwriteLCD(0x06) ;
        
LCD_Delay200usX(10) ;            // Clear Display = 1.5 ms 
        
cmdwriteLCD(0x30) ;
        
LCD_Delay200usX(10) ;
        
cmdwriteLCD(0x08) ;                    // Display ON 
        
LCD_Delay200usX(10) ;
        
cmdwriteLCD(0x0e) ;
        
LCD_Delay200usX(10) ;
        
cmdwriteLCD(0x06) ;                    // Display ON 
        
LCD_Delay200usX(50) ;
}

void    setcurLCDchar Cur_X char Cur_Y )
{
 
        
unsigned char    BaseAddr ;

        switch ( 
Cur_Y )
        {
            case    
:
                    
BaseAddr 0x80 ;
                    break ;
            case    
:
                    
BaseAddr 0x90 ;
                    break ;
            case    
:
                    
BaseAddr 0x88 ;
                    break ;
            case    
:
                    
BaseAddr 0x98 ;
                    break ;
            default :
                    
BaseAddr 0x80 ;
                    break ;
        }
            
BaseAddr += Cur_X ;
            while ( 
LCDIsBusy()) ;
            
cmdwriteLCD(BaseAddr) ;

}


void     putcLCDunsigned char TheChar)
{
            
datawriteLCD((unsigned int)TheChar);
}

void    putsLCDunsigned char *OutString )
{
        while ( *
OutString != 0x00 )
        {
             while ( 
LCDIsBusy() );
            
putcLCD( *OutString++ ) ;
        }
}

void    putrsLCD( const unsigned char *OutString )
{
        while ( *
OutString != 0x00 )
        {
             while ( 
LCDIsBusy() );
            
putcLCD( *OutString++ ) ;
        }
}

void     LCD_Delay200usX(int    UnitOf200us)
{
        
int        Loop_200usX ;

        for ( 
Loop_200usX Loop_200usX UnitOf200us Loop_200usX ++ )
        
LCD_Delay200us( ) ;
}

void     LCD_Delay200us(void)
{
    
int        Loop_200us ;

    for ( 
Loop_200us Loop_200us CPU_FCY 40  Loop_200us++)    ;

}


//        LCD Data @ RD0 .. RD6 and RD10
unsigned char    datareadLCD(void)                //    Read data from LCD
{
        
int                Temp_PORTD ;
        
int                Return_Data ;
        
TRISD |= 0b0000100001111111 ;            // Make all LCD data pins as INPUT 
        
LCD_RS ;
        
LCD_RW ;
        
LCD_E_Delay() ;
        
LCD_E ;
        
LCD_E_Delay() ;
        
Temp_PORTD PORTD ;
        
LCD_E ;
        
TRISD &= 0b1111011110000000 ;
        
Return_Data Temp_PORTD ;
        if ( 
Temp_PORTD 0b0000100000000000 )         Return_Data |= 0b10000000 ;
        else                                        
Return_Data &= 0b01111111 ;

        return     (
unsigned char)Return_Data ;
}

unsigned char    cmdreadLCD(void)                //    Read data from LCD
{
        
int                Temp_PORTD ;
        
int                Return_Data ;

        
TRISD |= 0b0000100001111111 ;            // Make all LCD data pins as INPUT 
        
LCD_RS ;
        
LCD_RW ;
        
LCD_E_Delay() ;
        
LCD_E ;
        
LCD_E_Delay() ;
        
Temp_PORTD PORTD ;
        
LCD_E ;
        
TRISD &= 0b1111011110000000 ;
        
Return_Data Temp_PORTD ;
        if ( 
Temp_PORTD 0b0000100000000000 )         Return_Data |= 0b10000000 ;
        else                                        
Return_Data &= 0b01111111 ;

        return    (
unsigned char)Return_Data ;
}

void    datawriteLCD(unsigned char wdata)        // Write data to LCD
{
        
LATD &= 0b1111011110000000 ;
        if ( 
wdata 0b0000000010000000 )
            
LATD |=  0b0000100000000000 ;
            
wdata &= 0b01111111 ;
        
LATD |= wdata ;
        
LCD_RS ;
        
LCD_RW ;
        
LCD_E_Delay() ;
        
LCD_E ;
        
LCD_E_Delay() ;
        
LCD_E ;
        
LCD_E_Delay() ;
}

void    cmdwriteLCD(unsigned char wdata)        // Write Command to LCD 
{
        
LATD &= 0b1111011110000000 ;
        if ( 
wdata 0b0000000010000000 )
            
LATD |=  0b0000100000000000 ;
            
wdata &= 0b01111111 ;
        
LATD |= wdata ;
        
LCD_RS ;
        
LCD_RW ;
        
LCD_E_Delay() ;
        
LCD_E ;
        
LCD_E_Delay() ;
        
LCD_E ;
        
LCD_E_Delay() ;
}

void    LCD_E_Delay(void)
{
        
int    E_Loop ;
        for ( 
E_Loop E_Loop CPU_FCY E_Loop ++ ) ;
}

Attach file:


Link only for registered users

發表於: 2009/9/10 0:23
頂部


Re: LCD控制晶片改為16f877 真頭痛
#2
新會員
新會員


可愛的大大
假如您下載了 還是無法有doc檔 可以麻煩妳 再開啟WRAR 然後點工具 然後再點選修復 之後進去一視窗 一直按確定就行了.
麻煩妳了

發表於: 2009/9/3 11:56
頂部


Re: LCD控制晶片改為16f877 真頭痛
#3
新會員
新會員


謝謝大大
小弟馬上重傳 麻煩您了囉

Attach file:


Link only for registered users

發表於: 2009/9/2 22:15
頂部


LCD控制晶片改為16f877 真頭痛
#4
新會員
新會員


各位大大:
這是書本的範例,用的震盪器已改成用4M的來振,使用是第二圖液晶,想說先能把書本範例用到動,可是目前只能出現游標,無法出現他程式寫的現象,怪怪的,可以麻煩大大們給個意見或指導好嗎?謝謝您囉!

Attach file:


Link only for registered users

發表於: 2009/9/2 11:55
頂部


Re: LCD
#5
新會員
新會員


哇塞 超讚的大大們
有你們的熱心教導,我會努力把它寫出來,趕快來試試. 加油

發表於: 2009/8/25 13:43
頂部


LCD
#6
新會員
新會員


各位大大
小弟如今又換了新的PIC優,目前初使用的16f946這顆,線路是直接從腳LCDDATAX拉出來控制LCD,這是我目前的程式,現在是朝著利用這些腳位把LCD的部分全點亮,再全暗..再次麻煩各位大大指教指教 謝謝!!
list p=16f946,R=DEC
    
include"p16f946.inc"                              
    
__CONFIG _PWRTE_ON _WDT_OFF _INTRC_OSC_NOCLKOUT 

BANK0 MACRO
    bcf STATUS
,RP1
        bcf STATUS
,RP0 
    ENDM
BANK1 MACRO
    bcf STATUS
,RP1
        bsf STATUS
,RP0 
    ENDM
BANK2 MACRO
    bcf STATUS
,RP1
        bsf STATUS
,RP0
    ENDM
BANK3 MACRO
    bsf STATUS
,RP1
        bsf STATUS
,RP0 
    ENDM



Delay1 equ 0x20
Delay2 equ 0x21
Delay3 equ 0x22

                      
;bank3 
;pic                       ;一萬
#define D9A  LCDDATA13,7    ;*seg39
#define D9F  LCDDATA16,7    ;*
#define D9E  LCDDATA19,7    ;*
#define D9D  LCDDATA22,7    ;*
#define D9B  LCDDATA14,0    ;seg40
#define D9G  LCDDATA17,0    ;
#define D9C  LCDDATA20,0    ;


#define D8A  LCDDATA13,5    ;*seg37
#define D8F  LCDDATA16,5    ;*
#define D8E  LCDDATA19,5    ;*
#define D8D  LCDDATA22,5    ;*
#define D8B  LCDDATA13,6    ;seg38
#define D8G  LCDDATA16,6    ;
#define D8C  LCDDATA19,6    ;

                      
#define D7A  LCDDATA13,3    ;*seg35
#define D7F  LCDDATA16,3    ;*
#define D7E  LCDDATA19,3    ;*
#define D7D  LCDDATA22,3    ;*
#define D7B  LCDDATA13,4    ;seg36
#define D7G  LCDDATA16,4    ;
#define D7C  LCDDATA19,4    ;
                    
#define D6A  LCDDATA13,1    ;*seg33
#define D6F  LCDDATA16,1    ;*
#define D6E  LCDDATA19,1    ;*
#define D6D  LCDDATA22,1    ;*
#define D6B  LCDDATA13,2    ;seg34
#define D6G  LCDDATA16,2    ;
#define D6C  LCDDATA19,2    ;
                     
#define D5A  LCDDATA12,7    ;*seg31
#define D5F  LCDDATA15,7    ;*
#define D5E  LCDDATA18,7    ;*
#define D5D  LCDDATA21,7    ;*
#define D5B  LCDDATA13,0    ;seg32
#define D5G  LCDDATA16,0    ;
#define D5C  LCDDATA19,0    ;
                            
;十萬
#define D12C  LCDDATA15,0    ;*seg24
#define D12G  LCDDATA18,0    ;*
#define D12B  LCDDATA21,0    ;*
#define D12D  LCDDATA12,1    ;*
#define D12E  LCDDATA15,1    ;seg25
#define D12F  LCDDATA18,1    ;
#define D12A  LCDDATA21,1    ;
                         
#define D11C  LCDDATA15,2    ;*seg26
#define D11G  LCDDATA18,2    ;*
#define D11B  LCDDATA21,2    ;*
#define D11D  LCDDATA12,3    ;*
#define D11E  LCDDATA15,3    ;seg27
#define D11F  LCDDATA18,3    ;
#define D11A  LCDDATA21,3    ;

;***********Resect Vector***************
            
org     0x00
            nop
            
;movlw   .25
            
;sublw   .25
            
goto    MainLine
;************  interrupt  **************     
            
org     0x04
           
            
goto    intService

intService
                    
;movwf    W_temp
            
;swapf    STATUS,w
            
;movwf    STATUS_Temp         
             
;btfsc    PIR1,TMR1IF
            
;call    Timer1           
    
            
;swapf    STATUS_Temp,w
            
;movwf    STATUS
            
;swapf    W_temp,f
            
;swapf    W_temp,w
            retfie


;********** Main Program ***************
MainLine
                         
            call    Initial
mainloop            
            call    Display_LCD
            call    Delay250ms
            call    Delay250ms
            call    Delay250ms
            call    Delay250ms
            call    Delay250ms
            call    clear_LCD
            
goto    mainloop
;*********Initial Subroutine************
Initial
            
       BANK3
            clrf    TRISG        
            clrf    TRISF
       BANK2
            clrf    TRISE

       BANK1
            movlw   07h             
            movwf   CMCON0              
CMCON1無法關      
       
                                             
;InitLCD
       BANK2                                      
          
            movlw 
b'10011110'                 operates in sleep1/3 mux1/3 biasinternal RC osc,
            
movwf LCDCON                     init lcd control registerinternal voltage generator used
            movlw 
b'10110010'                1/3 muxframe freq = ?kHz/(85*(3+1)) = about Hz[Clock source / (96 * (LP3:LP0 1))]
            
movwf LCDPS                                                 
                
                
           
return



 
;*******************************************************************
;* 
The LCD Module Subroutines                                      *
;* 
Command sequence for 2 lines of 5x16 characters                 *
;*******************************************************************
Display_LCD
        BANK3
                                
; ***全數點亮****;
                                ;
pic                   
             bsf D9A  
             bsf D9F  
             bsf D9E  
             bsf D9D  
             bsf D9B  
             bsf D9G  
             bsf D9C  

             bsf D8A  
             bsf D8F  
             bsf D8E  
             bsf D8D  
             bsf D8B  
             bsf D8G  
             bsf D8C  

             bsf D7A  
             bsf D7F 
             bsf D7E  
             bsf D7D  
             bsf D7B  
             bsf D7G  
             bsf D7C 
                    
             bsf D6A
             bsf D6F  
             bsf D6E  
             bsf D6D  
             bsf D6B  
             bsf D6G  
             bsf D6C  
                     
             bsf D5A  
             bsf D5F 
             bsf D5E  
             bsf D5D  
             bsf D5B  
             bsf D5G  
             bsf D5C  
        
             bsf D12C  
             bsf D12G 
             bsf D12B  
             bsf D12D  
             bsf D12E  
             bsf D12F  
             bsf D12A  
                         
             bsf D11C  
             bsf D11G  
             bsf D11B  
             bsf D11D  
             bsf D11E  
             bsf D11F  
             bsf D11A     
             
return 

clear_LCD
            BANK3
                                
; ***全數off****;
                                ;
pic                   
             bcf D9A  
             bcf D9F  
             bcf D9E  
             bcf D9D  
             bcf D9B  
             bcf D9G  
             bcf D9C  

             bcf D8A  
             bcf D8F  
             bcf D8E  
             bcf D8D  
             bcf D8B  
             bcf D8G  
             bcf D8C  

             bcf D7A  
             bcf D7F 
             bcf D7E  
             bcf D7D  
             bcf D7B  
             bcf D7G  
             bcf D7C 
                    
             bcf D6A
             bcf D6F  
             bcf D6E  
             bcf D6D  
             bcf D6B  
             bcf D6G  
             bcf D6C  
                     
             bcf D5A  
             bcf D5F 
             bcf D5E  
             bcf D5D  
             bcf D5B  
             bcf D5G  
             bcf D5C  
        
             bcf D12C  
             bcf D12G 
             bcf D12B  
             bcf D12D  
             bcf D12E  
             bcf D12F  
             bcf D12A  
                         
             bcf D11C  
             bcf D11G  
             bcf D11B  
             bcf D11D  
             bcf D11E  
             bcf D11F  
             bcf D11A 
             
return 
;------------------------------------------------------------------------------
; Function: 
Delay1ms
OverviewThis is a very accurate 1ms delay for a 4MHz clock.
;------------------------------------------------------------------------------
Delay1ms:
        
movlw    .198
        movwf    Delay1
        nop
        nop
Delay1ms_01
:
        
nop
        nop
        decfsz    Delay1
F
        
goto    Delay1ms_01
        retlw    0x00
;------------------------------------------------------------------------------
; Function: 
Delay250ms
Overview:
;------------------------------------------------------------------------------
Delay250ms:
        
movlw    .250
        movwf    Delay2
Delay250ms_01
:
        
call    Delay1ms
        
;CLRWDT
        decfsz    Delay2
F
        
goto    Delay250ms_01
        retlw    0x00

;------------------------------------------------------------------------------
; Function: 
Delay3s
Overview:
;------------------------------------------------------------------------------        
Delay3s:        
        
movlw    .8        ;2sec
        movwf    Delay3
Delay3s1
:        
        
call    Delay250ms
        decfsz    Delay3
        
goto    Delay3s1
        retlw    0x00
        
 End

發表於: 2009/8/25 0:28
頂部


Re: ADC轉換3
#7
新會員
新會員


寫上癮的大大
太感謝伱了,搞這麼久模擬出來ADRESH這都有值只是都固定值,原來是錯在十位元常數與二位元的運算這,小弟一度以為自己連架構都錯了...^^!!!,是的,小弟馬上改正它來試試,加油加油...^^
謝謝優 !

發表於: 2009/6/26 9:57
頂部


Re: ADC轉換3
#8
新會員
新會員


大大們
小弟已固定在ADC3這固定問問題,造成大大的不便,不好意思ㄛ..^^!!!
在這個系統用LED表示有送訊號出來,再接示波器看脈波時間,
如上面的程式正常,再調10K電阻至少脈波的寬度會改變,有試過仍舊只有屬於第一次覆蓋後的單一時間的輸出,請問一下大大們指導一下是哪裡有問題ㄋ,…..拜託

^^!!!不曉得這樣的資訊夠嗎,rar檔看不到,,解決方式:解壓縮進去,會說未知檔案,不管他,點資料夾進去,再選擇ADC3,按"修復"扭,選擇rar方式修復,跳出一視窗按"是",另外建立為rebuiltADC3轉換.rar,即可,麻煩了 謝謝!!

Attach file:


Link only for registered users

發表於: 2009/6/25 8:56

Edited by a691228 on 2009年06月25日 11:21:54
Edited by a691228 on 2009年06月25日 11:34:15
Edited by a691228 on 2009年06月25日 11:34:57
Edited by a691228 on 2009年06月25日 11:40:09
Edited by a691228 on 2009年06月25日 11:42:55
Edited by a691228 on 2009年06月25日 11:54:26
頂部


Re: ADC轉換3
#9
新會員
新會員


經過大大們給的指教之後,小弟決定還是得不恥下問.
小弟改以最簡單的方式先來測定是否可透過可調的10K電阻由AN3輸入,指定GP5為輸出.看是否可造成不同時間的切斷.
但是經示波器測試之後仍舊只有屬於第一次覆蓋後的單一時間的輸出,請問一下大大們指導一下是哪裡有問題ㄋ,…..拜託^^!!!
list p=12f675                         
                
include <P12f675.INC>     
                
__CONFIG _PWRTE_ON _WDT_OFF _INTRC_OSC_NOCLKOUT _BODEN_OFF
               
ADStatus      EQU     0x20
W_temp        EQU     0x21
STATUS_Temp   EQU     0x22
scaler        EQU     0x27
scaler1       EQU     0x43
value         EQU      0x30
T1HCAP_1       EQU     0x34
T1LCAP_1       EQU     0x35
ADvalue        EQU      0x40
;***********Resect Vector***************
            
org     0x00
            nop
            
goto    MainLine
;************  interrupt  **************     
            
org     0x04
            
goto    intService

intService
            movwf    W_temp
            swapf    STATUS
,w
            movwf    STATUS_Temp
        
             btfsc    PIR1
,TMR1IF
            call    Timer1           
    
            swapf    STATUS_Temp
,w
            movwf    STATUS
            swapf    W_temp
,f
            swapf    W_temp
,w
            retfie

;**********    Timer1    ***************
Timer1          
            bcf     PIR1
,TMR1IF
            decf    scaler
,f
            decf    scaler1
,f
            clrf    TMR1L         
            movf   T1HCAP_1
,W          
            movwf   TMR1H
            movf   T1LCAP_1
,W       
            movwf   TMR1L           
            
return


;********** 
Main Program ***************
MainLine
            call    Initial
            bcf     STATUS
,RP0
            bsf     T1CON
,TMR1ON
MainLoop                           
            call    ADconverter
            call    turn
            
goto    MainLoop
;*********Initial Subroutine************
Initial
            bsf     STATUS
,RP0     
            clrf    TRISIO        
            movlw   
B'00010100'
            
movwf   TRISIO            
            bcf     STATUS
,RP0
            movlw   07h             
            movwf   CMCON                     
                                                                 
                                                                   
            bcf     STATUS
,RP0
            bsf     GPIO
,GP2
            clrf    T1CON
            clrf    TMR1H
            clrf    TMR1L       
            clrf    INTCON
            bsf        INTCON
,PEIE                            
            bsf     STATUS
,RP0
            clrf    PIE1
            bsf        PIE1
,TMR1IE                                
            bcf     STATUS
,RP0
            clrf    PIR1                                   
            clrf    TMR1L
            movlw   0x15
            movwf   TMR1H
            movlw   0x9F       
            movwf   TMR1L
            bcf        T1CON
,TMR1ON                            
            bsf        INTCON
,GIE                             
            bsf     STATUS
,RP0
            
            movlw   
B'00011000'
            
movwf   ANSEL
            bcf     STATUS
,RP0
                                                            
            clrf    ADCON0
            movlw   
B'00001101'           
            
movwf   ADCON0                                  
           
            
return

;************
A/D converter**************
ADconverter                        
            movlw   .2
            movwf   scaler1
            bcf     STATUS
,RP0            
            bsf     ADCON0
,GO
ADwait           
            btfss   scaler1
,0
            
goto    ADwait

Wait1                  
             
            btfsc   ADCON0
,GO                                
            
goto    Wait1                                    

            movf   ADRESH
,W
            movwf   ADvalue
            movlw   LOW 
(.65535-ADvalue)
            
movwf   T1LCAP_1
            movlw   HIGH 
(.65535-ADvalue)
            
movwf   T1HCAP_1
            
return

;***************************************                                  
turn
            movlw  .2
            movwf   scaler
turn_on            
            bcf     STATUS
,RP0       
            bsf     GPIO
,GP5            
            
            btfss   scaler
,0            
            
goto    turn_on        GPIO,GP5
turn_off            
            bcf     GPIO
,GP5
            btfsc   scaler
,0
           
            
goto    turn_off
           
            
return


             
end

發表於: 2009/6/24 23:40
頂部


Re: ADC轉換3
#10
新會員
新會員


謝謝大大
又讓小弟多學一個方法 讚拉^^

可不可以麻煩這位大大,幫小弟看一下 "ADC轉換2 a691228 今天 14:47:38 "
的這個程式,測了很久還是一直同頻率,在想是不是比對次數過少,不知行不行 麻煩您??
謝謝優!!

發表於: 2009/6/21 22:48
頂部



(1) 2 »



:::

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... ]

教育訓練中心

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