PIC Vietnam

PIC Vietnam (http://www.picvietnam.com/forum/index.php)
-   Các ngôn ngữ lập trình khác (CCS C, HT PIC,...) (http://www.picvietnam.com/forum/forumdisplay.php?f=12)
-   -   Thắc mắc về code cho PIC16F877 (http://www.picvietnam.com/forum/showthread.php?t=3145)

dientudong 19-11-2008 05:24 PM

Thắc mắc về code cho PIC16F877
 
#include <16F877.h>
#fuses HS,NOWDT,NOPROTECT,NOLVP
#use delay(clock=20000000)
int k ;
void main()
{
set_tris_c(0);
do
{
for(k=0;k<15;k++)
{
delay_ms(100);
PORTC=k ;
}
}
while (1);
}
Các bạn vui lòng cho mình hỏi :sao đoạn code mình viết bằng CCS4.068 không biên dịch được,nó cứ báo lỗi chỗ PORTC.Mình làm cả ngày nay mà chẳng được gì hết !Mong các bạn chỉ giúp .Rất cảm ơn.

LeDuc 19-11-2008 06:19 PM

Trích:

Nguyên văn bởi dientudong (Post 20592)
#include <16F877.h>
#fuses HS,NOWDT,NOPROTECT,NOLVP
#use delay(clock=20000000)
int k ;
void main()
{
set_tris_c(0);
do
{
for(k=0;k<15;k++)
{
delay_ms(100);
PORTC=k ;
}
}
while (1);
}
Các bạn vui lòng cho mình hỏi :sao đoạn code mình viết bằng CCS4.068 không biên dịch được,nó cứ báo lỗi chỗ PORTC.Mình làm cả ngày nay mà chẳng được gì hết !Mong các bạn chỉ giúp .Rất cảm ơn.

Vì nó kô hiểu portC là gì cả , bạn phải định nghĩa portC .
Code:

#byte PORTC = 0x07

dientudong 19-11-2008 07:36 PM

cam on bạn đã chỉ bảo,nhưng 0x07 là sao vậy bạn,mình còn yếu lắm,mong bạn chỉ bảo.

dientudong 19-11-2008 07:42 PM

Vậy mình có cần định nghĩa trisc=87h khong bạn

Mr.Bi 19-11-2008 07:50 PM

Trích:

Nguyên văn bởi dientudong (Post 20596)
cam on bạn đã chỉ bảo,nhưng 0x07 là sao vậy bạn,mình còn yếu lắm,mong bạn chỉ bảo.

u lập trình C cho 8051 oy chứ ! nếu đã làm oy thì phải bit 0x07 là địa chỉ của PORTC . Choy oy.

dientudong 19-11-2008 08:44 PM

Code:

#include <16F877A.h>                                                            //
#use delay(clock=20000000)                                                      //
#include <lcd.c>                                                                //
float vantoc,soxung;                                                            //
int8 a,b,c,d,a1;                                                                //
int16 sovong,i;                                                                //
/////////////////ket thuc phan khai bao thu vien va cac bien//////////////////////
////////////khai bao va chuong trinh ngat cho TIMER1/////////////////////
#int_TIMER1                                                            //
void TIMER1_isr(void)                                                  //
 {                                                                    //
  soxung=get_timer0();      //Lay so xung ma Timer0 dem              //
  set_timer1(65535);        // Trong 1ms                              //
  if(tmr1if==1)            //neu Timer1 tran thi co tmr1if =1        //
    {                                                                  //
      intcon=0;              //stop ngat (reset cac thong so ngat )    //
      a1=1;                  //cho a1=1                                //
    }                                                                  //
 }                                                                    //
//////////////////////////ket thuc phan TIMER1///////////////////////////
//////////////////////////bat dau chuong trinh chinh////////////////////////////


void main()
{
  trisa=0xFF;                        //set RA4 input,chan lay xung tu Encoder
  trisb=0;                          //dinh huong portB la ngo ra
  trisc=0;                          //dinh huong portC la ngo ra
  trisd=0;                          //dinh huong portD la ngo ra
  lcd_init();                        //ham khoi tao LCD
  lcd_gotoxy(1,1);                  //den vi tri hang 1 cot 1
  lcd_putc("Beginning....");        //in ra beginning....
  delay_ms(1000);                    // tao tre 1s
  lcd_putc('\f');                    //dau cham nhap nhay
  setup_timer_2(T2_DIV_BY_2,254,1);  //tao f(pwm)=9775Hz hay T(pwm)=0.1023ms
  setup_ccp1(CCP_PWM);              //thiet lap chan CCP1 o che do PWM
  for(i=0;i<1000;i++)                //tu 0 den 1000 thi toc do tang dan
    {
      set_pwm1_duty(i);              // Toc do tang dan
      delay_ms(1);
      set_timer0(0);                //lam moi Timer0 de chuan bi dem xung
      set_timer1(65535);            //dat gia tri cho Timer1_khoang 1s
      setup_timer_0(RTCC_EXT_H_TO_L|RTCC_DIV_1);//setupTimer0_demcanhxuongxungEncoder
      setup_timer_1(T1_INTERNAL|T1_DIV_BY_1);       
      enable_interrupts(INT_TIMER1);  //cho phep ngat Timer1
      enable_interrupts(GLOBAL);      //cho phep ngat toan cuc
      delay_ms(10);  //

      if(a1==1)  //cu moi lan Timer1 ngat thi a1=1 ,roi tinh vantoc,hien thi
        {
          vantoc=((float)(60*soxung)/(0.01*100));    //Tinh van toc
          a=vantoc/1000;                            //chia lay phan nguyen
          b=(int)(vantoc-1000*a)/100;                //chia lay phan nguyen
          c=(int)(vantoc-1000*a-100*b)/10;          //chia lay phan nguyen
          d=(int)vantoc%10;                          //chia lay phan du
          ///////////////////toi phan hien thi LCD/////////////////////////////
          lcd_gotoxy(3,3);        //den vi tri hang 3 cot 3
          lcd_putc(a+48);          //in ra a
          lcd_gotoxy(3,4);        //den vi tri hang 3 cot 4
          lcd_putc(b+48);          //in ra b
          lcd_gotoxy(3,5);        //den vi tri hang 3 cot 5
          lcd_putc(c+48);          //in ra c
          lcd_gotoxy(3,6);        //den vi tri hang 3 cot 6
          lcd_putc(d+48);          //in ra d
          lcd_gotoxy(4,3);        //den vi tri hang 4 cot 3
          lcd_putc("vong/phut");  //in ra "vong/phut"
          lcd_gotoxy(2,2);        //den vi tri hang 2 cot 2
          lcd_putc("toc do dc");  //in ra "toc do dc"
          delay_ms(5);            //
          tmr0if=0;tmr1if=0;      //Xoa co tran cua Timer0 va Timer1
        }
    }
}

Các bạn cho mình hỏi,sao khi biên dịch CCS nó cứ báo lỗi trong file lcd,mong các bạn chỉ bảo.Rất cảm ơn !

namqn 19-11-2008 10:33 PM

Trích:

Nguyên văn bởi dientudong (Post 20605)
...
Các bạn cho mình hỏi,sao khi biên dịch CCS nó cứ báo lỗi trong file lcd,mong các bạn chỉ bảo.Rất cảm ơn !

Nếu bạn được hỏi câu này thì bạn trả lời ra sao, khi người hỏi không cho biết trong file "lcd.c" có những gì?

Thân,

dientudong 20-11-2008 01:56 AM

Code:

LCDD.C                                ////
////                Driver for common LCD modules                    ////
////                                                                  ////
////  lcd_init()  Must be called before any other function.          ////
////                                                                  ////
////  lcd_putc(c)  Will display c on the next position of the LCD.    ////
////                    The following have special meaning:          ////
////                      \f  Clear display                            ////
////                      \n  Go to start of second line              ////
////                      \b  Move back one position                  ////
////                                                                  ////
////  lcd_gotoxy(x,y) Set write position on LCD (upper left is 1,1)    ////
////                                                                  ////
////  lcd_getc(x,y)  Returns character at position x,y on LCD        ////
////                                                                  ////
///////////////////////////////////////////////////////////////////////////
////        (C) Copyright 1996,2007 Custom Computer Services          ////
//// This source code may only be used by licensed users of the CCS C  ////
//// compiler.  This source code may only be distributed to other      ////
//// licensed users of the CCS C compiler.  No other use, reproduction ////
//// or distribution is permitted without written permission.          ////
//// Derivative programs created using this software in object code    ////
//// form are not restricted in any way.                              ////
///////////////////////////////////////////////////////////////////////////

// As defined in the following structure the pin connection is as follows:
//    D0  enable
//    D1  rs
//    D2  rw
//    D4  D4
//    D5  D5
//    D6  D6
//    D7  D7
//
//  LCD pins D0-D3 are not used and PIC D3 is not used.

// Un-comment the following define to use port B
// #define use_portb_lcd TRUE
struct lcd_pin_map {                // This structure is overlayed
          BOOLEAN enable;          // on to an I/O port to gain
          BOOLEAN rs;              // access to the LCD pins.
          BOOLEAN rw;              // The bits are allocated from
          BOOLEAN unused;          // low order up.  ENABLE will
          int    data : 4;        // be pin B0.
        } lcd;


#if defined use_portb_lcd
  //#locate lcd = getenv("sfr:PORTB")    // This puts the entire structure over the port
  #ifdef __pch__
    #locate lcd = 0xf81
  #else
    #locate lcd = 6
  #endif
  #define set_tris_lcd(x) set_tris_b(x)
#else
  //#locate lcd = getenv("sfr:PORTD")    // This puts the entire structure over the port
  #ifdef __pch__
    #locate lcd = 0xf83
  #else
    #locate lcd = 8
  #endif
  #define set_tris_lcd(x) set_tris_d(x)
#endif

#ifndef lcd_type
#define lcd_type 2          // 0=5x7, 1=5x10, 2=2 lines
#endif

#define lcd_line_two 0x40    // LCD RAM address for the second line


BYTE const LCD_INIT_STRING[4] = {0x20 | (lcd_type << 2), 0xc, 1, 6};
                            // These bytes need to be sent to the LCD
                            // to start it up.


                            // The following are used for setting
                            // the I/O port direction register.

struct lcd_pin_map const LCD_WRITE = {0,0,0,0,0}; // For write mode all pins are out
struct lcd_pin_map const LCD_READ = {0,0,0,0,15}; // For read mode data pins are in



BYTE lcd_read_byte() {
      BYTE low,high;
      set_tris_lcd(LCD_READ);
      lcd.rw = 1;
      delay_cycles(1);
      lcd.enable = 1;
      delay_cycles(1);
      high = lcd.data;
      lcd.enable = 0;
      delay_cycles(1);
      lcd.enable = 1;
      delay_us(1);
      low = lcd.data;
      lcd.enable = 0;
      set_tris_lcd(LCD_WRITE);
      return( (high<<4) | low);
}


void lcd_send_nibble( BYTE n ) {
      lcd.data = n;
      delay_cycles(1);
      lcd.enable = 1;
      delay_us(2);
      lcd.enable = 0;
}


void lcd_send_byte( BYTE address, BYTE n ) {

      lcd.rs = 0;
      while ( bit_test(lcd_read_byte(),7) ) ;
      lcd.rs = address;
      delay_cycles(1);
      lcd.rw = 0;
      delay_cycles(1);
      lcd.enable = 0;
      lcd_send_nibble(n >> 4);
      lcd_send_nibble(n & 0xf);
}


void lcd_init() {
    BYTE i;
    set_tris_lcd(LCD_WRITE);
    lcd.rs = 0;
    lcd.rw = 0;
    lcd.enable = 0;
    delay_ms(15);
    for(i=1;i<=3;++i) {
      lcd_send_nibble(3);
      delay_ms(5);
    }
    lcd_send_nibble(2);
    for(i=0;i<=3;++i)
      lcd_send_byte(0,LCD_INIT_STRING[i]);
}


void lcd_gotoxy( BYTE x, BYTE y) {
  BYTE address;

  if(y!=1)
    address=lcd_line_two;
  else
    address=0;
  address+=x-1;
  lcd_send_byte(0,0x80|address);
}

void lcd_putc( char c) {
  switch (c) {
    case '\f'  : lcd_send_byte(0,1);
                  delay_ms(2);
                                          break;
    case '\n'  : lcd_gotoxy(1,2);        break;
    case '\b'  : lcd_send_byte(0,0x10);  break;
    default    : lcd_send_byte(1,c);    break;
  }
}

char lcd_getc( BYTE x, BYTE y) {
  char value;

    lcd_gotoxy(x,y);
    while ( bit_test(lcd_read_byte(),7) ); // wait until busy flag is low
    lcd.rs=1;
    value = lcd_read_byte();
    lcd.rs=0;
    return(value);
}

Dây là file lcd mà lúc biên dịch nó tự xuất hiện ra .Mong các bạn chỉ bảo.Mình cũng không hiểu nổi.tại mới tìm tòi nên mới tệ vậy.Mình cung không rõ là file lcd này và file lcd_4bit.c và lcd_lib_4bit.c mà mình thấy trên diễn đàn có khác gì không.Mình nghe nói là khai báo lcd , thì cứ khai báo vậy chứ không hiểu thế nào.Mong các bạn chỉ bảo .RẤT BIẾT ƠN CÁC BẠN

namqn 20-11-2008 02:55 AM

Trích:

Nguyên văn bởi dientudong (Post 20617)
...
Dây là file lcd mà lúc biên dịch nó tự xuất hiện ra .Mong các bạn chỉ bảo.Mình cũng không hiểu nổi.tại mới tìm tòi nên mới tệ vậy.Mình cung không rõ là file lcd này và file lcd_4bit.c và lcd_lib_4bit.c mà mình thấy trên diễn đàn có khác gì không.Mình nghe nói là khai báo lcd , thì cứ khai báo vậy chứ không hiểu thế nào.Mong các bạn chỉ bảo .RẤT BIẾT ƠN CÁC BẠN

Nếu file "lcd.c" này tự xuất hiện khi bạn biên dịch code của bạn, vậy dòng #include <lcd.c> là bạn tự thêm vào hay do CCS C thêm vào?

File "lcd.c" được CCS C tạo ra có phải nằm trong thư mục của project mà bạn đang biên dịch? Bạn nên chú ý phân biệt 2 cách viết #include <lcd.c> và #include "lcd.c".

Các file "lcd_4bit.c" và "lcd_lib_4bit.c" có thể là thư viện của một trình biên dịch nào đó, cũng có thể là do người dùng tự tạo ra.

Thân,

dientudong 20-11-2008 06:46 PM

#include <lcd.c>đây là file mình khai báo lúc đầu.Mình chưa rõ chỗ này: "< Bạn nên chú ý phân biệt 2 cách viết #include <lcd.c> và #include "lcd.c".>"lắm mong bạn chỉ bảo thêm.
File "lcd.c" được CCS C tạo ra đúng là nằm trong thư mục của project đang biên dịch.

namqn 20-11-2008 07:18 PM

Trích:

Nguyên văn bởi dientudong (Post 20639)
#include <lcd.c>đây là file mình khai báo lúc đầu.Mình chưa rõ chỗ này: "< Bạn nên chú ý phân biệt 2 cách viết #include <lcd.c> và #include "lcd.c".>"lắm mong bạn chỉ bảo thêm.
File "lcd.c" được CCS C tạo ra đúng là nằm trong thư mục của project đang biên dịch.

Làm sao bạn biết được cần phải gộp file "lcd.c" do CCS C lúc ban đầu? Vì khi CCS C chưa tạo ra file đó thì bạn làm sao biết được tên của nó là gì.

Về chỗ bạn chưa rõ, bạn đọc tài liệu hướng dẫn của CCS C, mục nói về #include. Link download ở đây: http://www.ccsinfo.com/downloads/ccs_c_manual.pdf. Nếu dùng #include <lcd.c> thì thư mục của project sẽ được tìm kiếm sau cùng (theo tài liệu hướng dẫn của CCS C), do đó nếu một trong những thư mục được CCS C dùng để tìm kiếm tập tin gộp (đọc tài liệu hướng dẫn để biết chúng được thiết lập ở đâu) cũng có một tập tin tên là "lcd.c" thì CCS C sẽ dùng tập tin đó, chứ không phải tập tin vừa được tạo trong thư mục của project đang biên dịch. Và hiện thời, chúng ta chưa biết nội dung của tập tin (nếu có) đó.

Thân,

dientudong 20-11-2008 10:17 PM

các bạn cho mình hỏi là "khi mở CCS lên,vào chọn projiectwizard,rồi chọn loại Pic,có cần chọn luôn các thông số khác như :(timer,Lcd,...) luôn không hay là cứ Ok rồi viết chương trình của mình.

dientudong 20-11-2008 11:24 PM

Bạn à ,sao mình nghe nói là #include<lcd.c> dùng để khai báo các hàm hay chương trình con cho LCD

dientudong 20-11-2008 11:44 PM

Pic6F877A
các bạn cho mình hỏi :#byte PORTC = 0x07 có ý nghĩa là gán giá trị 0x07 vào biến PORTC
chứ đâu phải định nghĩa PORTC ở địa chỉ 0x07.vậy #BYTE portB=0xC6 thì hiểu thế nào?0xC6 đâu phải địa chỉ của portB

dientudong 20-11-2008 11:59 PM

vậy là mình bỏ dòng này đi phải không bạn#include <lcd.c>

dientudong 21-11-2008 12:30 AM

Bạn Nam nói <Làm sao bạn biết được cần phải gộp file "lcd.c" do CCS C lúc ban đầu? Vì khi CCS C chưa tạo ra file đó thì bạn làm sao biết được tên của nó là gì.
Về chỗ bạn chưa rõ, bạn đọc tài liệu hướng dẫn của CCS C, mục nói về #include. Link download ở đây: http://www.ccsinfo.com/downloads/ccs_c_manual.pdf. Nếu dùng #include <lcd.c> thì thư mục của project sẽ được tìm kiếm sau cùng (theo tài liệu hướng dẫn của CCS C), do đó nếu một trong những thư mục được CCS C dùng để tìm kiếm tập tin gộp (đọc tài liệu hướng dẫn để biết chúng được thiết lập ở đâu) cũng có một tập tin tên là "lcd.c" thì CCS C sẽ dùng tập tin đó, chứ không phải tập tin vừa được tạo trong thư mục của project đang biên dịch. Và hiện thời, chúng ta chưa biết nội dung của tập tin (nếu có) đó.>
Cho Mình hỏi :
Vậy có phải là nếu file lcd.c mà tìm không thấy thì CCS sẽ tự tạo ra file này không bạn?

tungtot_vl 21-11-2008 10:33 AM

trong này sao lộn sộn quá nhỉ.
"các bạn cho mình hỏi là "khi mở CCS lên,vào chọn projiectwizard,rồi chọn loại Pic,có cần chọn luôn các thông số khác như timer,Lcd,...) luôn không hay là cứ Ok rồi viết chương trình của mình." khônh cần phải làm dài dòng như thế đau.
bạn chỉ cần soạn thảo chương trình xong vào Project/new/Manual Create. trong phần Target Device chọn pic 16f877a là xong không cần khai báo gì thêm cả. nhấn create, rồi nhất F9 để biên dịch là xong
"Bạn à ,sao mình nghe nói là #include<lcd.c> dùng để khai báo các hàm hay chương trình con cho LCD" #include<lcd.c> dùng để khai báo đường dẫn đến chương trình con, trong nó có các hàm mà bạn cần gọi ra để sử dụng trong chương trình mà bạn đang viết. các chương trình con này có thể đặt bất cứ nơi nào trong ổ cứng của bạn, miẽn là khi khai báo bạn cần chỉ đường dẫn đến nó là được. các chương trình con là do chúng ta tự tạo ra dùng để khi viết chương trình nếu cần dùng nó thì chỉ việc gọi ra để sử dụng chứ không cần viết đi viết lại cho dài dòng thôi.
Pic6F877A
các bạn cho mình hỏi :#byte PORTC = 0x07 có ý nghĩa là gán giá trị 0x07 vào biến PORTC
"chứ đâu phải định nghĩa PORTC ở địa chỉ 0x07.vậy #BYTE portB=0xC6 thì hiểu thế nào?0xC6 đâu phải địa chỉ của portB" portb có địa chỉ là 0x06 chứ không phải là 0xc6.
porta hay b đó chỉ là cái tên bạn gán cho địa chỉ của nó thôi. bạn cũng có thể gán tên của bạn là :#byte cuteo = 0x06 cũng được khi đó ví dụ cuteo = 0xff; thì các chân RC có giá trị là 1 thế thôi

tungtot_vl 21-11-2008 10:36 AM

led
 
Trích:

Nguyên văn bởi dientudong (Post 20652)
Bạn Nam nói <Làm sao bạn biết được cần phải gộp file "lcd.c" do CCS C lúc ban đầu? Vì khi CCS C chưa tạo ra file đó thì bạn làm sao biết được tên của nó là gì.
Về chỗ bạn chưa rõ, bạn đọc tài liệu hướng dẫn của CCS C, mục nói về #include. Link download ở đây: http://www.ccsinfo.com/downloads/ccs_c_manual.pdf. Nếu dùng #include <lcd.c> thì thư mục của project sẽ được tìm kiếm sau cùng (theo tài liệu hướng dẫn của CCS C), do đó nếu một trong những thư mục được CCS C dùng để tìm kiếm tập tin gộp (đọc tài liệu hướng dẫn để biết chúng được thiết lập ở đâu) cũng có một tập tin tên là "lcd.c" thì CCS C sẽ dùng tập tin đó, chứ không phải tập tin vừa được tạo trong thư mục của project đang biên dịch. Và hiện thời, chúng ta chưa biết nội dung của tập tin (nếu có) đó.>
Cho Mình hỏi :
Vậy có phải là nếu file lcd.c mà tìm không thấy thì CCS sẽ tự tạo ra file này không bạn?

tìm không thấy thì nó báo lỗi chứ làm sao nó tự tạo ra được

dientudong 21-11-2008 11:06 AM

Bạn cho mình hỏi là mình khi viết trong file lcd.c có cần phải xác định chân cho LCD luôn không.Hay là xác định chân cho LCD trong chương trình chính.

tungtot_vl 22-11-2008 10:50 AM

lcd
 
Trích:

Nguyên văn bởi dientudong (Post 20665)
Bạn cho mình hỏi là mình khi viết trong file lcd.c có cần phải xác định chân cho LCD luôn không.Hay là xác định chân cho LCD trong chương trình chính.

bạn xác định chân lcd ở đâu cũng được.
nếu đặt trong chương trình chính thì phải khai báo tên các chân trước rồi mới liên kết đến file LCD.c
vi dụ: #bit RS = porta.0
#bit RW = porta.1
#bit E = porta.2
#include<path\LCD.c> // nếu LCD. nằm trong thư viện của CCS thì không cần path

còn nếu đặt trong LCD.c thì nó phải đặt ở đầu chương trình hay nằm trên các hàm trong LCD.

dientudong 22-11-2008 10:27 PM

#include <16F877A.h> // //
#include <def_877a.h> //
#FUSES NOWDT, HS, NOPUT, NOPROTECT, NODEBUG, NOBROWNOUT, NOLVP, NOCPD, NOWRT //
#use delay(clock=20000000)
#bit RS = portd.2
#bit E = portd.3 //
#include <lcd.c> //
float vantoc,soxung; //
int8 a,b,c,d,a1; //
int16 sovong,i; //
/////////////////ket thuc phan khai bao thu vien va cac bien//////////////////////
////////////khai bao va chuong trinh ngat cho TIMER1/////////////////////
#int_TIMER1 //
void TIMER1_isr(void) //
{ //
soxung=get_timer0(); //Lay so xung ma Timer0 dem //
set_timer1(65535); // Trong 1ms //
if(tmr1if==1) //
{ //
intcon=0; //stop ngat //
a1=1; //
} //
} //
//////////////////////////ket thuc phan TIMER1///////////////////////////
//////////////////////////bat dau chuong trinh chinh////////////////////////////


void main()
{
trisa=0xFF; //set RA4 input
trisb=0;
trisc=0;
trisd=0;
lcd_init();
lcd_gotoxy(1,1);
lcd_putc("Beginning....");
delay_ms(1000);
lcd_putc('\f');
setup_timer_2(T2_DIV_BY_16,255,1);
setup_ccp1(CCP_PWM);
for(i=0;i<1024;i++) //tu 0 den 1024 thi toc do tang dan
{
set_pwm1_duty(i); // Toc do tang dan
delay_ms(1);
set_timer0(0);
set_timer1(65535);
setup_timer_0(RTCC_EXT_H_TO_L|RTCC_DIV_1); //Che do counter
setup_timer_1(T1_INTERNAL|T1_DIV_BY_1);
enable_interrupts(INT_TIMER1);
enable_interrupts(GLOBAL);
delay_ms(50); //cai vao

if(a1==1)
{
vantoc=((float)(60*soxung)/(0.01*100)); //Tinh van toc
a=vantoc/1000; //chia lay phan nguyen
b=(int)(vantoc-1000*a)/100; //chia lay phan nguyen
c=(int)(vantoc-1000*a-100*b)/10; //chia lay phan nguyen
d=(int)vantoc%10; //chia lay phan du
/////////////////////////////////hien thi LCD//////////////////
lcd_gotoxy(3,3); //den vi tri hang 3 cot 3
lcd_putc(a+48); //in ra a
lcd_gotoxy(3,4); //den vi tri hang 3 cot 4
lcd_putc(b+48); //in ra b
lcd_gotoxy(3,5); //den vi tri hang 3 cot 5
lcd_putc(c+48); //in ra c
lcd_gotoxy(3,6); //den vi tri hang 3 cot 6
lcd_putc(d+48); //in ra d
lcd_gotoxy(4,3); //den vi tri hang 4 cot 3
lcd_putc("vong/phut"); //in ra "vong/phut"
lcd_gotoxy(2,2); //den vi tri hang 2 cot 2
lcd_putc("toc do dc"); //in ra "toc do dc"
delay_ms(5); //Vong for tu 0->1000 nen delay it thoi
tmr0if=0;tmr1if=0; //Xoa tran
}
}
}
Các bạn cho mình hỏi khi biên dịch thì ở file LCD.c báo lỗi ở dòng này
struct lcd_pin_map { // This structure is overlayed
lỗi là "A#DEVICE required before this line

dientudong 22-11-2008 10:53 PM

Bạn cho mình hỏi nếu chân RW của LCD nối max thì khai báo chân thế nào

dientudong 22-11-2008 11:08 PM

Bạn làm ơn chỉ bảo mình với .mình rối quá .

dientudong 23-11-2008 02:43 AM

Các bạn à , sao mình thấy việc gọi các thư viện hàm Trong CCS quá phức tạp đi , toàn bị báo lỗi thôi , chẳng hiểu nổi , chắc là mình phải nghĩ cách tự viết Code từ đầu tới đuôi thôi , chứ trông chờ vào thư viện thấy mệt quá , chỉ cái thư viện 16F877A.h thôi mà đã báo lỗi tùm lum rồi , huống chi mấy thư viện khác nữa ...Bạn nào có ý gì giúp mình với .Mình bế tắc !

tungtot_vl 24-11-2008 11:24 AM

lcd
 
Trích:

Nguyên văn bởi dientudong (Post 20720)
Các bạn à , sao mình thấy việc gọi các thư viện hàm Trong CCS quá phức tạp đi , toàn bị báo lỗi thôi , chẳng hiểu nổi , chắc là mình phải nghĩ cách tự viết Code từ đầu tới đuôi thôi , chứ trông chờ vào thư viện thấy mệt quá , chỉ cái thư viện 16F877A.h thôi mà đã báo lỗi tùm lum rồi , huống chi mấy thư viện khác nữa ...Bạn nào có ý gì giúp mình với .Mình bế tắc !

bạn đang viết code cho LCD 4 bit hay 8 bit vậy

Mr.Bi 24-11-2008 06:21 PM

Trích:

Nguyên văn bởi dientudong (Post 20716)
Bạn cho mình hỏi nếu chân RW của LCD nối max thì khai báo chân thế nào

làm ơn vô đọc hết mấy bài ở đây. Chưa chịu đọc & tìm hiểu cách giao tiếp mà cứ mún lập trình
http://www.picvietnam.com/forum/show...p?t=357&page=4

dientudong 24-11-2008 07:37 PM

LCD cua mình là loại 4 hàng 16 cột


Múi giờ GMT. Hiện tại là 12:20 AM.

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