PIC Vietnam

Go Back   PIC Vietnam > Microchip PIC > Cơ bản về vi điều khiển và PIC

Tài trợ cho PIC Vietnam
Trang chủ Đăng Kí Hỏi/Ðáp Thành Viên Lịch Bài Trong Ngày Vi điều khiển

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

Trả lời
 
Ðiều Chỉnh Xếp Bài
Old 12-09-2011, 04:27 PM   #1
manhdt3
Nhập môn đệ tử
 
Tham gia ngày: Oct 2009
Bài gửi: 8
:
giúp em hiển thị lcd 20x4 với

em viết code bằng asembly chay với lcd 16x2 chạy rùi nhưng mà khi hiển thị lên lcd 20x4 thì lại không chạy được mặc dù em đã set địa chỉ .Các bác chỉ giúp em với. thank các bác nhiều
PROCESSOR P16F877A
INCLUDE<P16F877A.INC>

DELAY2 EQU 0X20
DELAY3 EQU 0X21
DELAY4 EQU 0X22
ORG 0X00
GOTO START

CLOCK
MOVLW 0X02
MOVWF PORTB ; CHAN E LEN MUC 1

MOVLW 0X00
MOVWF PORTB ; CHAN E XUONG MUC 0
RETLW 0

DELAY3S
CLRF TMR0
CLRF INTCON
BSF STATUS,RP0
CLRF 0X81
BCF STATUS,RP0
LOOPP
MOVF TMR0,0
XORLW .3
BTFSS STATUS,Z
GOTO LOOPP
BCF STATUS,RP0
RETLW 0


DELAY1
MOVLW D'2'
MOVWF DELAY2

CHO
MOVLW D'1'
MOVWF DELAY3
MOVLW D'1'
MOVWF DELAY4
D1
DECFSZ DELAY3
GOTO $+2
DECFSZ DELAY4
GOTO D1
DECFSZ DELAY2
GOTO CHO

RETLW 0
START

BCF STATUS,RP1
BSF STATUS,RP0

CLRF TRISB
CLRF TRISD

BCF STATUS,RP0
CLRF PORTB
CLRF PORTD

MOVLW 0X38
MOVWF PORTD ; CHON 8BIT 2 DONG FONT 5X8
CALL CLOCK

CALL DELAY1 ; CHO THUC HIEN XONG

MOVLW 0X0E
MOVWF PORTD
CALL CLOCK
CALL DELAY1 ; CHON HIEN THI HIEN THI CON TRO

; CHON CHE DO HIEN THI CHU THEO HUONG
MOVLW 0X04
MOVWF PORTD ; HIEN THI GIAM KHONG DAY CHU
CALL CLOCK
CALL DELAY1

; BAT DAU
MOVLW 0X01 ;
MOVWF PORTD
CALL CLOCK
CALL DELAY1

LPP
MOVLW 0xC9
MOVWF PORTD
CALL CLOCK
CALL DELAY1

BSF PORTB,0

MOVLW 0X55
MOVWF PORTD
MOVLW 0X03
MOVWF PORTB
MOVLW 0X01
MOVWF PORTB

CALL DELAY1

GOTO LPP
Hình Kèm Theo
File Type: jpg 1.jpg (149.0 KB, 11 lần tải)
manhdt3 vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 13-09-2011, 01:36 PM   #2
tdm
Đệ tử 7 túi
 
Tham gia ngày: May 2005
Bài gửi: 258
:
Trích:
Nguyên văn bởi manhdt3 View Post
em viết code bằng asembly chay với lcd 16x2 chạy rùi nhưng mà khi hiển thị lên lcd 20x4 thì lại không chạy được mặc dù em đã set địa chỉ .Các bác chỉ giúp em với. thank các bác nhiều
PROCESSOR P16F877A
INCLUDE<P16F877A.INC>

DELAY2 EQU 0X20
DELAY3 EQU 0X21
DELAY4 EQU 0X22
ORG 0X00
GOTO START

CLOCK
MOVLW 0X02
MOVWF PORTB ; CHAN E LEN MUC 1

MOVLW 0X00
MOVWF PORTB ; CHAN E XUONG MUC 0
RETLW 0

DELAY3S
CLRF TMR0
CLRF INTCON
BSF STATUS,RP0
CLRF 0X81
BCF STATUS,RP0
LOOPP
MOVF TMR0,0
XORLW .3
BTFSS STATUS,Z
GOTO LOOPP
BCF STATUS,RP0
RETLW 0


DELAY1
MOVLW D'2'
MOVWF DELAY2

CHO
MOVLW D'1'
MOVWF DELAY3
MOVLW D'1'
MOVWF DELAY4
D1
DECFSZ DELAY3
GOTO $+2
DECFSZ DELAY4
GOTO D1
DECFSZ DELAY2
GOTO CHO

RETLW 0
START

BCF STATUS,RP1
BSF STATUS,RP0

CLRF TRISB
CLRF TRISD

BCF STATUS,RP0
CLRF PORTB
CLRF PORTD

MOVLW 0X38
MOVWF PORTD ; CHON 8BIT 2 DONG FONT 5X8
CALL CLOCK

CALL DELAY1 ; CHO THUC HIEN XONG

MOVLW 0X0E
MOVWF PORTD
CALL CLOCK
CALL DELAY1 ; CHON HIEN THI HIEN THI CON TRO

; CHON CHE DO HIEN THI CHU THEO HUONG
MOVLW 0X04
MOVWF PORTD ; HIEN THI GIAM KHONG DAY CHU
CALL CLOCK
CALL DELAY1

; BAT DAU
MOVLW 0X01 ;
MOVWF PORTD
CALL CLOCK
CALL DELAY1

LPP
MOVLW 0xC9
MOVWF PORTD
CALL CLOCK
CALL DELAY1

BSF PORTB,0

MOVLW 0X55
MOVWF PORTD
MOVLW 0X03
MOVWF PORTB
MOVLW 0X01
MOVWF PORTB

CALL DELAY1

GOTO LPP
em sửa lại như sau thì nó chạy thôi:
Code:
PROCESSOR   16F877A
            #INCLUDE "P16F877A.INC"
            __CONFIG  0x3F72;cau hinh pic

DELAY2 EQU 0X20
DELAY3 EQU 0X21
DELAY4 EQU 0X22
ORG 0X00
GOTO START

CLOCK
BSF PORTB,1
call DELAY1
BcF PORTB,1
RETLW 0

DELAY3S
CLRF TMR0
CLRF INTCON
BSF STATUS,RP0
CLRF 0X81
BCF STATUS,RP0
LOOPP
MOVF TMR0,0
XORLW .3
BTFSS STATUS,Z
GOTO LOOPP
BCF STATUS,RP0
RETLW 0


DELAY1
MOVLW .4
MOVWF DELAY3
CHO
MOVLW .255
MOVWF DELAY2
DECFSZ DELAY2
GOTO $-1
DECFSZ DELAY3
GOTO CHO
RETLW 0
START

BCF STATUS,RP1
BSF STATUS,RP0

CLRF TRISB
CLRF TRISD

BCF STATUS,RP0
CLRF PORTB
CLRF PORTD

MOVLW 0X38
MOVWF PORTD ; CHON 8BIT 2 DONG FONT 5X8
CALL CLOCK

CALL DELAY1 ; CHO THUC HIEN XONG

MOVLW 0X0E
MOVWF PORTD
CALL CLOCK
CALL DELAY1 ; CHON HIEN THI HIEN THI CON TRO

; CHON CHE DO HIEN THI CHU THEO HUONG
MOVLW 0X04
MOVWF PORTD ; HIEN THI GIAM KHONG DAY CHU
CALL CLOCK
CALL DELAY1

; BAT DAU
MOVLW 0X01 ;xoa man hinh
MOVWF PORTD
CALL CLOCK
CALL DELAY1

LPP
BCF PORTB,0;hieu la lenh
MOVLW 0xC9;hang 2 cot 9
MOVWF PORTD
CALL CLOCK
BSF PORTB,0;hieu la data
MOVLW 0X55
MOVWF PORTD
CALL CLOCK
CALL DELAY1
GOTO LPP
end
Hình Kèm Theo
File Type: jpg lcd.jpg (175.3 KB, 5 lần tải)
__________________
viết chương trình cho vdk chạy ổn định là cả một vấn đề.
tdm vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 14-09-2011, 02:06 AM   #3
manhdt3
Nhập môn đệ tử
 
Tham gia ngày: Oct 2009
Bài gửi: 8
:
thank bác nhiều em thử được rùi ah!
manhdt3 vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 03-12-2011, 05:13 PM   #4
ichitea606
Đệ tử 2 túi
 
Tham gia ngày: Nov 2010
Bài gửi: 26
:
Red face lcd 20x4 mạch thực tế không hiển thị được

chào các pác: mình có vấn đề như vầy mong các pác nhiệt tình giúp đỡ với, lcd 20x4 mình mô phỏng thì ok nhưng khi làm thực tế thì k hiển thị dc chữ đôi khi hiển thị hàng loạt chữ tàu chạy lung tung với lcd16x2 ráp vào mạch lại chạy bình thường, mình nghỉ chắc do phần khởi tạo lcd chưa đúng thử hoài mà vẫn không được,mong được chỉ giúp
#include <16F877A.h>
#include <DEF_16F877A.h>
#device *=16 adc=10
#fuses NOWDT,NOPROTECT,NOLVP,HS,NOPUT,NODEBUG, NOBROWNOUT,NOCPD, NOWRT
#use delay(clock=20000000)
#define RS RD6
#define RW RD5
#define E RD4

#define LCD PORTB
unsigned char pic[]="PIC 16F877A";
int16 i;
void CONTROL(void)
{
RS = 0;
RW = 0;
E = 1;
E = 0;
delay_ms(1);
}
void WRITE(void)
{
RS = 1;
RW = 0;
E = 1;
E = 0;
delay_ms(1);
}

VOID TEN (VOID)
{
LCD = 0x80;
CONTROL();
i=0;
WHILE (i<=11)
{

LCD = pic[i];
WRITE();
i++;
}
}
void main(void)
{
set_tris_B(0);
set_tris_D(0);
delay_ms(100);

LCD = 0x38;
CONTROL();
DELAY_MS(50);
LCD = 0x38;
CONTROL();
DELAY_MS(1);
LCD = 0x38;
CONTROL();
LCD = 0x0C;
CONTROL();
LCD = 0x01;
CONTROL();
LCD = 0x06;
CONTROL();


WHILE(1)
{
TEN();
}
}
ichitea606 vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 03-12-2011, 11:20 PM   #5
tdm
Đệ tử 7 túi
 
Tham gia ngày: May 2005
Bài gửi: 258
:
Trích:
Nguyên văn bởi ichitea606 View Post
chào các pác: mình có vấn đề như vầy mong các pác nhiệt tình giúp đỡ với, lcd 20x4 mình mô phỏng thì ok nhưng khi làm thực tế thì k hiển thị dc chữ đôi khi hiển thị hàng loạt chữ tàu chạy lung tung với lcd16x2 ráp vào mạch lại chạy bình thường, mình nghỉ chắc do phần khởi tạo lcd chưa đúng thử hoài mà vẫn không được,mong được chỉ giúp
#include <16F877A.h>
#include <DEF_16F877A.h>
#device *=16 adc=10
#fuses NOWDT,NOPROTECT,NOLVP,HS,NOPUT,NODEBUG, NOBROWNOUT,NOCPD, NOWRT
#use delay(clock=20000000)
#define RS RD6
#define RW RD5
#define E RD4

#define LCD PORTB
unsigned char pic[]="PIC 16F877A";
int16 i;
void CONTROL(void)
{
RS = 0;
RW = 0;
E = 1;
E = 0;
delay_ms(1);
}
void WRITE(void)
{
RS = 1;
RW = 0;
E = 1;
E = 0;
delay_ms(1);
}

VOID TEN (VOID)
{
LCD = 0x80;
CONTROL();
i=0;
WHILE (i<=11)
{

LCD = pic[i];
WRITE();
i++;
}
}
void main(void)
{
set_tris_B(0);
set_tris_D(0);
delay_ms(100);

LCD = 0x38;
CONTROL();
DELAY_MS(50);
LCD = 0x38;
CONTROL();
DELAY_MS(1);
LCD = 0x38;
CONTROL();
LCD = 0x0C;
CONTROL();
LCD = 0x01;
CONTROL();
LCD = 0x06;
CONTROL();


WHILE(1)
{
TEN();
}
}
thử lại xem sao:
Code:
#include    <16F877A.h>
#include    <DEF_16F877A.h>
#device *=16 adc=10
#fuses NOWDT,NOPROTECT,NOLVP,HS,NOPUT,NODEBUG, NOBROWNOUT,NOCPD, NOWRT
#use     delay(clock=20000000)
#define RS        RD6
#define RW        RD5
#define E         RD4

#define LCD       PORTB
unsigned char pic[]="PIC 16F877A";
int16 i;
void CONTROL(void)
   {
      RS = 0;
      RW = 0;
      E  = 1;
      delay_ms(1);
      E  = 0;
      }
void WRITE(void)
      {
         RS = 1;
         RW = 0;
         E  = 1;
        delay_ms(1);
         E  = 0;
         
      }

VOID TEN (VOID)
      {
LCD = 0x80;
CONTROL();
            i=0;
            WHILE (i<=11)
        {

                   LCD = pic[i];
                   WRITE();
                   i++;
}
              }
void main(void)
{
          set_tris_B(0);
          set_tris_D(0);
          delay_ms(500);
          LCD = 0x38;
         CONTROL();
         LCD = 0x0E;
         CONTROL();
LCD = 0x06;
          CONTROL();
         LCD = 0x01;
         CONTROL();
         TEN();

WHILE(1)
    {
    }
    }
__________________
viết chương trình cho vdk chạy ổn định là cả một vấn đề.
tdm vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 04-12-2011, 09:28 AM   #6
ichitea606
Đệ tử 2 túi
 
Tham gia ngày: Nov 2010
Bài gửi: 26
:
Unhappy

cám ơn bạn nhưng cũng thế ah, không hiện được chữ,hiện 2 dòng màu đen thui,y như chỉ có mỗi nguồn thôi,bí wa lên tìm thầy thầy đưa cho code làm hiển thị chữ,mô phỏng thì bình thường nhưng khi ráp thực tế LCD này từ 20x4 bây giờ chỉ con lại 10x2,nghĩa chữ cách chữ 1 ký tự (A B C) TDM biết chỉ giùm với
#include <16f877a.h>
#include <DEF_16F877A.h>
#DEVICE *=16 ADC=10
#fuses NOWDT,NOPROTECT,NOLVP,HS,NOPUT,NODEBUG, NOBROWNOUT,NOCPD, NOWRT
#use delay(clock=12000000)
#define RS RD4
#define RW RD5
#define E RD6
#define lcd portb


//int SEC,MIN,HOUR,DAY,WEEK,MONTH,YEAR,TEST;
//int SECI,MINI,HOURI,DAYI,WEEKI,MONTHI,YEARI,TESTI,SECT EMP,CONTROL;


const unsigned char TEMP[]="TEMPERATURE ";
INT I;
void COMMON_LCD(VOID)
{ RW=0;
E=0;
E=1;
DELAY_MS(1);
RW=1;
RS=0;
E=0;
DELAY_MS(1);
E=1;
DELAY_MS(10); }

void COMMAND_WRITE(VOID) //WRITE DATA TO CONTROL LCD
{ RS=0;
COMMON_LCD(); }

void DATAWRITE(VOID) //WRITE DATA TO LCD TO DISPLAY
{ RS=1;
COMMON_LCD(); }

VOID SETUP_LCD (VOID)
{ E=1;
RS=0;
RW=0;

LCD=(0x38); //SETUP LCD DISPLAY TWO LINES
COMMAND_WRITE();
DELAY_MS(50);
LCD=(0x38); //SETUP LCD DISPLAY TWO LINES
COMMAND_WRITE();
DELAY_MS(1);
LCD=(0x38);
COMMAND_WRITE();
LCD=(0x0C); //SETUP DISPLAY CONTROL
COMMAND_WRITE();
LCD=(0x01); //CLEAR DISPLAY
COMMAND_WRITE();
LCD=(0x06);
COMMAND_WRITE();

}
//XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXXXXXXXXXXXXXX

void main()
{
SET_TRIS_B(0x00); //SETUP PORT B IS OUTPUT
SET_TRIS_D(0x00);
SETUP_LCD ();
LCD=(0x80); //SETUT ADDRESS FOR FIRST LINE
COMMAND_WRITE();
DELAY_MS(50);
WHILE(I<=11)// TO DISPLAY A TEXT "TEMPERATURE"

{
LCD=TEMP[I];
DATAWRITE();
DELAY_MS(100);
I++;
}
}
ichitea606 vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 04-12-2011, 04:13 PM   #7
ichitea606
Đệ tử 2 túi
 
Tham gia ngày: Nov 2010
Bài gửi: 26
:
Cám ơn pac TDM nhiều lúc đầu nạp code của bạn vào không chạy được là do các chân hàn không được tốt,loay hoay mãi rút ra làm lại thì mạch chạy được tới 99%,vẫn còn 1 ký tự thừa hình chữ tàu nằm cuối cùng,dù sao cũng cảm ơn pác nhiệt tình giúp đỡ
ichitea606 vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Trả lời


Quyền Sử Dụng Ở Diễn Ðàn
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is Mở
Smilies đang Mở
[IMG] đang Mở
HTML đang Tắt

Chuyển đến


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


Được sáng lập bởi Đoàn Hiệp
Powered by vBulletin®
Page copy protected against web site content infringement by Copyscape
Copyright © PIC Vietnam