PIC Vietnam

Go Back   PIC Vietnam > Microchip PIC > Các ngôn ngữ lập trình khác (CCS C, HT 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

Trả lời
 
Ðiều Chỉnh Xếp Bài
Old 01-11-2009, 01:00 AM   #1
pk178
Đệ tử 5 túi
 
Tham gia ngày: Jan 2009
Bài gửi: 100
:
Các cao thủ cho em hỏi cái này

Chào các bác, chương trình của em là nhập giá trị từ bàn phím, rồi hiển thị giá trị đó lên LCD, em dùng hàm lcd_getc() để đọc kí tự trên lcd, sau đó em dùng hàm atoi() để convert từ kiểu string sang kiểu int, sau đó em cho hiển thị số đã được chuyển đổi lên LCD thì chỉ thấy số 0, em ko hiểu sao lại như vậy. Mong các cao thủ chỉ giáo giúp em !

Nếu ai đã từng làm cái tương tự thế này, có thể cho em xem code được không ạ ? Em xin cám ơn rất nhiều !
pk178 vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 01-11-2009, 10:05 AM   #2
nhamdtk4
Đệ tử 3 túi
 
nhamdtk4's Avatar
 
Tham gia ngày: Feb 2009
Bài gửi: 47
:
Ko hiểu ý đồ "thâm độc" của bạn là j. Post code của bạn lên để mọi người xem giúp cho.
nhamdtk4 vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 01-11-2009, 11:40 PM   #3
pk178
Đệ tử 5 túi
 
Tham gia ngày: Jan 2009
Bài gửi: 100
:
Trích:
Nguyên văn bởi nhamdtk4 View Post
Ko hiểu ý đồ "thâm độc" của bạn là j. Post code của bạn lên để mọi người xem giúp cho.
Vâng, đây là code của em !

// Scan key 2 program ( Improve from Scan Key)
// Author : pk
// Date : 01/11/2009
/* Description :
- User use keypad to put numberic data on LCD
- Press "*" to clear screen
- Press "#" to finish input process
*/
/* Functions :
- int read_key() : scan key and return which key is pressed
- void lcd_put_int(int num) : dispplay interger number on LCD
- int input_key() : input the key which is pressed and display on LCD, return a number which
was converted if finish, and 0 if not
*/

#include <16F887.h>
#device *=16

#include <math.h>
#use delay(clock = 4000000)
#include <lcd.c>
#use fast_io(c)
#use fast_io(a)
#use fast_io(b)

#define K1 PIN_C0
#define K2 PIN_C1
#define K3 PIN_C2
#define KA PIN_C3
#define KB PIN_C4
#define KC PIN_C5
#define KD PIN_C6

int read_key();
void lcd_put_int(int16 num);
int16 input_key();
int convert(int num[]);
lcd_disp(char c[],int row);

void main(){
int i;
int16 num;

set_tris_C(0x07);
set_tris_A(0x00);
set_tris_B(0x00);
output_a(0);
output_b(0x00);

lcd_init();
lcd_putc("STARTING");
for(i = 1; i < 9; i++){
lcd_putc(".");
delay_ms(100);
}
lcd_putc("\f");

num = input_key();
while(!num){
lcd_putc("\f");
num = input_key();
}
lcd_putc("\f");
lcd_putc("GIA TRI VUA NHAP : ");
lcd_putc("\n");
lcd_put_int(num);
}


int read_key(){
output_low(KA);output_high(KB);output_high(KC);out put_high(KD);
if(input(K1) == 0) return 1;
if(input(K2) == 0) return 2;
if(input(K3) == 0) return 3;

output_high(KA);output_low(KB);output_high(KC);out put_high(KD);
if(input(K1) == 0) return 4;
if(input(K2) == 0) return 5;
if(input(K3) == 0) return 6;

output_high(KA);output_high(KB);output_low(KC);out put_high(KD);
if(input(K1) == 0) return 7;
if(input(K2) == 0) return 8;
if(input(K3) == 0) return 9;

output_high(KA);output_high(KB);output_high(KC);ou tput_low(KD);
if(input(K1) == 0) return 10;
if(input(K2) == 0) return 0;
if(input(K3) == 0) return 11;

return 15;
}

// display interger number on LCD
void lcd_put_int(int16 num){
int16 temp;
unsigned char i = 0, c[5];
temp = num;
if (temp != 0) {
while(temp){
c[i++] = temp%10;
temp /= 10;
}
while(i) lcd_putc(c[--i] + '0');
}
else lcd_putc('0');
}

int16 input_key(){
int a,b[16],i = 0;
int16 c = 0;

for(a = 0; a < 20; a++) b[a] = 0;
lcd_putc("NHAP GIA TRI DAT : ");
lcd_putc("\n");
while(1){
delay_ms(180);
a = read_key();
if(a == 10){
return 0;
}
if((a != 10) && (a != 15) && (a != 11)){
lcd_put_int(a);
b[i++] = a;
}
if(a == 11){
a = i - 1;
while(1){
i--;
c = c + b[i]*pow(10,a-i);
if(i == 0) break;
}
return c;
}
}
}


Em ko dùng hàm atoi() nữa, thay vào đó, em lấy giá trị của các lần nhập, rồi hiển thịi thành 1 số, ví dụ : em nhập 3 lần, tương ứng là các chữ số : 1,2,3, thì em phải chuyển thành 1 số duy nhất là 123, em có dùng hàm pow(), nhưng ko hiểu sao nó lại hâm hâm kiểu gì ấy. Giả sử em nhập là 1,2,3 thì sau khi đổi, nó lại hiện lên là 122, hầu như đều bị giảm 1 đơn vị, nếu số chỉ có 2 chữ số thì ok, ko vấn đề gì, nhưng từ 3 chữ số trở lên là nó lại bị như vậy.

Mục đích chương trình này của em chỉ là dùng bàn phím đề giao tiếp với vđk thôi, em đã nghĩ mấy ngày trời mà chưa đâu vào đâu cả. Bác nào có code về cái này cho em xin với nhé !

Em nghĩ đây là vấn đề về thuật toán, nên cũng hơi khó xem. Rất mong các cao thủ xem giúp rồi chỉ bảo cho em với. Em xin cảm ơn rất nhìu !

thay đổi nội dung bởi: pk178, 01-11-2009 lúc 11:45 PM.
pk178 vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 01-11-2009, 11:44 PM   #4
pk178
Đệ tử 5 túi
 
Tham gia ngày: Jan 2009
Bài gửi: 100
:
À mà các bác cho em hỏi, em thấy anh falleaf giới thiệu con 16f887 hoành tráng lắm, nên cũng muốn dùng thử, nhưng hôm nay em ra chợ trời, đi hỏi mấy cửa hàng họ đều lắc đầu bảo ko có. Bác nào biết chỗ mua và giá cả xin mách giúp em.
pk178 vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 02-11-2009, 09:47 AM   #5
0509592
Đệ tử 3 túi
 
Tham gia ngày: Jul 2008
Bài gửi: 58
:
bạn đến địa chỉ này!
đây là đại lý của R&P!
http://dientu.rpc.vn/content/view/61/41/
0509592 vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 02-11-2009, 11:05 PM   #6
vidieukhiencdn
Đệ tử 7 túi
 
vidieukhiencdn's Avatar
 
Tham gia ngày: May 2009
Bài gửi: 242
:
Trích:
Nguyên văn bởi pk178 View Post
À mà các bác cho em hỏi, em thấy anh falleaf giới thiệu con 16f887 hoành tráng lắm, nên cũng muốn dùng thử, nhưng hôm nay em ra chợ trời, đi hỏi mấy cửa hàng họ đều lắc đầu bảo ko có. Bác nào biết chỗ mua và giá cả xin mách giúp em.
Nghe từ chợ trời là biết ở HN rùi, chứ HCM bán đầy giá tầm 35k đổ lại
vidieukhiencdn vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 03-11-2009, 07:51 AM   #7
pk178
Đệ tử 5 túi
 
Tham gia ngày: Jan 2009
Bài gửi: 100
:
Cám ơn các bác đã giúp đỡ !

to @ bbaacc01 : Cám ơn những gợi ý của bác, em sẽ thử xem sao, đúng là chương trình em viết có nhiều thiếu xót, em xin ghi nhận những ý kiến của bác, em cũng hơi sơ xuất, (vì đây chỉ là chương trình thử nên em viết tạm tạm như vậy :d). Em cũng thấy là khi biên dịch xong, ccs báo dung lượng chương trình lên tới 35%, hic, có lẽ là do sử dụng hàm pow(), để em thử lại xem sao !

Hôm qua em có gọi cho bên R&P (đại diện là công ty Techpal ấy ạ), họ bảo con 16f887 giá 47.5k, em hỏi có mạch nạp ko, họ bảo mạch nạp 700k, nạp được cho tất cả các loại PIC. Hic, 700k thì quả thực em ko thể mua được, vì mắc quá.

Em định chỉ mua con vđk ở đó thôi rồi ra chỗ khác mua mạch nạp, nhưng em ko biết các mạch nạp trước (có hỗ trợ cho con 16f877) có nạp được cho con 16f887 không ?

Các bác biết chỗ nào bán mạch nạp và vđk này (giá rẻ rẻ 1 chút ạ !) thì chỉ cho em với, em đang cần gấp vì cuối tuần này phải xong cái mạch rồi. Em xin cảm ơn các bác nhiều ạ !
pk178 vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 03-11-2009, 08:09 AM   #8
pk178
Đệ tử 5 túi
 
Tham gia ngày: Jan 2009
Bài gửi: 100
:
to @ bbaacc01 : Được rồi bác ạ ! Em đã thử bỏ hàm pow() đi và dùng thuật toán của bác, LCD hiển thị tốt bác ạ, quả thật từ trước đến nay em chỉ biết dùng hàm pow() để chuyển, thuật toán của bác quả là đơn giản và hiệu quả .

Tiếc là chỉ được bấm vào nút thanks 1 lần, chứ nếu được bấm vào nhiều lần, em xin bấm cho bác cả chục lần luôn
pk178 vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 17-11-2009, 09:57 AM   #9
tantienvinhkim
Nhập môn đệ tử
 
Tham gia ngày: Jul 2009
Bài gửi: 1
:
chào các bác em mới học pic, kiến thức nông cạn, mạo mụi xin được hỏi các vị tiền bối một câu là pic nói chung 16f877a nói riêng có chức năng tự nhận ra lỗi và xuất tín hiệu cảnh báo như PLC không vậy các bác...trẻ sơ sinh chưa biết chuyện xin các bác đừng trách...
tantienvinhkim 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à 01:30 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