các bác test cho em dòng code LCD này với.em biên dịch thcnhf công rồi nhưng khi mô phỏng lại chẳng có tín hiệu j cả
#include<p33fj12gp202.h>
_FOSCSEL(FNOSC_FRC)
_FOSC(FCKSM_CSDCMD&POSCMD_NONE)
_FWDT(FWDTEN_OFF)
// DINH NGHIA CAC CHAN
#define LCD_EN _LATB2
#define LCD_RS _LATB0
#define LCD_RW _LATB1
#define LED _LATB15
// DINH NGHIA CAC CHAN DU LIEU LCD
//#define LCD_DAT LATB
//#define LCD_TRIS TRISB
#define LCD_D4 _LATB6
#define LCD_D5 _LATB7
#define LCD_D6 _LATB8
#define LCD_D7 _LATB9
// DINH NGHIA CAC CHE DO HOAT DONG CUA LCD
#define LCD_4b2l 0x28
#define LCD_clear 0x01
#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 //........nhap nhay
#define LCD_homel1 0x80 //tro ve dau dong 1
#define LCD_homel2 0xc0 // tro ve dau dong 2
#define LCD_mv 0x10 // dich con tro sang phai
// cac chuong trinh con
void Init_PORTS(void);
void LCD_data(unsigned char dat);
void LCD_cmd(unsigned char cmd);
void Init_LCD(void);
void Delay1ms(void);
void Delay1s(void);
// khai bao hang so
const unsigned char __attribute__ ((space(psv),address (0x0400)))
Chuoi1[]="DS-PIC\0";
unsigned int idx,flag;
void Init_PORTS(void)
{
//LCD_DAT &= 0xFFF0; //Xoa cac bit chot du lieu LCD
//LCD_TRIS = 0xFFF0; //Cac chan du lieu LCD la ngo ra
LATB=0X0000;
LCD_D4 = 0; //Xoa cac bit chot du lieu LCD
_TRISB6 = 0; //Cac chan du lieu LCD la ngo ra
LCD_D5 = 0;
_TRISB7 = 0;
LCD_D6 = 0;
_TRISB8 = 0;
LCD_D7 = 0;
_TRISB9 = 0;
LCD_EN = 0;
_TRISB2 = 0; //RE8 la ngo ra, noi vao Enable cua LCD
LCD_RW = 0;
_TRISB1 = 0; //RD0 la ngo ra, noi vao R/W cua LCD
LCD_RS = 0;
_TRISB0 = 0; _TRISB15 = 0; //RD1 la ngo ra, noi vao Reset cua LCD
}
//Chuong trinh con xuat lenh o che do 4 bit
void LCD_cmd(volatile unsigned char cmd) {
volatile unsigned i;
LCD_RW = 0;
LCD_RS = 0; //Dat che do xuat du lieu
//Xuat 4 bit cao
LCD_D7 = (cmd>>7)&1;
LCD_D6= (cmd>>6)&1;
LCD_D5 = (cmd>>5)&1;
LCD_D4 = (cmd>>4)&1;
LCD_EN = 1; //Tao xung Enable
for (i = 0; i < 5; i++); //keo dai toi thieu 1 us
LCD_EN = 0;
//Xuat 4 bit thap
LCD_D7 = (cmd>>3)&1;
LCD_D6 = (cmd>>2)&1;
LCD_D5 = (cmd>>1)&1;
LCD_D4 = (cmd)&1;
LCD_EN = 1; //Tao xung Enable
for (i = 0; i < 5; i++); //keo dai toi thieu 1 us
LCD_EN = 0;
}
//Chuong trinh con xuat du lieu o che do 4 bit
//------------------------------------------------------------------------------
void LCD_data(volatile unsigned char dat) {
volatile unsigned i;
LCD_RW = 0;
LCD_RS = 1; //Dat che do xuat du lieu
//Xuat 4 bit cao
LCD_D7 = (dat>>7)&1;
LCD_D6= (dat>>6)&1;
LCD_D5 = (dat>>5)&1;
LCD_D4 = (dat>>4)&1;
LCD_EN = 1; //Tao xung Enable
for (i = 0; i < 5; i++); //keo dai toi thieu 1 us
LCD_EN = 0;
//Xuat 4 bit thap
LCD_D7 = (dat>>3)&1;
LCD_D6 = (dat>>2)&1;
LCD_D5 = (dat>>1)&1;
LCD_D4 = (dat)&1;
LCD_EN = 1; //Tao xung Enable
for (i = 0; i < 5; i++); //keo dai toi thieu 1 us
LCD_EN = 0;
}
void Init_LCD(void)
{
LCD_cmd(LCD_4b2l); //Dat che do giao tiep 4-bit, man hinh 2 dong
Delay1ms();
LCD_cmd(LCD_off); //Tat man hinh
Delay1ms();
LCD_cmd(LCD_normal); //Che do nhap du lieu binh thuong
Delay1ms();
LCD_cmd(LCD_on_blink); //Bat man hinh, hien con tro nhap nhay
Delay1ms();
LCD_cmd(LCD_clear); //Xoa man hinh
Delay1ms();
}
void Delay1ms(void)
{
int i,j;
for (i=0; i<10; i++)
for (j=0; j<10; j++);
}
void Delay1s(void)
{
int i,j,k;
for (i=0; i<200; i++)
for (j=0; j<200; j++)
for (k=0; k<10; k++);
}
//Chuong trinh chinh
int main(void) {
/*
PLLFBD=41; // M=43
CLKDIVbits.PLLPOST=0; // N1=2
CLKDIVbits.PLLPRE=0; // N2=2
OSCTUN=0;
RCONbits.SWDTEN=0; // Disable Watch Dog Timer
__builtin_write_OSCCONH(0x01);
__builtin_write_OSCCONL(0x01);
while (OSCCONbits.COSC != 0b001);
// Wait for PLL to lock
while(OSCCONbits.LOCK!=1) {};
*/
Init_PORTS(); //Khoi tao cac cong I/O
Delay1ms();
Init_LCD();
Delay1ms();
// while (Chuoi1[idx])// { //Xuat chuoi ra dong thu nhat cua LCD
// LCD_data('a');
// Delay1ms();
// };
// LCD_cmd(LCD_homel2);
// Delay1ms();
// idx = 0;
// while (Chuoi1[idx]) //{ //Xuat chuoi ra dong thu hai cua LCD
// LCD_data('b');
// Delay1ms();
// };
LED =0;
LCD_data('a');
Delay1s();
while (1) {
// Delay1s();
// LED =1;
// Delay1s();
// Delay1ms();
};
}
thay đổi nội dung bởi: trinhdieuhvktqs, 28-12-2011 lúc 09:59 AM.
|