Tải bản đầy đủ (.doc) (22 trang)

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

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (244.01 KB, 22 trang )

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
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<<=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ều khiển led 7 đoạn nối với PORTB 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ều khiển 2 led 7 đoạn nối song song với PORTB 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ương trình đếm xung ngoài đưa tới chân RA4 hiển thị số đếm từ 0-200 trên
các led đơn nối vớ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 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. 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
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
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
// 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ươ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)
{
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)
{
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 <16F877A.H>
#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
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 <16F877A.H>
#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
#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;
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);
}
//==============================
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();
}
13-Ngắt ngoài
#include <16f877a.h>
#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)
{
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]);
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 <16F877A.h>
#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
#int_timer0
void interrupt_timer0()
{
if(count==2000)// 500us*2000=1s
{// sau 1s count lai =0 va dich sang trai 1 bit, led2_RB1 sang
count=0;
a=a<<1; // dich trai a 1bit
}
if(a==256)
{//den khi led 8_led cuoi cung sang thi quay lai led 0 sang, sau 1s count lai =0
a=1;
count=0;
}
count++;
}
//Chuong trinh chinh
main()

{
set_tris_b(0);
enable_interrupts(global);
enable_interrupts(int_timer0);
setup_timer_0(RTCC_INTERNAL|RTCC_DIV_2);
set_timer0(6); // 2*(256-6)us= 500us
count=0;
a=1; // led1_RB0 sang
while(true)
{
portb=a; // hien thi led tren portb
}
}
15-Ngắt RB1
#include <16f877a.h>
#fuses nowdt,noprotect,noput,xt,put
#use delay (clock=4000000)
#use fast_io(B)
#USE FAST_IO(D)
#Byte portB=0x06
#BYTE PORTD=0X08
INT I,J;
INT
A[10]={0b00111111,0b00000110,0b01011011,0b01001111,0b01100110,0b01101101,
0b01111101,0b00000111,0b011111111,0b01101111}; //bang ma led 7 doan loai
anode chung
// NGAT RB0
#int_ext
VOID NGAT_RB0()
{

I=4 ; //tac dong portb.0 , nhan nut led se bat dau tu so 4
}

// Chuong trinh chinh
VOID MAIN()
{ set_tris_b(0b00000001);
set_tris_d(0);
enable_interrupts(global);
enable_interrupts(int_ext);
ext_int_edge(H_to_L);
while(true)
{
IF(I<=9) // chay tu 0 >9
{ PORTD=A[I];
I++;
DELAY_MS(100);
}
else
i=0; // toi 9 nhay ve 0
}
}

×