![]() |
![]() |
#361 |
Trưởng lão PIC bang
|
Bạn tự nêu cách giải quyết rồi đó. Dùng một biến chuỗi để lưu chuỗi kết quả, mỗi lần thêm vào chuỗi thì dùng hàm nối chuỗi để nối chuỗi đã có và ký tự cần thêm. Bạn xem tài liệu hướng dẫn của CCS C về các hàm này.
Thân,
__________________
Biển học mênh mông, sức người có hạn. Đang gặp vấn đề cần được giúp đỡ? Hãy dành ra vài phút đọc luồng sau: http://www.picvietnam.com/forum/showthread.php?t=1263 |
![]() |
![]() |
#362 |
Đệ tử 2 túi
Tham gia ngày: Jun 2007
Bài gửi: 44
: |
cộng ký tự thành chuỗi
với cách viết mà em post ở bài trước thì nó chỉ hiện được phím đầu tiên mà mình nhấn thôi,còn các phím sau đó thì LCD chỉ hiện lên các ký tự lạ thôi.
Còn hàm nối chuỗi mà Bác nói là hàm nào ,có phải là hàm "srcat(key,string1);"này ko? em cũng thử rồi nhưng ko được nên phải cầu cứu các Bác nè. Code:
#include "D:\PIC PROGRAM\dk.h" #include <KBD.C> #include <stdio.h> #include <stdlib.h> #include <string.h> #include <lcd.c> char string1[10]; char i,t, keyscan; char k,key[10]; void main() { port_b_pullups(TRUE); setup_adc_ports(NO_ANALOGS); setup_adc(ADC_OFF); setup_psp(PSP_DISABLED); setup_spi(FALSE); setup_timer_0(RTCC_INTERNAL|RTCC_DIV_1); setup_timer_1(T1_DISABLED); setup_timer_2(T2_DISABLED,0,1); setup_comparator(NC_NC_NC_NC); setup_vref(FALSE); kbd_init(); lcd_init(); SET_TRIS_C( 0x00 ); output_bit(PIN_C4, 1);output_bit(PIN_C5, 1); delay_ms(1000); output_bit(PIN_C4, 0);output_bit(PIN_C5, 0); i=0; lcd_putc('\f'); while(1) { k = kbd_getc(); if (k!=0) { strcpy(string1,k); strcat(key,string1); for(i=0;i<strlen(key);i++) lcd_putc(key[i]); } } } có Bác nào đã làm cái này chưa chỉ em với. thay đổi nội dung bởi: namqn, 09-01-2008 lúc 06:09 PM. |
![]() |
![]() |
#363 |
Trưởng lão PIC bang
|
Tôi không rõ CCS C sẽ xử lý thế nào khi bạn dùng lệnh k = kbd_getc();. Vì bạn đã khai báo k là một mảng ký tự (tối đa 10 ký tự), trong khi prototype của kbd_getc() lại cho thấy giá trị trả về là 1 ký tự. Bạn thử lại với lệnh sau xem sao:
Code:
k[0] = kbd_getc(); Thân,
__________________
Biển học mênh mông, sức người có hạn. Đang gặp vấn đề cần được giúp đỡ? Hãy dành ra vài phút đọc luồng sau: http://www.picvietnam.com/forum/showthread.php?t=1263 |
![]() |
![]() |
#364 |
Nhập môn đệ tử
Tham gia ngày: Dec 2007
Bài gửi: 3
: |
Tôi đang học CCS chưa biết sử dụng nhiều Huynh có thể post thêm bai hướng dẫn hay tài liệu được không?
|
![]() |
![]() |
#365 |
Đệ tử 2 túi
Tham gia ngày: Jun 2007
Bài gửi: 44
: |
Bác "nampn" oi!em khai báo "k" là biến kiểu char bình thường mà, còn biến "key" mới là biến kiểu mảng "char k,key[10]". em sẽ thử cách này của Bác thử xem sao. Cảm ơn Bác rất nhiều.
|
![]() |
![]() |
#366 | |
Trưởng lão PIC bang
|
Trích:
Thân,
__________________
Biển học mênh mông, sức người có hạn. Đang gặp vấn đề cần được giúp đỡ? Hãy dành ra vài phút đọc luồng sau: http://www.picvietnam.com/forum/showthread.php?t=1263 |
|
![]() |
![]() |
#367 |
Đệ tử 3 túi
Tham gia ngày: Dec 2007
Bài gửi: 51
: |
giúp mình với!!!!!!
mình cũng đang gặp phải lỗi này. chương trình của mình sử dụng ngắt RB và timer0. hàm phục vụ ngắt RB của mình có gọi đến khá nhiều hàm con. khi mình bỏ hẳn hàm phục vụ ngắt RB ra khỏi ct thì hoạt động của timer0 là đúng. còn khi mình thêm vào hàm phục vụ ngắt RB,mặc dù ngắt RB không hề sảy ra nhưng timer0 của mình vẫn chạy không chính xác. cho mình hỏi bạn khangcodt đã khắc phục được lỗi timer chạy sai khi trong hàm phục vụ ngắt gọi đến các hàm con khác chưa vậy? mình cảm ơn nha. |
![]() |
![]() |
#368 |
Đệ tử 3 túi
Tham gia ngày: Dec 2007
Bài gửi: 51
: |
cho mình hỏi thêm câu nữa nhé.
mình dùng hàm printf(); để truyền dl qua máy tính. 1) làm thế nào để biết pic đã truyền xong mảng ký tự 2) để truyền một số nguyên mình đã thực hiện như sau: itoa(trunggian2,10,s);//chuyển số nguyên thành mảng ký tự printf(s); trong đó biến trunggian2 là int16, s là mảng char. nhưng khi mình thử test với hyper terminal thì kết quả nhận được lại không đúng. cụ thể là sau những số nhận được lại có thêm các ký tự lạ. bạn nào đã làm về vấn đề này rồi xin chỉ giúp mình với mình cảm ơn nhiều. |
![]() |
![]() |
#369 |
Đệ tử 3 túi
Tham gia ngày: Dec 2007
Bài gửi: 51
: |
cho mình hỏi :
khi truyền một mảng char từ pic lên máy tính thì ngắt RDA sảy ra sau khi truyền xong cả mảng hay cứ mỗi lần truyền xong một phần tử thì xảy ra ngắt RDA? mình cảm ơn! |
![]() |
![]() |
#370 | |
Trưởng lão PIC bang
|
Trích:
Ngắt INT_RDA xảy ra mỗi khi PIC16F877A nhận được 1 ký tự ở bộ đệm nhận, người dùng nên nhanh chóng đọc dữ liệu từ bộ đệm để PIC có thể ghi ký tự kế tiếp ngay khi thanh ghi dịch đã có đủ dữ liệu. Thân,
__________________
Biển học mênh mông, sức người có hạn. Đang gặp vấn đề cần được giúp đỡ? Hãy dành ra vài phút đọc luồng sau: http://www.picvietnam.com/forum/showthread.php?t=1263 |
|
![]() |
![]() |
#371 |
Đệ tử 3 túi
Tham gia ngày: Dec 2007
Bài gửi: 51
: |
em cảm ơn anh namqn nhiều.
cho em hỏi thêm câu này nữa nhé em dùng con 16f877a để nhận mảng ký tự truyền từ môt con 16f877a khác. mảng ký tự kết thúc bằng ký tự @. bên phát: itoa(x,10,s);// s khai báo là char s[5] s[4]='@';// vì e k biết s kết thúc bằng ký tự gì printf(s); bên thu em thực hiện truyền vài lần(thay đổi giá trị của x bằng cách ấn nút) thì e chỉ nhận được lần đầu tiên. truyền các lần tiếp theo thì nó bị đơ luôn, không chạy nữa. e chạy mô phỏng bằng proteus. đây là code bên phía nhận Code:
#INT_RDA RECEIVER() { char kt; int i; char s1[4]; i=0; kt=fgetc(pc); while(kt!='@') { s1[i]=kt; i++; kt=fgetc(pc); } lcd_clear(); delay_ms(1); lcd_display_str(0, 0, s1); } thay đổi nội dung bởi: bean984, 17-01-2008 lúc 08:25 AM. |
![]() |
![]() |
#372 |
Đệ tử 3 túi
Tham gia ngày: Dec 2007
Bài gửi: 51
: |
cho mình hỏi một câu nữa
khi ngắt RDA xảy ra thì cờ nào được set lên 1, và khi kết thúc ngăt nó có tự động xóa bít đó không? |
![]() |
![]() |
#373 | ||
...Damned...
Tham gia ngày: Apr 2006
Nơi Cư Ngụ: Hồ Chí Minh
Bài gửi: 522
: |
Trích:
Trích:
Code:
printf("%s", s); |
||
![]() |
![]() |
#374 |
Đệ tử 3 túi
Tham gia ngày: Dec 2007
Bài gửi: 51
: |
cho mình hỏi cái này nhé
nếu dùng lệnh printf("%s", s); thì ký tự kết thúc của chuỗi s là gì? mình định dùng ký tự này để xử lý việc nhận chuỗi s. có phải ký null không nhỉ? |
![]() |
![]() |
#375 |
Đệ tử 6 túi
Tham gia ngày: Jan 2007
Bài gửi: 127
: |
các chương trình ví dụ
|
![]() |
![]() |
|
|
![]() |
||||
Ðề tài | Người gửi | Chuyên mục | Trả lời | Bài mới |
TUT về USART trong PIC16F877A | mafd_47a | MPASM | 16 | 19-02-2025 05:32 AM |
TUT ve I2C ( pic16f877a ) | mafd_47a | MPASM | 28 | 28-01-2025 10:45 PM |
Lập nhóm PIC16F877A | nhh | Cơ bản về vi điều khiển và PIC | 285 | 08-03-2017 11:08 PM |
Bộ so sánh và PWM cho PIC16F877A | anhquangngai | Cơ bản về vi điều khiển và PIC | 24 | 08-09-2012 09:00 AM |
Pic16f877a TỪ DỄ TỚi KhÓ | ntc | Cơ bản về vi điều khiển và PIC | 373 | 23-05-2009 10:24 PM |