|
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 |
27-12-2011, 11:23 AM | #3 |
Đệ tử 1 túi
Tham gia ngày: Sep 2009
Bài gửi: 13
: |
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. |
|
|