Вы находитесь на странице: 1из 9

#include<p18f4520.

h>
#include<stdio.h>
#include<stdlib.h>
#include<delays.h>
#include<string.h>
#include<ADC.h>
#include<pwm.h>
#include<math.h>
#include <timers.h>
#pragma config WDT=OFF
#pragma config PWRT=OFF
#pragma config LVP=OFF
#pragma config PBADEN=OFF
#pragma config OSC=HS
void khoi_dong_lcd(void);
void write_command(char x);
void write_text(char x);
void lay_key(void);
void sound(void);
void dieu_xung(int n);
void delay(void);
void delay_1s(void);
void beep(void);
void beep_ngan(void);
void beep_dai(void);
void dem_xung_hien_thi(void);
void ngat_cao(void);
union
{
struct
{
unsigned Timeout:1;
//flag to indicate a TMR0 timeout
unsigned None:7;
} Bit;
unsigned char Byte;
} Flags;
#define led4 PORTAbits.RA5
#define RB0
PORTBbits.RB0
#define RB1
PORTBbits.RB1
#define da
PORTBbits.RB2
#define loa
PORTBbits.RB3
//#define xung PORTCbits.RC0
#define bit1 PORTCbits.RC0
#define bit2 PORTCbits.RC1
#define motor PORTCbits.RC2
//#define w_r PORTCbits.RC5
#define rs PORTCbits.RC4
#define en PORTCbits.RC5
#define du_lieu PORTD
#define led1 PORTEbits.RE0
#define led2 PORTEbits.RE1
#define led3 PORTEbits.RE2
char chuoi1[16]={"DO AN TOT NGHIEP"};
char chuoi2[16]={"DINH QUANG PHAP "};
char chuoi3[16]={"1.Nhap ban phim"};
char chuoi4[16]={"2.Nhap bien tro"};
char chuoie[15] ={"-- Nhap sai --"};
char chuoia[4]={" "};
char chuoib[6]={"
"};

char chuoi0[6]={"
"};
char left[8] ={">>left "};
char right[8]={">>right"};
char stop[8] ={">>stop "};
char chuoi_encoder[8]={"
"};
char keypad[16]={1,2,3,0x0A,4,5,6,0x0B,7,8,9,0x0C,0xF1,0,0xF2,0x0D};
unsigned char key,option,dem;
int n,end,n1,n2,n3,n4;
float num;
int i,result;
unsigned char dem_ngat;
unsigned int vong_phut;
void main(void)
{
OpenPWM1(24);
SetDCPWM1(0);
end=100;
ADCON1=0x0E;
TRISA=0x1F;
TRISB=0x07;
TRISC=0x01;
TRISD=0;
TRISE=0;
w_r=0;
en=0;
loa=0;
motor=0;
bit1=0;
bit2=0;
Delay10KTCYx(25);
khoi_dong_lcd();
write_command(0x01);
for(i=0;i<4;i++)
{
led1=1;
delay_1s();
led2=1;
delay_1s();
led3=1;
delay_1s();
led4=1;
delay_1s();
led4=0;
led3=0;
led2=0;
led1=0;
}
write_command(0x81);
for(i=0;i<strlen(chuoi1);i++)
write_text(chuoi1[i]);
write_command(0xC4);
for(i=0;i<strlen(chuoi2);i++)
write_text(chuoi2[i]);
Delay10KTCYx(150);
Delay10KTCYx(150);
Delay10KTCYx(150);
Delay10KTCYx(150);
write_command(0x01);
write_command(0x81);
for(i=0;i<strlen(chuoi1);i++)

write_text(chuoi1[i]);
//------------test---------++++++++++++++++++++++++++***************************
****
dem_ngat=0;
Flags.Byte = 0;
INTCON = 0x20;
//disable global and enable TMR0 interrupt
INTCON2 = 0x84;
//TMR0 high priority
RCONbits.IPEN = 1;
//enable priority levels
WriteTimer0(-9375);
T0CON = 0x85;
//set up timer0 - prescaler 1:64
INTCONbits.GIEH = 1;
//enable interrupts
vong_phut=0;
dem_xung_hien_thi();
beep_ngan();
delay_1s();
beep_ngan();
delay_1s();
beep_dai();
delay_1s();
//-----------------while(1)
{
write_command(0x01);
write_command(0x80);
for(i=0;i<strlen(chuoi3);i++)
write_text(chuoi3[i]);
write_command(0xC0);
for(i=0;i<strlen(chuoi4);i++)
write_text(chuoi4[i]);
key=0xFF;
while(key!=1 && key!=2)
{
lay_key();
option=key;
}
//111111111111111111111
if(option==1)
{
option1:
write_command(0x01);
write_command(0x80);
for(i=0;i<strlen(chuoi3);i++)
write_text(chuoi3[i]);
key=0xFF;
n1=0;n2=0;n3=0;n4=0;dem=0;
while(1)
{
lay_key();
if(key>=0 && key<=9)
{
n3=n2;
n2=n1;
n1=key;
dem=1;
n4=n3*100+n2*10+n1;
itoa(n4,chuoia);
write_command(0xC0);
for(i=0;i<strlen(chuoia);i++)

write_text(chuoia[i]);
write_text(' ');
write_text(' ');
write_text(' ');
}
if(key==0x0D && dem!=0)
{
beep_dai();
goto thuc_thi;
}
}
thuc_thi:
num=n4;
if(num>100)
{
write_command(0xC0);
for(i=0;i<strlen(chuoie);i++)
write_text(chuoie[i]);
Delay10KTCYx(150);
Delay10KTCYx(150);
goto option1;
}
num=num/100;
num=num*end;
n=num;
write_command(0xC3);
write_text('%');
dieu_xung(n);
}//option 1
//222222222222222222222
if(option==2)
{
write_command(0x01);
write_command(0x80);
for(i=0;i<strlen(chuoi4);i++)
write_text(chuoi4[i]);
key=0xFF;
while(key!=0x0D)
{
OpenADC(ADC_RIGHT_JUST,0,0);
ADCON1=0x0E;
SetChanADC(ADC_CH0);
ConvertADC();
while(BusyADC());
result=ReadADC();
CloseADC();
itoa(result,chuoib);
write_command(0xC5);
for(i=0;i<strlen(chuoi0);i++)
write_text(chuoi0[i]);
write_command(0xC5);
for(i=0;i<strlen(chuoib);i++)
write_text(chuoib[i]);
delay_1s();
lay_key();
}
beep_dai();
num=result;
num=num/1023;

num=num*end;
n=num;
dieu_xung(n);
}//option 2
}//while(1)
}//main
void khoi_dong_lcd(void)
{
write_command(0x38);
write_command(0x0C);
write_command(0x06);
write_command(0x01);
write_command(0x02);
}
void write_command(char x)
{
rs=0;
en=1;
du_lieu=x;
en=0;
delay();
}
void write_text(char x)
{
rs=1;
en=1;
du_lieu=x;
en=0;
delay();
}
void lay_key(void)
{
key=0xFF;
if(da==1)
{
while(da==1);
key=PORTA>>1;
key=key & 0x0F;
key=keypad[key];
beep();
}
if(RB0==0)
{
//
while(RB0==0);
Delay10KTCYx(20);
key=0xB0;
beep();
}
if(RB1==0)
{
//
while(RB1==0);
Delay10KTCYx(20);
key=0xB1;
beep();
}
}

void sound(void)
{
for(i=0;i<3;i++)
{
loa=1;
delay_1s();
loa=0;
delay_1s();
}
}
void dieu_xung(int n)
{
bit1=0;
bit2=0;
led1=0;
led3=0;
led4=0;
key=0xFF;
while(key!=0xF2)
{
led1=1;
for(i=0;i<strlen(chuoi_encoder);i++)
chuoi_encoder[i]=' ';
itoa(vong_phut,chuoi_encoder);
write_command(0xC4);
for(i=0;i<strlen(chuoi_encoder);i++)
write_text(chuoi_encoder[i]);
write_text(' ');
write_text(' ');
write_text(' ');
write_text(' ');
Delay10KTCYx(2);
lay_key();
if(key==0x0A)
{
bit1=0;
bit2=1;
led3=1;
led4=0;
write_command(0xC9);
for(i=0;i<strlen(left);i++)
write_text(left[i]);
}
if(key==0x0B)
{
bit1=1;
bit2=0;
led3=0;
led4=1;
write_command(0xC9);
for(i=0;i<strlen(right);i++)
write_text(right[i]);
}
if(key==0x0C)
{
bit1=0;
bit2=0;
led3=0;
led4=0;

write_command(0xC9);
for(i=0;i<strlen(stop);i++)
write_text(stop[i]);
}
if(key==0xB1)
{
if(n>0)
{
n=n-1;
itoa(n,chuoia);
write_command(0xC0);
for(i=0;i<3;i++)
write_text(' ');
write_command(0xC0);
for(i=0;i<strlen(chuoia);i++)
write_text(chuoia[i]);
write_command(0xC3);
write_text('%');
}
}
if(key==0xB0)
{
if(n<100)
{
n=n+1;
itoa(n,chuoia);
write_command(0xC0);
for(i=0;i<3;i++)
write_text(' ');
write_command(0xC0);
for(i=0;i<strlen(chuoia);i++)
write_text(chuoia[i]);
write_command(0xC3);
write_text('%');
}
}
SetDCPWM1(n);
/*
if(n==0)
motor=0;
if(n==end)
motor=1;
if(n!=0 && n!=end)
{
motor=1;
for(i=0;i<n;i++)
{
Delay10TCYx(3);
}
motor=0;
for(i=0;i<(100-n);i++)
{
Delay10TCYx(3);
}
}
*/
}
SetDCPWM1(0);
//motor=0;
}

void delay(void)
{
int k;
for(k=0;k<500;k++);
}
void delay_1s(void)
{
Delay10KTCYx(25);
}
void beep(void)
{
loa=1;
Delay10KTCYx(10);
loa=0;
}
void beep_ngan(void)
{
loa=1;
Delay10KTCYx(50);
loa=0;
}
void beep_dai(void)
{
loa=1;
Delay10KTCYx(100);
loa=0;
}
void dem_xung_hien_thi(void)
{
unsigned int dem_encoder;
OpenTimer1( TIMER_INT_OFF &
T1_16BIT_RW
&
T1_SOURCE_EXT &
T1_PS_1_1
&
T1_OSC1EN_OFF &
T1_SYNC_EXT_ON );
}
#pragma code InterruptVectorHigh = 0x08
void
InterruptVectorHigh (void)
{
_asm
goto ngat_cao //jump to interrupt routine
_endasm
}
//---------------------------------------------------------------------------// High priority interrupt routine
#pragma code
#pragma interrupt ngat_cao
void
ngat_cao()
{
led1=0;
INTCONbits.TMR0IF = 0;
WriteTimer0(-9375);
Flags.Bit.Timeout = 1;

//check for TMR0 overflow


//clear interrupt flag
//indicate timeout

led2=1;
num=ReadTimer1();
WriteTimer1(0);
num=num/10;
vong_phut=num;
led2=0;
}

Вам также может понравиться