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);
|