Download as xlsx, pdf, or txt
Download as xlsx, pdf, or txt
You are on page 1of 89

Chng trnh con

#include <16F877A.h>
#include <def_877a.h>
#FUSES
XT,NOWDT,NOPROTECT,NOLVP
#USE DELAY(CLOCK=4000000)
#BYTE PORTB=0X06
#BYTE PORTC=0X07
#BYTE PORTD=0X08
#define lcd portB

NOTE

Cm

1 void lenh(void)
1 {
1
1
1
1
1

OUTPUT_LOW(PIN_c0);
OUTPUT_LOW(PIN_c1);

RS=0
RW=0

OUTPUT_HIGH(PIN_c2);
OUTPUT_LOW(PIN_c2);
DELAY_MS(5);

E=1
E=0

1 }
2 VOID DU_LIEU(VOID)
2
{
2
OUTPUT_HIGH(PIN_c0); //RS
2

OUTPUT_LOW(PIN_c1); //RW

OUTPUT_HIGH(PIN_c2); // E

OUTPUT_LOW(PIN_c2);

DELAY_MS(5);

2
3
3
3
3

3
3
3
3
3
3
3
3
3
3

void InKey()
{
while(1)
{
OUTPUT_D(0B11111110);
DELAY_US(50);
IF(INPUT(PIN_D4)==0)
{Key=7;break;}
else IF(INPUT(PIN_D5)==0)
{Key=8; break;}
else IF(INPUT(PIN_D6)==0)
{Key=9; break;}
else IF(INPUT(pin_D7)==0)
{Key=10;break;}

3 OUTPUT_D(0B11111101);
3
3
3
3
3
3
3
3
3
3
3
3
3
3
3
3
3
3
3
3
3

Tat RS TRUYEN

ch ghi
m d liu
tt d liu
sn sng ghi d liu

Qut hng 1
CHO KHI D4 XUONG 0
CHO KHI D5 XUONG 0
CHO KHI D6 XUONG 0

CHO KHI D7 XUONG 0

2
2
2
2
2
2
2

Qut hng 2

DELAY_US(50);

IF(INPUT(pin_D4)==0)
{Key=4; break;}
else if(input(pin_d5)==0)
{Key=5; break;}
else if(input(pin_d6)==0)
{Key=6; break;}
else if(input(pin_d7)==0)
{Key=11; break;}
OUTPUT_D(0B11111011);
DELAY_US(50);
IF(INPUT(PIN_D4)==0)
{Key=1; break;}
else if(input(pin_d5)==0)
{Key=2; break;}
else if(input(pin_d6)==0)
{Key=3; break;}
else if(input(pin_d7)==0)
{Key=12; break;}
OUTPUT_D(0B11110111);
DELAY_US(50);

1
1
1
1
1
1

CHO KHI D4 XUONG 0

cho khi d5 xuong 0

cho khi d7 xuong 0

2
2
2
2

Qut hng 3

cho khi d6 xuong 0

cho khi d4 xuong 0


cho khi d5 xuong 0
cho khi d6 xuong 0
cho khi d7 xuong 0

Qut hng 4

2
3
3
3
4
4
4
4
4
4
4

3
3
3
3
3
3
3
3
3
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4

IF(INPUT(PIN_D4)==0)
{Key=13; break;}
else if(input(pin_d5)==0)
{Key=0; break;}
else if(input(pin_d6)==0)
{Key=14; break;}
else if(input(pin_d7)==0)
{Key=15; break;}
}}
void Scan()
{
switch(Key)
{
case 7:
OUTPUT_B(0X37);
DU_LIEU();
break;
case 8:
OUTPUT_B(0X38);
DU_LIEU();
break;
case 9:
OUTPUT_B(0X39);
DU_LIEU();
break;
case 10:
OUTPUT_B('/');
DU_LIEU();
break;
case 4:
OUTPUT_B(0X34);
DU_LIEU();
break;
case 5:
OUTPUT_B(0X35);
DU_LIEU();
break;
case 6:
OUTPUT_B(0X36);
DU_LIEU();
break;
case 11:
OUTPUT_B('*');
DU_LIEU();
break;
case 1:
OUTPUT_B(0X31);
DU_LIEU();
break;
case 2:
OUTPUT_B(0X32);
DU_LIEU();
break;
case 3:
OUTPUT_B(0X33);
DU_LIEU();
break;

cho khi d4 xuong 0


cho khi d5 xuong 0
cho khi d6 xuong 0
cho khi d7 xuong 0

CHO KHI D4 XUONG 0


GHI 7

CHO KHI D5 XUONG 0


GHI 8

CHO KHI D6 XUONG 0


GHI 9

CHO KHI D7 XUONG 0


GHI A

CHO KHI D4 XUONG 0


GHI 4

cho khi d5 xuong 0


GHI 5

cho khi d6 xuong 0


GHI 6

cho khi d7 xuong 0


GHI b

CHO KHI D4 XUONG 0


GHI 1

cho khi d5 xuong 0


GHI 2

cho khi d6 xuong 0


GHI 3

4
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5

4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4

case 12:
OUTPUT_B('-');
DU_LIEU();
break;
case 13:
OUTPUT_B('O');
DU_LIEU();
break;
case 0:
OUTPUT_B(0X30);
DU_LIEU();
break;
case 14:
OUTPUT_B(0X01);
DU_LIEU();
break;
case 15:
portB='-';
DU_LIEU();
break;
}}

cho khi d7 xuong 0


GHI c

CHO KHI D4 XUONG 0


GHI *

cho khi d5 xuong 0


GHI 0

cho khi d6 xuong 0


clear

cho khi d7 xuong 0


GHI d

Chng Trnh Chnh


CONST UNSIGNED CHAR
DIG[]={"Set: #"};
CONST UNSIGNED CHAR
SP[]={"So SP: #"};
int Key,A[]={0,0,0,0};
int dem,Val,B[]={0,0,0,0};
INT8 i=0;
void InKey();
void Scan();
void main(void)
{
OUTPUT_B(0X38);
LENH();
OUTPUT_B(0X0E);
LENH();
OUTPUT_B(0X80);
LENH();
//Ci t LCD
//Dat so luong san pham
i=0;
While ( DIG [i] ! = '# ' )
{
PORTB=DIG[i];
DU_LIEU();
DELAY_MS(10);
i++;
}
i=3;
DO
{
Key=16;
InKey();
if(key<10)
{
i- -;
A[i]=key;
Scan();
DELAY_MS(150);
}
}
While ((Key !=15)&&(i>0));
Val=100*A[0]+10*A[1]+A[2];
OUTPUT_B(0XC0);
LENH();
DELAY_MS(100);
i=0;
While (SP [i] ! = ' # ')
{
PORTB=SP[i];
DU_LIEU();
DELAY_MS(10);
i++;

NOTE
Cho hin th dng 1
Cho hin th dng 2
ci t s ban u bng phm nhn
m t ng,nhn phm khng tc dng
hm kim tra c nhn phm?
hm hin th s phm ln LCD

// 38 Hai dong v ma tran 5x7


// 0E Bat hien thi,nhap nhap con tro
// 80 Ep con tro dau dong thu nhat

on code dng hin th


dng ch cho hng th 1
xut hin th t tng ch ci mt

m ci t 3 s thc hin on 3
2 L KHI LNH KIM TRA
V HIN TH NHN PHM
key la dia chi phim can quet 0-15
ham quet phim
qut 9 s theo th t gim dn
th t gim i 1 s
ci t cho hin th s ban u
hin th s tng ng
delay cho hin th

key la dia chi phim can quet


Khng bit

on code dng hin th


dng ch cho hng th 2 xut
hin th t tng ch ci mt.

hin th t tng ch ci mt.

}
dem=0;
While(1)
{
if(input(pin_c3)==0)
{
dem=dem+1;
DELAY_MS(50);
}
OUTPUT_B(0XC8);
LENH();
B[2]=dem/100;
B[1]=(dem%100)/10;
B[0]=dem%10;
OUTPUT_B(0X30+B[2]);
DU_LIEU();
OUTPUT_B(0X30+B[1]);
DU_LIEU();
OUTPUT_B(0X30+B[0]);
DU_LIEU();
if(dem>=Val) dem==0;
}

V tr hin th s m

lnh khng c tc dng


Thay bng lnh :
if(dem==5) {dem=0;}

cm

Chng Trnh Chnh

#define LCD_RS
PIN_D1
#define LCD_RW
PIN_D2
#define LCD_EN
PIN_D3
#define LCD_D4
PIN_D4
#define LCD_D5
PIN_D5
#define LCD_D6
PIN_D6
#define LCD_D7
PIN_D7
1 setup_adc(ADC_CLOCK_INTERNAL);
1 setup_adc_ports(AN0);
1 set_adc_channel(0);
1 delay_us(10);
1 disable_interrupts(INT_AD);

void main()
{
unsigned char str[20];
1 float Value;
unsigned char td;
unsigned char tocdo=0,tocdo1;
set_tris_b(0xFF);
port_b_pullups(1);
output_drive(PIN_C1);
output_drive(PIN_C2);
output_drive(PIN_C6);
output_drive(PIN_C7);
output_low(PIN_E2);
mode : tn s = tn s
chip/16
255: gi tr timer reset
v
1: s ln xy ra ngt

setup_ccp1(CCP_PWM);
setup_timer_2(T2_DIV_BY_16,255,1)
set_pwm1_duty(tocdo);
LCD_Init();
adc_config();
sprintf(str,"DO AN TOT NGHIEP");
delay_ms(10);
LCD_Puts(str);
delay_ms(2000);
LCD_Clear();
sprintf(str,"NhietDo");
LCD_Gotoxy(0,0);
LCD_Puts(str);
sprintf(str,"oC");
LCD_Gotoxy(5,1);
LCD_Puts(str);
sprintf(str,"ST");
LCD_Gotoxy(14,0);
LCD_Puts(str);

#define
#define
#define
#define
#define

STOP
FOW
REV
GIAMTOC
TANGTOC

NOTE
C6 - IN1/ IN4
C7- IN2/ IN3
PIN_B0
PIN_B1
PIN_B2
PIN_B3
PIN_B4

cm

Chng Trnh Chnh


unsigned char tocdo=0,tocdo1;
unsigned char td;// cho LCD
tocdo1 l PWM khi FOW
tocdo l PWM khi c phm

LCD

a
a
a
a
a
a

while(TRUE)
{
set_adc_channel(0);
Value=read_adc();
Value/=2.046;
LCD_Gotoxy(0,1);
sprintf(str,"%05.1f\xdfC",Value);
LCD_Puts(str);

Giao tip vi cc nt nhn

b
b
b

LCD_Gotoxy(8,0);
sprintf(str,"TocDo");
LCD_Puts(str);

c
c
c

LCD_Gotoxy(8,1);
sprintf(str,"%03u%%",td);
LCD_Puts(str);

lm vic vi Timer2 1465hz

if(!input(PIN_B0))
{
output_low(PIN_C6);
output_low(PIN_C7);
tocdo1=0;

Khoi tao LCD


Khoi tao ADC
hin th ch N TT NGHIP

d
e
e
e
f
f
f

set_pwm1_duty(tocdo1);
sprintf(str," ");
LCD_Gotoxy(14,1);
LCD_Puts(str);
sprintf(str,"ST");
LCD_Gotoxy(14,0);
LCD_Puts(str); }

a
a
a

if(!input(PIN_B1))
{
while(!input(PIN_B1));

su dung ADC voi tan so = tan so dao dong ben trong chip

Khong cho phep ngat ADC hoat dong (mac dinh)

in tr treo cho Port B


Ko cn thit.
Kt ni vi EN1 & EN2 ca L293
Kt ni vi IN1 & IN4 ca L293
Kt ni vi IN2 & IN3 ca L293
Ko cn thit.

set up pwm 1// chn RC2

Vit k t / chui ln LCD

Xa mn hnh
hin th ch NHIT
Xc nh v tr vit
Vit k t / chui ln LCD
hin th ch NHIT
Xc nh v tr vit
Vit k t / chui ln LCD
hin th ch ST
Xc nh v tr vit
Vit k t / chui ln LCD

b
b
c
c
d
d
d
e
e

output_low(PIN_C6);
output_low(PIN_C7);
tocdo1=0;
set_pwm1_duty(tocdo1);
delay_ms(1000);
output_high(PIN_C6);
output_low(PIN_C7);
sprintf(str,"RU");
LCD_Gotoxy(14,0);
LCD_Puts(str);
sprintf(str,"FO");
LCD_Gotoxy(14,1);

LCD_Puts(str);
delay_ms(1000); }

a
a
a

if(!input(PIN_B2))
{
while(!input(PIN_B2));
output_low(PIN_C6);
output_low(PIN_C7);
tocdo1=0;
set_pwm1_duty(tocdo1);
delay_ms(1000);
output_low(PIN_C6);
output_high(PIN_C7);
sprintf(str,"RU");
LCD_Gotoxy(14,0);
LCD_Puts(str);
sprintf(str,"RE");
LCD_Gotoxy(14,1);
LCD_Puts(str); }

b
b
c
c
d
d
d
e
e
e

A
A
B

if(input(PIN_B4)==0)
{
delay_ms(500);
if(tocdo==255)
{tocdo=250;}
tocdo=tocdo+5;
}

if(input(PIN_B3)==0)
{
delay_ms(500);
A if(tocdo==0)
A {tocdo=5;}
B tocdo=tocdo-5;
}
td=tocdo/2.55;
tocdo1=tocdo;
set_pwm1_duty(tocdo1);
}
}

NOTE

o=0,tocdo1;
2 bin c lp nhau

Truoc khi doc ADC can chi ro knh/chn can doc

quy doi nhiet do


Xc nh v tr vit
dfC",Value);
Vit k t / chui ln LCD
1
2
3

hin th tc o c theo %
Nhn STOP ; o tt PIN_B0,khng i nh phm

hin th Khong trng


hin th Khong trng
Hin th ch ST
Hin th ch ST
Nhn FOW ; o trng thi PIN_B1
i nh phm ri mi thc hin lnh di(o
trng thi ln na)=> tr v tt ban u.
Phm FOW,REV ch c chc nng xc nh
chiu
ng c,khng tc ng n tc
tr v tc 1 =0
PWM vi tocdo1
QUAY THUN

Nhn REV ; PIN_B2 i trng thi


i nh phm ri mi thc hin lnh di.

QUAY NGHCH

Nhn TNG TC,khng i nh phm,cn nhn


cn thc hin lnh,tc khi c mc 0 l thc hin

Nhn GIM TC,khng i nh phm,cn nhn


cn thc hin lnh,tc khi c mc 0 l thc hin

hin th tc trn LCD


hin th tc trn ng c

#include <16f877a.h> //KHAI BAO THU VIEN PIC16F877A


#device *=16 adc=10 //KHAI BAO CON TRO VA ADC
#FUSES NOWDT, HS, NOPUT, NOPROTECT, NODEBUG, NOBROWNOUT, NOLVP, NOCPD, NOWRT
#use delay(clock=20000000) //KHAI BAO TAN SO DAO DONG LA 20MHZ
#include <lcd_lib_4bit.c>
#use i2c(Master,Slow,sda=PIN_C4,scl=PIN_C3) //BAT CHE DO GIAO TIEP I2C

1 TN TRNG H
2 DH THOI GIAN THUC
3 THU/NGAY/THANG/NAM show_12
GI-PHT-GIY
menu=0
MODE=

0/1

display_12/24

1 minnute INC/DECOK

2 hour

INC/DECOK

3 day

INC/DECOK

4 date

INC/DECOK

5 month

INC/DECOK

6 year

INC/DECOK

G, NOBROWNOUT, NOLVP, NOCPD, NOWRT


ONG LA 20MHZ

E DO GIAO TIEP I2C

Chng Trnh Chnh


void set_time(void) ;
void set_min(void);
void set_hour(void);
void set_date(void);
void set_day(void);
void set_month(void);
void tittit(unsigned char n)
{
while(n>0)
{
TIT=1;delay_ms(40);
TIT=0;delay_ms(20);
n--;
}
}
#INT_RB
void ok_()
{
if(ok)
{
if(menu==0)show_12 = ~show_12;
menu=menu_max;
}
tittit(1);
}
#INT_EXT
void set()
{
while(mode==0);
if(++menu>menu_max)menu=0;
tittit(1);
}
void main ()
{
set_tris_b(0xff);
set_tris_C(0x00);
set_tris_d(0x00);
enable_interrupts(global);
enable_interrupts(INT_RB);
enable_interrupts(int_ext);

tittit(3);
Lcd_init();
hello();
while(1)
{
if (menu!=0) {set_time();}
update_time();
if(show_12==0){display_24();}
else {display_12();}
;
}
}
void update_time()
{
i2c_start();
i2c_write(0xD0);
i2c_write(0x00);
i2c_stop();
I2C_start();
I2C_write(0xD1);
sec = i2c_read(1);
min = i2c_read(1);
hour = i2c_read(1);
dow = i2c_read(1);
date = i2c_read(1);
month = i2c_read(1);
year = i2c_read(0);
i2c_stop();
delay_us(100);
sec1=sec & 0x0F;
sec2=(sec & 0x70)>>4;
min1=min & 0x0F;
min2=(min & 0x70)>>4;
hour1=hour & 0x0F;
hour2=(hour & 0x30)>>4;
day=(dow & 0x07);
date1=date & 0x0F;
date2=(date & 0x30)>>4;
month1=month & 0x0F;
month2=(month & 0x10)>>4;
year1=year & 0x0F;
year2=(year & 0xF0)>>4;
delay_us(10);
}
void update_ds1307(void) {
int8 data=0;

i2c_start();
i2c_write(0xd0);
i2c_write(0x00);
data=sec1+(sec2<<4);
data=data & 0b01111111;
i2c_write(data);
data=min1+(min2<<4);
i2c_write(data);
data=hour1+(hour2<<4);
i2c_write(data);
data=day;
i2c_write(data);
data=date1+(date2<<4);
i2c_write(data);
data=month1+(month2<<4);
i2c_write(data);
data=year1+(year2<<4);
i2c_write(data);
data=0x00;
i2c_write(data);
i2c_stop();
LCD_init();
menu=0;
}
void set_time(void) {
while (menu!=0)
{
if (menu==1) set_min();
if (menu==2) set_hour();
if (menu==3) set_day();
if (menu==4) set_date();
if (menu==5) set_month();
if (menu==6) set_year();
if (menu==7) update_ds1307();
}
}
void set_year(void) {
LCD_init();
while(menu==6) {
if (increase ==0) {
while (increase ==0);
year1++;
if ((year2==9)&&(year1==10)) {year1=year2=0;}
if (year1==10) {year1=0;year2++;}
}
if (decrease==0) {
while (decrease ==0);

year1--;
if ((year2==0)&&(year1==255)) {year1=year2=9;}
if (year1==255) {year1=9;year2--;}
}
Lcd_Setposition(Line_1);
printf(Lcd_putchar," DATE SETING ");
Lcd_Setposition(Line_2);
printf(Lcd_putchar,"Year : 20%u%u",year2,year1);
}}
void set_month(void) {
LCD_init();
while(menu==5){
if (increase==0) {
while (increase==0);
month1++;
if ((month2==1) && (month1==3)) { month2=0;month1=1;}
if (month1==10) { month2++;month1=0;}
}
if (decrease==0) {
while (decrease==0);
month1--;
if ((month2==0) && (month1==0)) {month2=1;month1=2; }
if (month1==0) {month2--;month1=9;}
}
Lcd_Setposition(Line_1);
printf(Lcd_putchar," DATE SETING ");
Lcd_Setposition(Line_2);
printf(Lcd_putchar,"Month : %u%u
",month2,month1);
}
}
/////////////////////////////////////////
void set_date(void) {
LCD_init();
while(menu==4) {
if (increase==0) {
while (increase==0);
date1++;
if ((date2==3) && (date1==2)) { date2=0;date1=1;}
if (date1==10) { date2++;date1=0;}
}
if (decrease==0) {
while (decrease==0);
date1--;
if ((date2==0) && (date1==0)) {date2=3;date1=1; }
if (date1==255) {date2--;date1=9;}
}
Lcd_Setposition(Line_1);

printf(Lcd_putchar," DATE SETING ");


Lcd_Setposition(Line_2);
printf(Lcd_putchar,"Date : %u%u ",date2,date1);
}
}
void set_day(void) {
LCD_init();
while(menu==3) {
if (increase==0) {
while (increase==0);
day++;
if (day==8) { day=1;}
}
if (decrease==0) {
while (decrease==0);
day--;
if (day==0) {day=7;}
}
Lcd_Setposition(Line_1);
printf(Lcd_putchar," DATE SETING ");
if(day==1)
{
Lcd_Setposition(Line_2);
printf(Lcd_putchar,"Day : Chu Nhat");
}
else
{
Lcd_Setposition(Line_2);
printf(Lcd_putchar,"Day : Thu %u ",day);
}
}
}
/////////////////////////////////////////
void set_hour(void) {
LCD_init();
while (menu==2)
{
if (increase==0) {
while (increase==0);
hour1++;
if ((hour2==2) && (hour1==4)) { hour2=0;hour1=0;}
if (hour1==10) { hour2++;hour1=0;}
}
if (decrease==0) {
while (decrease==0);
hour1--;
if ((hour2==0) && (hour1==255)) {hour2=2;hour1=3; }

if (hour1==255) {hour2--;hour1=9;}
}
Lcd_Setposition(Line_1);
printf(Lcd_putchar," TIME SETTING ");
Lcd_Setposition(Line_2);
printf(Lcd_putchar,"Hour : %u%u ",hour2,hour1);
}
}
/////////////////////////////////////////
void set_min(void) {
LCD_init();
while (menu==1){
if (increase==0) {
while (increase==0);
min1++;
if ((min2==5) && (min1==10)) { min2=0;min1=0;}
if (min1==10) { min2++;min1=0;}
}
if (decrease==0) {
while (decrease==0);
min1--;
if ((min2==0) & (min1==255)) {min2=5;min1=9; }
if (min1==255) {min2--;min1=9;}
}
Lcd_Setposition(Line_1);
printf(Lcd_putchar," TIME SETTING ");
Lcd_Setposition(Line_2);
printf(Lcd_putchar,"Minute : %u%u ",min2,min1);
}
}
// CHUONG TRINH HIEN THI //
void display_12()
{
int8 h;h = hour2*10+hour1;
if(day==1)
{
Lcd_Setposition(Line_1);
printf(Lcd_putchar,"Cnhat,%u%u/%u%u/20%u%u",date2,date1,month2,month1,year2,year1);
}
else
{
Lcd_Setposition(Line_1);
printf(Lcd_putchar,"THU %u,%u%u/%u%u/20%u%u",day,date2,date1,month2,month1,year2,year1);
}
;
if(h>12)
{
Lcd_Setposition(Line_2);

printf(Lcd_putchar," [%d%d:%u%u:%u%u]PM ",h/12-1,h%12,min2,min1,sec2,sec1);


}
else
{
Lcd_Setposition(Line_2);
printf(Lcd_putchar," [%u%u:%u%u:%u%u]AM ",hour2,hour1,min2,min1,sec2,sec1);
}
;
}
void display_24()
{
if(day==1)
{
Lcd_Setposition(Line_1);
printf(Lcd_putchar,"Cnhat,%u%u/%u%u/20%u%u",date2,date1,month2,month1,year2,year1);
}
else
{
Lcd_Setposition(Line_1);
printf(Lcd_putchar,"THU %u,%u%u/%u%u/20%u%u",day,date2,date1,month2,month1,year2,year1);
}
;
Lcd_Setposition(Line_2);
printf(Lcd_putchar," [%u%u:%u%u:%u%u] ",hour2,hour1,min2,min1,sec2,sec1);
}
void hello()
{
lcd_init();
tittit(1);
Lcd_Setposition(Line_1);
printf(Lcd_putchar," DH KTCN TN ");
tittit(2);
Lcd_Setposition(Line_2);
printf(Lcd_putchar," KHOA DIEN TU ");
delay_ms(500);
tittit(3);
Lcd_Setposition(Line_1);
printf(Lcd_putchar," DONG HO ");
tittit(4);
Lcd_Setposition(Line_2);
printf(Lcd_putchar," THOI GIAN THUC ");
delay_ms(500);
tittit(5);
lcd_init();
}

#BIT mode
= 0x06.0//B0
#BIT increase = 0x06.2//B2
#BIT decrease = 0x06.3//B3
#BIT ok
= 0x06.4//B4
#BIT TIT
= 0x07.2//C2
NOTE
void set_year(void);
void update_time();
void display_12();
void display_24();
void hello();

Ngt trn B4-B7


s dng CT ngt cho phm OK

ch thc hin khi menu ang 0


hin th AM

Ngt ngoi/NT MODE

c nhn mode

DINH HUONG VAO/ RA

THIET LAP NGAT


NGAT TOAN CUC
NGAT RB
NGAT NGOAI

int1 show_12=0;// kiu hin th time


int8 menu=0; // s ln nhn mode
int8 sec,min,hour,dow,date,month,year;
int8 sec1,sec2,min1,min2,hour1,hour2,day,date1,date2,month1,month2,year1,ye
#define menu_max

KHOI DONG LCD


MAN HINH KHOI DONG
VONG LAP VO HAN
KIEM TRA PHIM DK
DOC THOI GIAN
HIEN THI RA LCD

DS1307
phat bit start I2C
gui dia chi cua slave
thiet lap lai con tro - set register pointer
phat bit stop I2C
phat bit start I2C
gui lenh doc du lieu
doc du lieu tai dia chi 0x00
doc du lieu tai dia chi 0x01
doc du lieu tai dia chi 0x02

phat bit stop I2C

convert to BCD SEC


convert to BCD MIN
convert to BCD HOUR

convert to BCD DATE


convert to BCD MONTH
convert to BCD YEAR

luu tru du lieu tam thoi de gui vao ds1307

ghi du lieu bat dau tu vi tri 00

ket thuc truyen du lieu

CHUONG TRINH CAI DAT THOI GIAN

Cai dat nam

neu phim 2 duoc nhan


khong lam gi cho phim nha

neu phim 3 duoc nhan


khong lam gi cho phim nha

Cai dat thang

neu phim 2 duoc nhan


khong lam gi cho phim nha

neu phim 3 duoc nhan


cho phim nha

Cai dat ngay

neu phim 2 duoc nhan


khong lam gi cho phim nha

neu phim 3 duoc nhan


cho phim nha

cai dat thu'

Cai dat gio

neu phim 2 duoc nhan


khong lam gi cho phim nha

neu phim 3 duoc nhan


cho phim nha

Cai dat phut


cho phim nha
neu phim 2 duoc nhan
khong lam gi cho phim nha

neu phim 3 duoc nhan


cho phim nha

1,year2,year1);

1,year2,year1);

2,month1,month2,year1,year2;

Flow chart ca mt chng trnh (cho L


Khai bo th vin
Khai bo th vin
Khai bo th vin

1
2
3

Khai bo th vin

Khai bo th vin
Khai bo th vin
Khai bo th vin
Khai bo th vin
Khai bo th vin

5
6
7
8
9

Khai bo I/O 10
Khai bo I/O
Cc CT con s thc hin 11

Khai bo cc bin 12
signed, hay int
Khai bo cc bin
Khai bo cc bin
Khai bo cc bin

Khai bo Ngt 13
Thc hin chng trnh Ngt
Khai bo s dng ADC 14

Chng trnh chnh 15


nh hng port vo/ra 16
Khai bo cc bin 17
Khai bo cc bin

18

Thit lp Cc Ngt cho cc


phn khai bo trn

Khi to LCD 19
Khi to ADC nu cha c 20
Hin th ban u cho LCD 21

c nhit 22
tnh gi tr nhit

23

Cc chng trnh ph 24

Flow chart ca mt chng trnh (cho LCD,ADC,NT NHN,MA TRN,7SEG)


#include <16f877a.h>
#include <def_877a.h>
#device *=16 adc=10
#FUSES NOWDT, HS, NOPUT, NOPROTECT,
NODEBUG, NOBROWNOUT,NOLVP, NOCPD,
NOWRT

F1
F2
F3
F

F
#use delay(clock=20000000)
N1
#include "adc.c"
N2
#include <lcd_lib_4bit.c>
#use i2c(Master,Slow,sda=PIN_C4,scl=PIN_C3) N3
#BIT
#define

mode
STOP

N1
N2

= 0x06.0
PIN_B0

void InKey();
CONST UNSIGNED CHAR

N1
N1

DIG[]={"Set: #"};

unsigned int dem = 0;


signed int giam = 45;
signed char
unsigned char
char
int8 a=0;

N1
N2
N3
N4
N5
N6

#INT_theo y/c
void ngat()

N1
N2

setup_adc(ADC_CLOCK_INTERNAL);
setup_adc_ports(AN0);
set_adc_channel(0);

void main() // 1 ln v khng update


set_tris_b(0xff);

N1
N2
N3
na F

set_tris_C(0x00);

unsigned char td;


unsigned char tocdo=0,tocdo1;

N1
N2

setup_timer_1(T1_INTERNAL|T1_DIV_BY_8);
set_timer1(3035);
enable_interrupts(INT_TIMER1);
setup_ccp1(CCP_PWM);//set up pwm 1
setup_timer_2(T2_DIV_BY_16,255,1); //1465hz
set_pwm1_duty(duty);
enable_interrupts(GLOBAL);

N1
N2
F
N1

GIE_bit=1;
INTE_bit=1;

N2
F
N3
N4

LCD_Init();
adc_config()
sprintf(str,"Hello Tomorrow");
delay_ms(10);
LCD_Puts(str);
delay_ms(2000);
LCD_Clear();
sprintf(str,"Welcome");
LCD_Gotoxy(0,0);
LCD_Puts(str);
OUTPUT_B(0X38);
LENH();
OUTPUT_B(0X0E);
LENH();
OUTPUT_B(0X80);
LENH();
value=(float)read_adc();
value = (value - 558.5)/2.048;
// For 5V supply
// value = (value - 754.8)/2.048; // For 3.7V Supply
// value = (value - 698.2)/2.048; // For 4V supply

While(1) // lp li,update lin tc


{

{ _____();}
}
Void ____()
c th while( )

ho LCD,ADC,NT NHN,MA TRN,7SEG)


KHAI BAO THU VIEN PIC16F877A
Khai bo a ch cc PORT,chn PIC,cc thanh ghi
Xc nh PIC v ADC
THIET LAP CAU HINH CHO PIC
KHAI BAO TAN SO DAO DONG LA 20MHZ
khai bo th vin ADC
Khai bo th vin LCD
BAT CHE DO GIAO TIEP I2C
Nt nhn
Nt nhn

Cho LCD hin th k t mong mun


0
- UINT_MAX
INT_MIN INT_MAX
(-128 n 127 )
0 - 255
(-128 hay 0 n 127 hay 255)

Tn s s dng
Chn
knh tng ng
mc 1: vo

mc 0: ra

khai bo li cc bin (nu pha trn cha khai bo)


cho bin m bt u
ci t Timer
ci t Timer
Cho Ngt timer
Ci t PWM
Cho Ngt timer
Ci t PWM
Ngt ton cc

Khi to LCD
Khi to ADC nu pha trn cha khai bo
Vit k t ln mn hnh
Xut lnh( xc nh v tr)
xa mn hnh

xc nh v tr
xut lnh
// 38 Hai dong v ma tran 5x7
// 0E Bat hien thi,nhap nhap con tro
// 80 Ep con tro dau dong thu nhat

Vng lp ny lun xy ra.nu c bt k iu kin no


trong vng lp ng hoc ang xy ra th n thc hin void ph

Cc biu thc Initialization statement v Update


statement khng xut hin trong cu trc while
on code trong thn vng lp (body of loop) c th
cha cc biu thc tnh ton logic,cc cu trc iu kin
(if else, switch case) hoc c cc cu trc lp khc
Mt iu cn lu l biu thc Condition tn ti trc khi
qu trnh lp bt u

Chng trnh con


TT: s lng thng
DD : Gi tr mc nh s sn phn trong mt thng void init_PORTD(void)
SSSS: S lng sn phm
{PORTD = 0X00; // Khoi tao Port D.
s dng nt nhn gi lp m xung
TRISD = 0X00; // PORTD la ngo ra}
s dng timer m sn phm
void init_PORTC(void)
T chn s sn phm mc nh trong mt thng (>=1 {PORTC = 0X00; // Khoi tao Port C.
TRISC = 0X00; // PORTC la ngo ra}
void init_PORTB(void)
{PORTB = 0x00;
TRISB = 0Xff;}

void thoigian(void)
{
s2++;
if(s2==10)
{
s1++;
s2=0;
if(s1==10)
{
s2=0;
s1=0;
s3++;
}
}
if(s3==10)
{
s4++;
s3=0;
if(s4==10)
{
s1=0;
s2=0;
s3=0;
s4=0;
}
}
if(count==15)
{
d1++;
if(d1==10)
{
d2++;
d1=0;
}
if(d2==10)
{
d1=0;
d2=0;
}}}
//HAM CHONG DOI BAN PHIM
void debounce(void)

{
int db_cntrl1 , db_cntrl2; // Bien su dung cho vong lap chong doi.
for (db_cntrl1=0;db_cntrl1<=0x0f;db_cntrl1++)
{
for(db_cntrl2=0;db_cntrl2<=0x0f;db_cntrl2++)
{}
}}

//HAM NGAT
void interrupt isr(void)
{
debounce();
if(T0IF && T0IE) // Kiem tra cho phep ngat va co ngat duoc kich hoat (ba
{
TMR0 =255;
T0IF = 0; // Xoa co ngat ngoai.
thoigian(); // timer la sao de cho duoc 1s
count++;
if(count==16)
count=1;
}}
void init_Timer1(void) //HAM KHOI TAO CHO TIMER0
{
TMR0 =254; // CHO TIMER 0 HOAT DONG TU 0;
T0CS=1; // Chon xung clock la TOCKI
T0SE=0; // Tang tu timer0 den tran
PSA = 1; // KHONG SU DUNG BO CHI TI LE LA TIMER0
PS0 = 0;
PS1 = 0;
PS2 = 0;
}

/ Khoi tao Port D.


PORTD la ngo ra}

/ Khoi tao Port C.


PORTC la ngo ra}

OI BAN PHIM

NOTE

Cm

Chng Trnh Chnh

NOTE

#include <pic.h>
#include <htc.h>
#include <math.h>
#include "lcd4x20.h"
// Cau hinh su dung.
__CONFIG(HS & WDTDIS & PWRTEN & UNPROTECT & BORDIS & LV
#define _XTAL_FREQ 4000000
const unsigned char A[] = "DEM SLSP T.THUNG";
char B[16] = {' ',' ',' ',' ',0x00,0x00,':','1','5',':',0x00,0x00,' ',' ',' ',' '};
char so[10] = {0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39};
unsigned char count = 1; // Khai bao va dat gia tri ban dau cho bien dem
int s1,s2,s3,s4;
int p1,p2;
int h1,h2;
d1=0;
d2=0;
s1=0;
s2=0;
s3=0;
s4=0;
void main()
{
init_PORTD();
init_PORTC();
init_PORTB();
lcd_init();
debounce();
init_Timer1(); // Khoi tao Timer1.
ADCON1 = 1;
PCFG0 = 0;
PCFG1 = 0;
PCFG2 = 1;
PCFG3 = 0;
// ANSEL = 0; // Cau hinh tat ca chan Analog la chan Digital I/O.
// ANSELH = 0;
TRISA = 0X00; // Cau hinh PortE, ket noi LED tai RE1 va RE2
PORTA = 0xFF; //Tat cac LED RE1 va RE2.
T0IE = 1; // CHO PHEP NGAT TIMER0.
T0IF = 0; // XOA CO NGAT TIMER0.
GIE = 1; // Cho phep ngat toan cuc.
while(1)
{
//Xuat cac ky tu co dinh tren LCD
lcd_gotoxy(0,0);
for(int i=0;i<=15;i++)

cntrl2; // Bien su dung cho vong lap chong doi.

b_cntrl1<=0x0f;db_cntrl1++)

lcd_putc(A[i]);
lcd_gotoxy(5,1);
lcd_putc(B[6]);
lcd_gotoxy(8,1);
lcd_putc(B[9]);

db_cntrl2<=0x0f;db_cntrl2++)

//Xuat thoi gian la Giay


lcd_gotoxy(9,1);
lcd_putc(so[s4]);
lcd_gotoxy(10,1);
lcd_putc(so[s3]);
lcd_gotoxy(12,1);
lcd_putc(so[s2]);
) // Kiem tra cho phep ngat va co ngat duoc kich hoat (bang HIGH) lcd_gotoxy(11,1);
lcd_putc(so[s1]);
//Xuat gia tri cua tung thung hang
co ngat ngoai.
lcd_gotoxy(7,1);
er la sao de cho duoc 1s
lcd_putc(B[8]);
lcd_gotoxy(6,1);
lcd_putc(B[7]);
//Xuat thoi gian la Gio
lcd_gotoxy(4,1);
lcd_putc(so[d1]);
void) //HAM KHOI TAO CHO TIMER0
lcd_gotoxy(3,1);
lcd_putc(so[d2]);
CHO TIMER 0 HOAT DONG TU 0;
}
n xung clock la TOCKI
}
tu timer0 den tran
ONG SU DUNG BO CHI TI LE LA TIMER0

NPROTECT & BORDIS & LVPDIS);

00,0x00,' ',' ',' ',' '};


35,0x36,0x37,0x38,0x39};
gia tri ban dau cho bien dem.

la chan Digital I/O.

D tai RE1 va RE2

#include <stddef.h>
#define LCD_Light PIN_D0
#define LCD_RS PIN_D1
#define LCD_RW PIN_D2
#define LCD_EN PIN_D3

rs = 0: Command - rs = 1: Data.
RS=0: Bt ch truyn lnh
RW=0 : Bt ch d ghi

#define LCD_D4 PIN_D4


#define LCD_D5 PIN_D5
#define LCD_D6 PIN_D6
#define LCD_D7 PIN_D7
// misc display defines#define Line_1 0x80
#define Line_2 0xC0
#define Clear_Scr 0x01
// prototype statements
#separate void LCD_Init ( void );// ham khoi tao LCD
#separate void LCD_SetPosition ( unsigned int cX );//Thiet lap vi tri con tro
#separate void LCD_PutChar ( unsigned int cX );// Ham viet1kitu/1chuoi len LC
#separate void LCD_PutCmd ( unsigned int cX) ;// Ham gui lenh len LCD
#separate void LCD_PulseEnable ( void );// Xung kich hoat
#separate void LCD_SetData ( unsigned int cX );// Dat du lieu len chan Data
// D/n Cong
#use standard_io ( B )
#use standard_io (A)
//khoi tao LCD**********************************************
#separate void LCD_Init ( void )
{
LCD_SetData ( 0x00 );
delay_ms(200);
output_low ( LCD_RS );// che do gui lenh
output_low(LCD_RW);
output_low(LCD_light);
LCD_SetData ( 0x03 );
LCD_PulseEnable();
LCD_PulseEnable();
LCD_PulseEnable();
LCD_SetData ( 0x02 );
LCD_PulseEnable();
LCD_PutCmd ( 0x2C );
LCD_PutCmd ( 0b00001100);
LCD_PutCmd ( 0x06 );
LCD_PutCmd ( 0x01 );
}
#separate void LCD_SetPosition ( unsigned int cX )
{
/* this subroutine works specifically for 4-bit Port A */
LCD_SetData ( swap ( cX ) | 0x08 );
LCD_PulseEnable();
LCD_SetData ( swap ( cX ) );

LCD_PulseEnable();
}
#separate void LCD_PutChar ( unsigned int cX )
{
/* this subroutine works specifically for 4-bit Port A */
output_high ( LCD_RS );
LCD_PutCmd( cX );
output_low ( LCD_RS );
}
#separate void LCD_PutCmd ( unsigned int cX )
{
/* this subroutine works specifically for 4-bit Port A */
LCD_SetData ( swap ( cX ) ); /* send high nibble */
LCD_PulseEnable();
LCD_SetData ( swap ( cX ) ); /* send low nibble */
LCD_PulseEnable();
}
#separate void LCD_PulseEnable ( void )
{
output_high ( LCD_EN );
delay_us ( 50); // was 10
output_low ( LCD_EN );
delay_ms ( 1); // was 5
}
#separate void LCD_SetData ( unsigned int cX )
{
output_bit ( LCD_D4, cX & 0x01 );
output_bit ( LCD_D5, cX & 0x02 );
output_bit ( LCD_D6, cX & 0x04 );
output_bit ( LCD_D7, cX & 0x08 );
}

Chng trnh con


void comnwrt(void)
{
RS = 0; //chon thanh ghi lenh
RW = 0; //ch ghi
E = 1; // dua chan E len muc cao
E = 0; //tao suon xuong de chot du lieu
delay_ms(1);
}
//GHI MA DU LIEU LEN LCD.
void datawrt(void)
{
RS = 1;
RW = 0;
E = 1;
E = 0;
delay_ms(1);
}
void quet()
{
if(ra0==1 && ra1==0)
{
while(ra0==1 && ra1==0)
{}
x=x+1;
}
if(ra0==1 && ra1==1)
{
while(ra0==1 && ra1==1)
{}
y=y+1;
}
}

NOTE

void quet1()
{
if(ra0==0) //dng 1 gim t 50 xung,dng 2 khng nhy
{
while(ra0==0)
{}
x=x-1;
}
if(ra1==0) //dng 1 khng nhy,dng 2 t 0 tng ln
{
while(ra1==0)
{}
y=y+1;
}
}

Chng Trnh Chnh


#include <16f877a.h>
#include <defs_16f877a.h>
#fuses NOWDT, NOPROTECT, NOLVP, XT, PUT
#use delay(clock=4000000)
#define RS RE0
#define RW RE1
#define E RE2
#byte porte=0x09
#byte porta=0x05
#byte portd=0x08
#bit re0=0x09.0
#bit re1=0x09.1
#bit re2=0x09.2
#bit ra0=0x05.0 // CAO tc ng mc 0
#bit ra1=0x05.1 // CA HAI
int8 x, y;
char tram1, chuc1, dv1, tram2, chuc2, dv2;
void quet();
void main()
{
set_tris_e(0);
set_tris_d(0b0);
//port D xuat du lieu
set_tris_a(0xff);
//Port a nhap du
delay_ms(100); //Tao tre 100ms cho LCD khoi dong
portd = 0x38;
// Hai hang, ma tran dot 5*7, 8 bit interface
comnwrt();
portd = 0x0C;
// Bat hien thi, tat con tro
comnwrt();
portd = 0x80;
// Vi tri hang 1,cot 1
x=0; y=0, tram1=0,chuc1=0,dv1=0,tram2=0,chuc2=0,dv2=0;
comnwrt();
portd= 's';
datawrt();
portd = 'o';
datawrt();
portd = ' ';
datawrt();
portd = 's';
datawrt();
portd = 'p';
datawrt();
portd = ' ';
datawrt();
portd = 't';
datawrt();
portd = 'h';
datawrt();
portd = 'a';
datawrt();
portd = 'p';
datawrt();
portd = ':';

datawrt();
portd = 0x0C0;
comnwrt();
portd= 's';
datawrt();
portd = 'o';
datawrt();
portd = ' ';
datawrt();
portd = 's';
datawrt();
portd = 'p';
datawrt();
portd = ' ';
datawrt();
portd = 'c';
datawrt();
portd = 'a';
datawrt();
portd = 'o';
datawrt();
portd = ':';
datawrt();
while (1)
{
quet();
tram1=(x/100+48);
chuc1=(x/10%10+48);
dv1=(x%10+48);
portd=0x08B;
comnwrt();
portd= tram1;
datawrt();
portd= chuc1;
datawrt();
portd= dv1;
datawrt();
tram2=(y/100+48);
chuc2=(y/10%10+48);
dv2=(y%10+48);
portd=0x0CB;
comnwrt();
portd= tram2;
datawrt();
portd= chuc2;
datawrt();
portd= dv2;
datawrt();
}
}

NOTE

VP, XT, PUT

a ch port E
a ch port A
a ch port D
a ch chn
a ch chn
a ch chn
a ch chn
a ch chn
Khai bo bin m

//Port a nhap du lieu


ho LCD khoi dong
n dot 5*7, 8 bit interface

ram2=0,chuc2=0,dv2=0;

X dng 1 THP

Y dng 2 CAO

MAIN.C

#include <main.h>
#include <var.h>
#include "lcd.c"
#include "adc.c"
#BYTE PORTB=0x06
#BIT B4=PORTB.4

ADC.C

#ifndef __ADC_
#define __ADC_

LCD.C

thc hin cc void

def_877a.h

#define W 0
#define F 1

void adc_config()
#endif

//----- Register Files-#include <16F877A.


#include <var.h>
#byte INDF =0x00
#byte TMR0 =0x01
#byte PCL =0x02
#byte STATUS =0x03
#byte FSR =0x04
#byte PORTA =0x05
#byte PORTB =0x06
#byte PORTC =0x07
#byte PCLATH =0x0A
#byte PIR1 =0x0C
#byte PIR2 =0x0D
#byte TMR1L =0x0E
#byte TMR1H =0x0F
#byte T1CON =0x10
#byte TMR2 =0x11
#byte T2CON =0x12
#byte SSPCON =0x14
#byte CCPR1L =0x15
#byte CCPR1H =0x16
#byte CCP1CON =0x17
#byte RCSTA =0x18
#byte TXREG =0x19
#byte RCREG =0x1A
#byte CCPR2L =0x1B
#byte CCPR2H =0x1C
#byte CCP2CON =0x1D
#byte ADRESH =0x1E
#byte ADCON0 =0x1F
/* bank 1 registers */
#byte OPTION_REG =0x81
#byte TRISA =0x85
#byte TRISB =0x86
#byte TRISC =0x87
#byte PIE1 =0x8C
#byte PIE2 =0x8D
#byte PCON =0x8E
#byte SSPCON2 =0x91
#byte PR2 =0x92
#byte SSPADD =0x93

#byte SSPSTAT =0x94


#byte TXSTA =0x98
#byte SPBRG =0x99
#byte ADRESL =0x9E
#byte ADCON1 =0x9F
/* bank 2 registers */
#byte EEDATA =0x010C
#byte EEADR =0x010D
#byte EEDATH =0x010E
#byte EEADRH =0x010F
/* bank 3 registers */
#byte EECON1 =0x018C
#byte EECON2 =0x018D

//----- STATUS Bits -----------------// For Assembly Language - No


#define IRP 7
#define RP1 6
#define RP0 5
#define NOT_TO 4
#define NOT_PD 3
#define Z 2
#define DC 1
#define C 0
//----- INTCON Bits for c -----------#bit gie = 0x0b.7
#bit eeie = 0x0b.6
#bit t0ie = 0x0b.5
#bit inte = 0x0b.4
#bit rbie = 0x0b.3
#bit t0if = 0x0b.2
#bit intf = 0x0b.1
#bit rbif = 0x0b.0
//---------PORTA bits-----------------#bit ra5 =0x05.5
#bit ra4 =0x05.4
#bit ra3 =0x05.3
#bit ra2 =0x05.2
#bit ra1 =0x05.1
#bit ra0 =0x05.0
//---------PORTB bits--------------#bit rb7 =0x06.7
#bit rb6 =0x06.6
#bit rb5 =0x06.5
#bit rb4 =0x06.4

#bit rb3 =0x06.3


#bit rb2 =0x06.2
#bit rb1 =0x06.1
#bit rb0 =0x06.0
//---------PORTC bits-----------------#bit rc7 =0x07.7
#bit rc6 =0x07.6
#bit rc5 =0x07.5
#bit rc4 =0x07.4
#bit rc3 =0x07.3
#bit rc2 =0x07.2
#bit rc1 =0x07.1
#bit rc0 =0x07.0

//----- PIR1 Bits ----------------------------------------------#bit PSPIF =0x0C.7


#bit ADIF =0x0C.6
#bit RCIF =0x0C.5
#bit TXIF =0x0C.4
#bit SSPIF =0x0C.3
#bit CCP1IF =0x0C.2
#bit TMR2IF =0x0C.1
#bit TMR1IF =0x0C.0

//----- PIR2 Bits ----------------------------------------------#bit CMIF =0x0D.6


#bit EEIF =0x0D.4
#bit BCLIF =0x0D.3
#bit CCP2IF =0x0D.0

//----- T1CON Bits ------------------------------------------#bit T1CKPS1 =0x10.5


#bit T1CKPS0 =0x10.4
#bit T1OSCEN =0x10.3
#bit T1SYNC =0x10.2
#bit TMR1CS =0x10.1
#bit TMR1ON =0x10.0

//----- T2CON Bits ------------------------------------------#bit TOUTPS3 =0x12.6


#bit TOUTPS2 =0x12.5
#bit TOUTPS1 =0x12.4
#bit TOUTPS0 =0x12.3
#bit TMR2ON =0x12.2
#bit T2CKPS1 =0x12.1
#bit T2CKPS0 =0x12.0
//-------------SSPCON bits-------------------------#bit WCOL =0x14.7
#bit SSPOV =0x14.6
#bit SSPEN =0x14.5
#bit CKP =0x14.4
#bit SSPM3 =0x14.3
#bit SSPM2 =0x14.2
#bit SSPM1 =0x14.1
#bit SSPM0 =0x14.0
//---------------CCP1CON bits-------#bit CCP1X =0x17.5

#bit CCP1Y =0x17.4


#bit CCP1M3 =0x17.3
#bit CCP1M2 =0x17.2
#bit CCP1M1 =0x17.1
#bit CCP1M0 =0x17.0
//---------------RCSTA bits------------------#bit SPEN =0x18.7
#bit RX9 =0x18.6
#bit SREN =0x18.5
#bit CREN =0x18.4
#bit ADDEN =0x18.3
#bit FERR =0x18.2
#bit OERR =0x18.1
#bit RX9D =0x18.0
//-----------------------CCP2CON bits---------#bit CCP2X =0x1D.5
#bit CCP2Y =0x1D.4
#bit CCP2M3 =0x1D.3
#bit CCP2M2 =0x1D.2
#bit CCP2M1 =0x1D.1
#bit CCP2M0 =0x1D.0

//----- ADCON0 Bits ----------------------------------------#bit ADCS1 =0x1F.7


#bit ADCS0 =0x1F.6
#bit CHS2 =0x1F.5
#bit CHS1 =0x1F.4
#bit CHS0 =0x1F.3
#bit ADGO =0x1F.2
#bit ADON =0x1F.0

//----- OPTION_reg Bits -----------------------------------#bit RBPU =0x81.7


#bit INTEDG =0x81.6
#bit T0CS =0x81.5
#bit T0SE =0x81.4
#bit PSA =0x81.3
#bit PS2 =0x81.2
#bit PS1 =0x81.1
#bit PS0 =0x81.0
//------------------TRISA bits--------------------------#bit TRISA5 =0x85.5
#bit TRISA4 =0x85.4
#bit TRISA3 =0x85.3
#bit TRISA2 =0x85.2
#bit TRISA1 =0x85.1
#bit TRISA0 =0x85.0
//-----------------TRISB bits----------------------------#bit TRISB7 =0x86.7
#bit TRISB6 =0x86.6
#bit TRISB5 =0x86.5

#bit TRISB4 =0x86.4


#bit TRISB3 =0x86.3
#bit TRISB2 =0x86.2
#bit TRISB1 =0x86.1
#bit TRISB0 =0x86.0
//----------------TRISC bits------------------#bit TRISC7 =0x87.7
#bit TRISC6 =0x87.6
#bit TRISC5 =0x87.5
#bit TRISC4 =0x87.4
#bit TRISC3 =0x87.3
#bit TRISC2 =0x87.2
#bit TRISC1 =0x87.1
#bit TRISC0 =0x87.0

//----- PIE1 Bits ----------------------------------------------#bit PSPIE =0x8C.7


#bit ADIE =0x8C.6
#bit RCIE =0x8C.5
#bit TXIE =0x8C.4
#bit SSPIE =0x8C.3
#bit CCP1IE =0x8C.2
#bit TMR2IE =0x8C.1
#bit TMR1IE =0x8C.0

//----- PIE2 Bits ----------------------------------------------#bit CMIE =0x8D.6


#bit EEIE =0x8D.4
#bit BCLIE =0x8D.3
#bit CCP2IE =0x8D.0

//----- PCON Bits --------------------------------------------#bit POR =0x8E.1


#bit BOD =0x8E.0

//-----------SSPCON2 bits----------------------------------#bit GCEN =0x91.7


#bit ACKSTAT =0x91.6
#bit ACKDT =0x91.5
#bit ACKEN =0x91.4
#bit RCEN =0x91.3
#bit PEN =0x91.2
#bit RSEN =0x91.1
#bit SEN =0x91.0
//---------------------SSPSTAT bits-----------------------#bit STAT_SMP =0x94.7
#bit STAT_CKE =0x94.6
#bit STAT_DA =0x94.5
#bit STAT_P =0x94.4
#bit STAT_S =0x94.3
#bit STAT_RW =0x94.2
#bit STAT_UA =0x94.1

#bit STAT_BF =0x94.0


//----------------TXSTA bits----------------#bit CSRC =0x98.7
#bit TX9 =0x98.6
#bit TXEN =0x98.5
#bit SYNC =0x98.4
#bit BRGH =0x98.2
#bit TRMT =0x98.1
#bit TX9D =0x98.0
//--------------ADCON1 bits--------------#bit ADFM =0x9F.7
#bit ADCS2 =0x9F.6
#bit PCFG3 =0x9F.3
#bit PCFG2 =0x9F.2
#bit PCFG1 =0x9F.1
#bit PCFG0 =0x9F.0
//-----------EECON1 bits---------#bit EEPGD =0x018C.7
#bit WRERR =0x018C.3
#bit WREN =0x018C.2
#bit WR =0x018C.1
#bit RD =0x018C.0

MAIN.H

#ifndef _MAIN_
#define _MAIN_
/***************KHAI BAO CAC THU VIEN*****************/
#include <16F877A.h>
/**************KHAI BAO CAU HINH FUSE BIT************/
///////////////////////////////////////////////////////
// Voi moi muc phai chon mot trong danh sach dua ra //
//_________________POINTER AND ADC____________________
#device *=16 adc=10
//#device *=16 adc=8

// su dung con tro 16 bit, bo chuyen doi ADC 10 bit


// su dung con tro 16 bit, bo chuyen doi ADC 8 bit

//__________________WATCH DOG TIMER___________________


#FUSES NOWDT
// khong su dung bo Watch Dog Timer
//__________________HIGH SPEED OSC____________________
//#FUSES LP
// Su dung nguon dao dong tan so thap < 200 khz
//#FUSES XT
// Dao dong thach anh <= 4mhz voi PCM/PCH , 3mhz to 10 mhz voi PCD
//#FUSES RC
// Dao dong RC voi CLKOUT
#FUSES HS
//Dao dong tan so cao (> 4mhz voi PCM/PCH) (>10mhz voi PCD)
//__________________POWER UP TIMER____________________
#FUSES NOPUT
//Khong su dung Power Up Timer
//#FUSES PUT
//Su dung Power Up Timer
//__________________BROWN OUT_________________________
#FUSES NOBROWNOUT
//Khong reset chip khi BrownOut
//#FUSES BROWNOUT
//Reset chi khi co BrownOut
//______________LOW VOLTAGE PROGRAM___________________
#FUSES NOLVP
//No low voltage programing, B3(PIC16) or B5(PIC18) used for I/O
//#FUSES LVP
//Low Voltage Programming on B3(PIC16) or B5(PIC18)
//______________CODE PROTECED EEPROM__________________
#FUSES NOCPD
//#FUSES CPD

//Khong bao ve du lieu EEPROM


//Dung che do bao ve du lieu EEPROM

//_____________PROGRAM WRITE PROTECED_________________


//#FUSES WRT
//#FUSES WRT_50%
//#FUSES WRT_5%
#FUSES NOWRT

//Program Memory Write Protected


//Lower half of Program Memory is Write Protected
//Lower 255 bytes of Program Memory is Write Protected
//Program memory not write protected

//_____________ENABLE DEBUG MODE FOR ICD______________


//#device ICD=TRUE
// Kich hoat chuc nang DEBUG ICD Integrated Chip Debugging
//________________DEBUG FOR ICD_______________________
#FUSES NODEBUG
//#FUSES DEBUG

//Khong su dung che do Debug voi ICD


// Su dung che do Debug voi ICD

//___________CODE PROTECED FROM READING_______________


#FUSES NOPROTECT
// Cho phep doc lai Code
//#FUSES PROTECT
// Khong cho phep doc lai code

//___________________CLOCK____________________________
#use delay(clock=24000000)
// Su dung tan so 24Mhz, khong reset watch dog khi goi den ham delay.
//#use delay(clock=20000000,RESTART_WDT) // Su dung tan so 20Mhz, reset watch dog khi goi den ham delay.
//________________FAST_STANDAR I/O PORTA___________________
#use FAST_IO(A)
// Thiet lap che do fast I/O cho PORTA, yeu cau phai chi ro huong Vao/Ra
// cho cac chan I/O. cac ham Input,Output se chi su dung 1 chu ky lenh
//#use STANDARD_IO(A) // Thiet lap che do chuan I/O cho PORTA, khong yeu cau phai chi ro huong Vao/Ra
// cho cac chan I/O. cac ham Input,Output se su dung 3-4 chu ky lenh
//#use FIXED_IO(A)
//
//________________FAST_STANDAR I/O PORTB___________________
#use FAST_IO(B)
// Thiet lap che do fast I/O cho PORTB, yeu cau phai chi ro huong Vao/Ra
// cho cac chan I/O. cac ham Input,Output se chi su dung 1 chu ky lenh
//#use STANDARD_IO(B) // Thiet lap che do chuan I/O cho PORTB, khong yeu cau phai chi ro huong Vao/Ra
// cho cac chan I/O. cac ham Input,Output se su dung 3-4 chu ky lenh
//#use FIXED_IO(B)
//
//________________FAST_STANDAR I/O PORTC____________________
#use FAST_IO(C)
// Thiet lap che do fast I/O cho PORTC, yeu cau phai chi ro huong Vao/Ra
// cho cac chan I/O. cac ham Input,Output se chi su dung 1 chu ky lenh
//#use STANDARD_IO(C) // Thiet lap che do chuan I/O cho PORTC, khong yeu cau phai chi ro huong Vao/Ra
// cho cac chan I/O. cac ham Input,Output se su dung 3-4 chu ky lenh
//#use FIXED_IO(C)
//
//________________FAST_STANDAR I/O PORTD_____________________
#use FAST_IO(D)
// Thiet lap che do fast I/O cho PORTD, yeu cau phai chi ro huong Vao/Ra
// cho cac chan I/O. cac ham Input,Output se chi su dung 1 chu ky lenh
//#use STANDARD_IO(D) // Thiet lap che do chuan I/O cho PORTD, khong yeu cau phai chi ro huong Vao/Ra
// cho cac chan I/O. cac ham Input,Output se su dung 3-4 chu ky lenh
//#use FIXED_IO(D)
//
//_______________FAST_STANDAR I/O PORTE___________________
#use FAST_IO(E)
// Thiet lap che do fast I/O cho PORTE, yeu cau phai chi ro huong Vao/Ra
// cho cac chan I/O. cac ham Input,Output se chi su dung 1 chu ky lenh
//#use STANDARD_IO(E) // Thiet lap che do chuan I/O cho PORTE, khong yeu cau phai chi ro huong Vao/Ra
// cho cac chan I/O. cac ham Input,Output se su dung 3-4 chu ky lenh
//#use FIXED_IO(E)
//

bits------------------

//________________________CASE_____________________________
#CASE
// Phan biet chu hoa va chu thuong trong khi lap trinh code
/************** DINH NGHIA CAC CHAN I/O ************/
//______________________I/O LCD____________________________
#define LCD_RS PIN_D1
#define LCD_RW PIN_D2
#define LCD_EN PIN_D3
#define LCD_D4 PIN_D4
#define LCD_D5 PIN_D5
#define LCD_D6 PIN_D6
#define LCD_D7 PIN_D7

#endif

bits------------------

---------------------------------------------------------

---------------------------------------------------------

s ---------------------------------------------------------

s ---------------------------------------------------------

CON bits--------------------------

P1CON bits--------

STA bits-------------------

---CCP2CON bits----------

Bits --------------------------------------------------------

eg Bits --------------------------------------------------------

RISA bits---------------------------

RISB bits-----------------------------

ISC bits-------------------

---------------------------------------------------------

----------------------------------------------------

----------------------------------------------------------

ON2 bits---------------------------------------------

-SSPSTAT bits------------------------

STA bits-----------------

ON1 bits---------------

N1 bits----------

VAR.H

#ifndef _VAR_
#define _VAR_
//const unsigned char chu_so[10] = {0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90};
//gia tri tren led 7 thanh
0 1 2
//const unsigned char OFF_LED=0xff;
//unsigned char buffer[3];
#endif

0 mhz voi PCD

5 6

7 8

khi goi den ham delay.


h dog khi goi den ham delay.

phai chi ro huong Vao/Ra

phai chi ro huong Vao/Ra

phai chi ro huong Vao/Ra

phai chi ro huong Vao/Ra

phai chi ro huong Vao/Ra

MAIN.C

#include <16f877a.h>
#include <defs_16f877a.h>
#fuses NOWDT, NOPROTECT, NOLVP, XT, PUT
#use delay(clock=4000000)
#define RS RE0
#define RW RE1
#define E RE2

th vin pic
Register Files
main.h
xc nh chn

KHNG CN KHAI BO LCD

Cc bin c lp vi nhau,dng vo mc ch no do lnh pha trc n.

Bin dng lu gi tr,

Bin dng lu gi tr,c u ra

You might also like