Mọi người xem giúp mình sai ở đâu, mà đo điện áp toàn hiển thị bét nhè với
thanks mọi người, file mô phỏng mình đính kèm
thanks mọi người, file mô phỏng mình đính kèm
Code:
#include<htc.h> #include"lcd.h" #include<math.h> #include <stdio.h> #include <stdlib.h> __CONFIG(INTIO & WDTDIS & PWRTEN & MCLREN & UNPROTECT & DUNPROTECT & BORDIS & IESODIS & FCMDIS & LVPDIS); #define _XTAL_FREQ 4000000 //khai bao cac chan I/O const char cgram_dat1[] = { 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x08,0x04,0x0e,0x01,0x0f,0x11,0x0f,0x00,//chu a huyen 0x04,0x0c,0x0a,0x0e,0x11,0x1e,0x0e,0x00,//chu ee sac 0x02,0x04,0x12,0x12,0x12,0x12,0x0C,0x00,//chu u sac 0x00,0x04,0x0A,0x0E,0x11,0x11,0x0E,0x00,//chu oo 0x99 }; const char cgram_dat2[]= { 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,// 0x00,0x0E,0x11,0x11,0x11,0x0E,0x04,0x00,//chu o nang 1 0x04,0x0A,0x0E,0x11,0x1E,0x10,0x0E,0x00,//chu ee 2 0x04,0x0A,0x0E,0x11,0x1E,0x0E,0x04,0x00,//chu ee nang 3 0x04,0x08,0x0E,0x01,0x0F,0x11,0x0F,0x00,//chu a sac 4 0x1e,0x11,0x11,0x1d,0x11,0x11,0x1e,0x00, // CHU DD 5 0x02,0x07,0x02,0x0E,0x12,0x13,0x0E,0x00,//chu dd 6 0x99 // Ma ket thuc chuoi la 99H, }; const char cgram_dat3[]={ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x1C,0x12,0x11,0x39,0x11,0x11,0x12,0x1C,//chu DD 0x04,0x0A,0x0E,0x11,0x1E,0x0E,0x04,0x00,//chu ee nang 0x04,0x08,0x0E,0x01,0x0F,0x11,0x0F,0x00,//chu a sac 0x04,0x0C,0x0A,0x0E,0x01,0x0F,0x11,0x0F,//chu aa sac 0x04,0x0c,0x0a,0x0e,0x11,0x1e,0x0e,0x00, //chu ee sac 0x02,0x04,0x12,0x12,0x12,0x12,0x0C,0x00,//chu u sac 0x99 }; void nap_kitu(unsigned int x) { unsigned int i; // Xu ly nap ma ky tu dac biet vao CGRAM. i = 0; // Dia chi ky tu dac biet trong bo ma cgram_dat. lcd_put_byte(0,0x40); // Lenh = 40H - Dat CGRAM co dia chi bat dau la 00H. while(lcd_busy()); // Kiem tra LCD bao ban. if(x == 1) { while(cgram_dat1[i]!=0x99) // Kiem tra nap xong du lieu cho cac ky tu dac biet, { // ky tu ket thuc chuoi la 99H. lcd_put_byte(1,cgram_dat1[i]); // Ghi cac ma ky tu dac biet vao CGRAM theo dia chi. while(lcd_busy()); // Kiem tra LCD bao ban. i++; } } if(x == 2) { while(cgram_dat2[i]!=0x99) // Kiem tra nap xong du lieu cho cac ky tu dac biet, { // ky tu ket thuc chuoi la 99H. lcd_put_byte(1,cgram_dat2[i]); // Ghi cac ma ky tu dac biet vao CGRAM theo dia chi. while(lcd_busy()); // Kiem tra LCD bao ban. i++; } } if(x == 3) { while(cgram_dat3[i]!=0x99) // Kiem tra nap xong du lieu cho cac ky tu dac biet, { // ky tu ket thuc chuoi la 99H. lcd_put_byte(1,cgram_dat3[i]); // Ghi cac ma ky tu dac biet vao CGRAM theo dia chi. while(lcd_busy()); // Kiem tra LCD bao ban. i++; } } } //ham doc gia tri ADC unsigned int read_ADC() { __delay_us(5); //Cho AD lay mau GODONE=1; //Bat dau thuc hien chuyen doi while(GODONE); return(((unsigned int)ADRESH)<<8)|ADRESL;//ghep byte thap va byte cao } //ham chuyen doi adc hien thi lcd void adc_lcd(unsigned int i) { char ng,tr,ch,dv; ng=i/1000; tr=(i-1000*ng)/100; ch=(i-1000*ng-100*tr)/10; dv=i-1000*ng-100*tr-ch*10; //hien thi len lcd lcd_gotoxy(6,1); lcd_putc(ng+0x30); lcd_gotoxy(7,1); lcd_putc(tr+0x30); lcd_gotoxy(8,1); lcd_putc(ch+0x30); lcd_gotoxy(9,1); lcd_putc(dv+0x30); } //khoi tao adc void adc_init() { ANSEL|=1<<3; //BAT BIT 3 TRISA3=1; VCFG1=0; VCFG0=0; ADCS0=1; ADCS1=1; //chon xung clock chuyen doi AD tu mach RC trong chip //chon kenh AN3 CHS3=0; CHS2=0; CHS1=1; CHS0=1; ADFM=1;//dinh dang 10bit ket qua chuyen doi AD ADON=1;//cho phep ADC hoat dong } void dodienap() { unsigned int val_adc,val_temp; nap_kitu(2); lcd_puts("\f \5o \6i\3n \4p \n Vin= (mV) "); while(1) { val_adc=read_ADC(); val_temp=val_adc*5000/1024; if(val_temp < 2500) RC0=1; else RC0=0; adc_lcd(val_temp); } } void main() { ANSEL=0; //Cau hinh cac chan analog deu la digital I/O ANSELH=0; WPUB=0x0F; //Cho phep dien tro PULL UP tren chan RB0..3 TRISB=0b00000000; RBPU=0; TRISD=0b00000000; TRISE=0; TRISC0=0; adc_init(); lcd_init(); dodienap(); }
Comment