intTypePromotion=1
zunia.vn Tuyển sinh 2024 dành cho Gen-Z zunia.vn zunia.vn
ADSENSE

Chương trình điều khiển các led đơn nối với PORTB nhấp nháy

Chia sẻ: Nguyen Manh Cuong | Ngày: | Loại File: DOC | Số trang:22

292
lượt xem
36
download
 
  Download Vui lòng tải xuống để xem tài liệu đầy đủ

Chương trình đếm xung ngoài đưa tới chân RA4 hiển thị số đếm từ 0-99 trên 2 led 7 đoạn (anode chung) nối song song với PORTB. Chân RA0 và RA1 lần lượt quét led hàng đơn vị và hàng chục

Chủ đề:
Lưu

Nội dung Text: Chương trình điều khiển các led đơn nối với PORTB nhấp nháy

  1. 1. Chương trình điều khiển các led đơn nối với PORTB nhấp nháy //Chuong trinh dieu khien cac led don noi voi PORTB nhap nhay #include "16f877a.h" //file dinh nghia cac thanh ghi, cac hang so cua PIC #fuses NOLVP, NOWDT //ko nap chuong trinh o dien the thap, khong su dung #use delay(clock=4Mhz) //khai bao su dung tan so thach anh 4Mhz void main(void) //bat dau chuong trinh chinh { set_tris_B(0x0); //xac lap PORT B la dau ra (thanh ghi TRISB) //TRISB=0x0: dau ra, TRISB=0b11111111 dau vao while(true) { output_B(0); //xuat ra cac chan cua PORTB muc 0 delay_ms(100); //tre mot khoang thoi gian de quan sat output_B(0xff); //xuat muc 1 ra cac chan cua PORTB delay_ms(100); //tre mot khoang thoi gian de quan sat } } 2.Chương trình điều khiển các led đơn nối với PORTB sáng dần //sang dan bat dau tu RB0 den RB7 #include "16F877A.h" #FUSES HS, NOWDT, NOLVP //HS: su dung thach anh tan so cao >4Mhz //NOWDT: khong su dung Watchdog //NOLVP: khong su dung nap dien ap thap #use delay(clock=4Mhz) //su dung thach anh tan so 12Mhz
  2. void main(void) { unsigned int8 x=0; //khai bao bien x 8bit, khong dau set_tris_B(0); //xac lap PORTB la dau ra while(true) { x=0; output_B(0); //tat het cac led noi voi PORTB delay_ms(200); //tre mot khoang thoi gian de quan sat lap: x
  3. set_tris_B(0); while(true) { for(i=0;i
  4. void hienthi(int8 so) { int8 i, hc,hdv; hc=so/10; hdv=so%10; for(i=0;i
  5. /*chuong trinh dem xung ngoai dua toi chan RA4 hien thi so dem tren cac led don noi voi PORTC*/ #include "16F877A.h" #fuses NOWDT, NOLVP, HS #bit TRISA4 =0x85.4 void main(void) { char x=0; set_tris_C(0); //xac lap PORTC la dau ra TRISA4=1; //xac lap RA4 la dau vao output_C(0xff); /*xac lap timer0 lam chuc nang counter, dem xung tai suon xuong, khong su dung bo chia tan*/ setup_timer_0(T0_EXT_H_TO_L|T0_DIV_1); set_timer0(0); //xac lap so dem ban dau //cho counter while(true) { x=get_timer0(); //doc so dem cua counter output_C(x); //xuat gia tri doc duoc ra PORTC if(x>=201) set_timer0(0); } }
  6. 6. Chương trình đếm xung ngoài đưa tới chân RA4 hiển thị số đếm từ 0-99 trên 2 led 7 đoạn (anode chung) nối song song với PORTB. Chân RA0 và RA1 lần lượt quét led hàng đơn vị và hàng chục /*chuong trinh dem xung ngoai dua toi chan RA4 su dung counter0 cac chan a,b,...,f cua 2 led 7 doan (anode chung)noi song song voi RB0,RB1...RB6 chan RA0 quet led hang don vi, RA1 quet led hang chuc xung dua vao chan RA4*/ #include "16F877A.h" #fuses NOWDT, NOLVP, XT #use delay(clock=4Mhz) //tich cuc muc thap const char ma7doan[10]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90}; void hienthi(int8 chuc,int8 dv); void main(void) { int8 x=0,chuc,dv; set_tris_B(0); //xac lap PORTB la dau ra output_drive(pin_A0); //xac lap RA0 la dau ra
  7. output_drive(pin_A1); //xac lap RA1 la dau ra output_float (pin_A4); //xac lap RA4 la dau vao output_B(0xff); //tat het cac led (led anode chung) setup_timer_0(T0_EXT_H_TO_L|T0_DIV_1); //xac lap cho timer0 la bo dem xung ngoai set_timer0(0); //xac lap cho timer0 dem xung tu 0 while(true) { x=get_timer0(); //doc gia tri hien tai cua timer0 chuc=x/10; dv=x%10; hienthi(chuc,dv); if(x>=100) set_timer0(0); } } void hienthi(int8 chuc,int8 dv) { output_B(ma7doan[chuc]); //giai ma hang chuc va xuat ra portB output_low(pin_A1); //cho led hang chuc dan delay_ms(2); output_high(pin_A1); //cam led hang chuc output_B(ma7doan[dv]); //giai ma hang don vi va xuat ra portc output_low(pin_A0); //cho led hang don vi dan delay_ms(2); output_high(pin_A0); //cam led hang don vi dan } 7 Chương trình tạo xung vuông có chu kỳ T=0.01 giây, độ rỗng 50%, sử dụng thạch anh tần số 4Mhz //Chu thich: //Chuong trinh su dung timer0 //De tao thoi gian 0.05 giay timer can dem duoc (4*10^6/4)*0.05=5*10^4 so dem //Goi so dem trong 1 lan tran la x //So lan tran la y //Chia tan z thi x*y*z=50.000 //Chon z=16, x=125 thi y=25 //============================================================ #include "16f877a.h" #fuses NOWDT, NOLVP, XT, NOPROTECT #bit TMR0IF = 0x0b.2 void main(void) { unsigned int8 y=0; output_drive(PIN_B0); //xac lap RB0 la dau ra
  8. setup_timer_0(T0_internal|T0_DIV_16);//timer0 chuc nang timer, chia tan 16 set_timer0(-125); //xac lap so dem ban dau cua timer while(true) { if(TMR0IF==1) { TMR0IF=0; set_timer0(-125); y++; if(y==25) { y=0; output_toggle(PIN_B0); } } } } 8 Chương trình đếm giây từ 0-59 hiển thị trên 2 led 7 đoạn nối song song với PORTC, chân RB0 và RB1 quét led. Tần số thạch anh sử dụng 4Mhz //Chu thich: // Chuong trinh su dung timer0 // De tao thoi gian 1 giay timer tuong duong voi 10^6 chu ky may
  9. // Goi so dem trong 1 lan tran la x // So lan tran la y // Chia tan z thi x*y*z=1.000.000 chu ky may // Chon z=64, x=125 thi y=125 //============================================================ #include "16f877a.h" #use delay(clock=4Mhz) //khai bao bang ma const char ma7doan[10]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};//tich cuc muc thap char lantran=0,giay=0; //chuong trinh phuc vu ngat timer0 #int_TIMER0 void ngat_timer0(void) { lantran++; set_timer0(-125); if(lantran==125) { lantran=0; giay++; if(giay==60) giay=0; } } //chuong trinh chinh void main(void) { //xac lap timer0 setup_timer_0(T0_internal|T0_DIV_64); set_timer0(-125); //cho phep ngat timer0 dem tran enable_interrupts(Global); enable_interrupts(int_timer0); clear_interrupt(int_timer0); //xac lap cho PORTC va PIN_B0,PIN_B1 la dau ra set_tris_c(0); output_drive(pin_B0); output_drive(pin_B1); while(true) { output_C(ma7doan[giay/10]);
  10. output_high(PIN_B0); output_low(PIN_B1); delay_ms(20); output_high(PIN_B1); output_C(ma7doan[giay%10]); output_low(PIN_B0); delay_ms(20); output_high(PIN_B0); } } 9 Chương trình đếm xung ngoài đưa tới chân RB0 (chân ngắt ngoài) hiển thị số đếm từ 0-99 trên các led đơn nối với PORTC /*Chuong trinh dem xung ngoai dua toi chan RB0(chan ngat ngoai). Hien thi so dem tu 0-99 tren cac led don noi voi cong C*/ #include "16f877a.h" #include "def_16F877a.h" static char i=0; /*chuong trinh con phuc vu ngat ngoai*/ #int_EXT void EXT_isr(void) { i++; } /*chuong trinh chinh*/ void main(void)
  11. { set_tris_C(0); //xac lap portc la dau ra output_float(PIN_B0); //xac lap chan RB0 la dau vao enable_interrupts(GLOBAL); //cho phep ngat enable_interrupts(INT_EXT); //cho phep ngat ngoai ext_int_edge(INT_EXT,H_TO_L); while(true) { output_c(i); if (i==100 ) i=0; } } 10 Chương trình đếm xung ngoài đưa tới chân RC0/T1CKI (chân đầu vào timer1) hiển thị số đếm từ 0-200 trên các led đơn nối với PORTB sử dụng timer1 với chức năng counter //Chu thich: //chuong trinh su dung timer1 voi chuc nang counter dem xung ngoai //============================================================ #include "16f877a.h" #fuses NOWDT, NOLVP, HS void main(void) {
  12. int16 i=0; //xac lap cho PORTB la dau ra set_tris_B(0); output_B(0); /*Su dung timer1: chuc nang counter (TMR1CS=1) Chia tan 1 (T1CKPS1:T1CKPS0=00) Cho phep hoat dong TMR1ON=1*/ setup_timer_1(T1_external|T1_DIV_BY_1); set_timer1(0); //xac lap so dem ban dau cua timer1 while(true) { i=get_timer1(); if(i==200) { set_timer1(0); i=0; } output_B(i); } } 11- Cảnh báo nhiệt độ hiển thị lên led7 đoạn #INCLUDE
  13. #FUSES NOWDT,NOPROTECT,NOLVP,XT,PUT #DEVICE 16F877*=16 ADC=10 #USE DELAY(CLOCK=4000000) #USE FAST_IO(E) #BYTE PORTE=0X09 #USE FAST_IO(B) #BYTE PORTB=0X06 #BIT RE0=PORTE.0 #BIT RE1=PORTE.1 #use fast_io(d) #byte portd=0x08 #bit rd0=portd.0 INT X,i,CHUC,DONVI; INT A[10]={192,249,164,176,153,146,130,248,128,144}; void DOC_ADC(); void HIENTHI(); //============ VOID MAIN() { SET_TRIS_E(0); SET_TRIS_B(0); SET_TRIS_D(0); WHILE(1) while (1) { DOC_ADC(); X=READ_ADC(); if (X>=40)//nhiet 20 do --> canh bao {X=X*0.4883; HIENTHI(); RD0=1; } else { X=X*0.4883; HIENTHI(); RD0=0; } } } void DOC_ADC() { SETUP_ADC(ADC_CLOCK_DIV_2);// CHON TAN SO CHUYEN DOI SETUP_ADC_PORTS(AN0);//CHON SO NGO VAO
  14. SET_ADC_CHANNEL(0);// CHON NGO VAO CU THE DELAY_US(800);// TAO TRE } void HIENTHI() { CHUC=X/10; DONVI=X%10; RE0=0; RE1=1; PORTB=A[DONVI]; DELAY_MS(10); RE0=1; RE1=0; PORTB=A[CHUC]; DELAY_MS(10); } 12- Cảnh báo nhiệt độ hiển thị lên LCD >20* đèn sáng #INCLUDE #FUSES NOWDT,NOPROTECT,NOLVP,XT,PUT #DEVICE 16F877A*=16 ADC=10 #USE DELAY(CLOCK=4000000) #USE FAST_IO(A) #BYTE PORTA=0x05 #USE FAST_IO(B)
  15. #BYTE PORTB=0x06 #USE FAST_IO(D) #BYTE PORTD=0x08 #BIT RS=PORTD.0 #BIT RW=PORTD.1 #BIT E=PORTD.2 #bit rd3=PORTD.3 INT X,CHUC,DONVI,TRAM,k; INT A[10]={48,49,50,51,52,53,54,55,56,57}; VOID KHOITAO(); VOID HIENTHI(); VOID DOC_ADC(); void bentrong(); VOID MAIN() { SET_TRIS_B(0); SET_TRIS_D(0B000); PORTB=0X01; KHOITAO(); PORTB=0X0C; KHOITAO(); PORTB=0X38; KHOITAO(); PORTB='T';// neu viet chu thi de? chu~ o trong da'u '' //vd : 'T' HIENTHI(); PORTB=0X52;// su dung bang ma ascii 52_hex tuong duong voi chu~ "R" HIENTHI(); PORTB=0X41; HIENTHI(); PORTB=0X4E; HIENTHI(); PORTB=0X20; HIENTHI(); PORTB=0X43; HIENTHI(); PORTB=0X4F; HIENTHI(); PORTB=0X4E; HIENTHI(); PORTB=0X47; HIENTHI(); PORTB=0X20; HIENTHI(); PORTB=0X4C;
  16. HIENTHI(); PORTB=0X4F; HIENTHI(); PORTB=0X43; HIENTHI(); WHILE(1) { DOC_ADC(); X=READ_ADC(); if(X>40) { X=X*0.4883; bentrong(); rd3=1; } else { X=X*0.4883; bentrong(); rd3=0; } } } //============================== VOID KHOITAO() { E=1; //TAO XUNG KICH RS=0; //BUS NOI THANH GHI IR RW=0; //CHE DO GHI DU LIEU E=0; //TAO XUNG KICH DELAY_MS(3); } //============================== VOID HIENTHI() { E=1; RS=1; //BUS NOI THANH GHI DR RW=0; E=0; DELAY_MS(3); } //============================== void DOC_ADC() { SETUP_ADC(ADC_CLOCK_INTERNAL); SETUP_ADC_PORTS(AN0); SET_ADC_CHANNEL(0); DELAY_US(800); }
  17. //============================== void bentrong() { TRAM=X/100; CHUC=X%100/10; DONVI=X%10; PORTB=0XC0; KHOITAO(); PORTB=0X4E; HIENTHI(); PORTB=0X48; HIENTHI(); PORTB=0X49; HIENTHI(); PORTB=0X45; HIENTHI(); PORTB=0X54; HIENTHI(); PORTB=0X20; HIENTHI(); PORTB=0X44; HIENTHI(); PORTB=0X4F; HIENTHI(); PORTB=0X3A; HIENTHI(); PORTB=0X20; HIENTHI(); PORTB=A[TRAM]; HIENTHI(); PORTB=A[CHUC]; HIENTHI(); PORTB=A[DONVI]; HIENTHI(); PORTB=223; HIENTHI(); PORTB=0X43; HIENTHI(); }
  18. 13-Ngắt ngoài #include #FUSES NOWDT, HS, NOPUT,NOPROTECT, NODEBUG, NOBROWNOUT, NOLVP, NOCPD #use delay(clock=40000000) int led7doan[10]={0b11000000,0b11111001,0b10100100,0b10110000,0b10011001,0b10 010010, 0b10000010,0b11111000,0b10000000,0b10010000};// ma led ung voi cac chan theo tuan tu int a=0; #int_ext void ngat_ngoai() { a=a+1; if (a>9) { a=0; } output_C(led7doan[a]); } void main() { ext_int_edge( H_TO_L ); enable_interrupts(INT_EXT); enable_interrupts(GLOBAL); while(true)
  19. { if (a==0) { output_C(led7doan[0]); output_D(0b10101010); } else if (a==1) { output_C(led7doan[1]); output_D(0b00001111); } else if (a==2) { output_C(led7doan[2]); output_D(0b11110000); } else if (a==3) { output_C(led7doan[3]); output_D(0b10101010); } else if (a==4) { output_C(led7doan[4]); output_D(0b01010101); } else if (a==5) { output_C(led7doan[5]); output_D(0b11100111); } else if(a==6) { output_C(led7doan[6]); output_D(0b11000011); } else if(a==7) { output_C(led7doan[7]); output_D(0b10000001); } else if(a==8) { output_C(led7doan[8]);
  20. output_D(0b11111111); } else if(a==9) { output_C(led7doan[9]); output_D(0b00110011); } else { output_C(0xFF); output_D(0b00000000); } ; } } 14-Ngắt timer 0 #include #fuses NOWDT,PUT,XT,NOPROTECT #use delay(clock=4000000) #use fast_io(b) #byte portb=0x06 #define led pin_B0 int16 count; int8 a; //Chuong trinh ngat TMR0
ADSENSE

CÓ THỂ BẠN MUỐN DOWNLOAD

 

Đồng bộ tài khoản
2=>2