PIC Vietnam

PIC Vietnam (http://www.picvietnam.com/forum/index.php)
-   Cơ bản về vi điều khiển và PIC (http://www.picvietnam.com/forum/forumdisplay.php?f=8)
-   -   em muon hien thi so thap phan len LCD ,nhung cai code nay co van de hien thi ko dung (http://www.picvietnam.com/forum/showthread.php?t=10342)

haneishun 28-07-2011 01:05 AM

em muon hien thi so thap phan len LCD ,nhung cai code nay co van de hien thi ko dung
 
#include <16f877A.h>
#device *=16
#use delay(clock = 20M)
#FUSES NOWDT, HS, NOPUT, NOPROTECT, NODEBUG, NOBROWNOUT,NOLVP, NOCPD, NOWRT

#define LCD_ENABLE_PIN PIN_B5
#define LCD_RS_PIN PIN_B7
#define LCD_RW_PIN PIN_B6
#define LCD_DATA4 PIN_B4
#define LCD_DATA5 PIN_B3
#define LCD_DATA6 PIN_B2
#define LCD_DATA7 PIN_B1

#include <lcd.c>
void main(){
int i,x,x1,y1,y2;
lcd_init();
x=123.4;
x1=x*10;
y1=x1/100;
y2=x1%100;
lcd_gotoxy(1,1);
lcd_putc(y1/10+0x30);
lcd_gotoxy(2,1);
lcd_putc(y1%10+0x30);
lcd_gotoxy(3,1);
lcd_putc(y2/10+0x30);
lcd_gotoxy(4,1);
lcd_putc(".");
lcd_gotoxy(5,1);
lcd_putc(y2%10+0x30);
while(1);
}

pstin 28-07-2011 10:11 AM

Hì, cái code đương nhiên là có vấn đề với bạn rồi!!!!!!!!
code trên dùng lcd 8 bit, bạn dùng 4 bit thì phải sửa câu lệnh 1 chút!!!!!!!!
Nếu bạn khai báo lcd 4 bit từ ccs mà không dùng file lcd.c "bên ngoài" thì code trên vẫn hiển thị đúng!!!!!!!.
x1 sẽ là 1234, khi đó trở thành hiển thị số nguyên thôi!!!, y1=12; y2 chia cho 100 lấy số dư, y2=34, cái này thấy đơn giản mà!!!!!!!!.

tdm 28-07-2011 03:33 PM

Trích:

Nguyên văn bởi haneishun (Post 47443)
#include <16f877A.h>
#device *=16
#use delay(clock = 20M)
#FUSES NOWDT, HS, NOPUT, NOPROTECT, NODEBUG, NOBROWNOUT,NOLVP, NOCPD, NOWRT

#define LCD_ENABLE_PIN PIN_B5
#define LCD_RS_PIN PIN_B7
#define LCD_RW_PIN PIN_B6
#define LCD_DATA4 PIN_B4
#define LCD_DATA5 PIN_B3
#define LCD_DATA6 PIN_B2
#define LCD_DATA7 PIN_B1

#include <lcd.c>
void main(){
int i,x,x1,y1,y2;
lcd_init();
x=123.4;
x1=x*10;
y1=x1/100;
y2=x1%100;
lcd_gotoxy(1,1);
lcd_putc(y1/10+0x30);
lcd_gotoxy(2,1);
lcd_putc(y1%10+0x30);
lcd_gotoxy(3,1);
lcd_putc(y2/10+0x30);
lcd_gotoxy(4,1);
lcd_putc(".");
lcd_gotoxy(5,1);
lcd_putc(y2%10+0x30);
while(1);
}

nó hiển thị giống như bạn tính đó chứ.
x=123.4;bạn khai báo x là 8bit nên nó chỉ lưu số nguyên 123
x1=x*10;kq là 1230 =4CE x1 là 8bit nên x1 chứa CE=206
bài này viết lại như sau:
Code:

#include <16f877A.h>
#device *=16
#use delay(clock = 20M)
#FUSES NOWDT, HS, NOPUT, NOPROTECT, NODEBUG, NOBROWNOUT,NOLVP, NOCPD, NOWRT

#define LCD_ENABLE_PIN PIN_B5
#define LCD_RS_PIN PIN_B7
#define LCD_RW_PIN PIN_B6
#define LCD_DATA4 PIN_B4
#define LCD_DATA5 PIN_B3
#define LCD_DATA6 PIN_B2
#define LCD_DATA7 PIN_B1

#include <lcd.c>
void main(){
float x;
lcd_init();
x=123.4;
printf(lcd_putc,"%3.1f ",x);
while(1);
}


haneishun 28-07-2011 06:51 PM

cam on anh nhieu nhe.anh pro that .^^

king0205 03-08-2011 12:16 AM

-Bạn muốn viết như vậy thì hãy #include <LCD.C> có sẵn trong thư viện CCS.
- Còn #define thì ban sửa trong thu viện LCD chứ không phải trong chương trình chính.

pstin 03-08-2011 04:20 PM

Hì, bác tdm thì đúng là "nghề" rồi!!!!!!!!. Cái code trên của tui bạn để "hiển thị chay" như vậy gặp rắc rối cũng phải!!!!!. Code trên dùng để hiển thị điện áp 220V, nó cũng chỉ là int16, điện áp bao gồm số thập phân, hiển thị ra là mất số thập phân đó, nhưng nếu nhân 10 lên thì nó vẫn tính ok!!!!!!!!!!!.
Việc chia đôi số ra làm code dài dòng nhưng làm vậy để lưu điện áp ban đầu vào epprom đó thôi!!!!!!!!

kinkin8916 06-12-2011 10:58 AM

Các anh ơi!Đây là project của em!Em làm mạch thật khi nạp code vào nó ko chạy mà LCD chỉ sáng đèn.Pic ko hỏng vì em đã test port D cho nháy led ok rồi!Chắc chỉ sai đâu ở thư viện LCD !Mong các anh giúp đở em với ạ!Em đang cần gấp ạ!
http://www.mediafire.com/?x9ymgysrps7163j

tdm 06-12-2011 10:27 PM

Trích:

Nguyên văn bởi kinkin8916 (Post 52049)
Các anh ơi!Đây là project của em!Em làm mạch thật khi nạp code vào nó ko chạy mà LCD chỉ sáng đèn.Pic ko hỏng vì em đã test port D cho nháy led ok rồi!Chắc chỉ sai đâu ở thư viện LCD !Mong các anh giúp đở em với ạ!Em đang cần gấp ạ!
http://www.mediafire.com/?x9ymgysrps7163j

chương trình của em anh đã thử trên mạch thật chạy OK.
em lên kiểm tra lại kết nối giữa port và lcd xem đã đúng với file mô phỏng hay không(vì em kết nối data ngược :d4 pic với d7 lcd).
chỉnh thử biến trở.


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