mong cai anh chi dum bai cua em sai o diem nao,tks
#incluce <16F877A.h> //Khai báo con bit ta sử dụng và file khai báo các bít các thanh ghi quan trọng trong con bit này
#incluce <def_877a.h> //Khai báo sự định nghĩa các thanh ghi và các bít quan trọng
#divice*=16 adc=10 //Khai báo dùng poiter 16 bít và ADC 10 bít
#FUSES NOWDT, HS, NOPUT,NOPROTECT, NODEBUG, NOBROWNOUT, NOLVP, NOCPD, NOWRT //Khai báo các config
#use delay(clock=20000000) //Khai báo sử dụng hàm delay và tần số dao động sử dụng
int8 high,low; //Khai báo các biến số nguyên 1byte(8bít)
//Khai báo mảng hằng số là số nguyên 1 byte
int8 const a[10] = {0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90 };
//Chương trình con tách hàng chục và hàng đơn vị thành hai số chứa trong hai biến đã khai báo trên high va low
Void convert_bcd(int8 x)
{
low=x%10;//chia lấy phần dư=hàng đơn vị
high=x/10;
high=high%10; //high=số hàng chục
}
// Chương trình con giải mã và hiển thị nhiệt độ
Void display()
{
PORTB=a[low]; // Gửi dữ liệu đến LED1
RD0=0; // Bật LED1,LED1 sẽ hiển thị đúng giá trị của low
delay_2ms(2); // Cho trễ 2ms
RD0=1 // tắt LED1
PORTB=a[high]; // LED2
RD1=0;
delay_ms(2);
RD1=1;
}
//Chương trình con thực hiện việc báo động
Void bao_dong(){
int8 i;
for(i=0;i<200;i++)
{
REO=0;delay_us(100);
REO=1;delay_us(100);
} //kêu 200 tiếng
}
// Chương trình chính
void main() {
float value;
int 16 i;
trisb = 0x00; //thiết lập các chân của PORTB là các chân Ouput
trisc = 0x00; //thiết lập các chân của PORTC là các chân Ouput
trisd = 0x00; //thiết lập các chân của PORTD là các chân Ouput
trise = 0x00; //thiết lập các chân của PORTE là các chân Ouput
trisa = 0xff; //thiết lập các chân của PORTa là các chân Input
portC = 0xff; //thiết lập các chân của PORTC xuất ra điện áp ở mức cao
portD = 0xff; //thiết lập các chân của PORTd xuất ra điện áp ở mức cao
//Thiết lập cho ADC
Setup_adc(ADC_CLOCK_INTERNAL_; //Chia ra cách thức hoạt động của ADC là thời gian lấy mẫu bằng xung clock
//Thiết lập chân lấy tín hiệu Analog là chân ANO
setup_adc_ports(AN0);
setup_adc_chanel(0)
delay_us(10); //Trễ 10us
value=(float)read_adc();
value=(value – 558.5)/2.048;
convert_bcd(int8)value0;
i=0;
//Vòng lặp vô tận
While(1)
{
i++;
value = (float)read_adc();
value = (value – 558.5)/2.048; //for 5V supply
if(i==150) { convert_bcd(int8)value);i=0;}
if(((int8)value > 40) || ((int8)value < 15)) bao_dong();
}
}
|