THIẾT KẾ VÀ THI CÔNG MẠCH HỆ THỐNG
5.4 CODE CHƯƠNG TRÌNH
/
************************************************************************ ********/
/**********CHUONG TRINH DIEU KHIEN VA GIAM SAT NHIET DO QUA HE THONG GSM*********/ / ************************************************************************ ********/ #include <htc.h> #include <math.h> #include <stdlib.h> #include <stdio.h> #include <string.h>
#include "uart.h" // Cau hinh ket noi va khai bao lenh dung cho giao tiep UART. #include "lcd.h" // Cau hinh ket noi va khai bao lenh dung cho LCD.
__CONFIG(HS & WDTDIS & PWRTEN & UNPROTECT & BORDIS & LVPDIS); #define _XTAL_FREQ 4000000
#define buff_size 50
const char code_number[]='0','1','2','3','4','5','6','7','8','9'; unsigned char buff_sms[buff_size];
unsigned char flag_isr; unsigned char dk_tb,temp; unsigned char buff;
unsigned char khoa,dem,tinmoi;
//********************************************* const char cgram[]=
{
0x0C,0x12,0x12,0x0C,0x00,0x00,0x00,0x00, 0x0C,0x12,0x12,0x0C,0x00,0x00,0x00,0x00, 0x0C,0x12,0x12,0x0C,0x00,0x00,0x00,0x00, 0x99// ma chuoi ket thuc
CHƯƠNG 5: THIẾT KẾ VÀ THI CÔNG MẠCH
//********************************************* void int_PORTA() // khoi tao port A
{
PORTA=0X0F; TRISA=0X0FF; }
void int_PORTB() // khoi tao port B {
PORTB = 0X01; TRISB = 0X01; }
void int_PORTD() // khoi tao port D {
PORTD = 0X00; TRISD = 0X00; }
//********************************** //chuong trinh tao thoi gian tre 1ms
//================================== void delay(unsigned char ms)
{
unsigned char i; for(i=0;i<ms;i++) {
__delay_ms(100); // tri hoan 1 ms }
}
//========================= void uart_AT(const char *s)
{
uart_puts(s); // truyen chuoi tu pic sang sim900 uart_putc(13); // truyen ki tu enter
}
//========================= void cauhinh_sim900()
{
uart_AT("AT");//kiem tra ket noi mang delay(5);
uart_AT("ATZ");//reset modulm delay(5);
uart_AT("ATZ"); delay(5);
uart_AT("ATE0");//tat che do echo delay(5);
uart_AT("AT+ICF=3,3");// che do start-stop (8 Data 1 Stop) delay(5);
uart_AT("AT+IPR=9600");// thiet lap toc do truyen delay(5);
uart_AT("AT&W");//luu cau hinh hien tai delay(5);
uart_AT("AT+CMGF=1");// dang du lieu dinh dang text de gui tin delay(5);
uart_AT("AT+CNMI=2,0,0,0,0");// thiet lap che do nhan tin nhan tu mang delay(5);
uart_AT("AT+CSAS");// luu thiet lap delay(5);
}
CHƯƠNG 5: THIẾT KẾ VÀ THI CÔNG MẠCH
void send_sms(const char *text) {
uart_puts("AT+CMGS=");//lenh gui tin nhan AT+CMGS = "01889451792" uart_putc(34);
uart_puts("01889451792");// so dien thoai de gui tin nhan den uart_putc(34);
uart_putc(13);//<cr> delay(5);
uart_puts(text);//noi dung tin nhan delay(5);
uart_putc(26); // gui ki tu ctrl-Z/esc uart_putc(13); // gui ki tu enter <cr> delay(35);
}
void send_nhietdo(unsigned char temp,const char *text) {
unsigned char nhiet_do[3],i; // tao bo mang de luu tru nhiet do do duoc for (i=0;i<=2;i++) //tach nhiet do do duoc de truyen di
{
nhiet_do[i] = code_number[temp%10]; temp=temp/10;
}
uart_puts("AT+CMGS=");// lenh gui tin nhan uart_putc(34); // ki tu dau nhay doi
uart_puts("01889451792"); uart_putc(34);
uart_putc(13);//<cr> ki tu enter delay(5);
uart_puts("NHIET DO HIEN TAI DANG LA: "); // gui chuoi noi dung hien thi do nhiet do vao tin nhan
if(nhiet_do[2] == '0') // neu nhiet do nho hon 100 do c thi so dau tien hien th khoang trang
uart_putc(' '); else
uart_putc(nhiet_do[2]); // gui cac phan tu nhiet do qua tin nhan uart_putc(nhiet_do[1]);
uart_putc(nhiet_do[0]); delay(5);
uart_putc(' ');
uart_puts(text);//noi dung tin nhan sms delay(5);
uart_putc(26);// gui ctrl-Z/esc uart_putc(13); // gui ki tu enter delay(35);
}
//===================== void doc_sms()
{
uart_AT("AT+CMGR=1,0"); // lenh doc tin nhan delay(5);
}
//===================== void xoa_sms()
{
uart_AT("AT+CMGD=1,4");// lenh xoa tin nhan o nho so 1, va chon 4 de xoa het delay(15);
CHƯƠNG 5: THIẾT KẾ VÀ THI CÔNG MẠCH
}
//==================== void xoa_het_sms()
{
uart_puts("AT+CMGDA =");// lenh xoa het tin nhan uart_putc(34);// gui ki tu enter
uart_puts("DEL ALL");// xoa het cac tin nhan uart_putc(34); uart_putc(13);//<cr> delay(15); } //==================== void huy_call() {
uart_puts("ATH");// lenh huy cuoc goi uart_putc(13);//<cr>
delay(7); }
//*****chuong trinh xoa mang buff_sms*****
void clear_buff() // xoa bo dem chua du lieu tin nhan nhan dc trong chuong trinh ngat { char i=0; for(i=0;i<strlen(buff_sms);i++) { buff_sms[i]=0x00; } } //******************************************************
char test_string(const char buffer[], const char str[]) // kiem tra cac cu phap trong chuoi, neu dung tra ve 1, sai tra ve 0
{
unsigned char leng_buff = 0; unsigned char leng_str = 0; char i, j;
leng_buff = strlen(buffer);// do dai chuoi buffer leng_str = strlen(str);//do dai cu phap can kiem tra if (leng_buff >= leng_str)
{
for (i = 0; i <= leng_buff - leng_str; i++) { for (j = 0; j < leng_str; j++) { if (buffer[i + j] != str[j]) break; } if (j == leng_str) return 1; } return 0; } return 0; } //*********************************************************** void interrupt isr()// chuong trinh ngat va nhan du lieu
{
CHƯƠNG 5: THIẾT KẾ VÀ THI CÔNG MẠCH
if(RCIE && RCIF) // Kiem tra cho phep ngat thu cua UART. {
RCIF = 0; // Xoa co ngat flag_isr =1;
data=uart_getc();
if(data=='#')// ki tu ket thuc de nhan du lieu {
khoa=0;
tinmoi=1; // bien toan cuc dung de dieu khien thiet bi }
if(khoa==1) // chp phep luu du lieu vao trong bo dem buffer_sms cua chuong trinh {
buff_sms[dem]=data; dem++;
}
if(data=='*')// ki tu bat dau de nhan du lieu { khoa=1; dem=0; } } } //********************************************************** unsigned int read_ADC()
{
__delay_us(5); // Cho ADC thuc hien lay mau.
GODONE = 1; // Bat dau thuc hien chuyen doi AD. while(GODONE); // Cho ADC thuc hien chuyen doi xong. // Tra ve ket qua ADC sau khi chuyen doi xong.
return (((unsigned int)ADRESH)<<8)|ADRESL;// Ghep byte thap va byte cao cua gia tri ADC.
}
//********************************************************** void init_ADC()// chuong trinh do nhiet do va doc nhiet do tu RA1
{
unsigned char i,do_C; unsigned long adc_val;
ADCON1 = 0; //khoi dong thanh ghi ADCON1
ADCON0 = 0; //KHOI DONG THANH GHI ADCON0
ADFM = 1;
CHS0 = 1; CHS1 = 0; CHS2 = 0;
ADCS0 = 1; //CHON XUNG TRONG CHIP. ADCS1 = 1;
ADON = 1; //CHO PHEP ADC HOAT DONG. adc_val = read_ADC();
delay(1);
do_C = (char)(adc_val*445/1023);
temp = do_C;//gia tri adc de dieu khien thiet bi. }
//********************************************************** void kt_cgram(void) // chuong trinh hien thi ki tu dac biet len lcd
{ unsigned char i; // khai bao bien
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.
CHƯƠNG 5: THIẾT KẾ VÀ THI CÔNG MẠCH
while(lcd_busy()); // Kiem tra LCD bao ban.
while(cgram[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[i]); // Ghi cac ma ky tu dac biet vao CGRAM theo dia chi.
while(lcd_busy()); // Kiem tra LCD bao ban. i++;
} }
//********************************************************** void display_temp(unsigned char itemp) // chuong trinh hien thi nhiet do len lcd {
unsigned char i;
lcd_puts("\f NHIET DO LA:"); // hien thi ma hinh lcd kt_cgram();// chuong trinh hien thi ki tu dac biet len lcd lcd_gotoxy(9,1);
lcd_puts("\2C");// gui ki tu do C len lcd
for (i=8;i>=6;i--) //Hien thi gia tri ADC len LCD {
lcd_gotoxy(i,1);
lcd_putc(code_number[itemp%10]); //Tach NG-TR-CH-DV va giai ma hien thi LCD
itemp=itemp/10; }
}
//*********************************************************** void dieukhien()// chuong trinh dieu khien thiet bi
if(test_string(buff_sms,"BAT1")) // BAT THIET BI 1 {
lcd_puts("\f Co Tin Hieu");// hien thi lcd delay(7);
lcd_puts("\f Dang Bat\n Thiet Bi 1");// hien thi lcd delay(7);
RB5 = 0;// bat thiet bi 1 delay(7);
lcd_puts("\f Thiet Bi 1\n Da Bat");// hien thi lcd send_sms("Thiet Bi 1: Da Bat");// gui tin nhan clear_buff();// xoa bo dem
xoa_sms();// xoa tin nhan return; // thoat chuong trinh }
if(test_string(buff_sms,"BAT2")) // BAT THIET BI 2 {
lcd_puts("\f Co Tin Hieu"); delay(7);
lcd_puts("\f Dang Bat\n Thiet Bi 2"); delay(7);
RB6 = 0; delay(7);
lcd_puts("\f Thiet Bi 2\n Da Bat"); send_sms("Thiet Bi 2: Da Bat"); clear_buff();
xoa_sms(); return; }
CHƯƠNG 5: THIẾT KẾ VÀ THI CÔNG MẠCH
{
lcd_puts("\f Co Tin Hieu"); delay(7);
lcd_puts("\f Dang Bat\n Thiet Bi 3"); delay(7);
RB7 = 0; delay(7);
lcd_puts("\f Thiet Bi 3\n Da Bat"); send_sms("Thiet Bi 3: Da Bat"); clear_buff();
xoa_sms(); return; }
if(test_string(buff_sms,"TAT1")) //TAT THIET BI 1 {
lcd_puts("\f Co Tin Hieu"); delay(7);
lcd_puts("\f Dang Tat\n Thiet Bi 1"); delay(7);
RB5 = 1; delay(7);
lcd_puts("\f Thiet Bi 1\n Da Tat"); send_sms("Thiet Bi 1: Da Tat"); clear_buff();
xoa_sms(); return; }
if(test_string(buff_sms,"TAT2")) // TAT THIET BI 2 {
lcd_puts("\f Co Tin Hieu"); delay(7);
lcd_puts("\f Dang Tat\n Thiet Bi 2"); delay(7);
RB6 = 1; delay(7);
lcd_puts("\f Thiet Bi 2\n Da Tat"); send_sms("Thiet Bi 2: Da Tat"); clear_buff();
xoa_sms(); return; }
if(test_string(buff_sms,"TAT3")) // TAT THIET BI 3 {
lcd_puts("\f Co Tin Hieu"); delay(7);
lcd_puts("\f Dang Tat\n Thiet Bi 3"); delay(7);
RB7 = 1; delay(7);
lcd_puts("\f Thiet Bi 3\n Da Tat"); send_sms("Thiet Bi 3: Da Tat"); clear_buff();
xoa_sms(); return; }
if(test_string(buff_sms,"TAT@123")) //TAT HET CAC THIET BI 1-2-3 {
CHƯƠNG 5: THIẾT KẾ VÀ THI CÔNG MẠCH
delay(7);
lcd_puts("\f Dang Tat \n Thiet Bi 1 2 3"); delay(7);
RB5 = 1 ; RB6 = 1; RB7 = 1; delay(7);
lcd_puts("\f Da Tat Het\n Thiet Bi 1 2 3");
send_sms("Thiet Bi 1 - Thiet Bi 2 - Thiet Bi 3: Da Tat"); clear_buff();
xoa_sms(); return; }
if(test_string(buff_sms,"BAT@123")) // BAT HET CAC THIET BI 1-2-3 {
lcd_puts("\f Co Tin Hieu"); delay(7);
lcd_puts("\f Dang Bat\n Thiet Bi 1 2 3"); delay(7);
RB5 = 0 ; RB6 = 0; RB7 = 0; delay(7);
lcd_puts("\f Da Bat Het\n Thiet Bi 1 2 3");
send_sms("Thiet Bi 1 - Thiet Bi 2 - Thiet Bi 3 Da Bat"); clear_buff(); xoa_sms(); return; } if(test_string(buff_sms,"BAT@2@3")) // TAT TB1 - MO TB2 VA TB3 {
lcd_puts("\f Co Tin Hieu"); delay(7);
lcd_puts("\f Dang Bat\n Thiet Bi 2 3"); delay(7);
RB5 = 1 ; RB6 = 0; RB7 = 0; delay(7);
lcd_puts("\f Da Bat\n Thiet Bi 2 3");
send_sms("Thiet Bi 1: Da Tat \n Thiet Bi 2 - Thiet Bi 3: Da Bat"); clear_buff(); xoa_sms(); return; } if(test_string(buff_sms,"BAT@1@3")) // TAT TB2 - MO TB1 VA TB3 {
lcd_puts("\f Co Tin Hieu"); delay(7);
lcd_puts("\f Dang Bat\n Thiet Bi 1 3"); delay(7);
RB5 = 0 ; RB6 = 1; RB7 = 0; delay(7);
lcd_puts("\f Da Bat\n Thiet Bi 2 3");
send_sms("Thiet Bi 2: Da Tat \n Thiet Bi 1 - Thiet Bi 3: Da Bat"); clear_buff(); xoa_sms(); return; } if(test_string(buff_sms,"BAT@1@2")) // TAT TB3 - MO TB1 VA TB2 {
lcd_puts("\f Co Tin Hieu"); delay(7);
CHƯƠNG 5: THIẾT KẾ VÀ THI CÔNG MẠCH
delay(7);
RB5 = 0 ; RB6 = 0; RB7 = 1; delay(7);
lcd_puts("\f Da Bat\n Thiet Bi 1 2");
send_sms("Thiet Bi 3: Da Tat \n Thiet Bi 1 - Thiet Bi 2: Da Bat"); clear_buff();
xoa_sms(); return; }
if(test_string(buff_sms,"KIEMTRA")) // KIEM TRA THIET BI DANG HOAT DONG
{
lcd_puts("\f Dang Kiem Tra\n Thiet Bi"); if(RB5==0&&RB6==0&&RB7==0)
{
send_sms("Thiet Bi 1: Da Bat \n Thiet Bi 2: Da Bat \n Thiet Bi 3: Da Bat");
}
if(RB5==1&&RB6==1&&RB7==1) {
send_sms("Thiet Bi 1: Da Tat \n Thiet Bi 2: Da Tat \n Thiet Bi 3: Da Tat");
}
if(RB5==0&&RB6==1&&RB7==1) {
send_sms("Thiet Bi 1: Da Bat \n Thiet Bi 2: Da Tat \n Thiet Bi 3: Da Tat");
if(RB5==1&&RB6==0&&RB7==1) {
send_sms("Thiet Bi 1: Da Tat \n Thiet Bi 2: Da Bat \n Thiet Bi 3: Da Tat");
}
if(RB5==0&&RB6==0&&RB7==1) {
send_sms("Thiet Bi 1: Da Bat \n Thiet Bi 2: Da Bat \n Thiet Bi 3: Da Tat");
}
if(RB5==1&&RB6==1&&RB7==0) {
send_sms("Thiet Bi 1: Da Tat \n Thiet Bi 2: Da Tat \n Thiet Bi 3: Da Bat");
}
if(RB5==0&&RB6==1&&RB7==0) {
send_sms("Thiet Bi 1: Da Bat \n Thiet Bi 2: Da Tat \n Thiet Bi 3: Da Bat");
}
if(RB5==1&&RB6==0&&RB7==0) {
send_sms("Thiet Bi 1: Da Tat \n Thiet Bi 2: Da Bat \n Thiet Bi 3: Da Bat"); } delay(5); clear_buff(); xoa_sms(); return;
CHƯƠNG 5: THIẾT KẾ VÀ THI CÔNG MẠCH
}
if(test_string(buff_sms,"TEST@NHIETDO")) {
lcd_puts("\f DANG KIEM TRA \n NHIET DO"); delay(5); send_nhietdo(temp," "); delay(5); clear_buff(); xoa_sms(); return; }
lcd_puts("\f SAI CU PHAP\n KIEM TRA LAI"); delay(5);
send_sms("GUI TIN SAI CU PHAP \n VUI LONG KIEM TRA LAI CU PHAP"); delay(5); clear_buff(); xoa_sms(); } //**************************CHUONG TRINH CHINH**************************************** void main() {
int_PORTD(); //Khoi dong portD.
RD0 = 1; //Khoi dong sim900 bang chuong trinh delay(8);
RD0 = 0; delay(2);
int_PORTB(); //Khoi dong portA. int_PORTA(); //Khoi dong portB.
RB5 = 1; RB6 = 1; RB7 = 1;
uart_init(); //Khoi dong UART. lcd_init(); //Khoi dong lcd. GIE = 1; // Cho phep ngat toan cuc. PEIE = 1; // Cho phep ngat ngoai vi. lcd_puts("\f Dang Cau Hinh \n Waiting!!!!");
cauhinh_sim900(); // chuong trinh cau hinh sim900 vao mang delay(50);
lcd_puts("\f Cau Hinh Xong \n Start...."); delay(20);
lcd_puts("\f Welcome To ... \n DO-AN-2A"); delay(15);
lcd_puts("\f--HOANG GIANG--\n --NGOC KIEU--"); xoa_het_sms();// xoa het tat ca cac tin nhan
clear_buff();//xoa het bo dem chua du lieu tin nhan duoc luu xoa_sms(); // xoa tin nhan
flag_isr = 0;
tinmoi = 0;//gan gia tri tinmoi=0 de cho ngat xay ra bat len 1 de thuc hien dk t_bi unsigned char ix=1;
while(1) {
init_ADC();// chuong trinh doc va do nhiet do display_temp(temp);
delay(15); if(ix)
{
CHƯƠNG 5: THIẾT KẾ VÀ THI CÔNG MẠCH
send_nhietdo(temp,"Do C"); delay(20);
lcd_puts("\f Da Gui Xong"); delay(10);
ix = 0; }
if(tinmoi) {
dieukhien(); //CHUONG TRINH DIEU KHIEN THIET BI tinmoi = 0;
} }
}