PIC Vietnam

PIC Vietnam (http://www.picvietnam.com/forum/index.php)
-   Cơ bản về vi điều khiển và PIC (http://www.picvietnam.com/forum/forumdisplay.php?f=8)
-   -   Giúp về hiển thị LCD (http://www.picvietnam.com/forum/showthread.php?t=11778)

pttbkit 12-11-2011 10:53 AM

Giúp về hiển thị LCD
 
2 Attachment(s)
Mình có 1 chương trình đếm tần số sử dụng timer1 để hiển thị trên LCD nhưng không hiểu sao LCD lại hiển thị trên cả 2 dòng va 2 dong khong bang nhau. Lam sao de hien thi 1 dong? Ai giúp mình với!!!

CODE:


#include <pic.h>
#include <delay.c>

__CONFIG(WDTDIS&PWRTEN&LVPDIS&XT);

unsigned char kontrol;

//---------------------------------------------
// CCP1 INTERRUPT
//---------------------------------------------
void interrupt interrupt(void){
TMR1H=0; TMR1L=0;
GIE=0;

control=1;

CCP1IF=0;
GIE=1;
}

//---------------------------------------------
// MAIN PROGRAM
//---------------------------------------------
main(void)
{
unsigned const char number[10]={0x3F,0x06,0x5B,
0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F};
unsigned char select[4]={1,2,4,8};
unsigned int counter,value,remainder1,remainder2;
float frekans;
unsigned char a,i,display[5],data;

TRISA=0x00; // khoi tao PORTA la output
TRISB=0x08; // 00001000 bit B4 cua PORTB la ngo ra
CMCON=0x07; // vo hieu hoa analog I/O

cont=0;
PORTA=0; PORTB=0

CCP1IE=1; //CHO PHEP NGAT CCP1

CCP1CON=0b00000110;

T1CON=0b00100001;

GIE=1;
PEIE=1;

for(;;){


counter=256*CCPR1H+CCPR1L;

if(control==1)frequency=100000000/counter;
if(kontrol==0)frequency=0;

if(counter<10000)frequency=0;

control=0;

for(a=0;a<25;a++){

value=(int)frequency;

display[1]=value/1000;
remainder1=value-display[1]*1000;

display[2]=remainder1/100;
remainder2=remainder1-display[2]*100;

display[3]=remainder2/10;
display[4]=remainder2-display[3]*10;


for(i=0;i<4;i++){
PORTB=0;
PORTA=0;

data=number[display[i+1]];
PORTB=data&0x07;
data=data<<1;
PORTB=PORTB|(data&0xF0);

PORTA=select[i];
DelayMs(3);
}
}
}
}

anhquang206 16-11-2011 09:11 AM

chụp cái hình này bạn có nhìn thấy cái j không mà cũng up lên

ladykiller 20-11-2011 01:44 AM

tình hình là lúc trước em có viết 1 chương trình khởi tạo cho LCD nhưng phải tội là em chỉ được học ASM nên post lên các bác đừng cười
code:
KHOITAOLCD
BANKSEL PORTB
MOVLW 0X38
MOVWF PORTB
CALL LENH


MOVLW 0X38
MOVWF PORTB
CALL LENH
MOVLW 0X0C
MOVWF PORTB
CALL LENH
MOVLW 0X06
MOVWF PORTB
CALL LENH
MOVLW 0X01
MOVWF PORTB
CALL LENH
RETURN
;-------------------------------------------------------------
LENH
MOVWF PORTB
MOVLW 0X0
MOVWF PORTD
BSF PORTD,2
BCF PORTD,2
CALL CHOLCD
RETURN
;-------------------------------------------------------------
DULIEU
MOVWF PORTB
BSF PORTD,0
BCF PORTD,1
BCF PORTD,2
BSF PORTD,2 ;E=1
BCF PORTD,2
CALL CHOLCD
RETURN
;----------------------------------------------------------------
CHOLCD

BANKSEL PORTD
CLRF PORTB
BCF PORTD,0
BSF PORTD,1
BCF PORTD,2
BSF PORTD,2
BCF PORTD,2
CHO
BTFSC PORTB,7
GOTO CHO
RETURN
;----------------------------------------------------------------

em chỉ post mấy cái chương trình con thôi
Àh cho hỏi luôn ở đây có ai học Cao Thắng không ??

rocket42 20-11-2011 11:56 AM

R ko nhìn thấy chuơng trình khởi tạo LCD của bạn đâu.
Lỗi này chắc là do chuơng trình khới tạo LCD của bạn có vấn đề
R khuyên bạn khi post chuơng trình lên để mọi người trợ giúp thì post all chưong trình hoặc bạn nén vào file nào đó rồi gửi lên.
Tiếp theo là chuơng trình viết của bạn nên có comment chi tiết. Đó là các thể hiện bạn là ngưởi viết chuơng trình cẩn thận và chuyên nghiệp
Bạn post chuơng trình khởi tạo LCD của mình lên sẽ có ng giúp bạn
thank! chúc vui

ladykiller 20-11-2011 12:03 PM

@@
tóm lại bạn rocket42 củng chẳng giúp gì được. hình như reply bạn củng chung chung cho có và rất là huề vốn
^^


Múi giờ GMT. Hiện tại là 07:30 PM.

Tên diễn đàn: vBulletin Version 3.8.11
Được sáng lập bởi Đoàn Hiệp.
Copyright © PIC Vietnam