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)
-   -   CCS C cho PIC/dsPIC phiên bản 4.xxx (http://www.picvietnam.com/forum/showthread.php?t=2296)

falleaf 24-04-2008 12:03 PM

CCS C cho PIC/dsPIC phiên bản 4.xxx
 
Luồng này tiếp theo luồng CCS C cho PIC16F877A.

- Tutorial của nhh đã cũ, CCS C có nhiều thay đổi, do vậy từ CCS C 4.xxx một số câu lệnh và ký hiệu được thay đổi.
- Luồng trước quá dài, chúng tôi tạm khoá để mở luồng mới, các thành viên sẽ dễ theo dõi hơn.

Chúc vui

falleaf 24-04-2008 12:07 PM

Trích:

Nguyên văn bởi bean984 (Post 15729)
cho mình hỏi
port c của con 16f877a này có gì đặc biệt không vậy?
mình dùng 3 chân RC0,RC1,RC2 để nối đến 3 chân điều khiển LCD.nhưng tại sao khi mình không set_tris cổng này mà vẫn điều khiển được LCD.
mình hỏi một câu nữa nhé.
khi dùng các chân RC6,RC7 để truyền nhận thì không được set_tris cổng C? nếu vậy muốn dùng các chân khác với mục đích I/O thì làm ntn?
mình cảm ơn nhiều!!!

Trích:

Nguyên văn bởi thaithienanh (Post 15731)
Port C của 16f877a tích hợp các modul truyền nhận dữ liệu theo các chuẩn khác nhau như I2C, SPI, .... chứ cũng chẳng có gì đặc biệt cả :o
- Bạn không set_tris nhưng vẫn điều khển được LCD là vì trình dịch CCS hỗ trợ, nó sẽ set_tris giùm bạn ở mỗi câu lệnh liên quan đến I/O => tốc độ xử lý và bộ nhớ giảm đi đáng kể do hành động set_tris lập đi lập lại nhiều lần dẫn đến dài dòng thừa thải :o code đơn giản thì không sao chứ nếu code đòi hỏi tốc độ và dung lượng bộ nhớ lớn thì mình khuyên nên dùng set_tris.
- Bạn dùng lệnh set_tris thì không giao tiếp đuợc với PC qua chuẩn 232, mình cũng chưa để ý cái này, nhưng mình nghĩ chắc chắn là đuợc chứ :o, bạn nên xem lại set i/o của bạn cho hai chân RC6 và RC7 đã đúng chưa :o, lưu ý lại với bạn ở đây chân RC6 là chân truyền (tranmister) tức ngõ ra và chân RC7 là chân nhận (Receiver) tức ngõ vào. Với lại trong câu lệnh set tris để set ngõ vào thì dùng bit (1), và ngõ ra tương ứng với bit (0).

Còn bạn gì ở trên kia muốn tìm hiểu giao tiếp với PC thì tìm lại trên diễn đàn nhé, có quá nhiều bài viết hướng dẫn và cả ví dụ mẫu về nó rồi đấy :o

Chúc các bạn thành công.
Thân.

Trích:

Nguyên văn bởi bean984 (Post 15744)
nhưng mình đã thử lại I/O của port C bằng cách nháy led. Hoàn toàn không được nếu không set_tris. và với các port khác cũng vậy????


Luồng này tiếp tục thảo luận ở đây

Chúc vui

lion 25-04-2008 09:07 AM

bác F cho em vài link về CCS C 4.xxx

lion 25-04-2008 09:11 AM

tìm trong diễn đàn này mệt quá

picthanh 25-04-2008 05:48 PM

to hard : chắc phải tháo ra cài lại thôi, lưu là thằng này và thằng Deepfreeze ko ưa gì nhau, nên cài vào ko chạy dc, báo lỗi tùm lum, lúc trước tui bị một lần rồi.

Hard 25-04-2008 06:54 PM

Hi,
Đành phải xin phép câu thêm một bài vậy. Bác có thể giải quyết vấn đề bằng cách down phiên bản 4.065 về. Trong phiên bản này có IDEUTILS sẵn, chỉ cần chạy file này để cài đặt, nó tương thích cho cả version 4.068. Bên thread Trình biên dịch và mô phỏng đã đề cập đến vấn đề này rồi. Chúc bác thành công.
Thân ái.

tyhon 27-04-2008 12:27 PM

Giao tiếp Pic(16f877a) với máy tính
 
em đang làm về phần giao tiếp giữa pic(16f877a) với máy tính dùng phần mềm ccs để lập trình
anh nào có tài liệu thì có thể giúp đơ em, em đang rất cần
mail của em là qvinh_bk86@yahoo.com.vn,
em cảm ơn nhiều
Rất mong thư!

falleaf 27-04-2008 05:21 PM

Trích:

Nguyên văn bởi lion (Post 15773)
bác F cho em vài link về CCS C 4.xxx

Bạn đã đọc list của diễn đàn chưa? Bạn nghĩ rằng bạn có thể tìm cái chương trình nạp đó ở đâu?

Chúc vui

Tuane06_spkt 29-04-2008 11:10 AM

Hic cac bac oi help me,em down các tài liệu trên điễn đàn về nhà và làm theo như các bác nói,nhưng mà sao nó không chạy,em đang dùng CCS V4.057 hôm nay em quên không mang theo đoan code em làm,nhưng đại loại là em đã khai báo #include <16F877A.h> nhưng không hiểu sao khi compiler lại báo là lỗi "A#device" cần phải thêm vào là sao các bác(hi em dịch ra đầy không biết có đúng không),các bác giúp em nhé,em đang làm đồ án liên quan đến Pic mà lại lập trình bằng C

lion 30-04-2008 11:10 AM

tui đang dùng phiên bản CCS 4.065
không biết còn phiên bản nào cao hơn không hả anh em ???

falleaf 30-04-2008 12:27 PM

Trích:

Nguyên văn bởi lion (Post 15901)
tui đang dùng phiên bản CCS 4.065
không biết còn phiên bản nào cao hơn không hả anh em ???

Bạn vẫn không chịu nhìn kỹ các tiêu đề được dán lên à? Hãy đọc những bài đầu tiên ở đó trở xuống.

Chúc vui

kennybk04 30-04-2008 10:28 PM

Thắc mắc ngắt timer
 
Em viết chương trình ngắt timer nhấp nháy led, nhưng nạp vào pic phải đợi 1 lúc sau nó mới bắt đầu nháy led, bác nào khắc phục jùm em với.
Đây là code.

Code:

#include <16F877A.h>
#include <DEFS_16F877A.h>
#device 16F877*=16 ADC=10
#FUSES NOWDT, HS, NOPUT, NOPROTECT, NODEBUG, NOBROWNOUT, NOLVP, NOCPD, NOWRT
#use delay(clock=4000000)
#use fast_io(b)
#use fast_io(c)
#use fast_io(d)

#int_timer0
void interrupt_timer0(){
  int1 a;
  int16 count;
  set_timer0(56);
  ++count;
  if(count == 500)
  {
      count=0;
      a=~a;
      RB0=a;
  }
     
   
}
void main()
{
    set_tris_b(0);
    setup_timer_0(RTCC_INTERNAL|RTCC_DIV_2);
    enable_interrupts(int_timer0);
    enable_interrupts(global);
    set_timer0(56);
   
    while(true)
    {
    }
}


namqn 30-04-2008 10:39 PM

Trước khi vào vòng while(true) trong main(), bạn nên đặt trước giá trị của count, nếu không thì count có thể mang giá trị bất kỳ, và điều kiện (count == 500) của bạn có thể phải sau khi count được tăng vài chục ngàn giá trị mới thỏa mãn (nếu tình cờ sau khi PIC reset biến count mang giá trị ngẫu nhiên là 501 chẳng hạn).

Tôi thường khởi tạo biến count ngay trước khi vào vòng while(true) trong main(), và dùng điều kiện (count >= 500) thay cho (count == 500) trong phần xử lý ngắt.

Thân,

Tuane06_spkt 02-05-2008 06:29 PM

hi hi em sửa được lỗi đó rùi,nhưng vẫn không hiểu,bác nào giải thích hộ em với,khi em tạo một project mới,ví dụ em tạo trong thư mục "C:\Bai_tap" thỉ trong phần soạn thảo của em xuất hiện khai báo #include "C:\Bai_tap\nhapnhayB.h" nếu em để nguyên như này thì khi compiler sẽ báo lỗi " a #device" gì đó,nhưng khi em bỏ dòng này đi thì mọi việc ok,hic

tyhon 06-05-2008 01:50 AM

Em có đoạn code sau nhưng em không hiểu là lệnh adcHI và adcLO làm gì (với khai báo
char adcHI,adcLO).Anh nào giải thích hộ em

Code:

  while(TRUE)
        {
              adcValue = read_adc(); // Get ADC reading
 
              adcHI = (char)((adcValue >> 5)& 0x1f);     
              adcLO = (char)((adcValue & 0x1f)|0x80);   
                     
              putc(adcHI); 
              putc(adcLO); 
 
              delay_ms(10);  // Preset delay, repeat every 10ms
        }
}


namqn 06-05-2008 02:13 AM

adcHI và adcLO là các biến kiểu char (8-bit), không phải là lệnh.

Trong đoạn lệnh mà bạn đã đưa ra, kết quả của việc biến đổi A/D được tách thành 2 phần, phần cao chứa trong adcHI, còn 5 bit thấp hơn của kết quả được chứa trong adcLO. Bit 7 của adcLO được bật.

Sau đó adcHI và adcLO được xuất ra thông qua hàm putc().

Thân,

tyhon 06-05-2008 07:49 AM

Trích:

Nguyên văn bởi namqn (Post 15993)
adcHI và adcLO là các biến kiểu char (8-bit), không phải là lệnh.

Trong đoạn lệnh mà bạn đã đưa ra, kết quả của việc biến đổi A/D được tách thành 2 phần, phần cao chứa trong adcHI, còn 5 bit thấp hơn của kết quả được chứa trong adcLO. Bit 7 của adcLO được bật.

Sau đó adcHI và adcLO được xuất ra thông qua hàm putc().

Thân,



Cảm ơn anh , nhưng anh có thể giải thích rõ hơn cho em doạn lệnh sau :(ví dụ như (adcValue>>5)&0x1f có nghĩa như thế nào)
adcHI = (char)((adcValue >> 5)& 0x1f);
adcLO = (char)((adcValue & 0x1f)|0x80);
Anh còn bảo là bit 7 của adcLO được bật là sao ha anh?
Rất mong thư!

namqn 06-05-2008 09:24 AM

Trích:

Nguyên văn bởi tyhon (Post 15994)
Cảm ơn anh , nhưng anh có thể giải thích rõ hơn cho em doạn lệnh sau :(ví dụ như (adcValue>>5)&0x1f có nghĩa như thế nào)
adcHI = (char)((adcValue >> 5)& 0x1f);
adcLO = (char)((adcValue & 0x1f)|0x80);
Anh còn bảo là bit 7 của adcLO được bật là sao ha anh?
Rất mong thư!

Bạn hỏi như vậy tôi đoán là bạn chưa học gì về kỹ thuật số, lập trình C, ... Bạn có thể cho biết bạn đang học ở bậc nào, nếu học đại học thì đến năm thứ mấy, ngành gì. Thông tin về nền tảng kiến thức của bạn sẽ giúp người khác có cách giải thích phù hợp cho bạn (mặc dù đôi khi bạn có thể đặt người khác vào tình huống tương tự như giải thích về tích phân cho học sinh cấp hai).

Thân,

tyhon 06-05-2008 05:30 PM

Vâng em cũng mới bắt đầu làm quen mà
Anh cũng cho em biết thêm là adcHI và adcLO là 8 bit, thế sao khi A/D tách thành 2 phần thì như anh nói 5 bit thấp hơn lại chứa trong adcLO?

vandungevn 06-05-2008 11:28 PM

ADC trong PIC có 10bit. adcHI là chứa 5 bits cao của 10 bits, còn adcLO chứa 5 bit thấp như vậy là ghép lại thành 10 bit ad rồi đó:d. còn '>>' có nghĩa là dịch trai 1111100000 >> 5 = 0000011111 => giá trị của adcHI được đưa vào 1 byte là 00011111, như vậy có 5 bit cao của adc 10 bit . x 0x1f, giữ nguyên giá trị của 5 bit cao để khỏi lẫn giá trị của byte thấp, em thử lấy 1 phép toán nào đó làm ví dụ thì thấy ngay. adcLO việc bit 7 của adcLO được bật để phân biệt adcHI và adcLO khi chuyển lên nếu ko thì ko biết mình nhận nó là byte thấp hay byte cao.

tyhon 07-05-2008 04:57 AM

Trích:

Nguyên văn bởi vandungevn (Post 16008)
ADC trong PIC có 10bit. adcHI là chứa 5 bits cao của 10 bits, còn adcLO chứa 5 bit thấp như vậy là ghép lại thành 10 bit ad rồi đó:d. còn '>>' có nghĩa là dịch trai 1111100000 >> 5 = 0000011111 => giá trị của adcHI được đưa vào 1 byte là 00011111, như vậy có 5 bit cao của adc 10 bit . x 0x1f, giữ nguyên giá trị của 5 bit cao để khỏi lẫn giá trị của byte thấp, em thử lấy 1 phép toán nào đó làm ví dụ thì thấy ngay. adcLO việc bit 7 của adcLO được bật để phân biệt adcHI và adcLO khi chuyển lên nếu ko thì ko biết mình nhận nó là byte thấp hay byte cao.

Anh cho em hỏi:
code
Trích:

Nguyên văn bởi tyhon (Post 16009)
while(TRUE)
{
adcValue = read_adc(); // Get ADC reading

adcHI = (char)((adcValue >> 5)& 0x1f);
adcLO = (char)((adcValue & 0x1f)|0x80);

putc(adcHI);
putc(adcLO);

delay_ms(10); // Preset delay, repeat every 10ms
}
}.

Thế ở đây không biết dịch bit để làm gì anh nhỉ ? Tại sao không cho adcHI nhận luôn 5 bit cao của adc trong PIC

tungtot_vl 22-05-2008 03:04 PM

em đang sai ccsc p3.249. các anh có phiên bản nào mới cho tôi xin link với

love_ac 22-05-2008 03:47 PM

Trích:

Nguyên văn bởi tungtot_vl (Post 16428)
em đang sai ccsc p3.249. các anh có phiên bản nào mới cho tôi xin link với

Bạn thử link này:
http://rs152.rapidshare.com/files/10..._4.069_Upd.rar

hanspkt 22-05-2008 03:48 PM

Trích:

Nguyên văn bởi tungtot_vl (Post 16428)
em đang sai ccsc p3.249. các anh có phiên bản nào mới cho tôi xin link với

bạn vào đây:
http://www.picvietnam.com/forum//forumdisplay.php?f=10

tungtot_vl 23-05-2008 11:57 AM

cảm ơn 2 bác nhiều.

bean984 02-06-2008 10:35 AM

mình đang làm về giao tiếp 2 con 16f877a theo chuẩn RS485. Con slave đọc giá trị adc. Con master thì liên tục yêu cầu con slave gửi trả giá trị adc để hiển thị lên lcd.
mình thực hiện như sau:

main()
{
//khởi tao các gtri ban đầu
...
while(true)
{
transmit(2,0,0,0);//gửi chuỗi '2000' để yêu cầu slave truyền về giá trị adc
delay_ms(500);//trễ thời gian nhận giá trị adc
}
}
nếu như để lệnh hỏi ngoài vòng while thì nó hoạt động tốt, nhưng khi cho vào trong vòng while thì nó chỉ thực hiện được một lệnh đầu tiên. các lần tiếp theo thì lại không đúng nữa.
thanks mọi người nhiều.

andyhug 03-06-2008 12:05 PM

Em mới hoc PIC, em đã load dược CCSC For PIC 4.09, MPLAB IDE 8.10, ICProg105D, các bác ai biết thì chỉ giúp em cách mô phỏng cụ thể với? (Từ mô phỏng các cổng, timer, các thanh ghi...)
Cảm ơn các bác!

igbt 07-06-2008 07:26 PM

1 Attachment(s)
Em có một đoạn code muốn nhờ các anh đi trước giúp đỡ mà ko biết cách chèn lên thế nào, đành phải làm thủ công thế này. Đoạn code của em có mục đích là: đầu tiên cho 2 chân RB1 và RB2 ở mức thấp, sau đó kiểm tra trạng thái của RD0 (chân RD0 được nối lên cao qua điện trở 10k), nếu RD0 = 0 thì đưa ra chân RB2 mức 1, trễ 5s, đưa RB2 xuống 0 và RB1 lên 1 trễ 5s và thoát khỏi điều kiện if và tiếp tục kiểm tra RD0. Nhưng khi chạy thử mạch thì RB2 có mức 1 trễ 5s sau đó RB1 có múc 1... mặc dù RD0 vẫn chưa = 0, mà sau đó chương trình cũng chẳng thoát khỏi điều kiện if. Em biết ngày trước đã có bạn hỏi như em và đã được giúp đỡ nhưng em tim lại mãi mà không thấy. Em mới học, mong các anh giúp đỡ! Đoạn code của em như sau:
Code:

#include <16F877a.h>
#include <def_877a.h>
#fuses NOWDT,PUT,XT,NOPROTECT, NOLVP
#use delay(clock=4000000)
#use fast_io(b)
main()
{
set_tris_b(0);
set_tris_d(255);
output_low(PIN_B1);
output_low(PIN_B2);
if(RD0=0)
output_high(PIN_B2);
delay_ms(5000);
output_low(PIN_B2);
output_high(PIN_B1);
delay_ms(5000);
}


namqn 07-06-2008 08:33 PM

Chương trình của bạn nên được sửa lại như sau:
Code:

#include <16F877a.h>
#include <def_877a.h>
#fuses NOWDT,PUT,XT,NOPROTECT, NOLVP
#use delay(clock=4000000)
#use fast_io(b)
main()
{
        set_tris_b(0);
        set_tris_d(255);
        output_low(PIN_B1);
        output_low(PIN_B2);
        if(RD0 == 0) {
                output_high(PIN_B2);
                delay_ms(5000);
                output_low(PIN_B2);
                output_high(PIN_B1);
                delay_ms(5000);
        }
        while (1);
}

Bạn hãy tự so sánh với code cũ của bạn để tìm ra những thay đổi, và suy nghĩ xem tại sao phải thay đổi như vậy.

Thân,

igbt 07-06-2008 09:43 PM

1 Attachment(s)
Cảm ơn anh Nam đã giúp đỡ! Nhưng ko biết do Kit của em hay lý do gì mà khi thử mạch, nếu ngắt đường nối lên cao của RD0 thì RB2 có trạng thái 1 sau 5s đến RB1 có trạng thái 1 RB2 xuống 0 và giữ ở trạng thái đó suốt. Nếu giữ đúng sơ đồ, thì ấn nút bấm, chẳng thấy gì xảy ra cả. Anh xem giúp em với! (em dùng Kit của anh SGT)

namqn 08-06-2008 06:09 AM

Nếu bạn muốn việc kiểm tra trạng thái chân RD0 được thực hiện liên tục thì code của bạn có thể sửa thành như sau:
Code:

#include <16F877a.h>
#include <def_877a.h>
#fuses NOWDT,PUT,XT,NOPROTECT, NOLVP
#use delay(clock=4000000)
#use fast_io(b)
main()
{
        set_tris_b(0);
        set_tris_d(255);
        output_low(PIN_B1);
        output_low(PIN_B2);
        while (1) {
                if(RD0 == 0) {
                        output_high(PIN_B2);
                        delay_ms(5000);
                        output_low(PIN_B2);
                        output_high(PIN_B1);
                        delay_ms(5000);
                }
        }
}

Bạn hãy so sánh với code trước đó và suy nghĩ xem tại sao lại sửa thành như vậy.

Thân,

bean984 13-06-2008 09:46 AM

nhờ mọi người giúp đỡ giao tiếp 2 pic16f877a theo chuẩn 485.
ý tưởng của mình như sau:
con master truyền một ký tự 'a' sang cho con slave.sau đó set chân đk của con mas để nó chờ tín hiệu gửi về từ con slave.
con slave nhận đc ký tự từ master gửi đến và kiểm tra nếu đúng ký tự cần thì thực hiện gửi lại ký tự 'b'.
quá trình cứ liên tục như vậy.

bean984 13-06-2008 09:53 AM

mình đã thử con master chỉ liên tục truyền và con slave liên tục nhận thì không có vấn đề gì. nhưng khi thực hiện hỏi đáp như trên thì ctr không chạy đc.
đây là đoạn code:
Code:

///////////////////////////////////////////////////////////////////
//ham nhan ky tu
#INT_RDA
void RECEIVER()
{
  int k,l;
  output_high(pin_b0);
  recei[k]=fgetc(PC);
  if (recei[k]=='@')
      {
        recei[k]=null;
        if (recei[0]=='b')
            {             
              output_high(pin_e0);//set chan dk
              r232=0;//set co nhan
              delay_ms(50);
            }
        k=0;
      }
  else
      k=k+1;
}
/////////////////////////////////////////////////////////*/
void main(void)
{
  int16 i,j;
  //int1 r232;
  set_tris_a(255);
  set_tris_b(0);
  set_tris_d(0);
  set_tris_e(0);
  portb=0;
  output_high(pin_e0);
  enable_interrupts(global);
  enable_interrupts(int_RDA);
  lcd_init();
  delay_ms(1);
  lcd_clear();
  delay_ms(1);
  r232=0;
  while(1)
  {   
            if (r232==0)
              {
                  printf("aa@");
                  r232=1;
                  delay_ms(50);
                  output_low(pin_e0);
                  delay_ms(100);
              }
     
  }
}


bean984 13-06-2008 09:57 AM

còn đây là code con slave:
Code:

////////////////////////////////////////////////////////////*/
//ham nhan ky tu
#INT_RDA
void RECEIVER()
{
  int x,y;
  chuoi[x]=fgetc(PC);
  if (chuoi[x]=='@')
      {
        chuoi[x]=null;
        dodaichuoi=strlen(chuoi);
        if (chuoi[0]=='a')
            {
            count0=count0+1;//dem so lan nhan đc
            r232=1;//set co nhan
            }
        x=0;
      }
  else x=x+1;
}
//////////////////////////////////////////////////////////
void main(void)
{
  int luudiemcat;
  set_tris_a(255);
  set_tris_b(255);
  set_tris_d(0);
  set_tris_e(0);
  portb=porte=0;
  output_low(pin_E0);
  portd=0;
  r232=0;
  enable_interrupts(global);
  enable_interrupts(int_RDA);
  setup_adc(adc_clock_internal);

  while(true)
  {
      if (r232==1)
        {
              output_high(pin_e0);
              delay_ms(50);
              printf("bb@");
              delay_ms(200);
              output_low(pin_e0);
              r232=0;
              lcd_display_str(0,0,chuoi);
              lcd_display_int8(0,5,dodaichuoi);
              lcd_display_int16(0,10,count0,0);
        }
  }
}


bean984 13-06-2008 09:58 AM

nhờ mọi người kiểm tra giúp xem đoạn code trên có vấn đề gì không.
cảm ơn mọi người nhiều!!!

kinhaxac 01-07-2008 05:09 PM

các bác cho em hỏi về counter của con 16F877A :
em chưa hiểu được lệnh này

setup_COUNTERS (rtcc_state, ps_state);

rtcc_state là một trong những constant sau:

RTCC_INTERNAL // tham số này có nghĩa j ?? em tưởng nó chỉ lấy xung từ chân RA4/TOCK1
RTCC_EXT_L_TO_H //
RTCC_EXT_H_TO_L //

ps_state là một trong những constant sau:

RTCC_DIV_2 // chọn cái tỉ số chia này có nghĩa j , có fai cứ 2 xung thì nó tăng bộ đếm lên 1
RTCC_DIV_4
RTCC_DIV_8
RTCC_DIV_16
RTCC_DIV_32
RTCC_DIV_64
RTCC_DIV_128


em viết một chương trình cho timer1 mà nó ko chạy , em sửa nó từ timer0 (đã chạy)

#include <16f877a.h>
#include <def_877a.h>
#fuses NOWDT ,NOPUT ,NOPROTECT ,NODEBUG,NOBROWNOUT,NOLVP,HS
#use delay(clock=20000000)
int16 count;

#int_timer1
void interrupt_timer1()
{
set_timer1(0);
++count;
if(count==20)
{
count=0;
PORTC=~PORTC;
}
}
void main()
{
TRISC=0x00;
PORTC=0x55;
enable_interrupts(int_timer1);
setup_timer_1(T1_INTERNAL|T1_DIV_BY_1);
enable_interrupts(global);
set_timer1(0);
// TODO: USER CODE!!
while(true){}
}

các bác cho ý kiến

picpen 03-07-2008 12:39 PM

Hiển thị LCD
 
Help Me ........ :geek:
Mình đang tìm hiểu và viết chương trình cho LCD( 2 dòng x 20 ký tự )
Nhưng mình đang gặp một khó khăn nho nhỏ cần các bạn giúp đỡ...
Mình viết chương trình để hiển thị các ký tự và chuỗi ký tự thì rất ok . Nhưng để hiển thị giá trị chứa trong một thanh nghi ,một byte nhớ hay giá trị của một biến INT lên LCD thì mình bị mắc quá ko hiển thị được. Huynh đệ nào biết giúp mình ngay nha :ugeek:
- Bài mình đang mắc như sau : hiển thị giá trị chuyển đổi ADC khi thay đổi tín hiệu đầu vào chân AN0 của pic16f877a lên LCD ( value = read_adc() , giá trị trong biến value cần hiển thị lên LCD )


**************** THANHK **************

david 03-07-2008 03:41 PM

bạn tách lấy số hàng đơn vị,tách lấy số hàng chục,....
cộng mỗi số với 0x30 rồi putc() lên LCD

kinhaxac 03-07-2008 04:47 PM

hic khong ai trả lời mình ah`

picpen 04-07-2008 01:44 AM

Cám ơn bác đã chỉ bảo ,Em đã tách được các số và cho hiển thị lên LCD...
Nhưng em chuă hiểu vì sao khi tách các số ra lại phải cộng với 0x30 ?Có phải khi cộng với 0x30 ta sẽ được mã ASII của số đó không?
Mọi người cho em hỏi đường link để dowload file : lcd_lib_4bit.c

***************** THANKS **************


Múi giờ GMT. Hiện tại là 06:59 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