Professional Documents
Culture Documents
V d:
ng dung:
Emulator:
#include <16F877A.h>
#include <def_16f877a.h>
#device pic16F877A*=16 ADC=8
#fuses
NOWDT,NOPROTECT,NOLVP,HS,NOPUT,NODEBUG,
NOBROWNOUT,NOCPD, NOWRT
#use delay(clock=20000000)
#use rs232(baud=9600,parity=n,xmit=pin_C6,rcv=pin_C7)
#use rtos(timer=0, minor_cycle=5ms)
int8 dvi1,chuc1,tram1,ht1;
int8 dvi2,chuc2,tram2,ht2;
int32 n,m,i;
const
unsigned
mang[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};
int8 dem=51;
#task(rate=100ms,max=1ms)
void xuli()
{
dem--;
if(dem>25) //den do
{
ht1=dem-25;
if(ht1>4)
{
ht2=ht1-5;
portc=0x14;
}
if(ht1<=5)
{
char
ht2=ht1;
portc=0x0c;
}
}
if( dem==25 ) //den xanh
{
ht2=dem;
if(dem>4)
{
ht1=dem-5;
portc=0x22;
}
if(dem==5) //den vang
{
ht1=dem;
portc=0x21;
}
}
chuc1=ht1/10;
dvi1=ht1%10;
chuc2=ht2/10;
dvi2=ht2%10;
if(dem==0)
{
dem=51;
}
}
#task(rate=5ms,max=1ms)
void hienthi()
{
portd=0xfd;
portb=mang[chuc1];
delay_us(100);
portb=0xff;
portd=0xfe;
portb=mang[dvi1];
delay_us(100);
portb=0xff;
portd=0x7f;
portb=mang[chuc2];
delay_us(100);
portb=0xff;
portd=0xbf;
portb=mang[dvi2];
delay_us(100);
portb=0xff;
}
void main()
{
set_tris_c(0);
SET_TRIS_B( 0 );
set_tris_d(0);
rtos_run();
}
Phn cng
14
AN02
AN13
4
b
5
6
7
R9
1k
8
9
10
1
OSC1/CLKIN
RB0/INT
OSC2/CLKOUT
RB1
RB2
RA0/AN0
RB3/PGM
RA1/AN1
RB4
RA2/AN2/VREF-/CVREF
RB5
RA3/AN3/VREF+
RB6/PGC
RA4/T0CKI/C1OUT
RB7/PGD
RA5/AN4/SS/C2OUT
RC0/T1OSO/T1CKI
RE0/AN5/RD
RE1/AN6/WR
RE2/AN7/CS
RC1/T1OSI/CCP2
RC2/CCP1
RC3/SCK/SCL
RC4/SDI/SDA
MCLR/Vpp/THV
RC5/SDO
RC6/TX/CK
RC7/RX/DT
C1
1nF
RD0/PSP0
RD1/PSP1
RD2/PSP2
RD3/PSP3
RD4/PSP4
RD5/PSP5
RD6/PSP6
RD7/PSP7
R3
R1
R4
220
33
34
35
l1
l2
l3
220
36
l4
R5
R6
220
R7
220
220
37
38
39
l5
l6
l7
220
220
40
d7
d6
d5
d4
d3
d2
d1
d0
U1
13
l1
l2
l3
l4
l5
l6
l7
R2
15
K1
16
K2
17
K3
18
k4
23
K5
24
K6
25
K7
26
K8
19
q0
20
q1
21
q2
22
q3
27
q4
28
q5
29
q6
30
q7
k6
R8
R12
k3
10k
K4
10k
R10
R13
k1
10k
K5
10k
R11
R14
k2
10k
10k
d0
NOT
q2
d1
d3
d2
d4
NOT
U4
U5
NOT
NOT
q0
q1
U2
U3
q4
q5
q6
q7
U9
NOT
q3
U6
U7
NOT
U8
d5
d6
d7
PIC16F877A
#include<16F877A.h>
#include<def_16f877a.h>
#device PIC16f877a*=16adc=8
#fuses NOWDT,NOPROTECT,NOLVP,HS,NOPUT,NOBROWNOUT,NOCPD
#use delay(clock=20000000)
#bit start=portc.0
char num[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};
char pos[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};
int16 dv0,ch0,tr0,dv1,ch1,tr1;
int i;
void hienthi()
{
int16 ADC0,ADC1;
set_TRis_d(0);
trisb=0;
setup_adc(adc_clock_internal);
setup_adc_ports(RA0_RA1_ANALOG_RA3_REF);
WHILE(1)
{
set_adc_channel(0);
delay_us(10);
ADC0=read_ADC();
set_ADC_channel(1);
delay_us(10);
ADC1=read_ADC();
tr0=ADC0/100;
ch0=(ADC0-100*tr0)/10;
dv0=(ADC0-100*tr0-10*ch0);
tr1=ADC1/100;
ch1=(ADC1-100*tr1)/10;
dv1=(ADC1-100*tr1-10*ch1);
portd=0xfe; // cho phep hang don vi sang
portb=num[dv0];
delay_us(100);
portb=255; // chong lem
portd=0xfd;
portb=num[ch0];
delay_us(100);
portb=255;
portd=0xfb;
portb=num[tr0];
delay_us(100);
portb=255;
portd=0xEF;
portb=num[dv1];
delay_us(100);
portb=255; // chong lem
portd=0xDf;
portb=num[ch1];
delay_us(100);
portb=255;
portd=0xBf;
portb=num[tr1];
delay_us(100);
portb=255;
}}
void main()
{
trisb=0;
trisd=0;
portb=0;
portd=0;
start=0;
port_b_pullups(1);
for(i=0;i<=20;i++)
{
hienthi();
}}
Phn cng;
AN02
AN13
4
b
5
6
7
R9
1k
8
9
10
1
OSC1/CLKIN
RB0/INT
OSC2/CLKOUT
RB1
RB2
RA0/AN0
RB3/PGM
RA1/AN1
RB4
RA2/AN2/VREF-/CVREF
RB5
RA3/AN3/VREF+
RB6/PGC
RA4/T0CKI/C1OUT
RB7/PGD
RA5/AN4/SS/C2OUT
RC0/T1OSO/T1CKI
RE0/AN5/RD
RC1/T1OSI/CCP2
RE1/AN6/WR
RC2/CCP1
RE2/AN7/CS
RC3/SCK/SCL
RC4/SDI/SDA
MCLR/Vpp/THV
RC5/SDO
RC6/TX/CK
RC7/RX/DT
C1
1nF
RD0/PSP0
RD1/PSP1
RD2/PSP2
RD3/PSP3
RD4/PSP4
RD5/PSP5
RD6/PSP6
RD7/PSP7
R3
R1
R4
220
33
34
35
220
36
R5
R6
220
R7
220
220
37
38
39
220
220
40
l1
l2
l3
l4
l5
l6
l7
d7
d6
d5
d4
d3
d2
d1
d0
14
l1
l2
l3
l4
l5
l6
l7
U1
13
R2
15
16
17
18
23
24
U10
25
26
19
q0
20
q1
21
q2
22
q3
27
q4
28
q5
29
q6
30
q7
15.0
VOUT
AN0
LM35
PIC16F877A
U11
26.0
RV1
VOUT
AN1
51%
+2.55
Volts
#include<def_16f877a.h>
#device PIC16f877a*=16adc=8
NOT
q1
U2
U3
d0
NOT
U4
U5
NOT
NOT
q0
d1
U9
NOT
q2
d2
d3
U8
q3
q5
#include<16F877A.h>
q6
q7
d4
d5
U6
U7
NOT
q4
d6
LM35
d7
3
1k
#fuses NOWDT,NOPROTECT,NOLVP,HS,NOPUT,NOBROWNOUT,NOCPD
#use delay(clock=20000000)
const char code[10]={'0','1','2','3','4','5','6','7','8','9'} ;
const char t[4][21]={"NHIET DO 2 KENH ADC ",
"ADC0
",
"ADC1
"};
int8 dv0,ch0,tr0,dv1,ch1,tr1;
int8 i;
int8 j;
#define LCD portd
#define RS RB4
#define RW RB5
#define E RB6
int8 ADC0,ADC1;
void ghima()
{
RS=0;
RW=0;
E=1;
E=0;
delay_ms(10);
}
void hienthi()
{
RS=1;
RW=0;
E=1;
E=0;
delay_ms(10);
}
void khoitaoLCD()
{
portd=0x38;
ghima();
portd=0x0c;
ghima();
portd=0x01;
ghima();
portd=0x080;
ghima();
}
void dulieu()
{
set_adc_channel(0);
delay_us(10);
ADC0=read_ADC();
set_adc_channel(1);
delay_us(10);
ADC1=read_ADC();
tr0=ADC0/100;
ch0=(ADC0-100*tr0)/10;
dv0=(ADC0-100*tr0-10*ch0);
tr0=ADC1/100;
ch1=(ADC1-100*tr1)/10;
dv1=(ADC1-100*tr1-10*ch1);
}
void main()
{
setup_adc(ADC_clock_internal);
setup_adc_ports(RA0_RA1_ANALOG_RA3_REF);
trisd=0;
trisb=0;
khoitaolcd();
for(i=0;i<4;i++)
for(j=0;j<20;j++)
{
LCD=t[i][j];
hienthi();
if((j==19)&&(i==0))
{
LCD=0xc0;
ghima();
}
if((j==19)&&(i==1))
{
LCD=0x94;
ghima();
}
if((j==19)&&(i==2))
{
//dau dong 2
LCD=0x44;
ghima();
} }
while(1)
{
dulieu();
LCD=0xD1;
ghima();
LCD=code[tr0];
hienthi();
LCD=code[ch0];
hienthi();
LCD=code[dv0];
hienthi();
LCD=0xA5;
ghima();
LCD=code[tr1];
hienthi();
LCD=code[ch1];
hienthi();
LCD=code[dv1];
hienthi();
}}
LCD2
D0
D1
D2
D3
D4
D5
D6
D7
RS
RW
E
VSS
VDD
VEE
LM044L
R1
10k
AN02
AN1
3
4
b
5
6
7
8
9
10
1
RB0/INT
OSC2/CLKOUT
RB1
RB2
RA0/AN0
RB3/PGM
RA1/AN1
RB4
RA2/AN2/VREF-/CVREF
RB5
RA3/AN3/VREF+
RB6/PGC
RA4/T0CKI/C1OUT
RB7/PGD
RA5/AN4/SS/C2OUT
RC0/T1OSO/T1CKI
RE0/AN5/RD
RE1/AN6/WR
RE2/AN7/CS
RC1/T1OSI/CCP2
RC2/CCP1
RC3/SCK/SCL
RC4/SDI/SDA
MCLR/Vpp/THV
RC5/SDO
RC6/TX/CK
RC7/RX/DT
RD0/PSP0
RD1/PSP1
RD2/PSP2
RD3/PSP3
RD4/PSP4
RD5/PSP5
RD6/PSP6
RD7/PSP7
RV1
PIC16F877A
51%
+2.55
Volts
1k
33
34
7
8
9
10
11
12
13
14
OSC1/CLKIN
RS 4
RW 5
E 6
14
1
2
3
U1
13
35
36
37
RS
38
RW
39
U2
U3
40
15
16
25.0
27.0
17
18
23
VOUT
AN0
VOUT
24
25
26
19
20
21
22
27
28
29
30
LM35
LM35
AN1
int n;
int key;
int slq;
unsigned char slq,n,key;
void quetphim()
{
portc=0x01;
while(slq<80)
{
if((portc&mask)==0)
{
portc=(portc<<1);
key++;
if(key==4)
{
portc=0x01;
key=0;
}
slq=slq+1;
}
else
break;
delay_ms(20);
if(slq==80)
return('x');
else
{
for(n=0x10;n!=0;n<<=1)
{
if((portc&n)!=0)break;
key=key+4;
}
portc=0x0f;
while((portc&mask)!=0);
delay_ms(20);
return(code1[key]);
} } }
void main()
{
trisc=0xf0 //x la port muon ket noi
}
5.dch led sau 1s
#include<16F877A.h>
#include<def_16f877a.h>
#fuses NOWDT,NOPROTECT,NOLVP,HS,NOPUT,NODEBUG, NOBROWNOUT,NOCPD
#use delay(clock=2000000)
int16 n;
int16 dich;
#int_timer1
// chuong trinh ngat
void interrupt_timer1()
{
set_timer1(3036);
++n;
if(n==10) // 1s
{
n=0;
portd==dich<<1;
}}
void main()
{
dich=1;
set_tris_d(0);
enable_interrupts(int_timer1);
setup_timer_1(RTCC_INTERNAL|RTCC_DIV_8);
//
set_timer1(3036);
enable_interrupts(GLOBAL);
while(1)
{ portD=dich;
}}
6.m t 1->100.hin th led 7on
#use delay(clock=20000000)
#bit start=portc.0
char num[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};
char pos[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};
int8 dv,ch,tr;
int8 t=1;
void hienthi()
{
portd=0xfe; // cho phep hang don vi sang
//portb=num[dv];
delay_us(100);
portb=255; // chong lem
portd=0xfd;
//portb=num[ch];
delay_us(100);
portb=255;
portd=0xfb;
//portb=num[tr];
delay_us(100);
portb=255;
}
void main()
{
tr=(t/100);
ch=((1-100*tr)/10)
dv=(t-(100*tr)-(10*ch));
if(t<=100)
{
t=t+1;
}}
Phn cng tng t bi giao thng
7.chng trnh s dng rtos hin th ngy.thng.nm
#include<16F877A.h>
#include<def_16f877a.h>
#include <ds1307.c>
#fuses NOWDT,NOPROTECT,NOLVP,HS,NOPUT,NODEBUG, NOBROWNOUT,NOCPD
#use delay(clock=2000000)
const char code[10]={'0','1','2','3','4','5','6','7','8','9'} ;
int m,n,t,mch,mdv,nch,ndv,tch,tdv,hr,min,sec,l,lch,ldv,k,kch,kdv,f,fch,fdv;
int8 dv0,ch0,tr0,dv1,ch1,tr1;
int8 year,day,mth,dow;
#define LCD portd
#define RS RB2
#define RW RB1
#define E RB0
int8 i;
void ghima()
{
RS=0;
RW=0;
E=1;
E=0;
delay_ms(10);
}
void hienthi()
{
RS=1;
RW=0;
E=1;
E=0;
delay_ms(10);
}
void khoitaoLCD()
{
portd=0x38;
ghima();
portd=0x0c;
ghima();
portd=0x01;
ghima();
portd=0x080;
ghima();
}
void chuyendoi()
{
mch=m/10;
mdv=m%10;
nch=n/10;
ndv=n%10;
tch=t/10;
tdv=t%10;
fch=f/10;
fdv=f%10;
lch=l/10;
ldv=l%10;
kch=k/10;
kdv=k%10;
}
void main()
{
trisd=0;
trisb=0;
trise=0;
khoitaolcd();
ds1307_init();
ds1307_set_date_time(22,9,12,3,16,55,40);
while(1)
{
ds1307_get_time(hr,min,sec);
ds1307_get_date(day,mth,year,dow);
m=hr;
n=min;
t=sec;
l=year;
k=mth;
f=day;
chuyendoi();
LCD=0x80;
ghima();
LCD=code[mch];
hienthi();
LCD=code[mdv];
hienthi();
LCD=':';
hienthi();
LCD=code[nch];
hienthi();
LCD=code[ndv];
hienthi();
LCD=':';
hienthi();
LCD=code[tch];
hienthi();
LCD=code[tdv];
hienthi();
LCD=0xc0;
ghima();
LCD=code[kch];
hienthi();
LCD=code[kdv];
hienthi();
LCD=':';
hienthi();
LCD=code[fch];
hienthi();
LCD=code[fdv];
hienthi();
LCD=':';
hienthi();
LCD=code[lch];
hienthi();
LCD=code[ldv];
hienthi();
} }phn cng
LCD1
LM044L
RW
RS
10
1
RB5
RA3/AN3/VREF+
RB6/PGC
RA4/T0CKI/C1OUT
RB7/PGD
RA5/AN4/SS/C2OUT
RC0/T1OSO/T1CKI
RE0/AN5/RD
RE1/AN6/WR
RE2/AN7/CS
RC1/T1OSI/CCP2
RC2/CCP1
RC3/SCK/SCL
RC4/SDI/SDA
MCLR/Vpp/THV
RC5/SDO
RC6/TX/CK
RC7/RX/DT
RD0/PSP0
RD1/PSP1
RD2/PSP2
RD3/PSP3
RD4/PSP4
RD5/PSP5
RD6/PSP6
RD7/PSP7
DB3
37
DB4
38
DB5
39
DB6
40
DB7
15
16
17
18
SCL
23
SDA
DS1307
24
25
D0
D1
D2
D3
D4
D5
D6
D7
RA2/AN2/VREF-/CVREF
DB2
36
7
8
9
10
11
12
13
14
L C D -C o n tro ll B u s
RB4
DB1
35
DB0
DB1
DB2
DB3
DB4
DB5
DB6
DB7
RA1/AN1
34
RS
RW
E
RB2
RB3/PGM
4
5
6
RB1
RA0/AN0
DB0
RS
RW
E
AN1
OSC2/CLKOUT
33
VSS
VDD
VEE
RB0/INT
1
2
3
AD C
14
AN0
OSC1/CLKIN
26
19
K1
20
K2
21
K3
22
K4
27
K5
28
K6
29
K7
30
K8
M a tra n p h im 8 x 8
13
L C D -D a ta B u s
U1
PIC16F877A
R1
R3
4.7k
4.7k
U3
SCL
SDA
SCL
X1
SDA
X1
7
3
CRYSTAL
SOUT
VBAT
X2
DS1307
BAT1
3V
Slave Output), MOSI (Master Ouput Slave Input) v SS (Slave Select). Hnh 1 th
hin mt kt SPI gia mt chip Master v 3 chip Slave thng qua 4 ng.
UART c th truyn khong cch 12 m.l mt mch vi in t c dng rng ri
cho vic truyn bt ni tip cng nh chuyn i song song/ni tip gia cc ng
truyn v bus my tnh.UART cho php lc chn gia cc ch truyn 1
chiu,hai chiu ng b hoc ko ng b.vic truyn ti c thc hin theo tng
k t 7 hoc 8 bit,dc b sung 2 bit u cui v 1 bit kim tra li chn l.
SPI v I2C ch truyn trong mch m thi
Truyn thng:
/Master
#include "16f877a.h"
#include "def_877a.h"
#device *=16 ADC=8
#FUSES NOWDT, HS, NOPUT, NOPROTECT, NODEBUG,
NOBROWNOUT,NOLVP, NOCPD, NOWRT
#use delay(clock=20000000)
#use rs232(baud=38400,parity=N,xmit=PIN_C6,rcv=PIN_C7)
#use fast_io(B)
#use fast_io(D)
#use fast_io(A)
#define REG_Write 0x80
#INT_SSP
void spi()
{
PORTD=spi_read(PORTB);
delay_ms(10);
}
void main()
{
port_b_pullups(TRUE);
setup_spi(spi_master|spi_l_to_h|spi_clk_div_16);
enable_interrupts(INT_SSP);
enable_interrupts(GLOBAL);
SET_TRIS_B(0xff);
SET_TRIS_D(0x00);
SET_TRIS_A(0x00);
while(1)
{
delay_ms(100);
output_low(PIN_A5);//Chn C2 dng Select chip.
delay_ms(10);//Tao tre de Slave chuan bi.
spi_write(PORTB);
output_high(PIN_A5);
}
//Slaver
#include "16f877a.h"
#include "def_877a.h"
#device *=16 ADC=8
#FUSES NOWDT, HS, NOPUT, NOPROTECT, NODEBUG,
NOBROWNOUT,NOLVP, NOCPD, NOWRT
#use delay(clock=20000000)
#use rs232(baud=38400,parity=N,xmit=PIN_C6,rcv=PIN_C7)
#use fast_io(B)
#use fast_io(D)
#INT_SSP
void spi()
{
PORTD=spi_read(PORTB);//Vua nhan vua truyen.
delay_ms(10);
}
void main()
{
port_b_pullups(TRUE);
setup_spi(spi_slave|spi_l_to_h|spi_clk_div_16);
enable_interrupts(INT_SSP);
enable_interrupts(GLOBAL);
TRISB=0xff;
TRISD=0x00;
while(1)
}
Phn cng
MASTER CHIP
4
5
6
7
8
9
10
1
RB1
RB2
RA0/AN0
RB3/PGM
RA1/AN1
RB4
RA2/AN2/VREF-/CVREF
RB5
RA3/AN3/VREF+
RB6/PGC
RA4/T0CKI/C1OUT
RB7/PGD
RA5/AN4/SS/C2OUT
RC0/T1OSO/T1CKI
RE0/AN5/RD
RC1/T1OSI/CCP2
RE1/AN6/WR
RC2/CCP1
RE2/AN7/CS
RC3/SCK/SCL
RC4/SDI/SDA
MCLR/Vpp/THV
RC5/SDO
RC6/TX/CK
RC7/RX/DT
RD0/PSP0
RD1/PSP1
RD2/PSP2
RD3/PSP3
RD4/PSP4
RD5/PSP5
RD6/PSP6
RD7/PSP7
33
34
35
36
37
38
39
40
R1
M1
330
R2
M2
330
9
R3
M3
330
15
DIPSWC_8
R4
M4
16
17
330
18
R5
M5
23
DSW2
24
25
26
330
R6
M6
6
19
M1
20
M2
21
M3
22
M4
27
M5
28
M6
29
M7
30
M8
330
R7
M7
330
9
ON
RB0/INT
OSC2/CLKOUT
R8
M8
2
3
4
5
6
7
8
9
10
1
OSC2/CLKOUT
RB1
RB2
RA0/AN0
RB3/PGM
RA1/AN1
RB4
RA2/AN2/VREF-/CVREF
RA3/AN3/VREF+
RB5
RB6/PGC
RA4/T0CKI/C1OUT
RB7/PGD
RA5/AN4/SS/C2OUT
RC0/T1OSO/T1CKI
RE0/AN5/RD
RE1/AN6/WR
RE2/AN7/CS
RC1/T1OSI/CCP2
RC2/CCP1
RC3/SCK/SCL
RC4/SDI/SDA
MCLR/Vpp/THV
R10
330
U2
14
R9
330
S2
RB0/INT
RC5/SDO
RC6/TX/CK
RC7/RX/DT
S3
33
34
R11
330
35
S4
36
37
R12
330
38
S5
39
40
S6
15
16
S7
23
24
S8
26
LED-YELLOW
D4
LED-YELLOW
D5
LED-YELLOW
D6
LED-YELLOW
D7
LED-YELLOW
D8
LED-YELLOW
D9
D10
LED-YELLOW
D11
LED-YELLOW
D12
LED-YELLOW
D13
LED-YELLOW
330
D14
R14
R15
330
25
D3
R13
330
17
18
LED-YELLOW
LED-YELLOW
S1
SLAVE CHIP
OSC1/CLKIN
D2
330
DIPSWC_8
PIC16F877A
13
D1
OFF
DSW1
OSC1/CLKIN
ON
14
OFF
U1
13
R16
LED-YELLOW
D15
LED-YELLOW
D16
LED-YELLOW
330
LED-YELLOW
RD0/PSP0
RD1/PSP1
RD2/PSP2
RD3/PSP3
RD4/PSP4
RD5/PSP5
RD6/PSP6
RD7/PSP7
PIC16F877A
19
S1
20
S2
21
S3
22
S4
27
S5
28
S6
29
S7
30
S8