![]() |
|
Tài trợ cho PIC Vietnam |
||||||||
| 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 |
![]() |
|
|
Ðiều Chỉnh | Xếp Bài |
|
|
|
|
#1 |
|
Đệ tử 1 túi
Tham gia ngày: Jul 2009
Bài gửi: 11
: |
Em đang viết 1 chương trình hiển thị số lên lcd, các hàm của lcd lấy của bác linhnc308. Tuy nhiên chỉ hiển thị được từ 0-255. Mong các cao thủ chỉ giáo để em hiển thị được số có 4 chữ số. Chương trình như sau:
Code:
#include <16f877a.h>
#include <def_877a.h>
#use delay(clock=20000000)
#FUSES NOWDT, HS, NOPUT, NOPROTECT, NODEBUG, NOBROWNOUT, NOLVP, NOCPD, NOWRT
#include <lcd_lib_4bit.c>
#define enter RA2
#define up RE0
#define down RE1
void ht(int);
void main()
{
int16 k=0;
while(ENTER) {
if(!UP) {while(!UP);
if(k<3000) k++;else k=0;
}
if(!DOWN) {while(!DOWN);
if(k>0) k--;else k=3000;
}
lcd_init();
lcd_putchar("k=");
lcd_putcmd(0x82);
ht(k);
}
while(!ENTER);
}
void ht(int a) {
int nghin,tram,chuc,dvi;
nghin=(int)a/1000;
tram=(int)(a%1000)/100;
chuc=(int)(a%100)/10;
dvi=(int)(a%10);
lcd_putchar(nghin+48);
lcd_putchar(tram+48);
lcd_putchar(chuc+48);
lcd_putchar(dvi+48);
}
thay đổi nội dung bởi: namqn, 05-03-2010 lúc 11:44 AM. Lý do: định dạng code |
|
|
|
|
|
#2 |
|
Trưởng lão PIC bang
|
Bạn dùng CCS C, nên mặc định int sẽ là int8 (số nhị phân chứa trong 8-bit). Do đó, bạn chỉ có thể biểu diễn các giá trị từ 0-255.
Hàm ht() của bạn phải nhận đối số 16-bit (tức là kiểu long hay int16, trong CCS C). 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 |
|
|
|
|
|
#3 |
|
Đệ tử 1 túi
Tham gia ngày: Jul 2009
Bài gửi: 11
: |
Vâng, em cũng đã thử thay đổi kiểu trong hàm ht() nhưng khi dịch ra thì lại báo lỗi. Nguyên nhân có lẽ là do các hàm trong lcd_lib_4bit đều có biến kiểu int. Có cách nào để sửa chương trình để em hiển thị được số có 4 chữ số không ạ? Cảm ơn anh nhìu. ^^
|
|
|
|
|
|
#4 | |
|
Trưởng lão PIC bang
|
Trích:
Code:
void ht(long a) {
int nghin,tram,chuc,dvi;
nghin=(int)a/1000;
tram=(int)(a%1000)/100;
chuc=(int)(a%100)/10;
dvi=(int)(a%10);
lcd_putchar(nghin+48);
lcd_putchar(tram+48);
lcd_putchar(chuc+48);
lcd_putchar(dvi+48);
}
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 |
|
|
|
|
|
|
#5 |
|
Nhập môn đệ tử
Tham gia ngày: Oct 2012
Bài gửi: 1
: |
Hien thi 4 chu so!
[QUOTE=namqn;33890]Bạn chỉ sửa thế này thôi thì thế nào (tôi không dùng CCS C, nên bạn sửa như dưới đây và dịch xem kết quả ra sao):
Code:
void ht(long a) {
int nghin,tram,chuc,dvi;
nghin=(int)a/1000;
tram=(int)(a%1000)/100;
chuc=(int)(a%100)/10;
dvi=(int)(a%10);
lcd_putchar(nghin+48);
lcd_putchar(tram+48);
lcd_putchar(chuc+48);
lcd_putchar(dvi+48);
}
Bây giờ: Mình muốn chuyển chuỗi số trên lcd thành thành số thì làm thế nào! không dùng hàm " atoi" vì thư viện của mình bị lỗi! thanks |
|
|
|
|
|
#6 | |
|
Nhập môn đệ tử
Tham gia ngày: Jan 2016
Nơi Cư Ngụ: ha noi
Bài gửi: 5
: |
Trích:
|
|
|
|
|
![]() |
| Ðiều Chỉnh | |
| Xếp Bài | |
|
|