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

Ðề tài đã khoá
 
Ðiều Chỉnh Xếp Bài
Old 16-07-2007, 11:08 PM   #1
namqn
Trưởng lão PIC bang
 
Tham gia ngày: Feb 2006
Nơi Cư Ngụ: Tp. HCM, Việt Nam
Bài gửi: 3,025
:
Send a message via Yahoo to namqn
Trích:
Nguyên văn bởi anh_gioi View Post
vậy bộ font này là loại bộ font nào? hiển thị xấu cũng được,chủ yếu mình muốn xem các làm như thế nào thui
(mình sử dụng 16F877A,LCD 16x2)
LCD chủ yếu hiển thị bằng CGROM (Character Generator Read Only Memory), tức là bạn chỉ cần cho biết mã ASCII của ký tự, các pattern thể hiện ký tự (5x7, 5x8 hay 5x10) sẽ được lấy từ ROM. Các bộ điều khiển tương thích HD44780 cũng cho phép người dùng tự định nghĩa tối đa 8 ký tự (5x7 hay 5x8) trong vùng CGRAM (Character Generator Random Access Memory). Vùng nhớ này gồm 64 byte, chứa trực tiếp các pattern để tạo ký tự, và người dùng được phép ghi vào. Tuy nhiên, chỉ có thể vẽ thêm 8 ký tự, nên việc bạn muốn hiển thị tiếng Việt trên LCD ký tự là việc rất khó khăn và hạn chế. Nếu bạn vẫn muốn làm thì hãy tìm đọc datasheet của HD44780 và các tutorial trên mạng. Cách làm khá dài dòng nên không tiện nêu trên diễn đàn.

Một link để tham khảo:
http://deanandara.com/robots/ApuLcd.html

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

thay đổi nội dung bởi: namqn, 16-07-2007 lúc 11:17 PM.
namqn vẫn chưa có mặt trong diễn đàn  
Old 16-07-2007, 10:56 PM   #2
bien_van_khat
...Damned...
 
bien_van_khat's Avatar
 
Tham gia ngày: Apr 2006
Nơi Cư Ngụ: Hồ Chí Minh
Bài gửi: 522
:
Mình ko theo dõi luồng này, nên ko chắc vấn đề này đã được đề cập hay chưa, bạn nên tìm lại trong diễn đàn, ở đây mình chỉ nói sơ qua.

Mỗi ký tự hiển thị trên lcd thường có kích thước 7 hàng x 5 cột do đó được xác định bởi 7byte, 3 bit cao nhất mỗi byte ko sử dụng. VD:
0x0E
0x0E
0x04
0x04
0x04
0x04
0x0C
Tạo thành chữ J hoa
Để có bộ font của riêng mình công việc của bạn là tìm ra các byte này ứng với mỗi ký tự. Công đoạn này tốn rất nhiều công sức nếu làm bằng tay, thường người ta dùng phần mềm, nhưng các phần mềm này lại thường ko free.
__________________
- Xin đọc trước khi post bài

Xin đặt code trong thẻ [ code ] [ /code ]
bien_van_khat vẫn chưa có mặt trong diễn đàn  
Old 17-07-2007, 12:02 AM   #3
anh_gioi
Đệ tử 6 túi
 
Tham gia ngày: Oct 2006
Bài gửi: 147
:
vậy nếu hiển thị trên LCD muốn dễ dàng thì em phải sử dụng lợi LCD khác a(ko phải loại 16x2)như loại mà bien_van_khat đã nói ạ.ngoài ra anh có thể nêu cho em những loại LCD lào nữa ko ạ(tất nhiên kinh phi mua LCD cũng phải rẻ ạ)
anh_gioi vẫn chưa có mặt trong diễn đàn  
Old 17-07-2007, 01:49 AM   #4
namqn
Trưởng lão PIC bang
 
Tham gia ngày: Feb 2006
Nơi Cư Ngụ: Tp. HCM, Việt Nam
Bài gửi: 3,025
:
Send a message via Yahoo to namqn
LCD thông thường có 2 loại khác nhau về cách thức hiện thực: LCD ký tự và LCD đồ họa. LCD ký tự có các ô định nghĩa sẵn sẽ hiển thị các ký tự nằm trong bộ ROM ký tự hay vài ký tự do người dùng định nghĩa. LCD đồ họa cho phép bạn vẽ (hiển thị) bất kỳ điểm ảnh nào, nó cũng có chế độ hiển thị ký tự. Tất nhiên LCD đồ họa thì giao tiếp phức tạp hơn và cũng đắt tiền hơn. Bạn nên dùng LCD ký tự khi mới làm quen với LCD, sau đó có nhu cầu thì chuyển sang LCD đồ họa. LCD đồ họa gần gũi nhất là các màn hình tại các quầy counter tính tiền của siêu thị, các màn hình trong các máy trò chơi bỏ túi, ...

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
namqn vẫn chưa có mặt trong diễn đàn  
Old 18-07-2007, 02:34 PM   #5
sandro_bk
Đệ tử 4 túi
 
sandro_bk's Avatar
 
Tham gia ngày: Jul 2007
Bài gửi: 66
:
chào các bạn mình mới học pic nên chưa biết nhiều mong được sự giúp đỡ,
tui có vài câu hỏi mong được chỉ giáo
tui sử dụng ngắt timer nhưng thấy lệnh
set_timer0(); ko có tác dụng nghĩa là đặt số mấy cũng ko thấy thay đổi
thậm chí ko có lệnh đó vẫn chạy như thường
bạn nào làm ngắt timer rùi chỉ mình với
Code:
#include <18F4331.h>
#fuses HS,NOWDT,NOPROTECT,NOLVP
#use delay(clock=4000000)

int i=0;
void main()
{
	setup_timer_0(rtcc_div_32);
        set_timer0(10);   ????nếu đặt 1 thì bao lâu mới ngắt
	enable_interrupts(int_rtcc);
	enable_interrupts(global);
	while(true)
	{
	}
}

#int_rtcc
void ngat_timer()
{
	i++;
	output_D(i);
	
}
cấu hỏi thứ 2 là khi giao tiếp máy tính mình truyền từ PC đến pic
dùng lệnh getc(); thì chỉ thu được 1 kí tự
ví dụ truyền số 12 thì thu được 2 số 1 và 2
có bạn nào biết lệnh nào để lấy 1 chuỗi ko?

thay đổi nội dung bởi: namqn, 18-07-2007 lúc 06:48 PM.
sandro_bk vẫn chưa có mặt trong diễn đàn  
Old 18-07-2007, 06:56 PM   #6
namqn
Trưởng lão PIC bang
 
Tham gia ngày: Feb 2006
Nơi Cư Ngụ: Tp. HCM, Việt Nam
Bài gửi: 3,025
:
Send a message via Yahoo to namqn
Về timer 0 và hàm set_timer0(), bạn đọc thêm tài liệu hướng dẫn của CCS C (trang 206, ver. 4, 01/2007) và datasheet của chip.

Về getc(), nếu bạn dùng nó thì tất nhiên chỉ lấy được 1 ký tự là nó đã trở về. Bạn đọc thêm về hàm gets() trong tài liệu hướng dẫn của CCS C (đã nêu trên, trang 148) để đọc 1 chuỗi ký tự.

Nếu bạn chưa biết tài liệu đó lấy ở đâu:
http://www.ccsinfo.com/downloads/ccs_c_manual.pdf

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
namqn vẫn chưa có mặt trong diễn đàn  
Old 18-07-2007, 08:24 PM   #7
anh_gioi
Đệ tử 6 túi
 
Tham gia ngày: Oct 2006
Bài gửi: 147
:
cho em hỏi cái bài LCD ở trên mà em đã hỏi ý ạ.em đã cho hiển thị được rùi, nhưng :
khi chạy lượt đầu tiên thì nó bị mất 1 kí tự đầu tiên,ở cả 2 hàng luôn.và chạy lượt sau nó ko bị mất,đúng như lập trình.
em đã khai báo 0x80 và 0xc0 cho 2 hàng ạ
anh_gioi vẫn chưa có mặt trong diễn đàn  
Old 18-07-2007, 11:06 PM   #8
namqn
Trưởng lão PIC bang
 
Tham gia ngày: Feb 2006
Nơi Cư Ngụ: Tp. HCM, Việt Nam
Bài gửi: 3,025
:
Send a message via Yahoo to namqn
Trích:
Nguyên văn bởi anh_gioi View Post
cho em hỏi cái bài LCD ở trên mà em đã hỏi ý ạ.em đã cho hiển thị được rùi, nhưng :
khi chạy lượt đầu tiên thì nó bị mất 1 kí tự đầu tiên,ở cả 2 hàng luôn.và chạy lượt sau nó ko bị mất,đúng như lập trình.
em đã khai báo 0x80 và 0xc0 cho 2 hàng ạ
Mất theo kiểu nào vậy bạn? Không hiển thị ra ở vị trí đó hay là những ký tự nằm cùng hàng bị dịch qua bên trái một vị trí hay là hiển thị sai ở vị trí đó?

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
namqn vẫn chưa có mặt trong diễn đàn  
Old 19-07-2007, 11:44 AM   #9
anh_gioi
Đệ tử 6 túi
 
Tham gia ngày: Oct 2006
Bài gửi: 147
:
dạ .LCD quét lần đầu tiên nó bị dịch sang trai 1 ki tu.(như : ANH_GIOI thì nó còn NH_GIOI).quét lần thứ hai thì nó ko bị mất như trên nữa.
e bị mất cả 2 hàng luôn mới đau chứ
anh_gioi vẫn chưa có mặt trong diễn đàn  
Old 19-07-2007, 06:19 PM   #10
namqn
Trưởng lão PIC bang
 
Tham gia ngày: Feb 2006
Nơi Cư Ngụ: Tp. HCM, Việt Nam
Bài gửi: 3,025
:
Send a message via Yahoo to namqn
Trích:
Nguyên văn bởi anh_gioi View Post
dạ .LCD quét lần đầu tiên nó bị dịch sang trai 1 ki tu.(như : ANH_GIOI thì nó còn NH_GIOI).quét lần thứ hai thì nó ko bị mất như trên nữa.
e bị mất cả 2 hàng luôn mới đau chứ
Hiện tượng này có nhiều khả năng là do thuật toán của bạn, lượt chạy đầu tiên con trỏ của chuỗi ký tự bị sai chẳng hạn. Bạn kiểm tra lại thuật toán của chương trình. Ở đầu vòng lặp chính nên có lệnh đặt giá trị cho con trỏ dùng để truy xuất chuỗi ký tự.

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
namqn vẫn chưa có mặt trong diễn đàn  
Old 19-07-2007, 10:10 PM   #11
nguyen.geo
Đệ tử 2 túi
 
Tham gia ngày: Jan 2007
Bài gửi: 27
:
Trích:
Nguyên văn bởi anh_gioi View Post
dạ .LCD quét lần đầu tiên nó bị dịch sang trai 1 ki tu.(như : ANH_GIOI thì nó còn NH_GIOI).quét lần thứ hai thì nó ko bị mất như trên nữa.
e bị mất cả 2 hàng luôn mới đau chứ
Ban ơi theo mình thì bạn hãy đặt giá trị trễ thêm 1 tí nữa là được thôi mình cũng đã gặp trường hợp nảy rồi lỗi này thường xuất hiện với các câu lệnh như là xóa màn hình, về đầu dòng, dịch con trỏ. Thưởng thì mình đặt trễ sau xóa màn hình 2ms, sau lệnh chức năng khác cho LCD ( Trường hợp RS = 0) là 10 us thì nó làm việc bình thường.các lệnh hiển thị dữ liệu thì không cần. Bạn thử theo cách của mình nhé. chúc bạn thành công !
nguyen.geo vẫn chưa có mặt trong diễn đàn  
Old 02-08-2007, 10:08 AM   #12
picpicpic
Đệ tử 2 túi
 
picpicpic's Avatar
 
Tham gia ngày: Jan 2006
Bài gửi: 36
:
Bạn chú ý chân RB3 là chân cực thu hở, muốn sử dụng, bạn mắc thêm 1 điện trở kéo lên.
__________________
************************************************** **
The only wrong thing would be to deny what your heart truly feels!
************************************************** **
picpicpic vẫn chưa có mặt trong diễn đàn  
Old 05-08-2007, 02:12 PM   #13
c828
Nhập môn đệ tử
 
Tham gia ngày: Jan 2006
Bài gửi: 1
:
chào các Bác mình mới học ccs c được vài ngày nhưng khi viết ct hiển thị trên 2 led 7 doan và mô phỏng trên proteus thì không được, mong các bác cho em đoạn code. cám ơn
c828 vẫn chưa có mặt trong diễn đàn  
Old 09-08-2007, 04:12 AM   #14
sphinx9
Nhập môn đệ tử
 
Tham gia ngày: Jun 2007
Bài gửi: 1
:
mấy anh cho em hỏi xíu ạ tại seo khi em xài các lệnh
trisb=0;
rb0=1;
rb1=1;
rb2=1;
rb3=1;
hoặc các lệnh:
output_high(pin_b0);
output_high(pin_b1);
output_high(pin_b2);
output_hgh(pin_b3);
mà nếu em gắn ở các chân đó là led thì nó sáng lần lược ở rb0 rb1 rb2 rb3 chứ nó ko sáng ở cả 4 chân bật debug của protus lên thì
trisb=0b11110000 : cái này thì đúng rùi
portb=0b00001000 : còn cái này seo kì wá
nhưng nếu em lắp vào đó dộng cơ thì lại khác em lắp vào rb0 động cơ ocn2 mấy cái kia là led thì động cơ way led ở rb3 sáng còn ở rb1 rb2 tắt
nhưng nếu em xài lệnh
portb=0b00001111; thì nó lại sáng bình thường
mấy anh giải thích giùm em với
cám ơn
sphinx9 vẫn chưa có mặt trong diễn đàn  
Old 12-08-2007, 12:09 AM   #15
dvnccbmacbt
Đệ tử 4 túi
 
Tham gia ngày: May 2007
Bài gửi: 65
:
Chào mọi người! Em có 1 thắc mắc muốn hỏi : Với ngắt RB4-7 thì dòng lệnh ext_int_edge( H_to_L ) hình như không có tác dụng. Em thử bỏ hoặc thay thế bằng ( L_to_H ) thì thấy không có thay đổi gì. Hình như mặc định là H_to_L . Em có đọc trong datasheet PIC18f4550 thì chỉ thấy nói đến chọn cạnh lên xuống ở ngắt ngoài RB0, còn ở RB4-7 thì không thấy nói rõ. Em không hiểu rõ chỗ này. Mong mọi người chỉ bảo.
dvnccbmacbt vẫn chưa có mặt trong diễn đàn  
Ðề tài đã khoá


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

Similar Threads
Ðề 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


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