|
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 |
13-10-2012, 03:16 AM | #1 |
Đệ tử 1 túi
Tham gia ngày: May 2012
Bài gửi: 14
: |
có ai có thể giúp e với code lcd này ko ạ!!!!
#include<p33FJ128MC202.h>
#include<stdio.h> #include<stdlib.h> #include <p33FJ128MC202.h> _FOSCSEL (FNOSC_PRIPLL); _FOSC(FCKSM_CSDCMD & OSCIOFNC_OFF & POSCMD_XT); _FWDT(FWDTEN_OFF); /*cac hang so cua chuong trinh*/ #define LCD_EN LATA4 //Tin hieu Enable cho LCD, chan RRA4 #define LCD_RW LATA1 //Tin hieu Read/Write cho LCD, chan RA1 #define LCD_RS LATA0 //Tin hieu Reset cho LCD, chan RA0 #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_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 /*================================================= =============*/ /*-----------------------------------------------------------------------------------------------------*/ unsigned char time_out,idx,i; void initPORTS(void); void initLCD(void); void init_TMR1(void); void LCD_cmd4(unsigned char); void LCD_data4(unsigned char); /*------------------------------*/ void initPORTS(void) { LCD_DATA &= 0xfff0; /*xoa cac chn du lieu*/ LCD_TRIS=0xfff0; /*chon cac chan du lieu la RB8-RB11 lam ngo ra*/ TRISAbits.TRISA4=0; /*cho phep LCD hoat dong chan Ra4*/ LATAbits.LCD_EN=0; /*chon chan RA4 lam ngo ra*/ TRISAbits.TRISA1=0; /*chon doc hay ghi du lieu chan RB14*/ LATAbits.LCD_RW=0; /*chon chan RB14 lam ngo ra*/ TRISAbits.TRISA0=0; /*chon du lieu hay lenh chan RB15*/ LATAbits.LCD_RS=0; /*chon chan RB15 lam ngo ra*/ } void init_TMR1(void) { TMR1=0; T1CON=0x0000; / } void init_LCD() { 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_blink); //Bat man hinh, hien con tro nhap nhay delay_ms(1); LCD_cmd4(LCD_clear); //Xoa man hinh delay_ms(5); } void LCD_cmd4(unsigned char cmd) /*ghi lenh co ma lenh cmd*/ { unsigned temp0,i; LATAbits.LCD_RW=0; /*chon che do ghi*/ LATAbits.LCD_RS=0; /*chon che do ghi lenh*/ temp0 = LCD_DATA & 0xFFF0; /*luu lai cac trang thai truoc khi ghi lenh ra LCD*/ LCD_DATA = (temp0)|(cmd>>4); /* lay 4 bits cao cua cmd*/ LATAbits.LCD_EN = 1; /*cho lcd hoat dong*/ for(i=0;i<10;i++); /*tao tre cho qua trinh truyen*/ LATAbits.LCD_EN=0; /*ngat lcd*/ temp0 = LCD_DATA & 0xFFF0; /*luu cac trang thai truoc do*/ LCD_DATA = (temp0) | (cmd&0x0F); /*lay 4 bit thap cua cmd*/ LATAbits.LCD_EN=1; for(i=0;i<50;i++); LATAbits.LCD_EN=0; } void LCD_data4(unsigned char data) { unsigned temp2,i; LATAbits.LCD_RW=0; /*che do ghi*/ LATAbits.LCD_RS=1; /*che do ghi du lieu*/ temp2=LCD_DATA & 0xFFF0; /*luu gia tri truoc khi ghi du lieu*/ LCD_DATA=((temp2)|(data>>4)) ; /*lay 4 bit cao cua data*/ LATAbits.LCD_EN=1; for(i=0;i<10;i++); LATAbits.LCD_EN=0; temp2=LCD_DATA & 0xFFF0; /*luu gia tri truoc khi ghi du lieu*/ LCD_DATA= ((temp2)| (data & 0x0F)); /* lay 4 bit thap*/ LATAbits.LCD_EN=1; for(i=0;i<100;i++); LATAbits.LCD_EN=0; } void LCD_chuoi(unsigned char *s) { while(*s) { LCD_data4(*s); s++; } } /*chuong trinh ngat timer 1*/ void delay_ms(unsigned int n) { T1CONbits.TON=1; while (n--) { TMR1 = 0; while (TMR1<8000); } } int main() { int i; initPORTS(); delay_ms(10); init_TMR1(); delay_ms(50); init_LCD(); delay_ms(100); while(1) { LCD_data4(0x46); delay_ms(100); LCD_cmd4(LCD_homeL2); LCD_chuoi("bkhn"); delay_ms(50); }; return 1; } e thử mãi mà ko thể hiển thị LCD trong khi xuất ra các chân vi điều khiển và lcd rồi |
|
|