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... 9 Chương trình đếm xung ngoài đưa tới chân RB0 chân ngắt ngo
Trang 11 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
Trang 2void 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<<=1; //dich trai bien x mot bit
x|=1; //hoac muc bit bien x voi gia tri 1 (dua bit so 0 len
Trang 4void hienthi(int8 so)
set_tris_b(0x00); //xac lap PORTB la dau ra
set_tris_a(0x0); //xac lap PORTA la dau ra
Trang 5/*chuong trinh dem xung ngoai dua toi chan RA4 hien thi so demtren cac led don noi voi PORTC*/
set_tris_C(0); //xac lap PORTC la dau ra
TRISA4=1; //xac lap RA4 la dau vao
x=get_timer0(); //doc so dem cua counter
output_C(x); //xuat gia tri doc duoc ra PORTC
if(x>=201) set_timer0(0);
}
}
Trang 66 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
Trang 7output_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
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
//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
unsigned int8 y=0;
output_drive(PIN_B0); //xac lap RB0 la dau ra
Trang 8setup_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
// Chuong trinh su dung timer0
// De tao thoi gian 1 giay timer tuong duong voi 10^6 chu ky may
Trang 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
Trang 109 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*/
Trang 11set_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
Trang 14SET_ADC_CHANNEL(0);// CHON NGO VAO CU THE DELAY_US(800);// TAO TRE
Trang 16{ E=1; //TAO XUNG KICH
RS=0; //BUS NOI THANH GHI IR
RW=0; //CHE DO GHI DU LIEU
E=0; //TAO XUNG KICH
SET_ADC_CHANNEL(0);
DELAY_US(800);
}
Trang 180b10000010,0b11111000,0b10000000,0b10010000};// ma led ung voi cac chan theo tuan tu
Trang 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]);