Professional Documents
Culture Documents
. 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
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
4 4
0 4294697295
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
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];
tro ni c
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
- 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
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
el
ec
tro ni c
ct
u. ne t
ngha So snh ln hn
>=
<
So snh nh hn
tro ni c
<=
ct
u. ne t
==
!=
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
* 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
ct
Khai bo ch th tin x l Khai bo nguyn mu hm
u. ne t
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; }
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 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
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
Ch th #ifdef ny thng dng bin dch cc tp th vin. Cch 1: #ifdef ten_macro on chng trnh
ec el
- C php:
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
{ }
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
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
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
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);
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:
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
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
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
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
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
tro ni c
ct
u. ne t
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.
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--);
ec el
} }
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
el
+ Chng trnh iu khin: */==================Bo tien xu li===================*/ #include<AT89x51.h> // Dinh kem file thu vien
ct
u. ne t
// 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;
el
ec
tro ni c
}
ct
u. ne t
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
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;
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; } }
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
el
ec
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
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
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 phi p con tr v u dng th 2 Hai dng v ma tn 5x7.
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:
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--------------------------*/
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.
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--); }
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);
ct
u. ne t
II. Giao tip bn phm Hex (ma trn phm 4x4) 1. Thut ton c bn phm Begin
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 ){
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;
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
}
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
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);
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
el
} { {
ec
delay(12); Pdo=0; Pxanh=0;
tro ni c
ct
u. ne t
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)
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;
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;
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;
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];
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; } } }
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();
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();
+Chng trnh:
#include<regx51.h> #include<string.h>
/*===========khai bao bien toan cuc============*/ sfr LCDdata = 0xA0; // cong P2, 8 bit du lieu.
el
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
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) {
tro ni c
LCDwrite(var%10+48); LCDwrite(val%10+48);
ct
u. ne t
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>
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 Dkdongco(void) interrupt 1 using 0 TR0=0; TH0=Bytecao1; TL0=Bytethap1; TR0=1; P1=Mbuoc[Buoc]; Buoc++; if(Buoc==4)Buoc=0; }
el
}
ec
TR0=1;
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() {
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);
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
el
ec
Mau = 1 Mau = 3
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)
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
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
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
tro ni c
ct
u. ne t
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 */
el
ec
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;
/**********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;
Chay=1;i=j=77;dem=8;
Chay=1;i=j=77;dem=8; Count=nhanmau=0;
ct
u. ne t
sfr Pxanh=0x90;
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) {
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) {
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){
tro ni c
else Cam(); } } for(i=0;i<32;i++){ change(); MQ[31]=0; else Cam();
ct
u. ne t
change();
el
ec
tro ni c
ct
u. ne t
Chaychu();