PIC Vietnam

Go Back   PIC Vietnam > Microchip PIC > PIC - Thiết kế và Ứng dụng

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

PIC - Thiết kế và Ứng dụng Ý tưởng cho các sản phẩm sử dụng PIC/dsPIC và các sản phẩm của Microchip

Trả lời
 
Ðiều Chỉnh Xếp Bài
Old 29-03-2011, 05:06 PM   #1
lambaotrung
Đệ tử 5 túi
 
Tham gia ngày: Jan 2010
Bài gửi: 96
:
bạn stupid11 bạn có thể giải thich kỹ hơn 1 tý về các:
void lenh()
void xuat()

và bạn co thể chi ra mình muốn di chuyễn con trỏ và xuất giá trị theo vị trí con trỏ như thế nào ko.

vả lại bạn ởi mình muốn kết nối lcd theo kiểu 8bit.

vài gửi giá trị của 1 thanh ghi đó lên lcd ( chú ý: là ko dùng thu viện)
như thế mình mới đầu mình khai báo làm sao... hé. mong bạn giúp cho.

thay đổi nội dung bởi: lambaotrung, 29-03-2011 lúc 05:15 PM.
lambaotrung vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 29-03-2011, 09:33 PM   #2
stupid11
Đệ tử 6 túi
 
stupid11's Avatar
 
Tham gia ngày: Dec 2009
Nơi Cư Ngụ: TP.Hồ Chí Minh
Bài gửi: 133
:
Send a message via Yahoo to stupid11
Về thanh ghi trong LCD

Trích:
Nguyên văn bởi lambaotrung View Post
bạn stupid11 bạn có thể giải thich kỹ hơn 1 tý về các:
void lenh()
void xuat()

và bạn co thể chi ra mình muốn di chuyễn con trỏ và xuất giá trị theo vị trí con trỏ như thế nào ko.

vả lại bạn ởi mình muốn kết nối lcd theo kiểu 8bit.

vài gửi giá trị của 1 thanh ghi đó lên lcd ( chú ý: là ko dùng thu viện)
như thế mình mới đầu mình khai báo làm sao... hé. mong bạn giúp cho.

-Trong LCD có 2 thanh ghi quan trọng đó là thanh ghi lệnh (IR) và thanh ghi dữ liệu DR
-Nếu ta muốn gửi 'lệnh' cho LCD thực thi,thì ta phải nối bus với thanh ghi IR
-Muốn xuất data lênh màn hình LCD thì nối với thanh ghi DR.

Để nối với thanh ghi IR hoặc DR thì ta chỉ việc điều khiển 3 chân E,RS,RW.

+nối với thanh ghi IR:
{
RS=0; //LCD hoạt động ở chế độ ghi,bus nối với thanh ghi IR
RW=0;//LCD hoạt động ở chế độ ghi
E=1;
E=0; //xung H_to_L
}

+nối với thanh ghi DR
{
E=1;
RS=1;
RW=0;
E=0;
}

-Còn bạn hỏi tại sao lại như vậy,thì mình cũng chẳng biết phải giải thích sao nũa..bởi vì "nó là như vậy ".Mà bạn cũng ko cần để ý đến 2 chương trình con void lenh(); void xuat(); làm gì.Cứ nhớ là muốn ra lệnh cho LCD thì void lenh(),còn muốn xuất ký tự ra LCD thì void xuat() thế thôi.
File Kèm Theo
File Type: pdf LCD.pdf (1.75 MB, 322 lần tải)
stupid11 vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 29-03-2011, 09:53 PM   #3
stupid11
Đệ tử 6 túi
 
stupid11's Avatar
 
Tham gia ngày: Dec 2009
Nơi Cư Ngụ: TP.Hồ Chí Minh
Bài gửi: 133
:
Send a message via Yahoo to stupid11
Khởi tạo LCD

Sau đây là 1 số mã lệnh LCD mình biết,bạn nào biết thêm thì chia sẻ luôn:

mã HEX (0x..)

01:xóa LCD
02:trở về đầu hàng
06:ko dịch hiển thị
05:dịch hiển thị sang phải :,''dùng để chạy chữ trong LCD''
07:dịch hiển thị sang trái
08:tắt con trỏ,tắt hiển thị
0a:tắt hiển thị,bật con trỏ
0c:bật hiển thị tắt con trỏ
0e:bật hiển thị nhấp nháy con trỏ
10:dịch vị trí con trỏ sang trái
14:.................................phải
38:hiển thị 2 dòng LCD
c0:xuống hàng.
cách di chuyển con trỏ:

0x80 : con trỏ nằm ở góc sát màn hình bên trái,nếu muốn dịch đi thì mình tăng giá trị lên

vd:muốn con trỏ ở ô thứ 5 thì ra lệnh :

data=0x85;
lenh();

làm như vậy chữ bắt đầu của mình sẽ nằm ở ô thứ 5 thay vì ở ô đầu tiên.



Khởi tạo:
thường thì khi vào làm việc thì bạn sẽ cấu hình cho LCD như là xóa màn hình,bật hiền thị,cho hiển thị 2 dòng,...cái đó là tùy ở bạn.
stupid11 vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 29-03-2011, 10:04 PM   #4
stupid11
Đệ tử 6 túi
 
stupid11's Avatar
 
Tham gia ngày: Dec 2009
Nơi Cư Ngụ: TP.Hồ Chí Minh
Bài gửi: 133
:
Send a message via Yahoo to stupid11
Khi đã nắm nguyên lý hoạt động-và bảng mã của LCD thì bạn tha hồ tạo ra các hiệu ứng trên LCD,ví dụ ở đây mình cho chạy chữ trên LCD...
File Kèm Theo
File Type: rar CHAY CHU.rar (24.1 KB, 160 lần tải)
stupid11 vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 29-03-2011, 10:18 PM   #5
stupid11
Đệ tử 6 túi
 
stupid11's Avatar
 
Tham gia ngày: Dec 2009
Nơi Cư Ngụ: TP.Hồ Chí Minh
Bài gửi: 133
:
Send a message via Yahoo to stupid11
Smile Test_port

Gửi bạn lambaotrung có phải bạn muốn test kiểu này(mình có đính kèm file+code+mophong) hay ý của bạn là kiểm tra tích cực cạnh lên hay cạnh xuống..H_TO_L,hay L_TO_H...
File Kèm Theo
File Type: rar TEST_PORT.rar (37.7 KB, 109 lần tải)
File Type: rar TEST.rar (23.5 KB, 75 lần tải)

thay đổi nội dung bởi: stupid11, 29-03-2011 lúc 10:33 PM.
stupid11 vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 29-03-2011, 05:49 PM   #6
lambaotrung
Đệ tử 5 túi
 
Tham gia ngày: Jan 2010
Bài gửi: 96
:
các bác giúp mình giải quyết mạch đếm sản phẩm này giúp mình
// ấn vào chân RAO ( 0x05,0)
{
a++; // thanh ghi a = a + 1;
}
hiên thi lên LCD

nhưng lúc này lcd hiện thi phi phải là phép cộng 1. hiết chả hiểu.

#include <16F877A.h>
#include <def_877A.h>
#fuses NOWDT,NOLVP,NOPROTECT,HS,PUT
#use delay(clock=20000000)
#include <lcd_lib.c>
#byte porta = 0x05
int a=0;
void main()
{
trisb=0x00;
trisd=0x00;
lcd_init();


while(2)
{
lcd_putcmd(0x01);
lcd_putcmd(0x0c);
delay_ms(500);
portd=a;
while(1)
{
if(!bit_test(porta,0))
{
a++;
a=portd;
printf(lcd_putchar,"%d",a);
delay_ms(100);
}
}
}
}



nhưng mà củ thể là em muốn đếm đấy
ấn 1 cái thanh ghi a ( #byte a = 0x20)
a++;
hiện thị a lên lcd;
delay_ms(100);
quay về kiểm tra
rổi lại hiển thị.
File Kèm Theo
File Type: zip 03.zip (14.4 KB, 59 lần tải)

thay đổi nội dung bởi: lambaotrung, 29-03-2011 lúc 06:00 PM.
lambaotrung vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 29-03-2011, 09:12 PM   #7
stupid11
Đệ tử 6 túi
 
stupid11's Avatar
 
Tham gia ngày: Dec 2009
Nơi Cư Ngụ: TP.Hồ Chí Minh
Bài gửi: 133
:
Send a message via Yahoo to stupid11
Đây mới là file mô phỏng chữ 'HELLO WORLD''
File Kèm Theo
File Type: rar LCD.rar (7.1 KB, 151 lần tải)
stupid11 vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 30-03-2011, 11:48 PM   #8
lambaotrung
Đệ tử 5 túi
 
Tham gia ngày: Jan 2010
Bài gửi: 96
:
cảm bạn rất nhiều. và cảm ơn các bác đã cùng chia se với mình... mình sẻ nghiên cứu... thank 100 phát.

tra loi ý của bạn stupid11 là
mình muốn kiểm trả giá trị 0 hay 1 của 1 chân trong 1 port. vì thế mình có thể làm các phím nhấn để khởi chạy 1 chuong trình cong bên tring PIC

////////////////
if( RA0 == 0)
{
core
}
////////////////

thank bạn nhiều.

thay đổi nội dung bởi: lambaotrung, 31-03-2011 lúc 12:18 AM.
lambaotrung vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 30-03-2011, 11:51 PM   #9
stupid11
Đệ tử 6 túi
 
stupid11's Avatar
 
Tham gia ngày: Dec 2009
Nơi Cư Ngụ: TP.Hồ Chí Minh
Bài gửi: 133
:
Send a message via Yahoo to stupid11
Trích:
Nguyên văn bởi lambaotrung View Post
sao ko thấy bác giúp em hết vậy... hic.
Bạn muốn giúp vấn đề gì.
File Kèm Theo
File Type: rar Hien Thi Nhiet Do-LCD.rar (46.5 KB, 217 lần tải)
stupid11 vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 31-03-2011, 02:33 AM   #10
khienpzo
Đệ tử 5 túi
 
Tham gia ngày: Sep 2010
Bài gửi: 107
:
Post

Trích:
Nguyên văn bởi stupid11 View Post
Bạn muốn giúp vấn đề gì.


Anh chỉ giáo cho em rõ thêm về một số đoạn code này với em chưa hiểu lắm

//char const ht[]={'0','1','2','3','4','5','6','7','8','9',' '};

// 0192: MOVF 26,W
0193: MOVWF 2D
0194: MOVLW 0A
0195: MOVWF 2E
0196: CALL 158
0197: MOVF 77,W
0198: MOVWF 28
.................... chuc=y/10;
0199: MOVF 26,W
019A: MOVWF 2D
019B: MOVLW 0A
019C: MOVWF 2E
019D: CALL 158
019E: MOVF 78,W
019F: MOVWF 27
.................... z=(x-y)*100;
01A0: CLRF 2E
01A1: MOVF 26,W
01A2: MOVWF 2D
01A3: CALL 050
01A4: BSF 03.1
01A5: MOVF 23,W
01A6: MOVWF 30
01A7: MOVF 22,W
01A8: MOVWF 2F
01A9: MOVF 21,W
01AA: MOVWF 2E
01AB: MOVF 20,W
01AC: MOVWF 2D
01AD: MOVF 7A,W
01AE: MOVWF 34
01AF: MOVF 79,W
01B0: MOVWF 33
01B1: MOVF 78,W
01B2: MOVWF 32
01B3: MOVF 77,W
01B4: MOVWF 31
*
02F5: MOVF 77,W
02F6: MOVWF 2D
02F7: MOVF 78,W
02F8: MOVWF 2E
02F9: MOVF 79,W
02FA: MOVWF 2F
02FB: MOVF 7A,W
02FC: MOVWF 30
02FD: MOVF 30,W
02FE: MOVWF 34
02FF: MOVF 2F,W
0300: MOVWF 33
0301: MOVF 2E,W
0302: MOVWF 32
0303: MOVF 2D,W
0304: MOVWF 31
0305: CLRF 38
0306: CLRF 37
0307: MOVLW 48
0308: MOVWF 36
0309: MOVLW 85
030A: MOVWF 35
*
037F: MOVF 7A,W
0380: MOVWF 30
0381: MOVF 79,W
0382: MOVWF 2F
0383: MOVF 78,W
0384: MOVWF 2E
0385: MOVF 77,W
0386: MOVWF 2D
0387: CALL 139
0388: MOVF 78,W
0389: MOVWF 2A
.................... le1=z/10;
038A: MOVF 2A,W
038B: MOVWF 2D
038C: MOVLW 0A
038D: MOVWF 2E
038E: CALL 158
038F: MOVF 78,W
0390: MOVWF 2B
.................... le2=z%10;
0391: MOVF 2A,W
0392: MOVWF 2D
0393: MOVLW 0A
0394: MOVWF 2E
0395: CALL 158
0396: MOVF 77,W
0397: MOVWF 2C
.................... portb=0x38;
0398: MOVLW 38
0399: MOVWF 06
.................... lenh();
039A: CALL 182
.................... portb=0x0e;
039B: MOVLW 0E
039C: MOVWF 06
.................... lenh();
039D: CALL 182
.................... portb=0x80;
039E: MOVLW 80
039F: MOVWF 06
.................... lenh();
03A0: CALL 182
.................... portb=0x0c;
03A1: MOVLW 0C
03A2: MOVWF 06
.................... lenh();
03A3: CALL 182
.................... for(i=0;i<9;i++)
03A4: CLRF 29
03A5: MOVF 29,W
03A6: SUBLW 08
03A7: BTFSS 03.0
03A8: GOTO 3B0
.................... {
.................... portb=ht1[i];
03A9: MOVF 29,W
03AA: CALL 013
03AB: MOVWF 78
03AC: MOVWF 06
.................... xuat();
03AD: CALL 18A
.................... }
03AE: INCF 29,F
03AF: GOTO 3A5
.................... portb=0x89;
03B0: MOVLW 89
03B1: MOVWF 06
.................... lenh();
03B2: CALL 182
.................... if(chuc==0)
03B3: MOVF 27,F
03B4: BTFSS 03.2
03B5: GOTO 3B8
.................... {chuc=10;}
03B6: MOVLW 0A
03B7: MOVWF 27
.................... chuc;
.................... portb=ht[chuc];
03B8: MOVF 27,W
03B9: CALL 004
03BA: MOVWF 78
03BB: MOVWF 06
.................... xuat();
03BC: CALL 18A
.................... portb=ht[dv];
03BD: MOVF 28,W
03BE: CALL 004
03BF: MOVWF 78
03C0: MOVWF 06
.................... xuat();
03C1: CALL 18A
.................... portb=0b00101110;
03C2: MOVLW 2E
03C3: MOVWF 06
.................... xuat();
03C4: CALL 18A
.................... portb=ht[le1];
03C5: MOVF 2B,W
03C6: CALL 004
03C7: MOVWF 78
03C8: MOVWF 06
.................... xuat();
03C9: CALL 18A
.................... portb=ht[le2];
03CA: MOVF 2C,W
03CB: CALL 004
03CC: MOVWF 78
03CD: MOVWF 06
.................... xuat();
03CE: CALL 18A
.................... portb=0b11011111;
03CF: MOVLW DF
03D0: MOVWF 06
.................... xuat();
03D1: CALL 18A
.................... portb=0b01000011;
03D2: MOVLW 43
03D3: MOVWF 06
.................... xuat();
03D4: CALL 18A
.................... portb=0xc0;
03D5: MOVLW C0
03D6: MOVWF 06
.................... lenh();
03D7: CALL 182
.................... for(i=0;i<14;i++)
03D8: CLRF 29
03D9: MOVF 29,W
03DA: SUBLW 0D
03DB: BTFSS 03.0
03DC: GOTO 3E4
.................... {
.................... portb=ht3[i];
03DD: MOVF 29,W
03DE: CALL 021
03DF: MOVWF 78
03E0: MOVWF 06
.................... xuat();
03E1: CALL 18A
.................... }
03E2: INCF 29,F
03E3: GOTO 3D9
.................... portb=0xc0;
03E4: MOVLW C0
03E5: MOVWF 06
.................... lenh();
03E6: CALL 182
khienpzo vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 31-03-2011, 10:37 AM   #11
stupid11
Đệ tử 6 túi
 
stupid11's Avatar
 
Tham gia ngày: Dec 2009
Nơi Cư Ngụ: TP.Hồ Chí Minh
Bài gửi: 133
:
Send a message via Yahoo to stupid11
Bạn dịch từ CCS sang ASM à..như vậy thì sao mà mình giải thích được..bạn đưa code CCS lên rồi anh em cùng giải quyết.
-Còn chương trình hiển thị nhiệt độ trên LCD mình đã test luôn trên phần cứng rồi..ko sai đâu bạn..
stupid11 vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 05-07-2011, 10:03 AM   #12
pdkxlily
Đệ tử 2 túi
 
Tham gia ngày: Mar 2011
Bài gửi: 27
:
Trích:
Nguyên văn bởi stupid11 View Post
Bạn muốn giúp vấn đề gì.
biên dịch nó báo thế này là sao bạn "*error 18 "123(mani).c" Line 0(0,1): file can not be opend "
Trích:
{
docADC(); // adc 10bit
x=read_ADC(); // cái này là đọc giá trị adc đúg ko à ??
x=x/2.049;
y=x;
hienthi(x);
}
cái chia 2.049 là giải thix kiểu này đúng ko các bác
adc 10bit 0-1023 ,mà V_ref = VCC=5V nên ADC_value=1 tương ứng 5/1024=4.887mV
Trong khi đó LM335
cho ra điện áp là 10mV/1K nên để giá trị ADC thay đổi 1 đơn vị thì nhiệt độ phải thay đổi là 2K => x= ADC_value*(4.887/10)

thay đổi nội dung bởi: pdkxlily, 05-07-2011 lúc 10:25 AM.
pdkxlily vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 31-03-2011, 12:30 AM   #13
stupid11
Đệ tử 6 túi
 
stupid11's Avatar
 
Tham gia ngày: Dec 2009
Nơi Cư Ngụ: TP.Hồ Chí Minh
Bài gửi: 133
:
Send a message via Yahoo to stupid11
-Ý bạn là khi nhấn phím thì sẽ thực thi 1 chương trình nào đó chứ gì...mình đã trình bày ở trong file TEST.RAR rồi mà.
-Còn đây là chương trình đếm SP hiển thị lên LCD.
-Mình cũng mới nghiên cứu PIC thôi,cũng chưa rành lắm đâu...Nhưng nếu trong phạm vi giúp bạn được thì mình sẽ giúp...nếu có gì sai sót bạn cứ chỉ dạy.,ko có vấn đề gì cả..mình lên picvietnam là để cùng giao lưu học hỏi mà.
File Kèm Theo
File Type: rar Dem San Pham-LCD.rar (41.9 KB, 142 lần tải)
stupid11 vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 31-03-2011, 12:42 AM   #14
stupid11
Đệ tử 6 túi
 
stupid11's Avatar
 
Tham gia ngày: Dec 2009
Nơi Cư Ngụ: TP.Hồ Chí Minh
Bài gửi: 133
:
Send a message via Yahoo to stupid11
Smile

Trích:
Nguyên văn bởi lambaotrung View Post
cảm bạn rất nhiều. và cảm ơn các bác đã cùng chia se với mình... mình sẻ nghiên cứu... thank 100 phát.

tra loi ý của bạn stupid11 là
mình muốn kiểm trả giá trị 0 hay 1 của 1 chân trong 1 port. vì thế mình có thể làm các phím nhấn để khởi chạy 1 chuong trình cong bên tring PIC

////////////////
if( RA0 == 0)
{
core
}
////////////////

thank bạn nhiều.

Thưởng khi sử dụng phím nhấn thì phải chờ nhấn -nhả
vd:
if(RA0==0) //phím đã được nhấn//
{
do{}while(RA0==0);//chờ phím nhả ra //nếu phím chưa được buông thỉ ko làm gì cả//
a++; //tăng giá trị a lên 1 đv
}

nếu bạn chỉ sử dụng:
if(RA0==0)
{
a++;
}

với code như vậy thì 1 lần nhấn phím của bạn,,thì giá trị của a ko fai tăng lên 1 mà là 1 con số nào đó tùy thuộc vào thạch anh...(sẽ rất lớn)...tại vì khi bạn nhấn xuống và nhả ra tối thiểu phải mất vài chục ms.,thậm chí cả giây..như vậy a cứ tăng lên khi nào bạn nhả ra thì thôi.Chắc bạn đẫ hiểu rồi chứ

-1 gợi ý nữa,bạn có thể sử dụng ngắt.cái này thì đơn giản hơn..mình đã trình bày trong file DemSanPham_LCD.rar
stupid11 vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 31-03-2011, 02:31 PM   #15
lambaotrung
Đệ tử 5 túi
 
Tham gia ngày: Jan 2010
Bài gửi: 96
:
bác ởi như vậy mình 1 in 1 giá của 1 thanh ghi lên màn hình ở vi trí con trỏ mình muốn mình dùng lệnh gì bác hé.

có giá tri ở thenh ghi tên là thanh ghi " a "

muốn dưa lênh màn hình theo vị trị của con trỏ mình làm thế nào...

minh đã hiểu dc nhiều cảm ơn các bạn nhiều lám.........

thay đổi nội dung bởi: lambaotrung, 31-03-2011 lúc 03:00 PM.
lambaotrung 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à 08:58 AM.


Đượ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