![]() |
|
Tài trợ cho PIC Vietnam |
dsPIC - Bộ điều khiển tín hiệu số 16-bit Theo dự kiến của Microchip, vào khoảng năm 2011 dsPIC sẽ có doanh số lớn hơn PIC |
![]() |
|
Ðiều Chỉnh | Xếp Bài |
![]() |
#46 |
Đệ tử 2 túi
Tham gia ngày: Nov 2008
Bài gửi: 42
: |
![]() |
![]() |
![]() |
![]() |
#47 | |
Trưởng lão PIC bang
|
Trích:
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 |
|
![]() |
![]() |
![]() |
#48 |
Đệ tử 2 túi
Tham gia ngày: Nov 2008
Bài gửi: 42
: |
phần cứng của em là nối RB0->RB7 với D0-D7. còn RS,RW, và E nối với RF6,RF3, và RF2.
|
![]() |
![]() |
![]() |
#49 |
Đệ tử 2 túi
Tham gia ngày: Nov 2008
Bài gửi: 42
: |
void LCD_CMD(unsigned char CMD)
{ // LCDdelayms(1); LCD_RW=0; LCD_RS = 0; LCD_DATA = CMD; LCD_EN = 1; ShortDelay(); LCD_EN = 0; //Xung Enable } Em nghĩ là như thế này, có đúng ko bác ! |
![]() |
![]() |
![]() |
#50 | |
Trưởng lão PIC bang
|
Trích:
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 |
|
![]() |
![]() |
![]() |
#51 |
Đệ tử 2 túi
Tham gia ngày: Nov 2008
Bài gửi: 42
: |
Hic, đây là code của em, biên dịch thì ko lỗi, nhưng nạp vào thì chẳng thấy LCD viết gì anh ạ, chán thế .
Code:
#include <p30f4011.h> #include <string.h> _FOSC(CSW_FSCM_OFF & HS); _FWDT(WDT_OFF); _FBORPOR(MCLR_EN & PBOR_ON & BORV_27); _FGS(CODE_PROT_OFF); #define LCD_EN LATFbits.LATF2 //Tin hieu Enable cho LCD, chan RF2 #define LCD_RS LATFbits.LATF6 //Tin hieu Reset cho LCD, chan RF6 #define LCD_RW LATFbits.LATF3 //Tin hieu doc ghi cho LCD, chan RF3 #define RW_TRIS TRISFbits.TRISF3 #define RS_TRIS TRISFbits.TRISF6 #define E_TRIS TRISFbits.TRISF2 #define LCD_PORTB PORTB #define LCD_DATA LATB //Cac tin hieu Data cho LCD #define LCD_TRIS TRISB //Tristate cua cac tin hieu Data cho LCD #define LCD_CLEAR 0x01 //Xoa man hinh LCD #define LCD_HOME 0x02 //Tro ve dau dong #define LCD_NORMAL 0x06 //Che do nhap du lieu binh thuong #define LCD_NORMAL_S 0x07 //Che do nhap du lieu binh thuong, dich man hinh #define LCD_OFF 0x08 //Tat man hinh #define LCD_ON 0x0C //Bat man hinh #define LCD_ON_CRSR 0x0E //Bat man hinh va con tro #define LCD_ON_BLINK 0x0F //Bat man hinh va con tro (nhap nhay) #define LCD_8B2L 0x38 //Che do 2 dong, giao tiep 8 bit du lieu #define LCD_HOMEL1 0x80 //Ve dau dong 1 #define LCD_HOMEL2 0xC0 //Ve dau dong 2 #define ShortDelay() {Nop() Nop() Nop() Nop() Nop() Nop() Nop() Nop() Nop()} //***************************************************************************// //***************************************************************************// // // Function: LCDdelayms // Description: LCDdelayms for LCD // Input: Number of ms // Output: None // //***************************************************************************// void LCDdelayms(unsigned int ms) { #define FCY 2500*4 unsigned int i=0; while(ms--){while(++i<FCY/7); i=0;} } //*************************** END OF LCDDELAYMS ****************************// void LCD_CMD(unsigned char CMD) { LCD_RW=0; LCD_RS = 0; LCD_DATA = CMD; LCD_EN = 1; ShortDelay(); LCD_EN = 0; } //************************* End of LCD_CMD *********************************// void LCD_DAT(unsigned char DATA) { LCD_RW=0; LCD_RS = 1; LCD_DATA = DATA; LCD_EN = 1; ShortDelay(); LCD_EN = 0; //Xung Enable } //****************************** END OF LCD_DATA ****************************// void InitLCD(void) { LCD_CMD(LCD_8B2L); //Dat che do giao tiep 8-bit, man hinh 2 dong LCDdelayms(1); LCD_CMD(LCD_8B2L); //Dat che do giao tiep 8-bit, man hinh 2 dong LCDdelayms(1); LCD_CMD(LCD_8B2L); //Dat che do giao tiep 8-bit, man hinh 2 dong LCDdelayms(1); LCD_CMD(LCD_OFF); //Tat man hinh LCDdelayms(1); LCD_CMD(LCD_CLEAR); //Xoa man hinh LCDdelayms(1); LCD_CMD(LCD_ON); //Bat man hinh LCDdelayms(1); LCD_CMD(LCD_NORMAL); //Che do nhap lieu binh thuong //Cursor move Increment, Not to shift the display LCDdelayms(1); LCD_CMD(LCD_CLEAR); //Xoa man hinh LCDdelayms(5); } //************************** END OF InitLCD *********************************// void LCD_PutChar(unsigned char character) { LCD_DAT(character); LCDdelayms(1); } //************************** END of LCD_PutChar *****************************// void LCD_WriteString(const char *str) { // LCDdelayms(1); char ps; ps = *str; while(ps>0) { str++; if (ps==0) break; LCDdelayms(1); LCD_DAT(ps); ps = *str; } } //*********************** END OF LCD_Writestring ****************************// void LCD_Gotoxy(char x, char y) { char tg; LCDdelayms(5); switch (y) { case 1:tg = 0x80+x; break; case 2:tg = 0xC0+x; break; } LCD_CMD(tg); } //************************* END OF LCD_Gotoxy *******************************// void LCD_Clear(void) { LCD_CMD(LCD_CLEAR); } void SystemInit(void) { //Init IO TRISB = TRISB & 0xFF00; //RB0..RB7 Output. TRISFbits.TRISF6 = 0; TRISFbits.TRISF2 = 0; TRISFbits.TRISF3 = 0; LATB = 0xFF00; LATFbits.LATF6 = 0; LATFbits.LATF2 = 0; LATFbits.LATF3 = 0; //InitLCD InitLCD(); } //******************************* End of SystemInit *************************// int main(void) { SystemInit(); LCD_Gotoxy(1,1); //Nhay den vi tri cot 1, dong 1. LCD_WriteString("picvietnam"); LCDdelayms(10); LCD_Gotoxy(3,2); //Nhay den vi tri cot 3, dong 2. LCD_WriteString("dspic"); while(1); //Dung chuong trinh. } //********************************* End of Main *****************************// thay đổi nội dung bởi: namqn, 26-03-2009 lúc 01:28 AM. |
![]() |
![]() |
![]() |
#52 |
Trưởng lão PIC bang
|
Chắc gì hàm LCD_WriteString() của bạn chạy đúng ý đồ (có chắc là bạn thay đổi được giá trị của tham số str hay không). Sao bạn không thử hàm lcd_putstr() của bạn tungtuantu ở trang 2 của luồng này (code đó đã thử nghiệm rồi).
Bạn nên thử xuất 1 ký tự duy nhất ra vị trí hiện tại trước, rồi thử di chuyển con trỏ, sau đó thử xuất 1 chuỗi ký tự với một hàm đáng tin cậy. Các chú thích của bạn khi gọi LCD_gotoxy() cũng không chính xác đâu, cột 1 ứng với x = 0 đấy. 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 |
![]() |
![]() |
![]() |
#53 |
Đệ tử 2 túi
Tham gia ngày: Nov 2008
Bài gửi: 42
: |
hic, em đã thử với cả hàm lcd_putstr() rồi mà ko được. Với lại, cái hàm LCD_WriteString() em đã dùng ở chế độ 4 bit, chạy ngon mà. Có khi nào do phần cứng không bác nhỉ .
|
![]() |
![]() |
![]() |
#54 | |
Trưởng lão PIC bang
|
Trích:
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 |
|
![]() |
![]() |
![]() |
#55 | |
Trưởng lão PIC bang
|
Trích:
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 |
|
![]() |
![]() |
![]() |
#56 |
Đệ tử 2 túi
Tham gia ngày: Nov 2008
Bài gửi: 42
: |
hic, em thử rồi mà vẫn ko được là sao nhỉ ?
|
![]() |
![]() |
![]() |
#57 |
Đệ tử 2 túi
Tham gia ngày: Nov 2008
Bài gửi: 42
: |
Oa oa anh ơi, được rồi . Ha ha, thank anh nhiều lắm . May quá, em sửa mãi mà ko được, giờ mới được.
|
![]() |
![]() |
![]() |
#58 |
Đệ tử 2 túi
Tham gia ngày: Nov 2008
Bài gửi: 42
: |
à, em còn 1 vấn đề là, em ghi giá trị đọc được từ ADC vào biến ADCvalue, sau đó, em dùng hàm chuyển đổi kiểu :
sprintf(Nhietdo, "%d",ADCvalue ); rồi dùng lệnh lcd_putstr(Nhietdo) (Hàm của anh Nam viết ở trang 2) để hiển thị lên LCD mà ko thấy gì cả. Anh xem hộ em mới |
![]() |
![]() |
![]() |
#59 | |
Trưởng lão PIC bang
|
Trích:
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 |
|
![]() |
![]() |
![]() |
#60 |
Đệ tử 1 túi
|
Nhờ các bác xem dùm!
Em code lại chương trình của bác Tungtuantu, thay RW-RB6; RS-RB7; EN-RC15; RD0-DB4; RD1-DB5; RD2-DB6; RD3-DB7
Em sử dụng thạch anh 7.3728, lCD của em la C1602a, chân của DSpic em nối trực tiếp với chân của LCD. Em thay đổi chương trình lại như sau. Nhưng khi nạp vào thì mạch ko chạy. Các bác xem dùm em với. Em mới bước chân vào nghề.... Em có làm gì sai ko các bác?????????? Code:
#include "p30f4011.h" _FOSC(CSW_FSCM_OFF & FRC_PLL16); _FWDT(WDT_OFF); _FBORPOR(MCLR_EN & PBOR_OFF & PWMxL_ACT_HI & PWMxH_ACT_HI); _FGS(CODE_PROT_OFF); //------------------------------------------------------------------------------ //Cac hang so cua chuong trinh (gia tri tuc thoi dung trong chuong trinh) #define ms_count 125 //So dem tuong ung voi 1 ms, cho timer 1 #define LCD_EN _LATC15 #define LCD_RW _LATB6 #define LCD_RS _LATB7 #define LCD_D4 _LATD0 //Cac tin hieu Data cho LCD, chan (D4..D7) #define LCD_D5 _LATD1 #define LCD_D6 _LATD2 #define LCD_D7 _LATD3 #define TRIS_LCD_D4 _TRISD0 //Tristate cua cac tin hieu Data cho LCD #define TRIS_LCD_D5 _TRISD1 #define TRIS_LCD_D6 _TRISD2 #define TRIS_LCD_D7 _TRISD3 #define LCD_clear 0x01 //Xoa man hinh LCD #define LCD_home 0x02 //Tro ve dau dong #define LCD_normal 0x06 //Che do nhap du lieu binh thuong #define LCD_normal_s 0x07 //Che do nhap du lieu binh thuong, dich man hinh #define LCD_off 0x08 //Tat man hinh #define LCD_on 0x0C //Bat man hinh #define LCD_on_crsr 0x0E //Bat man hinh va con tro #define LCD_on_blink 0x0F //Bat man hinh va con tro (nhap nhay) #define LCD_4b2l 0x28 //Che do 2 dong, giao tiep 4 bit du lieu #define LCD_homeL1 0x80 //Ve dau dong 1 #define LCD_homeL2 0xC0 //Ve dau dong 2 #define lcd_line_two 0x40 //Cac prototype cho cac chuong trinh con void Init_PORTS(void); //Khoi tao cac cong I/O void Delay_ms(unsigned int); //Tao tre n ms void Init_LCD(void); //Khoi tao LCD void LCD_cmd4(unsigned char); //Xuat lenh ra LCD qua giao tiep 4-bit void LCD_dat4(unsigned char); //Xuat du lieu ra LCD qua giao tiep 4-bit void lcd_putstr(char *buffer); //Xuat 1 ky tu hay 1 chuoi ky tu void lcd_gotoxy(int x, int y ); //Nhay den cot x, hang y //------------------------------------------------------------------------------ //Chuong trinh chinh void main() { _TRISE3 = 0; Init_PORTS(); //Khoi tao cac cong I/O Init_LCD(); //Khoi tao LCD lcd_putstr("NGUYEN THE TUNG"); lcd_gotoxy(4,2); lcd_putstr("DTD45-DH1"); while (1) { _LATE3=1; Delay_ms(250); //Vong lap chinh _LATE3=0; Delay_ms(250); } } //Chuong trinh con khoi tao cac cong I/O, de noi voi LED //------------------------------------------------------------------------------ void Init_PORTS(void) { LCD_D4 = 0; //Xoa cac bit chot du lieu LCD LCD_D5 = 0; LCD_D6 = 0; LCD_D7 = 0; TRIS_LCD_D4 = 0; //Cac chan du lieu LCD la ngo ra TRIS_LCD_D5 = 0; TRIS_LCD_D6 = 0; TRIS_LCD_D7 = 0; LCD_EN = 0; _TRISC15 = 0; //RE8 la ngo ra, noi vao Enable cua LCD LCD_RW = 0; _TRISB6 = 0; //RD0 la ngo ra, noi vao R/W cua LCD LCD_RS = 0; _TRISB7 = 0; //RD1 la ngo ra, noi vao Reset cua LCD } //Chuong trinh con delay bang timer 1, tre n ms //TMR1 duoc dung de dem so ms troi qua, o muc xung 8 Mips (fcy = 8 MHz) //------------------------------------------------------------------------------ void Delay_ms(unsigned int n) { TMR1 = 0; //Xoa so dem trong TMR1 T1CON = 0x0020; //Dung fcy lam clock, prescale = 1:64, tat Timer 1 PR1 = n*ms_count; //Dat nguong tran vao PR1 T1CONbits.TON = 1; //Bat timer 1 while (!_T1IF ); //Cho den khi het thoi gian cho _T1IF = 0; //Xoa co ngat cua Timer 1 T1CONbits.TON = 0; //Tat timer 1 } //Chuong trinh con khoi tao module LCD //------------------------------------------------------------------------------ void Init_LCD(void) { LCD_cmd4(LCD_4b2l); //Dat che do giao tiep 4-bit, man hinh 2 dong Delay_ms(1); LCD_cmd4(LCD_off); //Tat man hinh Delay_ms(1); LCD_cmd4(LCD_normal); //Che do nhap du lieu binh thuong Delay_ms(1); LCD_cmd4(LCD_on); //Bat man hinh, hien con tro nhap nhay Delay_ms(1); LCD_cmd4(LCD_clear); //Xoa man hinh Delay_ms(5); } //Chuong trinh con xuat lenh o che do 4 bit //------------------------------------------------------------------------------ void LCD_cmd4(unsigned char cmd) { unsigned temp1, i; LCD_RW = 0; LCD_RS = 0; //Dat che do xuat lenh temp1 = cmd >> 4; //Lay 4 bit cao LCD_D4 = temp1 & 1; //Xuat 4 bit cao LCD_D5 = (temp1 & 2) >>1; LCD_D6 = (temp1 & 4) >>2; LCD_D7 = (temp1 & 8) >>3; LCD_EN = 1; //Tao xung Enable for (i = 0; i < 2; i++); //keo dai toi thieu 1 us LCD_EN = 0; temp1 = cmd & 0x0F; //Lay 4 bit thap LCD_D4 = temp1 & 1; //Xuat 4 bit thap LCD_D5 = (temp1 & 2) >>1; LCD_D6 = (temp1 & 4) >>2; LCD_D7 = (temp1 & 8) >>3; LCD_EN = 1; //Tao xung Enable for (i = 0; i < 2; i++); //keo dai toi thieu 1 us LCD_EN = 0; } //Chuong trinh con xuat du lieu o che do 4 bit //------------------------------------------------------------------------------ void LCD_dat4(unsigned char dat) { unsigned temp2, i; LCD_RW = 0; LCD_RS = 1; //Dat che do xuat du lieu temp2 = dat >> 4; //Lay 4 bit cao LCD_D4 = temp2 & 1; //Xuat 4 bit cao LCD_D5 = (temp2 & 2) >>1; LCD_D6 = (temp2 & 4) >>2; LCD_D7 = (temp2 & 8) >>3; LCD_EN = 1; //Tao xung Enable for (i = 0; i < 2; i++); //keo dai toi thieu 1 us LCD_EN = 0; temp2 = dat & 0x0F; //Lay 4 bit thap LCD_D4 = temp2 & 1; //Xuat 4 bit thap LCD_D5 = (temp2 & 2) >>1; LCD_D6 = (temp2 & 4) >>2; LCD_D7 = (temp2 & 8) >>3; LCD_EN = 1; //Tao xung Enable for (i = 0; i < 2; i++); //keo dai toi thieu 1 us LCD_EN = 0; } //Chuong trinh con xuat 1 ky tu hay 1 chuoi ky tu //------------------------------------------------------------------------------ void lcd_putstr(char *buffer) { while(*buffer != '\0') { LCD_dat4(*buffer); /* calling another function */ /* to write each char to the lcd module */ buffer++; Delay_ms(1); } } //Chuong trinh con nhay den cot x, dong y //------------------------------------------------------------------------------ void lcd_gotoxy(int x, int y) { int address; if(y != 1) address = lcd_line_two; else address=0; address += x-1; LCD_cmd4( 0x80 | address); Delay_ms(1); } thay đổi nội dung bởi: namqn, 31-03-2009 lúc 05:34 PM. |
![]() |
![]() |
![]() |
Tags |
alphanumeric lcd, input read |
|
|
![]() |
||||
Ðề tài | Người gửi | Chuyên mục | Trả lời | Bài mới |
Học CCS thông qua Tutorial PICVIETNAM | FFGmember | Các ngôn ngữ lập trình khác (CCS C, HT PIC,...) | 105 | 08-09-2017 04:12 PM |
dsPIC Tutorial 2-Các kỹ thuật cơ bản | namqn | dsPIC - Bộ điều khiển tín hiệu số 16-bit | 33 | 17-10-2013 11:09 PM |
dsPIC Tutorial 5-Module ADC và MCPWM | namqn | dsPIC - Bộ điều khiển tín hiệu số 16-bit | 83 | 12-09-2013 10:33 PM |
dsPIC Tutorial 1-Tạo và biên dịch một project (ASM30) | namqn | dsPIC - Bộ điều khiển tín hiệu số 16-bit | 16 | 22-08-2012 12:35 AM |
dsPIC Tutorial 4-Module UART và I2C | namqn | dsPIC - Bộ điều khiển tín hiệu số 16-bit | 76 | 09-05-2012 10:55 AM |