You are on page 1of 6

b) Giải thích kinh kiện có trong mạch

-Cảm biến áp suất dùng để đo áp suất


-Led 7 thanhcó tác dụng hiện thị thông tin về nhiệt độ
-Transitor có tác dụng cấp tín hiệu đóng cuộn hút Relay RL1
-OPAM có tác dụng khuếch đại tín hiệu
- 2 tụ nối ở 2 chân thạch anh ở các chip vi xử lý dùng để hỗ trợ mạch dao động bên trong pic
- Thạch anh dùng để tạo tần số dao động ổn định cho pic
-Cụm linh kiện nối với chân MCRL có tác dụng tạo xung clock cấp cho vi điều khiển hoạt động

c) Code
#include <pic.h>
#include <pic16f877a.h>
#include <xc.h>
#include <stdio.h>
#include <stdlib.h>// khai bao thu vien
#define _XTAL_FREQ 20000000// khai báo thach anh
#pragma config FOSC = HS
#pragma config WDTE = OFF
#pragma config PWRTE = OFF
#pragma config BOREN = OFF
#pragma config LVP = OFF
#pragma config CPD = OFF
#pragma config WRT = OFF
#pragma config CP = OFF// khai bao cau hinh
unsigned char Cathode[10] = {0x3F, 0x06, 0x5B, 0x4F, 0x66, 0x6D, 0x7D, 0x07, 0x7F,0x6F};
#define c1 RD0;
#define c2 RD1;
#define c3 RD2;
#define c4 RD3;
void ADC_Init(void)
{
ADCON0bits.ADCS1 = 1;
ADCON0bits.ADCS0 = 0; //FOSC/32 ứng với tần số thạch anh 20MHz
ADCON0bits.CHS2 = 1;
ADCON0bits.CHS1 = 0;
ADCON0bits.CHS0 = 1; // chon kenh AN5 kenh 5 Adc
ADCON0bits.ADON = 1; //Khởi động ADC
ADCON1bits.ADCS2 = 0;
ADCON1bits.ADFM = 1;
ADCON1bits.PCFG3 = 0;
ADCON1bits.PCFG2 = 0;
ADCON1bits.PCFG1 = 0;
ADCON1bits.PCFG0 = 0;
}
unsigned int ADC_Read()
{
unsigned int adcvalue = 0;
ADCON0bits.GO_nDONE = 1;
while(ADCON0bits.GO_nDONE); //Đợi quá trình chuyển đổi kết thúc
adcvalue = ((ADRESH*256)+ADRESL); //Lấy giá trị đọc được.
adcvalue=(((float)adcvalue*5)/(2* 1024))*2;
return adcvalue;
void hienthi ()
{
int a,b;
a= ADC_Read()/10;
b= ADC_Read()%10;
c1=1;PORTB=Cathode[a];__delay_ms(10);c1=0;
c2=1;PORTB=Cathode[b];__delay_ms(10);c2=0;

}}
void main(void)
{
TRISDbits.TRISD = TRISCbits.TRISC= TRISBbits.TRISB=0; //cổng D,C,B là đầu ra
PORTCbits.RC4 = 0; // gán chân RC4=0
TRISEbits.TRISE0 = 1; //RE0 là đầu vào
ADC_Init();
while(1)
{
hienthi();
if (ADC_Read()<5)
PORTCbits.RC4 =1;
else
PORTCbits.RC4 =0;
}}
-Cảm biến nhiệt độ LM35 đọc nhiệt độ
-Led 7 thanhcó tác dụng hiện thị thông tin về nhiệt độ
-Transitor có tác dụng cấp tín hiệu đóng cuộn hút Relay RL1
- 2 tụ nối ở 2 chân thạch anh ở các chip vi xử lý dùng để hỗ trợ mạch dao động bên trong pic
- Thạch anh dùng để tạo tần số dao động ổn định cho pic
-Cụm linh kiện nối với chân MCRL có tác dụng tạo xung clock cấp cho vi điều khiển hoạt động
c) code
#include <pic.h>
#include <pic16f877a.h>
#include <xc.h>
#include <stdio.h>
#include <stdlib.h>// khai bao thu vien
#define _XTAL_FREQ 20000000// khai báo thach anh
#pragma config FOSC = HS
#pragma config WDTE = OFF
#pragma config PWRTE = OFF
#pragma config BOREN = OFF
#pragma config LVP = OFF
#pragma config CPD = OFF
#pragma config WRT = OFF
#pragma config CP = OFF// khai bao cau hinh
unsigned char Cathode[10] = {0x3F, 0x06, 0x5B, 0x4F, 0x66, 0x6D, 0x7D, 0x07, 0x7F,0x6F};
#define c1 RD0;
#define c2 RD1;
#define c3 RD2;
#define c4 RD3;
void ADC_Init(void)
{
ADCON0bits.ADCS1 = 1;
ADCON0bits.ADCS0 = 0; //FOSC/32 ứng với tần số thạch anh 20MHz
ADCON0bits.CHS2 = 0;
ADCON0bits.CHS1 = 0;
ADCON0bits.CHS0 = 1; // chon kenh AN1 kenh 1 Adc
ADCON0bits.ADON = 1; //Khởi động ADC
ADCON1bits.ADCS2 = 0;
ADCON1bits.ADFM = 1;
ADCON1bits.PCFG3 = 0;
ADCON1bits.PCFG2 = 0;
ADCON1bits.PCFG1 = 0;
ADCON1bits.PCFG0 = 0;
}
unsigned int ADC_Read()
{
unsigned int adcvalue = 0;
ADCON0bits.GO_nDONE = 1;
while(ADCON0bits.GO_nDONE); //Đợi quá trình chuyển đổi kết thúc
adcvalue = ((ADRESH*256)+ADRESL); //Lấy giá trị đọc được.
adcvalue=(((float)adcvalue*5)/(0.01*1024));
return adcvalue;
void hienthi ()
{
int a,b;
a= ADC_Read()/10;
b= ADC_Read()%10;
c1=1;PORTB=Cathode[a];__delay_ms(5);c1=0;
c2=1;PORTB=Cathode[b];__delay_ms(5);c2=0;
c3=1;PORTB=0x63;__delay_ms(5);c3=0;// hien thi chu do
c4=1;PORTB=0x39;__delay_ms(5);c4=0;// hien thi chu C
}}
void main(void)
{
TRISDbits.TRISD = TRISCbits.TRISC= TRISBbits.TRISB=0; //cổng D,C,B là đầu ra
PORTCbits.RC0 = 0; // gán chân RC0=0
TRISAbits.TRISA1 = 1; //RA1 là đầu vào
while(1)
{
hienthi();
if (ADC_Read()>30)
PORTCbits.RC0=1;
else
PORTCbits.RC0=0;
}}

You might also like