Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống
1
/ 22 trang
THÔNG TIN TÀI LIỆU
Thông tin cơ bản
Định dạng
Số trang
22
Dung lượng
285,5 KB
Nội dung
1. ChươngtrìnhđiềukhiểncácledđơnnốivớiPORTBnhấpnháy
//Chuong trinhdieukhiencacleddonnoivoiPORTBnhap nhay
#include "16f877a.h" //file dinh nghia cac thanh ghi, cac hang so cua PIC
#fuses NOLVP, NOWDT //ko nap chuongtrinh 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 chuongtrinh 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ềukhiển các ledđơnnốivớiPORTB 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
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 caclednoivoi PORTB
delay_ms(200); //tre mot khoang thoi gian de quan sat
lap:
x<<=1; //dich trai bien x mot bit
x|=1; //hoac muc bit bien x voi gia tri 1 (dua bit so 0 len
//muc 1
output_B(x); //xuat gia tri cua x ra portb
delay_ms(200);
if(x!=0xff) goto lap; //kiem tra neu x<>=0xff thi lap lai
}
}
3. Chương trìnhđiềukhiểnled 7 đoạn nối vớiPORTB hiển thị số từ 0-9
#include "16f877a.h"
#fuses HS,NOLVP, NOWDT
#use delay(clock=4Mhz)
const char ma7d[10]={0xc0, 0xf9,
0xa4, 0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};
void main()
{
char i=0;
set_tris_B(0);
while(true)
{
for(i=0;i<10;i++)
{
output_B(ma7d[i]);
delay_ms(200);
}
}
}
4. Chương trìnhđiềukhiển 2 led 7 đoạn nối song song vớiPORTB hiển thị số từ 0-
99
#include <16f877A.h>
#fuses NOWDT,PUT,HS,NOPROTECT,NOLVP
#use delay(clock=4Mhz)
#use fast_io(b)
const int8 ma7doan[10]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90};
void hienthi(int8 so)
{
int8 i, hc,hdv;
hc=so/10;
hdv=so%10;
for(i=0;i<50;i++)
{
//hien thi so hang don vi
output_high(pin_a1);
output_b(ma7doan[hdv]);
output_low(pin_a0);
delay_ms(10);
//hien thi so hang chuc
output_high(pin_a0);
output_b(ma7doan[hc]);
output_low(pin_a1);
delay_ms(10);
}
}
void main()
{
int8 count=0;
set_tris_b(0x00); //xac lap PORTB la dau ra
set_tris_a(0x0); //xac lap PORTA la dau ra
while(true)
{
hienthi(count);
count++;
if(count==100) count=0;
}
}
5. Chươngtrình đếm xung ngoài đưa tới chân RA4 hiển thị số đếm từ 0-200 trên
các ledđơnnốivới PORTC sử dụng timer0 với chức năng counter
/*chuong trinh dem xung ngoai dua toi chan RA4 hien thi so dem
tren cacleddonnoivoi 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. Chươngtrì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
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 cacled (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ươngtrì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
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ươngtrì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:
// Chuongtrinh su dung timer0
// De tao thoi gian 1 giay timer tuong duong voi 10^6 chu ky may
// 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]);
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ươngtrì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ácledđơnnốivới PORTC
/*Chuong trinh dem xung ngoai dua toi chan RB0(chan ngat ngoai). Hien thi so dem
tu 0-99 tren cacleddonnoivoi 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)
[...]... 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(); }... 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;... 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ớiPORTB 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) { int16 i=0; //xac lap cho PORTB. .. output_C (led7 doan[1]); output_D(0b00001111); } else if (a==2) { output_C (led7 doan[2]); output_D(0b11110000); } else if (a==3) { output_C (led7 doan[3]); output_D(0b10101010); } else if (a==4) { output_C (led7 doan[4]); output_D(0b01010101); } else if (a==5) { output_C (led7 doan[5]); output_D(0b11100111); } else if(a==6) { output_C (led7 doan[6]); output_D(0b11000011); } else if(a==7) { output_C (led7 doan[7]);... bit, led2 _RB1 sang count=0; a=a20* đè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) #BYTE PORTB= 0x06 #USE FAST_IO(D) #BYTE PORTD=0x08 #BIT RS=PORTD.0... 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; 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; } } } //============================== . 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. 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