0% found this document useful (0 votes)
5 views8 pages

Code

Download as docx, pdf, or txt
Download as docx, pdf, or txt
Download as docx, pdf, or txt
You are on page 1/ 8

PHỤ LỤC

Mã nguồn:
 Thư viện TV_16F887.C
#INCLUDE<16F887.H>
#FUSES NOLVP, NOPROTECT, HS, NOWDT, PUT
#USE DELAY(CLOCK=20000000)
/////////////////////////////////////////////////////////////////////////////////////////////////////////////
//
 Thư viện TV_LCD.c
#IFNDEF LCD_RS
#DEFINE LCD_RS PIN_E0
#ENDIF
#IFNDEF LCD_RW
#DEFINE LCD_RW PIN_E1
#ENDIF
#IFNDEF LCD_E
#DEFINE LCD_E PIN_E2
#ENDIF
#IFNDEF OUTPUT_LCD
#DEFINE OUTPUT_LCD OUTPUT_D
#ENDIF
#DEFINE FUNCTION_SET 0X38
#DEFINE DISPLAY_CONTROL 0X0F
#DEFINE CLEAR_DISPLAY 0X01
#DEFINE ENTRY_MODE 0X06
#DEFINE SHIFT_LEFT 0X18
#DEFINE SHIFT_RIGHT 0X1C
#DEFINE ADDR_LINE1 0X80
#DEFINE ADDR_LINE2 0XC0
UNSIGNED INT16 NG3, TR3, CH3, DV3, TR, CH, DV,
D,VT,TIME,A,I;
VOID LCD_COMMAND(UNSIGNED CHAR MDK) //RS=0
{
OUTPUT_LOW(LCD_RS); OUTPUT_LCD(MDK);
OUTPUT_HIGH(LCD_E); DELAY_US(20);
OUTPUT_LOW(LCD_E); DELAY_US(20);
}
VOID LCD_DATA(UNSIGNED CHAR MHT) //RS=1
{
OUTPUT_HIGH(LCD_RS); OUTPUT_LCD(MHT);
OUTPUT_HIGH(LCD_E); DELAY_US(20);
OUTPUT_LOW(LCD_E); DELAY_US(20);
}
VOID LCD_SETUP()
{
OUTPUT_LOW(LCD_E);
OUTPUT_LOW(LCD_RS);
OUTPUT_LOW(LCD_RW);
LCD_COMMAND(FUNCTION_SET);
DELAY_MS(1);
LCD_COMMAND(DISPLAY_CONTROL);
LCD_COMMAND(CLEAR_DISPLAY);
DELAY_MS(2);
LCD_COMMAND(ENTRY_MODE);
}
VOID GIAIMA_LCD()
{
DV3 = VT%10 + 0X30;
CH3 = VT/10%10 + 0X30;
TR3 = VT/100%10 + 0X30;
NG3 = VT/1000%10 + 0X30;
IF (NG3 == 0x30)
{ NG3 = ' ';
IF (TR3 == 0x30)
{
TR3 = ' ';
IF (CH3 == 0x30)
CH3 = ' ';
}
}
DV = D%10 + 0X30;
CH = D/10%10 + 0X30;
TR = D/100%10 + 0X30;
IF (TR == 0x30)
{
TR = ' ';
IF (CH == 0x30)
CH = ' ';
}
}
VOID HT_LCD()
{
LCD_COMMAND(0XC0);
LCD_DATA("V: ml D: cm");
LCD_COMMAND(0XC2);
LCD_DATA(NG3);
LCD_DATA(TR3);
LCD_DATA(CH3);
LCD_DATA(DV3);
LCD_COMMAND(0XCB);
LCD_DATA(TR);
LCD_DATA(CH);
LCD_DATA(DV);
}
VOID HT_LCD_STOP()
{
LCD_COMMAND(0X80);
LCD_DATA(" DUNG HOAT DONG ");
GIAIMA_LCD();
HT_LCD();
}

VOID HT_LCD_START()
{
LCD_COMMAND(0X80);
LCD_DATA(" HT HOAT DONG ");
GIAIMA_LCD();
HT_LCD();
/////////////////////////////////////////////////////////////////////////////////////////////////////////////
//
 File mã nguồn để nạp vào vi điều khiển 16F887
#INCLUDE "TV_16F887.C"
#INCLUDE "TV_LCD.C"
#DEFINE LED1 PIN_B0
#DEFINE LED2 PIN_B1
#DEFINE ON PIN_B4
#DEFINE TRIG PIN_A1
#DEFINE ECHO PIN_A0
UNSIGNED INT1 TT=1;
UNSIGNED INT8 CAPDO=0;

VOID CAM_BIEN_HOAT_DONG()
{
OUTPUT_HIGH(PIN_A1);
DELAY_US(15);
OUTPUT_LOW(PIN_A1);
WHILE(!INPUT(ECHO))
{}
SET_TIMER1(0);
WHILE(INPUT(ECHO))
{}
TIME=GET_TIMER1();
A=TIME/58 +1 ;
D=15-A;
VT=D*3.14*4*4;
DELAY_MS(50);
}

VOID KT_PHIM()
{
IF(INPUT(ON) == 0)
{
DELAY_MS(20);
IF(INPUT(ON) == 0)
{
TT=~TT;
WHILE(!INPUT(ON));
}
}
}

VOID MAIN()
{
SET_TRIS_B(0XF0);
SET_TRIS_D(0X00);
SET_TRIS_E(0X00);
LCD_SETUP();
TT=1;
SETUP_TIMER_1(T1_INTERNAL|T1_DIV_BY_8);
SET_TRIS_C(0X00);
SETUP_TIMER_2(T2_DIV_BY_16,249,1);
SETUP_CCP1(CCP_PWM);
SETUP_CCP2(CCP_PWM);
SET_PWM1_DUTY(CAPDO*10);
SET_PWM2_DUTY(0);
SETUP_TIMER_0(T0_INTERNAL|T0_DIV_8);
SET_TIMER0(3036);
ENABLE_INTERRUPTS(INT_TIMER0);
ENABLE_INTERRUPTS(GLOBAL);
WHILE(TRUE)
{
KT_PHIM();
CAM_BIEN_HOAT_DONG();
GIAIMA_LCD();
HT_LCD();
IF (TT==1)
{
HT_LCD_START();
OUTPUT_HIGH(PIN_B0);
OUTPUT_LOW(PIN_B1);
SET_PWM1_DUTY(4*10);
IF(D>=15)
{
FOR(I=0;I<4;I++)
{
OUTPUT_LOW(PIN_B0);
DELAY_MS(70);
OUTPUT_HIGH(PIN_B0);
DELAY_MS(70);
}
HT_LCD_STOP();
SET_PWM1_DUTY(0);
TT=0;
}
}
ELSE
{
HT_LCD_STOP();
OUTPUT_HIGH(PIN_B1);
OUTPUT_LOW(PIN _B0);
SET_PWM1_DUTY(0);
IF (D<=3)
{
HT_LCD_START();
OUTPUT_HIGH(PIN _B0);
OUTPUT_LOW(PIN _B1);
SET_PWM1_DUTY(4*10);
TT=1;
}
}
}
}
/////////////////////////////////////////////////////////////////////////////////////////////////////////////
//

You might also like