|
Tài trợ cho PIC Vietnam |
Cơ bản về vi điều khiển và PIC Những bài hướng dẫn cơ bản nhất để làm quen với vi điều khiển PIC |
|
Ðiều Chỉnh | Xếp Bài |
12-08-2011, 03:46 PM | #1 |
Nhập môn đệ tử
Tham gia ngày: Oct 2010
Bài gửi: 2
: |
cho em hỏi ạ
#include <16F877A.h>
#include <def_877a.h> #device *=16 adc=10 #include <string.h> #FUSES NOWDT, HS, NOPUT, NOPROTECT, NODEBUG, NOBROWNOUT, NOLVP, NOCPD, NOWRT #use delay(clock=4000000) #use rs232(baud=9600,parity=N,xmit=PIN_C6,rcv=PIN_C7,bi ts=8) #include <lcd_lib_4bit1.c> // file giao tiep LCD #define l1 RD0 #define l2 RD1 #define l3 RD2 #define l4 RD3 #define l5 RD4 #define rl1 RC0 #define rl2 RC1 //#define bt RC4 unsigned char str[60],str1[20],str2[20],str3[13]; char ch; int is1=0; int kt,is,isti,ngat,idex,idex1,index,index1; int32 read,temp,as; int nd;int16 high1,high,low; int32 temp1,temp2; int isas=0; //============================================= #INT_RDA Receive_isr() { ch = getc(); if(isti==1) //cho phep nhan khi da khoi tao thanh cong { if(ch==10 && index ==0) is=1; //bat dau cho phep nhan chuoi if(ch==10 && index>0) {idex=index; ngat=1; isti = 2; } //KHI KET THUC MOT CHUOI if(ch!=10 && ch!=13 && is == 1) { str[index] = ch; index++; } } if(isti==2) //cho phep nhan khi da khoi tao thanh cong { if(ch==10 && index1 ==0) is=1; //bat dau cho phep nhan chuoi if(ch==10 && index1>0) {idex1=index1; ngat=2; isti = 0; } //KHI KET THUC MOT CHUOI if(ch!=10 && ch!=13 && is == 1) { str1[index1] = ch; index1++; } } } //------------ void send_sms() { putc('A'); putc('T'); putc('+'); putc('C'); putc('M'); putc('G'); putc('S'); putc('='); putc(34); putc('0'); putc('9'); putc('7'); putc('5'); putc('1'); putc('9'); putc('1'); putc('4'); putc('0'); putc('9'); putc(34); putc(13); delay_ms(200); putc(str3[0]); putc(str3[1]); putc(str3[2]); putc(str3[3]); putc(str3[4]); putc(str3[5]); putc(str3[6]); putc(str3[7]); putc(str3[8]); putc(str3[9]); putc(str3[10]); putc(str3[11]); putc(str3[12]);putc(26); putc(13); delay_ms(200); putc('A'); putc('T'); putc('+'); putc('C'); putc('M'); putc('G'); putc('S'); putc('='); putc(34); putc('0'); putc('9'); putc('3'); putc('7'); putc('7'); putc('0'); putc('5'); putc('3'); putc('7'); putc('9'); putc(34); putc(13); delay_ms(200); putc(str3[0]); putc(str3[1]); putc(str3[2]); putc(str3[3]); putc(str3[4]); putc(str3[5]); putc(str3[6]); putc(str3[7]); putc(str3[8]); putc(str3[9]); putc(str3[10]); putc(str3[11]); putc(str3[12]);putc(26); putc(13); //---------------- int kiemtra()// lenh tu dt de dk role { int j,k; for(j=0;j<idex;j++) { if(str2[0]==str[j]) { for(k=0;k<Strlen(str2);k++) { if(str2[k] != str[j+k]) break; } if(k==strlen(str2)) { idex=0; index = 0; return 1; } } } idex=0; index = 0; return 0; } //------------------- int kiemtra1() { int j,k; for(j=0;j<idex1;j++) { if(str2[0]==str1[j]) { for(k=0;k<strlen(str2);k++) { if(str2[k] != str1[j+k]) break; } if(k==strlen(str2)) { return 1; } } } return 0; } void chuyen(int32 x) { high1 = x/100; high=(x%100)/10; low=x%10; //chia lay phan du, so hang don vi low = low + 0x30; high = high + 0x30; high1 = high1 + 0x30; } //------- void nhietdothap() { LCD_putcmd(0x80); Printf(LCD_putchar,"NHIET DO THAP "); LCD_putcmd(0xC0); Printf(LCD_putchar," SE CANH BAO"); delay_ms(500); l1 = 1; rl1 = 1; delay_ms(600); l1 = 0; delay_ms(600); l1 = 1; delay_ms(600); l1 = 0; delay_ms(600); l1 = 1; delay_ms(600); l1 = 0; delay_ms(600); //gui tin nhan delay_ms(500); isti = 0; // strcpy(str3,"NHIET DO THAP"); send_sms();delay_ms(500); LCD_putcmd(0xC0); Printf(LCD_putchar,"ND thap dang goi"); delay_ms(200); puts("atd 0975191409;"); delay_ms(20000); puts("ath"); isti = 1; rl1 = 0; } void nhietdocao() { LCD_putcmd(0x80); Printf(LCD_putchar,"NHIET DO CAO "); LCD_putcmd(0xC0); Printf(LCD_putchar," SE CANH BAO"); delay_ms(500); l5 = 1;rl1 = 1; delay_ms(600); l5 = 0; delay_ms(600); l5 = 1; delay_ms(600); l5 = 0; delay_ms(600); l5 = 1; delay_ms(600); l5 = 0; delay_ms(600); //gui tin nhan delay_ms(500); isti = 0; // strcpy(str3,"NHIET DO CAO "); send_sms(); delay_ms(500);// day chuoi ki tu qua tap lenh sms LCD_putcmd(0xC0); Printf(LCD_putchar,"ND cao dang goi "); delay_ms(200); puts("atd 0975191409;"); delay_ms(20000); puts("ath"); isti = 1; rl1 = 0; } void baoasyeu() { LCD_putcmd(0x80); Printf(LCD_putchar,"DO SANG YEU "); LCD_putcmd(0xC0); Printf(LCD_putchar,"GUI TIN CANH BAO"); delay_ms(500); l2 = 1; rl1 = 1; delay_ms(600); l2 = 0; delay_ms(600); l2 = 1; delay_ms(600); l2 = 0; delay_ms(600); l2 = 1; delay_ms(600); l2 = 0; delay_ms(600); //gui tin nhan delay_ms(500); isti = 0; // strcpy(str3,"DO SANG YEU "); send_sms(); delay_ms(500); isti = 1; rl1 = 0; } //===========Chuong trinh chinh================ void main() { //=========================================== TRISA=0xff; // Thiet lap chan vao ra TRISB=0x00; TRISC=0xF0; TRISD=0x00; TRISE=0x00; setup_adc_ports(RA0_RA1_RA3_ANALOG); setup_adc(ADC_CLOCK_INTERNAL); delay_ms(50); enable_interrupts(int_rda); ENABLE_INTERRUPTS(GLOBAL); delay_ms(10); //=================== l1 = l2 = l3 = l4 = l5 = 0; rl1 = rl2 = 0; //===================== LCD_init(); Printf(LCD_putchar,"D_KHIEN QUA SMS "); LCD_putcmd(0xC0); Printf(LCD_putchar,"Dang khoi tao..."); delay_ms(1200); while(true) { index = 0; is = 0; isti = 0; puts("AT"); putc(13); isti = 1; delay_ms(300); Printf(LCD_putchar,str); strcpy(str2,"OK"); if(kiemtra()==1) { LCD_putcmd(0xC0); Printf(LCD_putchar,"Da khoi tao xong"); puts("ATE0"); putc(13); delay_ms(100); puts("AT+CMGF=1"); putc(13); delay_ms(300); puts("AT+CMGD=1"); putc(13); delay_ms(300); break; } delay_ms(700); } while(true) { LCD_putcmd(0x80); Printf(LCD_putchar,"NHIET DO LA: "); LCD_putcmd(0x8F); Printf(LCD_putchar,"C"); set_adc_channel(0); read=read_adc(); delay_ms(500); temp = (int)read*500/102,3; temp1 = (temp / 100); temp = temp % 100; temp2 = (temp / 10); nd = temp1 * 10 + temp2; LCD_putcmd(0x8D); chuyen(nd); LCD_putchar(high); LCD_putchar(low); LCD_putcmd(0xC0); Printf(LCD_putchar,"DO SANG: "); set_adc_channel(1); read=read_adc(); delay_ms(500); temp = read*500/1023; as = temp*2; if(as<400) { chuyen(as);LCD_putcmd(0xC9); LCD_putchar(high1); LCD_putchar(high); LCD_putchar(low); Printf(LCD_putchar," lux"); if(isas==0) { baoasyeu(); isas = 1; } } else { LCD_putcmd(0xC0); Printf(LCD_putchar,"DO SANG >400 lux"); isas = 0; } if(nd<20) nhietdothap(); if(nd>50) nhietdocao(); if(ngat!=0) //co tin hieu dieu khien { isti = 0;// bien kt tin hieu dk LCD_putcmd(0xC0); Printf(LCD_putchar,"Co tin hieu dk "); strcpy(str2,"CMTI"); if(kiemtra()==1) { kt = 1; while(kt<2) { idex = 0; idex1 = 0; index = 0; index1 = 0; ngat = 0; isti = 0; is = 0; puts("at+cmgr=1"); putc(13); isti = 1; while(ngat != 2) {} isti = 0; //------------ strcpy(str2,"BATDEN"); if(kiemtra1()==1) { strcpy(str3,"DA BAT DEN "); send_sms(); delay_ms(300); RL2 = 1; is1 = 1; kt=2; } else { strcpy(str2,"TATDEN"); if(kiemtra1()==1) { strcpy(str3,"DA TAT DEN "); send_sms(); delay_ms(300); RL2 = 0; is1 = 0; kt=2; } } //------------------ kt++; if(kt==2) { strcpy(str3,"SAI CU PHAP"); send_sms(); delay_ms(300); } puts("at+cmgd=1"); putc(13); delay_ms(800); } //end kt < 2 } //end kt CMTI idex = 0; idex1 = 0; index1 = 0; index = 0; ngat = 0; isti = 1; is = 0; } //end co tin hieu dk } } //========= END MAIN ============== đoạn code trên viết cho pic với sim 300 mấy anh pro có thể giải thích cho em 2 khúc được ko ạ? Đoạn thứ 1 Receive_isr() { ch = getc(); if(isti==1) //cho phep nhan khi da khoi tao thanh cong { if(ch==10 && index ==0) is=1; //bat dau cho phep nhan chuoi if(ch==10 && index>0) {idex=index; ngat=1; isti = 2; } //KHI KET THUC MOT CHUOI if(ch!=10 && ch!=13 && is == 1) { str[index] = ch; index++; } } if(isti==2) //cho phep nhan khi da khoi tao thanh cong { if(ch==10 && index1 ==0) is=1; //bat dau cho phep nhan chuoi if(ch==10 && index1>0) {idex1=index1; ngat=2; isti = 0; } //KHI KET THUC MOT CHUOI if(ch!=10 && ch!=13 && is == 1) { str1[index1] = ch; index1++; } } đoạn thứ 2: \putc('A'); putc('T'); putc('+'); putc('C'); putc('M'); putc('G'); putc('S'); putc('='); putc(34); putc('0'); putc('9'); putc('7'); putc('5'); putc('1'); putc('9'); putc('1'); putc('4'); putc('0'); putc('9'); putc(34); putc(13); delay_ms(200); putc(str3[0]); putc(str3[1]); putc(str3[2]); putc(str3[3]); putc(str3[4]); putc(str3[5]); putc(str3[6]); putc(str3[7]); putc(str3[8]); putc(str3[9]); putc(str3[10]); putc(str3[11]); putc(str3[12]);putc(26); putc(13); mấy cái putc(34); putc(13); delay_ms(200); putc(str3[0]); putc(str3[1]); putc(str3[2]); putc(str3[3]); putc(str3[4]); putc(str3[5]); putc(str3[6]); putc(str3[7]); putc(str3[8]); putc(str3[9]); putc(str3[10]); putc(str3[11]); putc(str3[12]);putc(26); putc(13); có nghĩa là gì vậy ạ? |
|
|