Tải bản đầy đủ (.docx) (24 trang)

tài liệu vi xử lý ( điều khiển led bằng pic)

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 (645.55 KB, 24 trang )

{khúc đầu 16 led}

#include <xc.h>
#include <math.h>
#include <htc.h>
#define _XTAL_FREQ 4000000

SÁNG ĐUỔI

#include <xc.h>
#define _XTAL_FREQ 4000000
void sangduoi ()
{

unsigned char i, a= 0x80;
for(i=0; i<8; i++)
{

PORTD= a>>i;
__delay_ms(500);
}
}
void main(void)
{
ANSEL = ANSELH = 0;
TRISD= 0;
PORTD= 0;
sangduoi ();
}

SÁNG TẮT



#define _XTAL_FREQ 4000000

#include <xc.h>

void main (void)

{

ANSEL = ANSELH = 0;

TRISD= 0;

while(1)

{

PORTD = 0x00; (0b10101010 nếu sáng tắt luân phiên)

__delay_ms(500);

PORTD = 0xFF; (0b01010101 nếu sáng tắt luân phiên)

__delay_ms(500);

}

}

SÁNG DẦN


#include <xc.h>

#define _XTAL_FREQ 4000000

void main ()

{

ANSEL = ANSELH = 0;

TRISD = 0;

PORTD = 0x80;

__delay_ms(300);

for (int i=0;i<8;i++)// tu trai qua phai

{
PORTD = PORTD >>1|PORTD;
__delay_ms(300); } }

SÁNG DỒN

#include <xc.h>
#define _XTAL_FREQ 4000000
void main(void)
{
ANSEL = ANSELH = 0;

TRISD = 0;
PORTD = 0;
unsigned char k = 0;
for (int i=0;i<8;i++)
{

for (int j=0;j<8-i;j++)
{

PORTD= (0x80>>j)|k;
__delay_ms(400);
}
k = PORTD;
__delay_ms(400);
}
}

3 NÚT NHẤN

void main (void)
{

ANSEL=ANSELH=0;
TRISD=0;
TRISB=0xFF;

nRBPU=0;
WPUB=0xFF;
PORTD=0;


while(1)
{

if(RB0==0)
{

while(RB0==0)
{}
if(RB0==1)
{

sangtat();
}
}
if(RB1==0)
{
while(RB1==0)
{}
if(RB1==1)
{

sangduoi();
}
}
if(RB2==0)
{
while(RB2==0)
{}
if(RB2==1)
{


sangdan();

}
}
}
}

LED 7 ĐOẠN

#define _XTAL_FREQ 4000000
#include <xc.h>

void sw1()
{
unsigned char
led[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0x83,0xc6,0xa1,
0x86,0x8e};
for (int i=0;i<5;i++)
{
PORTC= 0x88;
PORTD= 0x83;
__delay_ms(300);

PORTC= 0xFF;
PORTD= 0bxFF ;
__delay_ms(300);
}
}


void sw2()
{
unsigned char led[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};

for (int i=0;i<27;i++)
{

PORTD= led[i%10];
PORTC= led[i/10];
__delay_ms(200);
}
}

void sw3()
{
unsigned char led[]={0x90,0x80,0xf8,0x82,0x92,0x99,0xb0,0xa4,0xf9,0xc0};

for (int i=0;i<100;i++)
{

PORTD= led[i%10];
PORTC= led[i/10];
__delay_ms(200);
}
}

void main(void)
{

ANSEL=ANSELH=0;

TRISD=0;
TRISC=0;
PORTD=0;
PORTC=0;
TRISB=0xFF;
nRBPU=0;
WPUB=0xFF;

while(1)
{

if(RB0==0)
{

while(RB0==0)
{}
if(RB0==1)
{

sw1();
}
}
if(RB1==0)
{
while(RB1==0)
{}
if(RB1==1)
{

sw2();

}
}
if(RB2==0)
{
while(RB2==0)
{}
if(RB2==1)
{

sw3();
}
}
}

}

MÃ LED 7 ĐOẠN ( số 7 mã là F8)

Nếu đề u cầu có chữ thì khai báo mã chữ, ko thì ko khai báo vào

NGẮT DÙNG RB0

void sangdon()

{
unsigned char k = 0;
for (int i=0;i<8;i++)
{

for (int j=0;j<8-i;j++)

{

PORTD= (0x80>>j)|k;
__delay_ms(400);
}
k = PORTD;
__delay_ms(400);
}
}

void main(void)
{

ANSEL=ANSELH=0;
TRISD=0;
TRISC=0;
PORTD=0;
PORTC=0;

TRISB=0xFF; // Khai báo điện trở kéo lên khi có switch
nRBPU=0; // Khai báo điện trở kéo lên khi có switch
WPUB=0xFF; // Khai báo điện trở kéo lên khi có switch

GIE = 1; // Khai báo khi dùng ngắt RB0
INTE = 1; // Khai báo khi dùng ngắt RB0
INTF = 0; // Khai báo ko kích hoạt cờ ngắt khi dùng ngắt RB0
INTEDG = 0; // Khai báo khi dùng ngắt RB0

while(1)
{


sangdon();
}
}

void interrupt ngatRB0 ()
{

INTF = 0;
if(RB0==0)

{
while(RB0==0)
{}
if(RB0==1)
{
PORTD = 0;
__delay_ms(2000);
}

}
}

NGẮT DÙNG PORTB

void sangdon()
{
unsigned char k = 0;
for (int i=0;i<8;i++)
{


for (int j=0;j<8-i;j++)
{

PORTD= (0x80>>j)|k;

__delay_ms(400);
}
k = PORTD;
__delay_ms(400);
}
}

void sangduoi ()
{

unsigned char i, a= 0x80;
for(i=0; i<8; i++)
{

PORTD= a>>i;
__delay_ms(500);
}
}

void main(void)
{

ANSEL=ANSELH=0;
TRISD=0;

PORTD=0;

TRISB=0xFF; // Khai báo điện trở kéo lên khi có switch
nRBPU=0; // Khai báo điện trở kéo lên khi có switch
WPUB=0xFF; // Khai báo điện trở kéo lên khi có switch

GIE = 1; // Khai báo khi dùng ngắt PORTB
RBIE = 1; // Khai báo khi dùng ngắt PORTB

RBIF = 0; // Khai báo khi dùng ngắt PORTB
IOCB = 0b00000111;// Khai báo số switch cần sử dụng
while(1)
{

sangdon();
}
}

void interrupt ngatPORTB ()
{

RBIF = 0;
if(RB0==0)

{
while(RB0==0)
{}
if(RB0==1)
{
PORTD = 0;

__delay_ms(2000);
}

}
if(RB1==0)

{
while(RB1==0)
{}
if(RB1==1)
{
sangduoi ();
}

}

}

16 LED

#include <xc.h>
#include <math.h>
#include <htc.h>
#define _XTAL_FREQ 4000000

void choptat(unsigned char n)
{

while(n--)
{


PORTD = 0x00;
PORTC = 0x00;
__delay_ms(300);
PORTD = 0xFF;
PORTC = 0xFF;
__delay_ms(300);
}
PORTD=0x00;
PORTC=0x00;
}
void sangduoi(unsigned char k)
{
unsigned char i, a=0x80;
while(k--)
{
for(i=0;i<=7;i++)
{

PORTD=a>>i;

__delay_ms(300);
}
PORTD=0x00;
for(i=0;i<=7;i++)
{

PORTC=a>>i;
__delay_ms(300);
}

PORTC=0x00;
}
}
void sangdan(unsigned char n)
{
unsigned char i,a=0x80;
while(n--)
{
for(i=0;i<=7;i++)
{
PORTD=(a>>i)|PORTD;
__delay_ms(300);
}
for(i=0;i<=7;i++)
{
PORTC=(a>>i)|PORTC;
__delay_ms(300);
}
PORTC=0x00;
PORTD=0x00;
}
}

void main ()
{

ANSEL=ANSELH=0;
TRISD=0;
PORTD=0;
TRISC=0;

PORTC=0;
choptat(4);
sangduoi(2);
sangdan(2);
}

TIMER0

#include <xc.h>
#define _XTAL_FREQ 4000000

void delay_4ms(void)
{

T0CS = 0; // S? D?NG NGU?N FOCS/4
T0SE = 0; // S? D?NG CACNH XUONG
PSA = 0; // S? D?NG ?? CHIA
PS2 = 0; // CHIA
PS1 = 1; // CHO
PS0 = 1; // 1: 16
TMR0 = 256-250;
TMR0IF = 0; // XÓA C? BÁO TRÀNG

while(TMR0IF == 0)
{

}
}

void port()

{

ANSEL = ANSELH = 0x00;
//C?U HÌNH ?I?N TR? KÉO LÊN
nRBPU = 0;
WPUB = 0xFF;
// c?u hình ng?t ngồi RB0
GIE = 1;
INTE = 1;
INTF = 0;
INTEDG = 0;

// c?u hình thanh ghi
TRISB = 1;
TRISD = 0;
PORTD = 0;

}

unsigned char led[] = {0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80};
unsigned char i,j,m,a;

void ledsuoi()
{

m=0 ;
for(i=0;i<8 ;i++)
{

for(j=0 ; j<8-i ;j++)

{

PORTD = (0x01< for(a=0;a<125;a++)
{
delay_4ms();
}

}
m = PORTD ;

__delay_ms(500);
}

}

void lednguoc()
{

m=0;
for(i=0;i<8 ;i++)
{

for(j=0 ; j<8-i;j++)
{

PORTD = (0x80>>j)|m ;
__delay_ms(500);
}
m = PORTD ;

__delay_ms(500);

}
}

void main(void)
{

port();
while(1)
{

ledsuoi();
}
}

NGẮT TIMER0

#include <xc.h>
#define _XTAL_FREQ 4000000

void port()
{

TRISD = 0;
PORTD = 0;

}

void main(void)

{

port();
T0CS = 0; // S? D?NG NGU?N FOCS/4
T0SE = 0; // S? D?NG CACNH XUONG
PSA = 0; // S? D?NG ?? CHIA
PS2 = 0; // CHIA
PS1 = 0; // CHO
PS0 = 1; // 1: 4
TMR0 = 6;
TMR0IF = 0; // XÓA C? BÁO TRÀNG
TMR0IE = 1; // CHO PHEP NGAT
GIE = 1;
while(1)
{

}
}

void interrupt ISR(void)
{

if(TMR0IF)
{

TMR0 = 6;
PORTD = ~PORTD;

TMR0IF=0;
}

}

NGẮT TIMER1

#include <xc.h>

#define _XTAL_FREQ 4000000 //

Xtal: 4MHz

#define ENABLE_SLEEP1 RC3

int count=0;

void InitTimer1() = 0x01; //0x EC77 = 60535
{ = 0; // Xóa bit báo ng?t
= 0xE2; // cho phép s? d?ng ng?t timer 1
T1CON = 0xFF; // cho phép ng?t t?ng
TMR1IF = 1;
TMR1H = 0xC0;
TMR1L
TMR1IE
INTCON
}

void main()
{ //ADCON1=0x05;

TRISC=0;
PORTC=0;


InitTimer1();
ENABLE_SLEEP1 =0;
while(1);

}

void interrupt isr(void)

{

if(TMR1IF)

{

TMR1IF = 0;

TMR1H = 0xF7;// lam nhanh thi tang len

TMR1L = 0xFF;

//Enter your code here

RC1 ^= 1;

//RC1=1; __delay_us(1); RC1=0;

//count++;
//if(count==10)
//{


// count=0;
// RC0 ^= 1;
//}

}
}


×