|
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 |
14-04-2009, 04:39 PM | #23 |
Đệ tử 1 túi
|
Bác xem dùm em code của em sai đâu. Em mới học, chẳng biết xử lý thế nào cả.
Cảm ơn bác đã bỏ thời gian giúp đỡ em ! #include "p30f4011.h" #include "stdio.h" _FOSC(CSW_FSCM_OFF & FRC_PLL4); //Clock = 32 MHz _FWDT(WDT_OFF); _FBORPOR(MCLR_EN & PBOR_OFF & PWMxL_ACT_HI & PWMxH_ACT_HI); _FGS(CODE_PROT_OFF); #define ms_count 125 #define LCD_EN _LATC13 //Tin hieu Enable cho LCD, chan RE8 #define LCD_RW _LATB6 //Tin hieu Read/Write cho LCD, chan RD0 #define LCD_RS _LATB7 //Tin hieu Reset cho LCD, chan RD1 #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 SW_DAT PORTE //Cac tin hieu Data cho switch, chan RB0..RB4 (S1..S5) #define SW_TRIS TRISE //Tristate cua cac tin hieu Data cho switch #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 //#define ADCBUF 0x60 /*#define c1 0x66 #define c2 0x68 #define c3 0x6A //#define c4 0x6C */ //int x; //float y; //char z; //#define LED _LATE0 //LED noi vao RE0 //#define LED _LATE1 //LED noi vao RE0 //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(void) { _TRISE3 = 0; Init_PORTS(); //Khoi tao cac cong I/O Init_ADC10(); //Khoi tao module ADC Init_LCD(); //Khoi tao LCD lcd_putstr(read()); lcd_gotoxy(4,2); lcd_putstr("DC_DC CONVERTER"); } //Chuong trinh con khoi tao cac cong I/O, de noi voi LED //------------------------------------------------------------------------------ void Init_PORTS(void) { LATB= 0; //Xoa thanh ghi chot cong B 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; _TRISC13 = 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 ADPCFG = 0xFFFF; //RB0..RB4 la cac chan digital SW_TRIS = 0x001F; //Cac chan du lieu RB0..RB4 la ngo vao } //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(2); LCD_cmd4(LCD_off); //Tat man hinh Delay_ms(2); LCD_cmd4(LCD_normal); //Che do nhap du lieu binh thuong Delay_ms(2); LCD_cmd4(LCD_on); //Bat man hinh, hien con tro nhap nhay Delay_ms(2); 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(2); } } //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); } void _ISR _T1Interrupt(void) { _T1IF = 0; //Xoa co ngat _LATE0 ^= 1; //Lat trang thai LED _LATE1 ^= 1; //Lat trang thai LED } //Chuong trinh con khoi tao module chuyen doi A/D, doc ngo vao AN0 void Init_ADC10(void) { ADPCFG = 0xFFEF; //Cac chan khac la digital, chan AN0/RB0 la analog ADCON1 = 0x0060; //Module PWM cham dut lay mau va kich hoat //viec chuyen doi A/D ADCON2 = 0; ADCHS = 0; //Kenh 0 doc tin hieu giua AN0 va AVss ADCSSL = 0; //Khong quet cac ngo vao ADCON3 = 0x0103; //Dung 1 TAD cho lay mau, dung clock he thong, //TAD = 2xTcy = 250 ns _ADIF = 0; //Xoa co ngat ADC _ADIE = 1; //Cho phep ngat ADC _ADON = 1; //Bat module ADC _ASAM = 1; //Khoi dong che do tu dong lay mau } //Trinh phuc vu ngat cho ADC /*void _ISR _ADCInterrupt(void) { ADCValue = ADCBUF0 >> 1; //Chi lay 9-bit cao nhat cua ket qua ADC PDC1 = ADCValue; //Cap nhat cac thanh ghi dem chu ky nhiem vu PDC2 = ADCValue; PDC3 = ADCValue; _ADIF = 0; } */ read(void) { int a ; float b; a= ADCBUF0; b=a*5/1024; sprintf(b); |
Tags |
alphanumeric lcd, input read |
|
|
Similar Threads | ||||
Ðề 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 |