You are on page 1of 83

cng ng dng lp trnh C cho vi iu khin 8051 Bi 1: Ngn ng C Trnh dch Keil C I.

. Ngn ng C cho vi iu khin 1, Gii thiu ngn ng C Trong k thut lp trnh vi iu khin ni chung, ngn ng lp trnh c s dng Ngn ng bc cao l cc ngn ng gn vi ngn ng con ngi hn, do vic lp trnh bng cc ngn ng ny tr nn d dng v n gin hn. C th k n mt s ngn ng lp trnh bc cao nh C, Basic, Pascal trong d C l ngn ng thng dng hn c trong k thut vi iu khin. V bn cht, s dng cc ngn ng ny thay cho ngn ng bc thp l gim ti cho lp trnh vin trong vic nghin cu cc tp lnh mt phn mm trn my tnh gi l trnh bin dch (Compiler) chuyn sang dng hp ng

iu khin. C ngha l vi mt ngi cha quen vi mt vi iu khin cho trc s xy dng c chng trnh mt cch nhanh chng hn, do khng phi mt thi gian tm hiu kin trc ca vi iu khin . V vic s dng li cc chng trnh xy dng trc cng d dng hn, c th s dng ton b hoc sa cha mt phn. 2. Ngn ng C

2.1 Kiu d liu

el
Kiu Char Int Long

2.1.1 Kiu d liu trong C S Byte 1 1 2 2 4 Khong gi tr -128 +127 0 255 -32768 - +32767 0 - 65535 -2147483648 - +2147483647

ec
Unsigned char Unsigned int

tro ni c

trc khi chuyn sang m my. Khi s dng ngn ng C ngi lp trnh khng cn hiu su sc v cu trc ca b vi

ct

v xy dng cc cu trc gii thut. Chng trnh vit bng ngn ng bc cao cng s c

u. ne t

thng chia lm 2 loi: Ngn ng bc thp v Ngn ng bc cao.

Unsigned long Float * Khai bo bin:

4 4

0 4294697295

- C php: Kiu_d_liu Vng_nh Tn_bin _at_ ia_ch; V d:

V d: Thay v: unsigned char x; x = 0; Ta ch cn: unsigned char x = 0;

dng lu tr cc bin s dng trong chng trnh. Cc vng nh c th s dng l: CODE, DATA, DATAB, IDATA, PDATA, XDTA. Khi khng khai bo vng nh trnh dch Keil C s mc nh l vng nh DATA. Vng nh ngha CODE DATA BDATA IDATA

el
PDATA XDATA

cc bin khc

ec

* nh ngha li kiu - C php: typedef Kiu_d_liu Tn_bin; - Ten_bin sau ny s c s dng nh mt kiu d liu mi v c th dng khai bo

tro ni c
s dng vi iu khin sau ny a ch t trn P0 v P2

V d: unsigned int x,y,z,t; - Ch nh vng nh: t kho Vng_nh cho php ngi dng c th ch ra vng nh s

B nh m ngun chng trnh B nh d liu gm 128 Byte thp ca RAM trong vi iu khin B nh d liu c th nh a ch bit, nm trong vng nh DATA B nh d liu gm 128 Byte cao ca RAM trong vi iu khin ch c mt B nh d liu ngoi gm 256 Byte, c truy cp bi a ch t trn P0 B nh d liu ngoi c dung lng c th ln n 64 KB, c truy cp bi

ct

- C th khai bo nhiu bin cng mt kiu mt lc.

u. ne t

Unsigned char data x; - Khi khai bo bin c th gn lun cho bin gi tr ban u.

V d: typedef int m5[5]; Dng tn m5 khai bo hai bin tn a v b c kiu d liu l mng 1 chiu 5 phn t: m5 a,b; 2.1.2 Kiu d liu trong Keil C Kiu Bit Sbit Sfr Sfr16 S bit 1 8 16

- bit : dng khai bo cc bin c gi tr 0 hoc mt hay cc bin logic trn vng RAM ca vi iu khin. Khi khai bo bin kiu bit trnh dc Keil C s mc nh vng nh s dng l BDATA. ` - sbit, sfr, sfr16: dng nh ngha cc cho cc thanh ghi chc nng hoc cc cng 2.1.3 Mng

Mng l mt tp hp nhiu phn t cng mt kiu gi tr v chung mt tn. Cc phn t ca mng phn bit vi nhau bi ch s hay s th t ca phn t trong dy phn t. Mi phn t c vai tr nh mt bin v lu tr c mt gi tr c lp vi cc phn t khc ca mng. Mng c th l mng mt chiu hoc mng nhiu chiu

el

chiu, tng s phn t l 6. Ch s ca mng bt u t s 0. Mng c bao nhiu chiu phi cung cp y by nhiu ch s V du: phn t mng b[0] [1] l ng Khi vit b[0] l sai 2.1.4. Con tr

ec
Khai bo: V d:

- C php: Tn_kiu Vng_nh Tn_mng[s_phn_t_mng]; Khi b trng s phn t mng ta s c mng c s phn t bt k. Unsigned int data a[5],b[2] [3];

Vi khai bo trn ta s c: mng a l mng mt chiu 5 phn t. Mng b l mng hai

tro ni c

trn vi iu khin dng truy nhp cc on d liu 1 bit, 8 bit, 16 bit

ct

u. ne t

Khi ta khai bo mt bin, bin s c cp pht mt khong nh bao gm mt s byte nht nh dng lu tr gi tr. a ch u tin ca khong nh chnh l a ch ca bin c khai bo. Con tr l mt bin dng cha a ch m khng cha gi tr, hay gi tr ca con tr chnh l a ch khong nh m n tr ti. Vi cc vng nh c th con tr ti vng nh chim dung lng ph thuc vo lng ln nht v vy tt nht nn s dng con tr c th. Loi con tr Con tr tng qut Con tr XDATA Con tr CODE Con tr DATA Con tr IDATA 3 byte 2 byte 2 byte 1 byte 1 byte 1 byte

Khai bo bin con tr:

- C php: Kiu_D_liu Vng_nh *Tn_bin; - V d: int *int_ptr; long data *long_ptr; 2.1.5 Kiu d liu cu trc

el

c biu th bi mt tn duy nht. kiu d liu cu trc dng lu tr cc gi tr, thng tin c lin quan n nhau. nh ngha v khai bo bin cu trc: - nh ngha: typedef struct { Khai bo cc bin thnh phn; } Tn_kiu_cu_trc; - Khai bo: Tn_kiu_cu_trc Vng_nh Tn_bin; V d: typedef struct { char day;

ec

- khi khng ch r vng nh con tr s c coi l con tr tng qut. Kiu d liu cu trc l mt tp hp cc bin, cc mng v c cc kiu cu trc khc

tro ni c

Con tr PDATA

ct

u. ne t
Kch thc

ln ca vng nh . Con tr tng qut khi khng xc nh trc vng nh s c dung

char month; int year; } Date_type; Date_type date,date_arr[5]; 2.2 Php ton Php gn k hiu: =. Trong Bin_2 c th l gi tr xc nh cng c th l bin. 2.2.1 Php ton s hc Php ton + * / % ngha Php cng Php tr Php nhn Php chia ly phn V d X=a+b X=a-b X=a/b (a=9, b=2 X=4) a%b (a=9, b=2 X=1) X=a*b

2.2.2 Php ton Logic AND: && OR: || NOT: !

el

2.2.3 Cc php ton so snh:

ec

tro ni c

nguyn Php chia ly phn d

ct

u. ne t

- C php: Bin_1 = Bin_2;

Php ton >

ngha So snh ln hn

V d a>b 4>5 cc gi tr 0 a>=b 6>=2 cc gi tr 1 a<b 6<7 cc gi tr 1

>=

So snh ln hn hoc bng

<

So snh nh hn

tro ni c

<=

So snh nh hn hoc bng

ct

u. ne t

a<=b 8<=5 cc gi tr 0 a==b 6==6 cc gi tr 1 a!=b 9!=9 cc gi tr 0

==

So snh bng nhau

!=

So snh khc nhau

el

2.2.4 Php ton thao tc Bit Php ton & | ! ^ << >> ~ ngha Php v (AND) Php hoc (OR) Php o (NOT) Php hoc loi tr (XOR) Dch tri Dch phi Ly b theo bit V d Bit_1 & Bit_2 Bit_1 | Bit_2 !Bit_1 Bit_1 ^ Bit_2 a<<3 a>>4 ~a

ec

2.2.5 Php ton kt hp Php ton += -= *= /= %= V d a+=5 <=> a=a+5 a-=5 <=> a=a-5 a*=5 <=> a=a*5 a%=5 <=> a=a%5

2.3 Cu trc chng trnh C 2.3.1 Cu trc chng trnh * Cu trc 1. Khai bo ch th tin x l

2. Khai bo cc bin ton cc

* V d:

ec el
{ }

tro ni c
#include<regx51.h> #include<string.h> #define Led1 P1_0 Unsigned char data dem; Unsigned int xdata X; Void delay(unsigned int n); bit kiemtra(unsigned int a); void delay(unsigned int n) Khai bo bin cc b; M chng trnh tr;

3. Khai bo nguyn mu cc hm

4. Xy dng cc hm v chng trnh chnh

Unsigned char code Led_arr[3]; Khai bo bin ton cc

ct
Khai bo ch th tin x l Khai bo nguyn mu hm

u. ne t

a/=5 <=> a=a/5

Void main() { Khai bo bin c b; M chng trnh chnh; } Bit kiemtra(unsigned int a) Khai bo bin cc b; M chng trnh kim tra bin a; }

Xy dng cc hm v chng trnh chnh

Ch : Hm khng khai bo nguyn mu phi c xy dng trc hm c li gi hm . v d trn do hm bit kiemtra(unsigned int a) c khai bo nguyn mu

vic son tho chng trnh ngun C trc khi bin dch. Khi dch mt chng trnh C th khng phi chnh bn chng trnh ngun m ta son tho c dch. Trc khi dch, cc lnh tin x l s chnh l bn gc, sau bn chnh l ny s c dch. C ba cch chnh l c dng l:

el
- V d:

g ri chng trnh linh hot, hiu qu hn. * Ch th #define Ch th #define cho php to cc macro thay th n gin - C php: #define Tn_thay_th dy_k_t Mt Tn_thay_th c th c nh ngha li nhiu ln, nhng trc khi nh ngha li phi gii phng nh ngha bng ch th: #undef Tn_thay_th #define N 100 * Ch th #include

ec

+ Php thay th #define + Php chn tp #include

+ Php la chn bin dch #ifdef Cc ch th tin x l gip ta vit chng trnh ngn gn hn v t chc bin dch,

tro ni c

2.3.2 Ch th tin x l Cc ch th tin s l khng phi l cc lnh ca ngn ng C m l cc lnh gip cho

ct

hm trn nn c th xy dng hm bt k v tr no trong chng trnh.

u. ne t

Ch th #include bo cho trnh bin dch nhn ni dung ca tp khc v chn vo tp chng trnh ngun m ta son tho. - C php: Cch 1: #include<tn_tp> Cch 2: #includetn_tp - V d: cch ny tp regx51.h s c tm trong th mc INC chn vo chng trnh ngun. Cch 2: #includeregx51.h nu khng c mi tm trong th mc INC

cch ny tp regx51.h s c tm trong th mc cha chng trnh ngun

tn_tp s bao gm c ng dn th mc cha tp. * Ch th #ifdef - C php:

Ch th #ifdef ny thng dng bin dch cc tp th vin. Cch 1: #ifdef ten_macro on chng trnh

ec el
- C php:

#endif Cch 2: #ifdef ten_macro #else

cch 1 nu tn_macro c nh ngha on chng trnh s c dch ngc li on chng trnh s b b qua. * Ch th #ifndef Ch th #ifndef ny thng dng bin dch cc tp th vin. Cch 1: #ifndef ten_macro

tro ni c
on chng trnh 1 on chng trnh 2 #endif

ct

Khi mun chn tp ngoi th vin hoc ngoi th mc cha chng trnh ngun th

u. ne t

Cch 1: #include<regx51.h>

on chng trnh #endif Cch 2: #ifndef ten_macro on chng trnh 1 #else on chng trnh 2 cch 1 nu tn_macro cha c nh ngha on chng trnh s c dch ngc li on chng trnh s b b qua. 2.3.3 Ch thch trong chng trnh

Vic vit ch thch trong trnh nhm mc ch gii thch ngha ca cu lnh, on c c th hiu c chng trnh d dng v nhanh chng hn, sa li n gin hn hoc

v trnh dch s b qua tt c li ch thch khi bin dch chng trnh sang m my. Li gii thch c t sau du // nu ch thch ch vit trn mt dng hoc trong cp du \* v *\. 3 Cc lnh c bn trong C

el

ec
{ }

+ Cu lnh r nhnh if: - Cu trc: if(dieu_kien)

Gii thch: nu dieu_kien ng th x l cc cu lnh bn trong cn sai th nhy qua. - Cu trc: if(dieu_kien) { // on chng trnh 1 } else {

tro ni c
// on chng trnh

gip cho ta xem li chng trnh c m ta lm tr ln nhanh hn. Ch thch trong chng trnh s khng nh hng n chng trnh m ta son tho

ct

chng trnh hoc hm hot ng nh th no v lm g. Vit ch thch s gip cho ngi

u. ne t

#endif

// on chng trnh 2 } Gii thch: nu dieu_kien ng th x l on chng trnh 1 bn trong cn sai th x l on chng trnh 1 + Cu lnh la chn: {

case gia_tri_1: {//cc cu lnh break;} case gia_tri_2: {//cc cu lnh break;} case gia_tri_3: {//cc cu lnh break;} ... }

Bin c gia_tri_2 th thc hin cu lnh tng ng ri thot. . Bin c gia_tri_n th thc hin cc cu lnh tng ng ri thot. + Vng lp xc nh:

ec
}

Cu trc: for(n=m;n<l;n++) {

el

Gii thch: m,l l gi tr(m>l), cn n l bin.

thc hin lp cc cu lnh (l-m) ln. + Vng lp khng xc nh while: Cu trc: while(dieu_kien) { // cc cu lnh }

tro ni c
// cc cu lnh x l

Gii thch: tu vo bin c gia_tri_1 th thc hin cc cu lnh tng ng ri sau thot khi cu trc nh cu lnh break.

ct

case gia_tri_n: {//cc cu lnh break;}

u. ne t

Cu trc:

switch(bien)

Gi thch: thc hin lp cc cu lnh khi iu kin ng nu iu kin sai th thot khi vng lp. + Vng lp khng xc nh do while: Cu trc: do { // cc cu lnh Gi thch: thc hin lp cc cu lnh sau kim tra iu kin nu ng, nu sai th thot khi vng lp. II. Trnh bin dch Keil C (compiler) 2.1. Khi to cho Project.

el
to 1 project mi chn project New project nh sau:

ec

tro ni c

ct

u. ne t

} while(dieu_kien);

Hp thoi create new project hin ra nh sau:

el

ec

tro ni c

ct

u. ne t

nh tn v chuyn n th mc bn lu project.bn nn to mi mt th mc cho 1 project. ri chn save. Hp thoi sau hin ra:

y, kch chut vo du + m rng cc con IC ca cc hang. y ta lp trnh cho

el

AT89C51 ca hang ATMEN nn ta chn nh trn. Khi chn chip th ngay lp tc 1 bng hin ra 1 s tnh nng ca chip cc bn c th nhn thy: 8051 based fully static 24Mhz . nhp OK, ch cu tr li NO khi c hi copy standard 8051 startup code to project and addfile to project v nu chon YES ch lm cho file lp trnh ca bn thm nng.

ec

Trong ny c 1 lot cc hng in t sn xut 8051. bn lp trnh cho con no th chn con

tro ni c

ct

u. ne t

to mt file code cc bn ch filenew hoc n ctrl+N. nh sau:

cha c g nh sau:

el

ec

Ca s text1 hin ra. Tip theo bn chn File save As hoc Ctrl+S, lu File mc d

tro ni c

ct

u. ne t

c ca s sau:

el
Cc bn nhp tn vo text box file name.ch tn g cng c nhng khng c thiu ui m rng .C, v nhn SAVE.

ec

tro ni c

ct

u. ne t

Trong bn tri mn hnh, ca s PROJECT WORKSPACE, cc bn m rng ci target 1 ra nh sau:

Nhp chut phi nn SOURCE GROUP, chn Add file to Group Source Group 1 hp thoi hin ra chn file .C m cc bn va SAVE ri nhn Add 1ln ri nhn Close. nu bn nhn Add 2 ln n s thong bo l file add bn ch vic OK ri nhn Close. c nh sau:

el

ec

tro ni c

ct

u. ne t

By gi trong hnh nhn thy trong Source Group 1 c file VIDU.C. cc bn nhp chut

el

ec

tro ni c

phi vo vng son tho file VIDU.C thm file th vin. Chon Insert #include<REGX51.H>.

ct

u. ne t

Phn cui cng ca cng vic khi to l cc bn vit li gii thch cho d n ca mnh. cn s dng li code c li cn bit n l ci g.

el
2.2. Son tho chng trnh. Cc bn vit th 1 chng trnh lm v d. khi vit xong mi dng lnh nn gii thch dng lnh lm g. V d:

ec

phn ny rt cn thit v n ngi khc hiu mnh lm g trong project ny v khi mnh

tro ni c

ct

u. ne t

el
2.3. Bin dch mt chng trnh.

ec

tro ni c

ct

u. ne t

Sau khi son tho xong nhn Ctrl+S nh. Nh xong cc bn bin dch chng trnh bng cch n phm F7 hoc chn Build target l biu tng ngay trn ca s Workspace, nh trn hnh:

el

ec

tro ni c

ct

u. ne t

bin dch chng trnh thnh file HEX cc bn chn: Projectoption for target 1 nh hnh v:

el

ec

tro ni c

ct

u. ne t

Trong hp thoi hin ra, hy check vo Creat HEX File nh ch dn: chn th tp target nhp li tn s thch anh l 12Mhz.

m phng cc bn chon DebugStart/stop debug session hoc n Ctrl+F5, hoc nhn vo Icon ch D mu trong ci knh lp trn thanh cng c.

el

ec

tro ni c

ct

u. ne t

hin thi cc cng, cc thanh ghi cc bn chon trong peripherals.

el

ec

tro ni c

ct

u. ne t

Cc bn thy 1 ca s nh Parallel Port xut hin l ci m phng cho 1 cng ca AT89C51. du tick tng ng chn mc cao (5V), khng tick chn mc thp

el

ec

0V.trong menu peripherals cn c cc ngoi vi khc nh timer, interrupt, serial.

tro ni c

ct

u. ne t

chy chng trnh cc bn n chut phi vo mn hnh son tho, ri n F11.mi ln n s chy 1 lnh.khi debug nu cc bn ch hm delay lu qu 1000 ln lp cc bn nhn ctrl+F11 b qua hm.

el

ec

hoc n F10 chy tng dng lnh

tro ni c

ct

u. ne t

Bi 2: iu khin Led n, Led 7 thanh v nt nhn I. Hin th Led n

Bi ton:Ghp ni LED dn vi chn P1.0 ca vi iu khin, vit chng trnh iu khin LED nhp nhy vi thi gian tr l 1s.

+ Lu thut ton ca bi LED nhy:

ec el

tro ni c
START Khi to h thng Sng Led Tr 1S Tt Led Tr 1S

ct

u. ne t

+ Chng trnh iu khin: */==================Bo tien xu li===================*/ #include<AT89x51.h> // Dinh kem file thu vien #define bat 1 // Dinh nghia gia tri bat den Led #define tat 0 // Dinh nghia gia tri tat den Led /*==================khai bao bien==================*/ sbit Led = P1^0; // Khai bao bien Led kieu bit chan P1.0

/*================= Khai bao hm==================*/ /*------------------------------ham tre -------------------------------------*/ void delay(long time) { while(time--);

void main(void) { while(1) {

ec el
} }

II. Phi hp Led v nt nhn 1. Phi hp Led n v nt nhn

Bi ton: Mt n Led c ni vi chn P1.0 ca vi iu khin. Mt cng tc START ni vi chn P3.0 v cng tc STOP ni vi chn P3.1 ca vi iu khin. hy vit chng trnh iu khin khi bt cng tc START th Led sang, khi bt cng tc STOP th Led tt.

tro ni c
Led = bat; // bat Led delay(25000); // tre 1s Led = tat; // tat Led delay(25000); //tre 1s

} /*--------------------------------ham chinh--------------------------------*/

ct

u. ne t

ec

tro ni c
Start Led = tat
Start = 0 Led = bat Stop = 0 Led = tat

+ Lu thut gii ca bi ton:

el
+ Chng trnh iu khin: */==================Bo tien xu li===================*/ #include<AT89x51.h> // Dinh kem file thu vien

ct

u. ne t

#define bat 1 #define tat 0

// Dinh nghia gia tri bat den Led // Dinh nghia gia tri tat den Led

/*==================khai bao bien==================*/ sbit Led = P1^0; // Khai bao bien Led kieu bit chan P1.0 sbit STOP = P3^0; // cong tac STOP de tat Led sbit START = P3^1; // cong tac START de bat Led /*=================== ham chinh==================*/ void main(void) { Led = tat; //ban dau tat Led while(1){ Led = bat;

if((START==0)&&(STOP==1)) { } if((START==1)&&(STOP==0)){ Led = tat; }

el

ec

tro ni c
}

ct

u. ne t

2. Phi hp Led 7 thanh v nt nhn

Cc s hin th 0 1 2 3 4 5 6 7 8 9

P1.0 g 1 1 0 0 0 0 0 1 0 0

P1.1 f 0 1 1 1 0 0 0 1 0 0

P1.2 e 0 1 0 1 1 1 0 1 0 1

P1.3 d 0 1 0 0 1 0 0 1 0 0

P1.4 c 0 0 1 0 0 0 0 0 0 0

P1.5 b 0 0 0 0 0 1 1 0 0 0

P1.6 a 0 1 0 0 1 0 0 0 0 0 1 1 1 1 1 1 1 1 1 1 dp

s np hex mov P1,# 81 cf 92 86 cc a4 a0 8f 80 84

Bi ton: Mt Nt bm c ni vi chn P3.4, hy lp trnh iu khin m s ln n phm t 0 n 9 v hin th trn Led 7 thanh.

el

ec

tro ni c

ct

u. ne t

+ Lu thut gii:
START Dem=0;

ctac==0?

dem++;

dem<=10?

el

ec

+ Chng trnh iu khin: /*==================Bo tien xu li===================*/ #include<AT89x51.h> // Dinh kem file thu vien /*=================Khai bao bien toan cuc=============*/ sfr dataP = 0x90; // du lieu la P1 // ma 7 thanh tu 0 den 9 la // 0x81h,0xcfh,0x92h,0x86h,0xcch,0xa4,0xa0h,0x8fh,0x80h,0x84h. sbit ctac = P3^4; unsigned char dem=0; /*====================Khai bao ham==================*/ /*----------------------------ham delay========================*/ void delay(long time)

tro ni c
dem=0;

hin thi ra Led 7 thanh

ct

u. ne t

{ while(time--); } /*----------------------chuong trinh con kiem tra co phim nhan-------------*/ void phim_an(void) { if(ctac==0) //co phim nhan {

delay(500); //chong rung phim while(ctac==0); //Cho nha phim delay(500); // chong rung phim dem++; //tang bien dem if(dem==10) dem=0; } }

/*----------------hien thi so lan an phim------------------------------------------*/ void solan_an(void) { switch(dem) {

ec el
}; }

tro ni c

case 0: {dataP=0x81;break;} case 1: {dataP=0xcf;break;} case 2: {dataP=0x92;break;} case 3: {dataP=0x86;break;} case 4: {dataP=0xcc;break;} case 5: {dataP=0xa4;break;} case 6: {dataP=0xa0;break;} case 7: {dataP=0x8f;break;} case 8: {dataP=0x80;break;} case 9: {dataP=0x84;break;}

ct

u. ne t

/*-------------------------chuong trinh chinh-------------------------------------------*/ void main(void) { dataP = 0x81; // ban dau la so 0 while(1){ phim_an(); solan_an(); } }

el

ec

tro ni c

ct

u. ne t

Bi 3 Hin th LCD, Giao tip bn phm Hex, Hin th ma trn Led I. LCD

1. Ghp ni vi iu khin vi LCD 16x2. - Bng m t s chn ca LCD 16x2: Chn 1 2 3 4 5 6 7 8 9 10 11 12 13 14 K hiu Vss Vcc VEE RS R/W E DB0 DB1 DB2 DB3 DB4 DB5 DB6 DB7 I/O I I I/O I/O I/O I/O I/O I/O I/O I/O I/O M t Mass

ct

tro ni c

LCD trong bng ti chng ta khng s dng.

el

ec

Chn 15 v 16 l A v K. N c ni vi 2 chn ca 1 con Led dng sng

- S ghp ni LCD vi vi iu khin:

u. ne t
Cho php Nt Nt Nt Nt Nt Nt Nt Bit d liu

Dng ngun 5v

Cp ngun iu khin tng phn RS=0 chon thanh ghi lnh RS=1 chon thanh ghi d liu

R/W=1 c d liu, R/W=1 ghi

2. Nguyn l hot ng ca LCD. - Chn VCC, Vss, v VEE: cc chn VCC v VSS cp dng ngun 5v v mass tng ng. Chn VEE c dng iu khin tng phn. - Chn chn thanh ghi RS(Register Select): c 2 thanh ghi trong LCD chn RS c dng chn thanh ghi. nu RS=0 th thanh ghi m lnh c chn cho php ngi dng gi 1 lnh ln chng hn nh xo mn hnh, a con tr v u dng Nu RS=1

el

khi R/W=1 hoc ghi thng tin ln LCD. - Chn cho php E(Enable): chn cho php c s dng bi LCD cht d liu ca n. Khi d liu c cp n chn d liu th 1 xung mc cao xung thp phi c p n chn ny LCD cht d liu trn cc chn d liu. Xung ny c rng ti thiu 450ns. - Chn DB0-DB7: y l ng d liu 8 bt, c dng gi thng tin ln LCD hoc c ni dung cc thanh ghi trong LCD. hin th cc ch ci v cc con s, chng ta gi m ASCII ca cc ch ci t A n Z , a n z v cc ch s t 0 n 9 n cc chn ny khi bt RS=1. - Bng m lnh ca LCD:

ec

th thanh ghi d liu c chn cho php ngi dng gi d liu cn hin th ln LCD. - Chn c/ghi (R/W): u vo c/ghi cho php ngi dng c thng tin t LCD

tro ni c

ct

u. ne t

M (HEX) 01 02 04 06 05 07 08 0a 0c 0e 0f 10 14 18 1c 80 0c0 38

Lnh n thanh ghi ca LCD Xo mn hnh hin th Tr v u dng Gim con tr(dch con tr sang tri ) Tng con tr(dch con tr sang phi) Dch hin th sang phi

Bt hin th, nhp nhy con tr

el

ec

tro ni c

ct

Tt con tr, nhp nhy con tr Dch v tr con tr sang tri Dch v tr con tr sang phi

Dch ton b hin th sang tri

Dch ton b hin th sang phi p con tr v u dng th 2 Hai dng v ma tn 5x7.

p con tr v u dng th nht

u. ne t
Dch hin th sang tri Tt con tr, tt hin th Tt hin th, bt con tr Bt hin thi, tt con tr

3. Phn luyn tp: Hy vit chng trnh hin th trn LCD: Dng 1 ch VIETNAM bng cch hin th tng k t Dng 2 ch "VI DIEU KHIEN" bng cch hin th c ch. Vi s mch cho d y.

Chng trnh:

/*=========bo tien xu li===============*/ #include<AT89x51.h> #include<string.h>

/*===========khai bao bien toan cuc============*/

el
{

ec

sfr LCDdata = 0xA0; // cong P2, 8 bit du lieu. sbit BF = 0xA7; // co ban, bit DB7. sbit RS = P3^0; // chon thanh ghi sbit RW = P3^1; // doc/ghi sbit EN = P3^2; //cho phep chot du lieu /*===========cac chuong trinh con cua LCD==========*/ /*--------------kiem tra su san sang cua LCD------------------------*/ void wait(void) RS=0; //chon thanh ghi lenh RW=1; //oc tu LCD

tro ni c

ct

u. ne t

LCDdata=0xff; //gia tri 0xff while(BF) //kiem tra co ban { EN=0; //dua xung cao xuong thap e chot. EN=1; //dua chan cho phep len cao } } void LCDcontrol(unsigned char x) { RS=0;//chon thanh ghi lenh RW=0;//ghi len LCD. LCDdata=x ;// gia tri x /*------------------------thiet lap lenh cho LCD--------------------------*/

/*------------------------------Khoi tao LCD-------------------------*/ void LCDinit(void) {

el
}

ec

/*-------------------------thiet lap du lieu cho LCD-----------------*/ void LCDwrite(unsigned char c) { RS=1;//ghi du lieu RW=0;//ghi du lieu len LCD LCDdata=c;//gia tri C EN=1;//cho phep muc cao EN=0;//xung cao xuong thap

tro ni c
wait();//oi LCD san sang.

EN=1;//cho phep muc cao EN=0;//xung cao xuong thap

LCDcontrol(0x38);//2 dong va ma tran 5x7 LCDcontrol(0x0e);//bat man hinh, bat con tro LCDcontrol(0x01);//xoa man hinh

ct

u. ne t

wait();//cho } void LCDwrites(unsigned char *s) { unsigned char data lens,count; lens=strlen(s); for(count=0;count<lens;count++){ LCDwrite(*(s+count)); } } void delay(long time) { while(time--); }

/*=====================chuong trinh tre================*/

/*========================ham chinh==================*/ void main(void) {

el
}

ec

tro ni c
LCDinit(); // khoi tao LCD LCDwrite(V); LCDwrite(I); LCDwrite(E); LCDwrite(T); LCDwrite( ); LCDwrite(N); LCDwrite(A); LCDwrite(M); LCDcontrol(0xC0);

LCDcontrol(0x82);// dua con tro den vi tri thu 4 dong 1

LCDwrites("VI DIEU KHIEN"); while(1); //vong lap vo han

ct

u. ne t

II. Giao tip bn phm Hex (ma trn phm 4x4) 1. Thut ton c bn phm Begin

Cti = 0 (i=1-4) Sai

Hngi = 0 (i =1-4)

2. Chng trnh

el

ec

tro ni c

Hy vit chng trnh c ma trn phm v hin thi s th t phm trn LCD.

ct

ng Tr li kt qu phm nhn

u. ne t

Chng trnh: /*=========bo tien xu li===============*/ #include<AT89x51.h> #include<string.h> #define H1 P1_0 #define H2 P1_1 #define H3 P1_2

#define H4 P1_3 /*===========khai bao bien toan cuc============*/ sfr LCDdata = 0xA0; // cong P2, 8 bit du lieu. sbit BF = 0xA7; // co ban, bit DB7. sbit RS = P3^0; // chon thanh ghi

sbit RW = P3^1; // doc/ghi sbit EN = P3^2; //cho phep chot du lieu #include"LCD.h"// Thu vien LCD tu xay dung /*-------- ham doc phim nhan tu ma tran phim 4x4---------------*/ unsigned char Phim(void) { unsigned char phimnhan, dem, chot; phimnhan=0; chot=128; dem=4; while(dem--){ P1=~chot; if(!H1){

el

ec

tro ni c
}else if(!H2 ){

delay(500); phimnhan=dem+1; delay(500); delay(500); phimnhan=dem+5; delay(500);

ct

u. ne t

}else if(!H3 ){ delay(500); phimnhan=dem+9; delay(500); }else if(!H4 ){ delay(500); phimnhan=dem+13; delay(500); } chot>>=1;

} return phimnhan; } { if(phimnhan<10){ }else{

void viewphim(unsigned char phimnhan)

el

ec

void main(void) { unsigned char phimnhan=0; LCDinit(); LCDwrites("Hay Nhan Phim"); LCDcontrol(0xC0); while(1){ phimnhan=Phim(); if(phimnhan){ LCDcontrol(0x01); LCDwrites("Hay Nhan Phim"); LCDcontrol(0xC0);

tro ni c
}

LCDwrite(phimnhan+48); LCDwrite(phimnhan/10+48); LCDwrite(phimnhan%10+48);

ct

u. ne t

viewphim(phimnhan); } } } III. Hin th ma trn Led 2. Xy dng chng trnh Bi ton: Vit chng trnh hin th ma trn LED bng phng php qut ct hin th dong ch "LAP TRINH VI DIEU KHIEN BANG NGON NGU C", vi dong ch chy t tri sang phi.

el

+ Chng trnh: // Khai bao chi thi tien xu ly #include<AT89x51.h> // Dinh nghia cac cong va cac chan dieu khien #define CLOCK P3_2 #define DATA P3_3 #define CLEAR P3_4

ec

tro ni c

ct

u. ne t

1. Thut ton

#define Pxanh P1 #define Pdo P2 // Dinh nghia cac hang so #define Nhanh 10 #define Trungbinh 25 #define Cuccham 75 #define Sieucham 150 #define Mxanh 1 #define Mdo 2 #define Mcam 3 // Khai bao mang chu hien thi unsigned char code Mcode[256]={

0,63,72,136,72,63,/* A */

0,255,144,144,144,96,/* P */

0, 0,128,128,255,128,128,/* T */

el
0, 0,

ec

0,255,144,144,144,111,/* R */ 0,129,129,255,129,129,/* I */ 0,255,96,24,6,255,/* N */ 0,255,16,16,16,255,/* H */ 0,252,2,3,2,252,/* V */ 0,129,129,255,129,129,/* I */ 0,

0,255,129,129,129,126,/* D */ 0,129,129,255,129,129,/* I */ 0,255,145,145,145,129,/* E */ 0,254,1,1,1,254,/* U */

tro ni c

0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,255,1,1,1,1,/* L */

ct

u. ne t

#define Cham 50

0,255,24,36,66,129,/* K */ 0,255,16,16,16,255,/* H */ 0,129,129,255,129,129,/* I */ 0,255,145,145,145,129,/* E */ 0,255,96,24,6,255,/* N */ 0, 0,63,72,136,72,63,/* A */ 0,255,96,24,6,255,/* N */ 0,126,129,129,137,78,/* G */ 0, 0,255,96,24,6,255,/* N */ 0,126,129,129,137,78,/* G */ 0,255,96,24,6,255,/* N */ 0, 0,255,96,24,6,255,/* N */ 0,254,1,1,1,254,/* U */ 0, 0,126,129,129,129,126,/* O */

0,126,129,129,137,78,/* G */

el

// Khai bao bien toan cuc unsigned char data Start,End,Tocdolap,i,j,k; unsigned char data Mdata1[32],Mdata2[32],Mau; unsigned char data Dk1,Dk2,Dk3,Dk4,Dk5; // Khai bao nguyen mau cac ham void delay(unsigned long time); unsigned char Mu2(unsigned char somu);

ec
};

0,126,129,129,129,70,/* C */ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0

tro ni c

ct

u. ne t

0,255,145,145,145,110,/* B */

void Do(unsigned char chiso); void Xanh(unsigned char chiso); void Cam(unsigned char chiso); void Dobyte(unsigned char chiso); void Xanhbyte(unsigned char chiso); void Cambyte(unsigned char chiso); void Chaychudo(void); void Chaychuxanh(void); void Chaychucam(void); void Chaychu(void); void Taomangnhapnhay(void); void Nhapnhayxanh(void); void Nhapnhaycam(void); void Nhapnhaydo(void); void Taomanglen(void); void Lxanh(void); void Ldo(void); void Lcam(void); void Len(void);

/******************Ma nguon cac ham*************************/ // Ham tao tre

el
{ } {

ec
CLOCK=1; DATA=0;

void delay(unsigned long time) while(time--); // Khoi ham hien thi chu chay tu trai sang phai void Xanh(unsigned char chiso)

tro ni c

ct

u. ne t

CLOCK=0; Pxanh=Mcode[chiso]; delay(12); Pxanh=0; }

{ CLOCK=1; DATA=0; CLOCK=0; Pdo=Mcode[chiso]; delay(12); Pdo=0; }

void Cam(unsigned char chiso) { CLOCK=1; DATA=0;

el
} { {

ec
delay(12); Pdo=0; Pxanh=0;

CLOCK=0; Pxanh=Mcode[chiso]; Pdo=Pxanh;

void Chaychucam(void) for(i=Start+1;i<Dk1;i++) Tocdolap=Nhanh;

tro ni c

ct

u. ne t

void Do(unsigned char chiso)

while(Tocdolap--) { DATA=1; Dk2=i+32; for(j=i;j<Dk2;j++)Cam(j); } } void Chaychuxanh(void) { for(i=Start+1;i<Dk1;i++) { Tocdolap=Nhanh; while(Tocdolap--) { DATA=1;

el
{ }

ec
{ }

} void Chaychudo(void)

for(i=Start+1;i<Dk1;i++) Tocdolap=Nhanh; while(Tocdolap--) { DATA=1; Dk2=i+32; for(j=i;j<Dk2;j++)Do(j);

tro ni c
Dk2=i+32; }

for(j=i;j<Dk2;j++)Xanh(j);

ct

u. ne t

} void Chaychu(void) { Dk1=End-31; if(Mau==Mxanh)Chaychuxanh(); else Chaychucam(); } // Khoi ham hien thi chu nhap nhay tai cho void Cambyte(unsigned char chiso) { CLOCK=1; DATA=0; CLOCK=0;

Pxanh=Mdata2[chiso]; Pdo=Pxanh; delay(12);

el
{ }

ec
} void Dobyte(unsigned char chiso) CLOCK=1; DATA=0; CLOCK=0; Pdo=Mdata2[chiso]; delay(12); Pdo=0;

Pdo=0; Pxanh=0;

tro ni c

ct

u. ne t

else if(Mau==Mdo)Chaychudo();

void Xanhbyte(unsigned char chiso) { CLOCK=1; DATA=0; CLOCK=0; delay(12); Pxanh=0; } void Nhapnhaydo(void) { while(Tocdolap--){

} }

void Nhapnhayxanh(void) {

el
} { } }

ec
}

while(Tocdolap--){ DATA=1;

void Nhapnhaycam(void) while(Tocdolap--){ DATA=1; for(k=0;k<32;k++)Cambyte(k);

tro ni c

DATA=1; for(k=0;k<32;k++)Dobyte(k);

for(k=0;k<32;k++)Xanhbyte(k);

ct

u. ne t

Pxanh=Mdata2[chiso];

void Taomangnhapnhay(void) { for(i=0;i<32;i++) Mdata2[i]=0; Dk4=End-Start; Dk4=32-Dk5; for(i=Dk5;i<Dk4;i++) } void Nhapnhay(void) { unsigned char demnhay; demnhay=10; Taomangnhapnhay(); while(demnhay--) {

Mdata2[i]=Mcode[Start+i-Dk5];

el
} } {

ec

// Khoi ham hien thi chu di tu duoi len unsigned char Mu2(unsigned char somu) if(!somu) return 1; else return 2*Mu2(somu-1);

tro ni c
Tocdolap=Nhanh; else Nhapnhaycam(); CLEAR=0; delay(1250); CLEAR=1;

if(Mau==Mxanh)Nhapnhayxanh(); else if(Mau==Mdo)Nhapnhaydo();

ct

u. ne t

Dk5=(32-Dk4)/2;

} void Taomanglen(void) { for(i=0;i<32;i++) Mdata2[i]=0; Dk4=End-Start; Dk5=(32-Dk4)/2; Dk4=32-Dk5; for(i=Dk5;i<Dk4;i++) i=8; } void Lcam(void) {

Mdata1[i]=Mcode[Start+i-Dk5];

unsigned char data dem; Tocdolap=Trungbinh; while(Tocdolap--) {

ec
{

el
} }

tro ni c
DATA=1; for(dem=0;dem<32;dem++) CLOCK=1; DATA=0; CLOCK=0; Pxanh=Mdata2[dem]; Pdo=Pxanh; delay(12); Pxanh=0; Pdo=0;

ct

u. ne t

} void Ldo(void) { unsigned char data dem; Tocdolap=Trungbinh; while(Tocdolap--) DATA=1; for(dem=0;dem<32;dem++) { CLOCK=1; DATA=0; CLOCK=0; delay(12); Pdo=0; Pdo=Mdata2[dem];

} }

el
{

ec
{

void Lxanh(void) {

unsigned char data dem; Tocdolap=Trungbinh; while(Tocdolap--) DATA=1; for(dem=0;dem<32;dem++) CLOCK=1; DATA=0; CLOCK=0; Pxanh=Mdata2[dem];

tro ni c
}

ct

u. ne t

delay(12); Pxanh=0; } } }

{ Taomanglen(); while(i--) { for(j=Dk5;j<Dk4;j++) if(Mau==Mxanh)Lxanh(); else if(Mau==Mdo)Ldo(); else Lcam();

for(i=0;i<7;i++) {

el
} {

ec
} /*Ham chinh*/ void main(void) Pxanh=0; Pdo=0;

TMOD=0x01;

tro ni c
if(Mau==Mxanh)Lxanh(); else if(Mau==Mdo)Ldo(); else Lcam();

for(j=Dk5;j<Dk4;j++) Mdata2[j]= Mdata2[j]*2;

ct

Mdata2[j]= Mdata1[j]/Mu2(i);

u. ne t

void Len(void)

P3=16; while(1) { Start=0;End=194;Mau=3; Chaychu(); Start=0;End=17;Mau=1; Len(); Start=19;End=48;Mau=1; Len(); Start=50;End=61;Mau=1; Len(); Start=63;End=87;Mau=1;

el

ec

tro ni c
Len(); Start=120;End=143;Mau=1; Len(); Start=145;End=168;Mau=1; Len(); Start=170;End=187;Mau=1; Len(); Start=189;End=194;Mau=1; Len(); Start=0;End=17;Mau=2; Nhapnhay(); Start=19;End=48;Mau=2; Nhapnhay(); Start=50;End=61;Mau=2; Nhapnhay(); Start=63;End=87;Mau=2;

Len(); Start=89;End=118;Mau=1;

ct

u. ne t

Nhapnhay(); Start=89;End=118;Mau=2; Nhapnhay(); Start=120;End=143;Mau=2; Nhapnhay(); Start=145;End=168;Mau=2; Start=170;End=187;Mau=2; Nhapnhay(); Start=189;End=194;Mau=2; Nhapnhay(); } }

el

ec

tro ni c

ct

u. ne t

Nhapnhay();

Bi 5: Giao tip ADC - X l ngt I. Giao tip ADC

+Chng trnh:

#include<regx51.h> #include<string.h>

/*===========khai bao bien toan cuc============*/ sfr LCDdata = 0xA0; // cong P2, 8 bit du lieu.

el

/*-------- Ham tre ---------------*/ void delay(long time)

ec
#define RD P3_3 #define WR P3_4

sbit BF = 0xA7; // co ban, bit DB7. sbit RS = 0xb0; // chon thanh ghi sbit RW = 0xb1; // doc/ghi sbit EN = 0xb2; //cho phep chot du lieu #include"Lcd.h"// Thu vien LCD tu xay dung

#define INTR P3_5

tro ni c

ct

u. ne t

{ while(time--); } /*-------- ham doc phim nhan tu ma tran phim 4x4---------------*/ void view(unsigned char val) unsigned char var; if(val<10){ LCDwrite(val+48); }else if(val<100){ LCDwrite(val/10+48); LCDwrite(val%10+48); }else{ var=val/10; LCDwrite(var/10+48);

} }

el

ec
RD=0; LCDinit();

void main(void) {

unsigned char ADCval=0;

LCDcontrol(0x83); LCDwrites("ADC0804"); while(1){ WR=1; WR=0; while(!INTR); ADCval=P1; LCDcontrol(0x01);

tro ni c
LCDwrite(var%10+48); LCDwrite(val%10+48);

ct

u. ne t

LCDcontrol(0x83); LCDwrites("ADC0804"); LCDcontrol(0xC0); view(ADCval); delay(5000); } II. Lp trnh x l ngt

1. Ngt timer/counter. 1.1. c ch to tr ca timer v cch tnh ton gi tr np vo timer. a. ch 1: - ch 1 l b nh thi 16 bit, do cc gi tr trong khong t 0000 n FFFF c th s dng np cho TH v TL ca b nh thi. - Sau khi TH, TL c np gi tr ban u 16 bit th b nh thi phi c khi ng vi lnh TR0 = 1 vi timer0 v TR1 = 1 vi timer1, khi ny b nh thi bt u m tng theo xung clock t gi tr ban u cho ti gi tr nh l FFFF. Khi b nh thi s quay vong t FFFF v 0000 v bt c bo trn TF0 vi timer0 v TF1 vi timer1(ban du TFx=0) khi cn phi c thao tc xo c ln sau cn bit c khi no b m trn. - khi b m trn th TH v Tl ca b nh thi s mang gi tr 0 do phi c thao tc np li gi tr ban u cho chng v xo c TF b m c lp li. - Nh vy khong thi gian m b nh thi to tr chnh l khoangre thi gian n m tng t gi tr ban u c np cho ti gi tr nh FFFF. - tnh ton gi tr np vo thanh ghi cha ca b nh thi t thi gian mun to tr(t): gi N = 65536 t/chu ki my. Sau khi chuyn sang m HEX c 1 s c 4 ch s c dng: x1x2y1y2. khi gi tr np cho thanh ghi cha nh sau: TH = x1x2, TL = y1y2. V d: mun to tr 500us th: Gi s chu k my l 1us: c N = 65536 500/1 = 65036. chuyn sang m HEX l FE0C, t : TH = 0xFE, TL = 0x0C. - cc bc lp trnh cho b nh thi to tr ch 1: +B1: chn ch 1 cho b nh thi cn dung, t xc nh gi tr np cho thanh ghi TMOD. + B2: tnh ton gi tr ban u cn np cho TH v TL t thi gian tr mong mun. + B3: khi ng b nh thi. + B4: kim tra trng thi bt ca c TF. + B5:dung b nh thi. + B6: xo c TF cho vng lp k tip.

el

ec

tro ni c

ct

u. ne t

+ B7: quay tr v B2 np li gi tr cho TH v TL. b. Ch 2: - ch ny b nh thi l 8 bit, do vy ch cho php cc gi tr t 00 n FF c np vo thanh ghi TH ca b nh thi. sau khi np gi tr 8 bit th vi iu khin s sao ni dung ca TH sang TL v b nh thi c khi ng bng lnh TRx=1. - Sau khi c khi ng th b nh thi bt u m tng trong thanh ghi TL t gi tr ban u n gi tr nh FF. v khi quay vng t FF v 00 th c TFx c bt ln 1, khi ny thanh ghi TL mang gi tr 0 nhng TL s ngay lp tc c t ng np li vi gi tr ban u c lu trong thanh ghi TH. - nh vy trong ch ny mi khi b m trn th thanh ghi cha s c vi iu khin np li gi tr ban u, do ch ny c gi l ch t ng np li. - tnh gi tr np vo thanh ghi cha ca b nh thi t thi gian tr (t): Gi N = 256 t/chu k my. Sau khi chuyn sang m HEX c 1 s, ta np s ny vo thanh ghi TH v c TL(np vo TL gi tr m ln 1 v np vo TH cho nhng ln sau khi b m trn th phn cng ca vi iu khin s t ng sao TH sang TL). V d: to tr 50usth l: Gi s chu k my l 1us: c N = 256 50/1 = 205, chuyn sang m HEX : 0CE T : TH = 0xCE v TL = 0xCE. - cc bc lp trnh cho b nh thi to tr ch 2. + B1: np gi tr cho thanh ghi thit lp ch TMOD vi timer mun s dng. + B2: np vo TH gi tr m ban u. +B3: khi ng b nh thi. + B4: kim tra c bo trn TFx. + B5: xo c trn TFx, quay v B4. * lu : 2 ch khc ca b nh thi l ch 0(ch b nh thi 13 bit, b nh thi/b m 8 bit, nh t l trc 5 bit ) v ch 3(ch b nh thi chia tch) ay khng gii thiu. 1.2. Ngt ca b nh thi. - nguyn tc s dng b nh thi ch ngt: + khai bo ngt ca b nh thi mun s dng + ngun gy ngt. + chng trnh chnh v chng trnh phc v ngt. - vi ngt nh thi vic khai bo ngun ngt bao gm vic khai bo ngt ton cc l EA = 1 v khai bo ngt cho tng b nh thi mun dng ET0 = 1(timer0) v ET1 = 1(timer1) - Ngun bo ngt nh thi(vi c 2 ch ) u l khi b m trn(khi c TFx = 1), khi c TFx = 1 th vi iu khin kt thc cng vic hin ti chng trnh chnh v chuyn vo chng trnh phc v ngt cn c theo a ch ca chng trnh phc v ngt.khi thc hin xong chng trnh phc v ngt vi iu khin quay tr v chng trnh ti ni b gin on khi trc.

el

ec

tro ni c

ct

u. ne t

el

- Tm li ngt nh thi l vic ta s dng b nh thi to tr mt khong thi gian c tnh ton trc, sau khong thi gian ny 1 cng vic ta mong mun s c thc hin chng trnh phc v ngt. cng vic c th coi l c lp vi cng vic chng trnh chnh - cc cng vic lp trnh s dung ngt nh thi : + tnh ton thi gian tr mong mun v cng vic mun thc hin sau khong thi gian . + khai bo ngt nh thi trong chng trnh chnh (EA=1, ETX=1). + la chon b nh thi v ch ca n trong thanh ghi TMOD + khi ng b nh thi. + Xy dng chng trnh chnh v cc chng trnh con cn thit. + xy dng chng trnh phc v ngt thc hin 1 cng vic mong mun (xc nh r a ch ngt theo th t ngt trong bng vector ngt) - Ch : trong chng trnh phc v ngt cc bn phi xo c bo trn TFx v np li gi tr cho b nh thi vi ch 1 cn ch 2 th khng cn. 1.3. bi ton: Bi ton 1: s dng b nh thi vi ngt ca n to mt xung vung vi tn s 1kHZ i xng (50% mc 1 v 50% mc 0 ) trn chn P1.0. Bi gii: - ta c : f = 1kHZ T = 1/1000s = 1000us TON = TOFF = T/2 = 500us. Nh vy chu k xung l i xng nn hai phn ny b m m ging nhau(to tr khong thi gian bng nhau). na chu k u b m to tr 500us cho mc 0, sau khi b m m n gi tr nh ca thanh ghi cha l FFFF th c bo TFx = 1 gy ngt, vi iu khin phi chuyn vo chng trnh phc v ngt v s lt trng thi xung ra. Trong na chu k cn li cng nh vy v c nh th. - Do thi gian tr l 500us do ta chn ch 16 bit, s dng kt qu t v d trn np gi tr ban u cho TH v TL. - Chng trnh iu khin: /*================khai bao thu vien===============*/ #include<AT89x51.h>

ec

/*=============khai bao bien=====================*/ sbit xung = P1^0; /*==============khai bao ham ==================*/ /*--------------------------chuong trinh phuc vu ngat timer0 tao xung--------------------*/ void timer0_int(void) interrupt 1 { TF0=0; // xoa co bao tran timer0 xung = !xung; // tao muc 1 ra chan P1.0 TH0 = 0xfe; // (65536-500)hex =0fe0c (thach anh 12MHz) TL0 = 0x0c;

tro ni c

ct

u. ne t

el

+ Chng trnh: /*================khai bao thu vien===============*/ #include<regx51.h> #include<string.h> #define LCDdata P2 sbit RS=P3^0; sbit RW=P3^1; sbit EN=P3^2; sbit BF=LCDdata^7;

ec

tro ni c

ct

u. ne t

} /*=============chuong trinh chinh=============*/ void main(void) { EA = 1; // cho phep ngat toan cuc ET0 = 1; // cho phep ngat T0 TMOD = 0x01; // timer0 che do 1 xung = 0; //gia tri ban dau cua xung muon tao TH0 = 0xfe; // (65536-500)hex =0fe0c (thach anh 12MHz) TL0 = 0x0c; TR0 = 1; // khoi dong timer while(1) PCON|=1; //khong lam gi ca de doi ngat. } Bi ton 2: s dng b nh thi vi ngt ca to ng h s hin th ln LCD.

#include"lcd.h" /*=============khai bao bien=====================*/ unsigned char data Time[8]; unsigned char data i; /*==============khai bao ham ==================*/ void T10ms(void) interrupt 1 using 0 { TR0=0; TH0=0xD8; TL0=0xEF; TR0=1; if(Time[0]==9){ Time[0]=0; if(Time[1]==9){ Time[1]=0; if(Time[2]==9){ Time[2]=0; if(Time[3]==5){ Time[3]=0; if(Time[4]==9){ Time[4]=0; if(Time[5]==5){ Time[5]=0; if(Time[6]==9&&Time[7]<2){ Time[6]=0; Time[7]++; }else if(Time[6]==3&&Time[7]==2){ Time[6]=0; Time[7]=0; }else Time[6]++; }else Time[5]++; }else Time[4]++; }else Time[3]++; }else Time[2]++; }else Time[1]++; }else Time[0]++; LCDwrite(Time[7]+48);LCDwrite(Time[6]+48);LCDwrite(':'); LCDwrite(Time[5]+48);LCDwrite(Time[4]+48);LCDwrite(':'); LCDwrite(Time[3]+48);LCDwrite(Time[2]+48);LCDwrite(':'); LCDwrite(Time[1]+48);LCDwrite(Time[0]+48);

el

ec

tro ni c

ct

u. ne t

LCDcontrol(0xC0); } /*==============Chuong trinh chinh ==================*/ void main() { TMOD|=1; EA=1; ET0=1; TH0=0xD8; TL0=0xEF; for(i=0;i<8;i++)Time[i]=0; LCDinit(); LCDwrites("Dong ho so"); LCDcontrol(0xC0); TR0=1; while(1)PCON|=1; } 2. Lp trnh vi cc ngt ngoi ca vi iu khin. 2.1. Khi nim: - b vi iu khin 8051c hai ngt ngoi l INT0 v INT1 vi 2 chn tc ng u vo tng ng l P3.2 v P3.3. - Ngt ngoi l ngt ca vi iu khin m tc ng ngt y chnh l cc tc ng bn ngoi ca vi iu khin tc ng vo vi iu khin thong qua cc chn ngt i dng mt tn hiu in p dng xung. - tc ng ngt ngoi c hai dng l tc ng theo dng mc v dng sn. + kch hot theo mc: ch ny cc chn INT0 v INT1 bnh thng mc cao ging nh cc chn khc ca vi iu khin, khi c tn hiu mc thp cp ti th tn hiu ny kch hot ngt. lu l trc khi thc hin lnh cui cng ca chng trnh phc v ngt th mc thp ti cc chn ngt phi c chuyn ln mc cao, nu khng s li gy ra mt ngt ngay lp tc. + Kch hot theo sn: bnh thng cc chn ngt ca vi iu khin mc cao, khi c tn hiu tc ng vo chng c dng sn xung th s tc ng ngt. - s dng ch ngt ny th phi tc ng vo thanh ghi TCON c th l TCON.1=1 hoc IT0=1 th cho php ngt ngoi 0 kch hot sn, cn TCON.2=1 hoc IT1=1 th cho php ngt ngoi 1 kch hot sn. 2.2. cch lp trnh: - lp trnh cho ngt ca vi iu khin ta phi thc s hiu bn cht ca ngt v qu trnh thc hin ngt ca vi iu khin din ra. - mu vit hm ngt nh sau: Void name(void)interrupt x(x l s th t ngt ngoi x = 0 hoc 2)

el

ec

tro ni c

ct

u. ne t

{ //chng trnh phc v ngt } - Trong chng trnh chnh ta phi c thao tc thit lp vic cho php cc ngt c s dng. 2.3. bi ton: s dng ngt ngoi ca vi iu khin vi nhim v l: bnh thng vi iu khin bt mt Led n ti chn P1.0 v khi c ngt ngoi th tt Led P1.0 v bt Led chn P1.1 sau 1s th bt li Led P1.0 v tt Led P1.1.

el

Bi gii: /*==================Bo tien xu li===================*/ #include<AT89x51.h> // Dinh kem file thu vien #define bat 1 // Dinh nghia gia tri bat den Led #define tat 0 // Dinh nghia gia tri tat den Led /*==================khai bao bien==================*/ sbit Led1 = P1^0; // Khai bao bi?n Led ki?u bit chan P1.0 sbit Led2 = P1^1; // Khai bao bi?n Led ki?u bit chan P1.0 /*================= Khai bao hm==================*/ /*------------------------------ham tre -------------------------------------*/ void delay(long time)

ec

tro ni c

ct

u. ne t

{ while(time--); } void INT_0(void) interrupt 0 // chuong trinh phuc vu ngat { Led1=tat; Led2=bat; delay(25000); Led1=bat; Led2=tat; } /*--------------------------------ham chinh--------------------------------*/ void main(void) { EA=1; // cho phep ngat toan cuc EX0=1; // cho phep ngat ngoai 0 IT0=1; //ngat kich phat suon Led1=bat; Led2=tat; while(1); }

el

ec

tro ni c

ct

u. ne t

Bi 6: iu khin ng c DC, ng c Servo, ng c bc 1. ng c DC 2. ng c Servo 3. ng c bc (Step motor) iu khin ng c bc vi tc tng dn t 5 n 100 v/p, mi ln chuyn tc tng 5v/p thi gian chuyn 1s, hin th tc trn LCD.

+ Chng trnh:

#include<regx51.h>

el

ec
sbit RW=P3^1; sbit EN=P3^2; #include"lcd.h"

#include<string.h>

#define LCDdata P2 sbit RS=P3^0;

sbit BF=LCDdata^7;

unsigned char data Bytecao1,Bytethap1; unsigned char data Buoc,Nbuoc; unsigned char data Mbuoc[4]={144,192,96,48};

tro ni c

ct

u. ne t

void viewspeed(unsigned char speed); void Xuly(unsigned char Nspeed);

void Dkdongco(void) interrupt 1 using 0 TR0=0; TH0=Bytecao1; TL0=Bytethap1; TR0=1; P1=Mbuoc[Buoc]; Buoc++; if(Buoc==4)Buoc=0; }

void Xuly(unsigned char speed) {

unsigned int data Chuki1,Chuki2; unsigned int data tam1,tam2;

el
}

ec
TR0=1;

TR0=0; viewspeed(speed); Nbuoc=200;

tam2=10000/Nbuoc; tam1=6000/speed; Chuki1=tam1*tam2; Chuki2=65535-Chuki1; Bytecao1=Chuki2/256; Bytethap1=Chuki2%256;

void delay(unsigned long time)

tro ni c

ct

u. ne t

{ while(time--); } void viewspeed(unsigned char speed) { unsigned char data a1,a2; a1=speed%10; speed=speed/10; a2=speed%10; speed=speed/10; LCDwrite(speed+48); LCDwrite(a2+48); LCDwrite(a1+48); LCDwrites("(vong/phut)"); }

void main() {

unsigned char data i;

el

ec
LCDinit(); ET0=1; LCDcontrol(0x80); LCDwrites("CT DK DC buoc" ); LCDcontrol(0xc0); LCDwrites("V:5-100(v/p)"); delay(100000); while(1){ Buoc=2; for(i=5;i<101;i=i+5){ LCDcontrol(0x01);

TMOD=17; EA=1;

tro ni c

ct

u. ne t

LCDcontrol(0xc0);

LCDcontrol(0x80); LCDwrites("CT DK DC buoc" ); Xuly(i); delay(500000); } }

el

ec

tro ni c

ct

u. ne t

Bi 7: Giao tip Vi iu khin vi My tnh I. Cng truyn thng ni tip 1. Thanh ghi SCON SBUF II. Xy dng chng trnh 1. Chng trnh VB

+ Thut ton

+ Chng trnh: Option Explicit

Dim Mau As Byte Private Sub cbcolor_Click()

el

ec
Mau = 1 Mau = 3

If (cbcolor.Text = "Mau do") Then txtchu.ForeColor = &HFF& lbHienthi.ForeColor = &HFF&

ElseIf (cbcolor.Text = "Mau xanh") Then Mau = 2 txtchu.ForeColor = vbGreen lbHienthi.ForeColor = &HFF00& ElseIf (cbcolor.Text = "Mau cam") Then

tro ni c

ct

u. ne t

+ Giao din

txtchu.ForeColor = &H80FF& lbHienthi.ForeColor = &H80FF& End If End Sub Private Sub cbcolor_GotFocus() End Sub Private Sub cmdCode_Click() MsgBox Code(txtchu) End Sub Private Sub cmdExit_Click() If MSComm1.PortOpen Then MSComm1.PortOpen = False End If End End Sub

el
Next

End Function Private Sub OpenPort() Dim s As String MSComm1.Settings = "57600,N,8,1" MSComm1.CommPort = 1 MSComm1.PortOpen = True

ec

Function Code(s As String) As String Dim i As Integer s = Replace(s, " ", "") For i = 1 To Len(s)

Code = Code & " " & Asc(Mid(s, i, 1))

tro ni c

ct

u. ne t

SendKeys "%{DOWN}"

MSComm1.InputLen = 0 s = MSComm1.Input MsgBox "Port did open" End Sub Private Sub cmdOpenport_Click() If MSComm1.PortOpen Then End If OpenPort End Sub Private Sub cmdSend_Click() Dim s As String

If MSComm1.PortOpen = False Then MsgBox "Port did not open" OpenPort End If

If MSComm1.PortOpen Then txtchu.Text = UCase(txtchu.Text) s = Chr(Mau) & Chr(Len(txtchu.Text)) & txtchu.Text & Chr(255) Do While (MSComm1.OutBufferCount > 0) Loop

el
End Sub

MSComm1.Output = s End If

Private Sub cmdStop_Click() MSComm1.Output = Chr(250)

ec

tro ni c

ct

u. ne t

MSComm1.PortOpen = False

MsgBox "Port Stoped" End Sub Private Sub Form_Load() txtchu.ForeColor = vbRed Mau = 1 End Sub Private Sub Form_Resize() If (Me.WindowState = 1) Then Me.Height = 4000 Me.Width = 7230 End If End Sub

Private Sub txtchu_GotFocus() txtchu.SelStart = 0

2. Chng trnh vi iu khin

el

/************Khai bao tien xy ly***************/ #include<regx51.h> /*********Dinh nghia hang so mau**********/ #define Mdo 1 #define Mxanh 2 #define Mcam 3 /*****Khai bao mang ki tu gom chu so va chu cai****/

ec

txtchu.SelLength = Len(txtchu) End Sub

+ Thut ton + Chng trnh:

tro ni c

ct

u. ne t

txtchu.Text = "DO AN GHEP NOI"

unsigned char code Mchar[36][7]={ 48,0,126,129,129,129,126,/*0*/ 49,0,0,33,65,255,1,/*1*/ 50,0,99,135,137,145,97,/* 2 */ 51,0,66,129,145,145,110,/* 3 */ 52,0,24,40,72,255,8,/* 4 */ 54,0,118,137,137,137,70,/* 6 */ 55,0,128,135,136,144,224,/* 7 */ 56,0,110,145,145,145,110,/* 8 */ 57,0,102,145,145,145,110,/* 9 */ 65,0,63,72,136,72,63,/* A */ 66,0,255,145,145,145,110,/* B */ 67,0,126,129,129,129,70,/* C */

70,0,255,144,144,144,128,/* F */ 71,0,126,129,129,137,78,/* G */ 72,0,255,16,16,16,255,/* H */ 73,0,129,129,255,129,129,/* I */

el

ec

74,0,2,129,130,252,128,/* J */ 75,0,255,24,36,66,129,/* K */ 76,0,255,1,1,1,1,/* L */

77,0,255,64,32,64,255,/* M */ 78,0,255,96,24,6,255,/* N */ 79,0,126,129,129,129,126,/* O */ 80,0,255,144,144,144,96,/* P */ 81,0,126,129,133,130,125,/* Q */ 82,0,255,144,144,144,111,/* R */ 83,0,98,144,144,144,78,/* S */ 84,0,128,128,255,128,128,/* T */ 85,0,254,1,1,1,254,/* U */ 86,0,252,2,3,2,252,/* V */

tro ni c

68,0,255,129,129,129,126,/* D */ 69,0,255,145,145,145,129,/* E */

ct

u. ne t

53,0,226,145,145,145,142,/* 5 */

87,0,255,12,3,12,255,/* W */ 88,0,199,40,16,40,199,/* X */ 89,0,224,16,15,16,224,/* Y */ 90,0,131,133,153,161,193/* Z */ }; /*******Dinh nghia cac chan va cac cong dieu khien*****/ sfr Pdo=0xA0; sbit Clear=P3^4; sbit Data=P3^3; sbit Clock=P3^2;

unsigned char data Ktnhan,nhanmau,j,i,Maxc,Count,nLap;

/**********Khoi ham chuong trinh**********/ // Ham ngat noi tiep void Ngatnoitiep(void) interrupt 4 { if(RI){ using 0

el
}else{

ec

tro ni c
RI=0; tam=SBUF; if(tam==250){ Count=0; Clear=0; if(nhanmau){ Mau=tam; P1=P2=0;

unsigned char data Mau,Chay,tam,dem; unsigned char data MC[76],MQ[32];

Chay=1;i=j=77;dem=8;

Chay=1;i=j=77;dem=8; Count=nhanmau=0;

ct

/**************Khai bao bien toan cuc*************/

u. ne t

sfr Pxanh=0x90;

Clear=0; }else if(tam==255){ Clear=1; Chay=0; Ktnhan=nhanmau=1; }else{ Maxc=tam; Ktnhan=0;

}else if(Count<76&&Count<Maxc){ MC[Count]=tam; Count++; } } } } } {

void Khoitao(void)

PCON|=128;

el
} {

ec
SM0=0; SM1=1; Ktnhan=nhanmau=1; Chay=1; P0=P1=P2=0; P3_0=1; nLap=1; // Ham tao tre void delay(void)

EA=1; ES=1;

tro ni c

ct

u. ne t

if(Ktnhan){

unsigned char data i; i=10; while(i--); } // Ham hien thi mau cam void Cam(void) while(nLap--) { Data=1; for(j=0;j<32;j++){ Clock=1; Data=0; Clock=0;

el
{

ec
void Xanh(void) {

} // Ham hien thi mau xanh

while(nLap--) Data=1; for(j=0;j<32;j++){ Clock=1; Data=0; Clock=0; Pxanh=MQ[j]; delay();

tro ni c
Pxanh=Pdo=0; }

Pdo=Pxanh=MQ[j]; delay();

ct

u. ne t

Pxanh=0; } } } // Ham hien thi mau do { while(nLap--) { Data=1; for(j=0;j<32;j++){ Clock=1; Data=0; Clock=0; Pdo=MQ[j]; delay(); Pdo=0;

el
}

ec
void change(void) {

} // Ham thay doi mang hien thi

MQ[0]=MQ[1];MQ[1]=MQ[2];MQ[2]=MQ[3];MQ[3]=MQ[4]; MQ[4]=MQ[5];MQ[5]=MQ[6];MQ[6]=MQ[7];MQ[7]=MQ[8]; MQ[8]=MQ[9];MQ[9]=MQ[10];MQ[10]=MQ[11];MQ[11]=MQ[12]; MQ[12]=MQ[13];MQ[13]=MQ[14];MQ[14]=MQ[15];MQ[15]=MQ[16]; MQ[16]=MQ[17];MQ[17]=MQ[18];MQ[18]=MQ[19];MQ[19]=MQ[20]; MQ[20]=MQ[21];MQ[21]=MQ[22];MQ[22]=MQ[23];MQ[23]=MQ[24]; MQ[24]=MQ[25];MQ[25]=MQ[26];MQ[26]=MQ[27];MQ[27]=MQ[28]; MQ[28]=MQ[29];MQ[29]=MQ[30];MQ[30]=MQ[31];

tro ni c
}

ct

u. ne t

void Do(void)

// Ham tim vitri ki tu hien thi trong bang chu cai va chu so unsigned char Chiso(unsigned char chr) { unsigned char data End,Start,Mid,Mctam; if(chr==Mchar[0][0]){ return 0; return 35; }else{ End=35; Start=0; while(1){ Mid=(End+Start)/2; if(chr==Mctam){ return Mid; End=Mid;

Mctam=Mchar[Mid][0];

el
{ } {

ec
} } } void Chaychu(void) unsigned char vitri; for(j=0;j<32;j++){ MQ[j]=0; for(i=0;i<Count;i++)

tro ni c
}else if(chr<Mctam){ }else{ } Start=Mid;

ct

u. ne t

}else if(chr==Mchar[35][0]){

if(MC[i]==32){ change(); MQ[31]=0; if(Mau==Mxanh)Xanh(); else if(Mau==Mdo)Do(); else Cam(); MQ[31]=0; if(Mau==Mxanh)Xanh(); else if(Mau==Mdo)Do(); else Cam(); }else{ vitri=Chiso(MC[i]);

for(dem=1;dem<7;dem++){

el
} } }

ec
} if(!Chay){

// Chuong trinh chinh

tro ni c
else Cam(); } } for(i=0;i<32;i++){ change(); MQ[31]=0; else Cam();

change(); MQ[31]=Mchar[vitri][dem]; if(Mau==Mxanh)Xanh(); else if(Mau==Mdo)Do();

if(Mau==Mxanh)Xanh(); else if(Mau==Mdo)Do();

ct

u. ne t

change();

void main() { Khoitao(); REN=1; while(1){ while(Chay); } }

el

ec

tro ni c

ct

u. ne t

Chaychu();

You might also like