I. Ngn ngu C cho vi diu khin 1, Gioi thiu ngn ngu C Trong k thut lp trinh vi diu khin noi chung, ngn ngu lp trinh duoc su dung thuong chia lam 2 loai: Ngn ngu bc thp va Ngn ngu bc cao. Ngn ngu bc cao la cac ngn ngu gn voi ngn ngu con nguoi hon, do do vic lp trinh bng cac ngn ngu nay tro nn d dang va don gian hon. Co th k dn mt s ngn ngu lp trinh bc cao nhu C, Basic, Pascal. trong do C la ngn ngu thng dung hon ca trong k thut vi diu khin. V ban cht, su dung cac ngn ngu nay thay cho ngn ngu bc thp la giam tai cho lp trinh vin trong vic nghin cuu cac tp lnh va xy dung cac cu truc giai thut. Chuong trinh vit bng ngn ngu bc cao cung s duoc mt phn mm trn may tinh goi la trinh bin dich (Compiler) chuyn sang dang hop ngu truoc khi chuyn sang m may. Khi su dung ngn ngu C nguoi lp trinh khng cn hiu su sc v cu truc cua b vi diu khin. Co nghia la voi mt nguoi chua quen voi mt vi diu khin cho truoc s xy dung duoc chuong trinh mt cach nhanh chong hon, do khng phai mt thoi gian tim hiu kin truc cua vi diu khin do. Va vic su dung lai cac chuong trinh d xy dung truoc do cung d dang hon, co th su dung toan b hoc sua chua mt phn.
2. Ngn ngu C
2.1 Kiu du liu
2.1.1 Kiu du liu trong C
Kiu S Byte Khoang gia tri Char 1 -128 +127 Unsigned char 1 0 255 Int 2 -32768 - +32767 Unsigned int 2 0 - 65535 Long 4 -2147483648 - +2147483647 Unsigned long 4 0 4294697295 Float 4
* Khai bao bin: - Cu phap: Kiuduliu Vungnho Tnbin at Diachi; Vi du: Unsigned char data x; - Khi khai bao bin co th gan lun cho bin gia tri ban du. Vi du: Thay vi: unsigned char x; x = 0; Ta chi cn: unsigned char x 0; - Co th khai bao nhiu bin cung mt kiu mt luc. Vi du: unsigned int x,y,z,t; - Chi dinh vung nho: tu khoa 'Vungnho cho phep nguoi dung co th chi ra vung nho su dung d luu tru cac bin su dung trong chuong trinh. Cac vung nho co th su dung la: CODE, DATA, DATAB, IDATA, PDATA, XDTA. Khi khng khai bao vung nho trinh dich Keil C s mc dinh do la vung nho DATA.
Vung nho Y nghia CODE B nho m ngun chuong trinh DATA B nho du liu gm 128 Byte thp cua RAM trong vi diu khin BDATA B nho du liu co th dinh dia chi bit, nm trong vung nho DATA IDATA B nho du liu gm 128 Byte cao cua RAM trong vi diu khin chi co o mt s dong vi diu khin sau nay PDATA B nho du liu ngoai gm 256 Byte, duoc truy cp boi dia chi dt trn P0 XDATA B nho du liu ngoai co dung luong co th ln dn 64 KB, duoc truy cp boi dia chi dt trn P0 va P2
* Dinh nghia lai kiu - Cu phap: typedeI Kiuduliu Tnbin; - Tenbin sau nay s duoc su dung nhu mt kiu du liu moi va co th dung d khai bao cac bin khac Vi du: typedeI int m5|5|; Dung tn m5 khai bao hai bin tn a va b co kiu du liu la mang 1 chiu 5 phn tu: m5 a,b; 2.1.2 Kiu du liu trong Keil C
Kiu S bit Bit 1 Sbit 1 Sfr 8 Sfr16 16 - bit : dung d khai bao cac bin co gia tri 0 hoc mt hay cac bin logic trn vung RAM cua vi diu khin. Khi khai bao bin kiu bit trinh dic Keil C s mc dinh vung nho su dung la BDATA. ` - sbit, sIr, sIr16: dung d dinh nghia cac cho cac thanh ghi chuc nng hoc cac cng trn vi diu khin dung d truy nhp cac doan du liu 1 bit, 8 bit, 16 bit 2.1.3 Mang Mang la mt tp hop nhiu phn tu cung mt kiu gia tri va chung mt tn. Cac phn tu cua mang phn bit voi nhau boi chi s hay s thu tu cua phn tu trong dy phn tu. Mi phn tu co vai tro nhu mt bin va luu tru duoc mt gia tri dc lp voi cac phn tu khac cua mang. Mang co th la mang mt chiu hoc mang nhiu chiu Khai bao: - Cu phap: Tnkiu Vungnho Tnmang|sphntumang|; Khi bo trng s phn tu mang ta s co mang co s phn tu bt ki. Vi du: Unsigned int data a[5],b[2] [3]; Voi khai bao trn ta s co: mang a la mang mt chiu 5 phn tu. Mang b la mang hai chiu, tng s phn tu la 6. Chi s cua mang bt du tu s 0. Mang co bao nhiu chiu phai cung cp dy du by nhiu chi s Vi du: phn tu mang b|0| |1| la dung Khi vit b|0| la sai 2.1.4. Con tro Khi ta khai bao mt bin, bin do s duoc cp phat mt khoang nho bao gm mt s byte nht dinh dung d luu tru gia tri. Dia chi du tin cua khoang nho do chinh la dia chi cua bin duoc khai bao. Con tro la mt bin dung d chua dia chi ma khng chua gia tri, hay gia tri cua con tro chinh la dia chi khoang nho ma no tro toi. Voi cac vung nho cu th con tro toi vung nho do chim dung luong phu thuc vao d lon cua vung nho do. Con tro tng quat khi khng xac dinh truoc vung nho s co dung luong lon nht vi vy tt nht nn su dung con tro cu th. Loai con tro Kich thuoc Con tro tng quat 3 byte Con tro XDATA 2 byte Con tro CODE 2 byte Con tro DATA 1 byte Con tro IDATA 1 byte Con tro PDATA 1 byte
Khai bao bin con tro: - Cu phap: KiuDuliu Vungnho *Tnbin; - Vi du: int *int_ptr; long data *long_ptr; - khi khng chi r vung nho con tro s duoc coi la con tro tng quat. 2.1.5 Kiu du liu cu truc Kiu du liu cu truc la mt tp hop cac bin, cac mang va ca cac kiu cu truc khac duoc biu thi boi mt tn duy nht. kiu du liu cu truc dung d luu tru cac gia tri, thng tin co lin quan dn nhau. Dinh nghia va khai bao bin cu truc: - Dinh nghia: typedeI struct Khai bao cac bin thanh phn; } Tnkiucutruc; - Khai bao: Tnkiucutruc Vungnho Tnbin; Vi du: typedeI struct char day; char month; int year; } Date_type; Date_type date,date_arr[5]; 2.2 Phep toan Phep gan ki hiu: '. - Cu phap: Bin1 Bin2; Trong do Bin2 co th la gia tri xac dinh cung co th la bin. 2.2.1 Phep toan s hoc Phep toan y nghia Vi du + Phep cng X=a+b - Phep tru X=a-b * Phep nhn X=a*b / Phep chia ly phn nguyn X=a/b (a9, b2 X4) % Phep chia ly phn du a%b (a=9, b=2 X1)
2.2.2 Phep toan Logic
AND: && OR: || NOT: !
2.2.3 Cac phep toan so sanh:
2.2.4 Phep toan thao tac Bit Phep toan Y nghia Vi du & Phep va (AND) Bit_1 & Bit_2 | Phep hoc (OR) Bit_1 | Bit_2 ! Phep dao (NOT) !Bit_1 ^ Phep hoc loai tru (XOR) Bit_1 ^ Bit_2 << Dich trai a<<3 >> Dich phai a>>4 ~ Ly bu theo bit ~a Phep toan y nghia Vi du > So sanh lon hon a>b 4~5 cac gia tri 0 >= So sanh lon hon hoc bng a>=b 6~2 cac gia tri 1 < So sanh nho hon a<b 67 cac gia tri 1 <= So sanh nho hon hoc bng a<=b 85 cac gia tri 0 == So sanh bng nhau
a==b 66 cac gia tri 1 != So sanh khac nhau a!=b 9!9 cac gia tri 0
2.2.5 Phep toan kt hop Phep toan Vi du += a+=5 <=> a=a+5 -= a-=5 <=> a=a-5 *= a*=5 <=> a=a*5 /= a/=5 <=> a=a/5 %= a%=5 <=> a=a%5
2.3 Cu truc chuong trinh C 2.3.1 Cu truc chuong trinh * Cu truc 1. Khai bao chi thi tin xu ly 2. Khai bao cac bin toan cuc 3. Khai bao nguyn mu cac ham 4. Xy dung cac ham va chuong trinh chinh * Vi du: #include<regx51.h> #include<string.h> #define Led1 P1_0
Unsigned char code Led_arr[3]; Unsigned char data dem; Unsigned int xdata X;
Void delay(unsigned int n); bit kiemtra(unsigned int a);
void delay(unsigned int n) { Khai bao bin cuc b; M chuong trinh tr; } Khai bao chi thi tin xu ly Khai bao bin toan cuc Khai bao nguyn mu ham Void main() { Khai bao bin cu b; M chuong trinh chinh; } Bit kiemtra(unsigned int a) { Khai bao bin cuc b; M chuong trinh kim tra bin a; } Chu y: Ham khng khai bao nguyn mu phai duoc xy dung truoc ham co loi goi ham do. O vi du trn do ham 'bit kiemtra(unsigned int a) d duoc khai bao nguyn mu ham o trn nn co th xy dung ham o bt ki vi tri nao trong chuong trinh.
2.3.2 Chi thi tin xu ly Cac chi thi tin su ly khng phai la cac lnh cua ngn ngu C ma la cac lnh giup cho vic soan thao chuong trinh ngun C truoc khi bin dich. Khi dich mt chuong trinh C thi khng phai chinh ban chuong trinh ngun ma ta soan thao duoc dich. Truoc khi dich, cac lnh tin xu ly s chinh ly ban gc, sau do ban chinh ly nay s duoc dich. Co ba cach chinh ly duoc dung la: Phep thay th #deIine Phep chen tp #include Phep lua chon bin dich #iIdeI Cac chi thi tin xu ly giup ta vit chuong trinh ngn gon hon va t chuc bin dich, g ri chuong trinh linh hoat, hiu qua hon. * Chi thi #deIine Chi thi #deIine cho phep tao cac macro thay th don gian - Cu phap: #deIine Tnthayth dykitu Mt Tnthayth co th duoc dinh nghia lai nhiu ln, nhung truoc khi dinh nghia lai phai giai phong dinh nghia bng chi thi: #undeI Tnthayth - Vi du: #define N 100 * Chi thi #include Xy dung cac ham va chuong trinh chinh Chi thi #include bao cho trinh bin dich nhn ni dung cua tp khac va chen vao tp chuong trinh ngun ma ta soan thao. - Cu phap: Cach 1: #includetntp~ Cach 2: #include'tntp - Vi du: Cach 1: #includeregx51.h> O cach nay tp regx51.h s duoc tim trong thu muc INC d chen vao chuong trinh ngun. Cach 2: #include'regx51.h O cach nay tp regx51.h s duoc tim trong thu muc chua chuong trinh ngun nu khng co moi tim trong thu muc INC Khi mun chen tp ngoai thu vin hoc ngoai thu muc chua chuong trinh ngun thi tntp s bao gm ca duong dn thu muc chua tp.
* Chi thi #iIdeI Chi thi #iIdeI nay thuong dung d bin dich cac tp thu vin. - Cu phap: Cach 1: #iIdeI tenmacro Doan chuong trinh #endif Cach 2: #iIdeI tenmacro Doan chuong trinh 1 #else Doan chuong trinh 2 #endif O cach 1 nu tnmacro d duoc dinh nghia 'Doan chuong trinh s duoc dich nguoc lai 'Doan chuong trinh s bi bo qua.
* Chi thi #iIndeI Chi thi #iIndeI nay thuong dung d bin dich cac tp thu vin. - Cu phap: Cach 1: #iIndeI tenmacro Doan chuong trinh #endif Cach 2: #iIndeI tenmacro Doan chuong trinh 1 #else Doan chuong trinh 2 #endif O cach 1 nu tnmacro chua duoc dinh nghia 'Doan chuong trinh s duoc dich nguoc lai 'Doan chuong trinh s bi bo qua.
2.3.3 Chu thich trong chuong trinh Vic vit chu thich trong trinh nhm muc dich giai thich y nghia cua cu lnh, doan chuong trinh hoc ham hoat dng nhu th nao va lam gi. Vit chu thich s giup cho nguoi doc co th hiu duoc chuong trinh d dang va nhanh chong hon, sua li don gian hon hoc giup cho ta xem lai chuong trinh cu ma ta d lam tro ln nhanh hon. Chu thich trong chuong trinh s khng anh huong dn chuong trinh ma ta soan thao vi trinh dich s bo qua tt ca loi chu thich khi bin dich chuong trinh sang m may. Loi giai thich duoc dt sau du '// nu chu thich chi vit trn mt dong hoc trong cp du '\* va '*\. 3 Cac lnh co ban trong C Cu lnh r nhanh iI: - Cu truc: iI(dieu_kien) { // Doan chuong trinh }
Giai thich: nu dieukien dung thi xu li cac cu lnh bn trong con sai thi nhay qua. - Cu truc: iI(dieukien) { // Doan chuong trinh 1 } else { // Doan chuong trinh 2 } Giai thich: nu dieukien dung thi xu li 'Doan chuong trinh 1 bn trong con sai thi x u l y 'Doan chuong trinh 1
Cu lnh lua chon: Cu truc: switch(bien) { case giatri1: //cac cu lnh break;} case giatri2: //cac cu lnh break;} case giatri3: //cac cu lnh break;} ................. case giatrin: //cac cu lnh break;} } Giai thich: tuy vao bin co giatri1 thi thuc hin cac cu lnh tuong ung ri sau do thoat khoi cu truc nho cu lnh break. Bin co giatri2 thi thuc hin cu lnh tuong ung ri thoat. ......... Bin co giatrin thi thuc hin cac cu lnh tuong ung ri thoat. Vong lp xac dinh: Cu truc: Ior(nm;nl;n) { // cac cu lnh xu li } Giai thich: m,l la gia tri(m~l), con n la bin. thuc hin lp cac cu lnh (l-m) ln. Vong lp khng xac dinh while: Cu truc: while(dieukien) { // cac cu lnh } Gia thich: thuc hin lp cac cu lnh khi diu kin dung nu diu kin sai thi thoat khoi vong lp. Vong lp khng xac dinh do while: Cu truc: do { // cac cu lnh } while(dieu_kien); Gia thich: thuc hin lp cac cu lnh sau do kim tra diu kin nu dung, nu sai thi thoat khoi vong lp.
II. Trinh bin dich Keil C (compiler) hi o cho ojec
D tao 1 project moi chon project New project nhu sau:
Hp thoai create new project hin ra nhu sau:
Danh tn va chuyn dn thu muc ban luu project.ban nn tao mi mt thu muc cho 1 project. ri chon save. Hp thoai sau hin ra:
Trong nay co 1 loat cac hng din tu san xut 8051. ban lp trinh cho con nao thi chon con dy, kich chut vao du d mo rng cac con IC cua cac hang. o dy ta lp trinh cho AT89C51 cua hang ATMEN nn ta chon nhu trn. Khi chon chip thi ngay lp tuc 1 bang hin ra 1 s tinh nng cua chip cac ban co th nhin thy: 8051 based Iully static 24Mhz .. nhp OK, cho cu tra loi NO khi duoc hoi 'copy standard 8051 startup code to project and addfile to project vi nu chon YES chi lam cho Iile lp trinh cua ban thm nng.
D tao mt Iile code cac ban cho filenew hoc n ctrlN. nhu sau:
Cua s text1 hin ra. Tip theo ban chon File save As hoc CtrlS, d luu File mc du chua co gi nhu sau:
Duoc cua s sau:
Cac ban nhp tn vao text box Iile name.chu y tn gi cung duoc nhung khng duoc thiu dui mo rng .C, va nhn SAVE. Trong bn trai man hinh, cua s PROJECT WORKSPACE, cac ban mo rng cai target 1 ra nhu sau:
Nhp chut phai nn SOURCE GROUP, chon Add Iile to Group 'Source Group 1 hp thoai hin ra chon Iile .C ma cac ban vua SAVE ri nhn Add 1ln ri nhn Close. nu ban nhn Add 2 ln no s thong bao la Iile d add ban chi vic OK ri nhn Close. Duoc nhu sau:
By gio trong hinh nhin thy trong Source Group 1 co Iile VIDU.C. cac ban nhp chut phai vao vung soan thao Iile VIDU.C d thm Iile thu vin. Chon Insert '#includeREGX51.H~.
Phn cui cung cua cng vic khoi tao la cac ban vit loi giai thich cho du an cua minh. phn nay rt cn thit vi no d nguoi khac hiu minh lam gi trong project nay va khi minh cn su dung lai code doc lai con bit no la cai gi.
on ho chng nh Cac ban vit thu 1 chuong trinh lam vi du. khi vit xong mi dong lnh nn giai thich dong lnh do lam gi. Vi du:
in dch m chng nh Sau khi soan thao xong nhn CtrlS d nho. Nho xong cac ban bin dich chuong trinh bng cach n phim F7 hoc chon Build target la biu tuong ngay trn cua s Workspace, nhu trn hinh:
D bin dich chuong trinh thanh Iile HEX cac ban chon: ojecopion fo age nhu hinh v:
Trong hp thoai hin ra, hy check vao Creat HEX File nhu chi dn: chon the tap target nhp lai tn s thach anh la 12Mhz.
D m phong cac ban chon Debuga/sop debug session hoc n CtrlF5, hoc nhn vao Icon chu D mau do trong cai kinh lup trn thanh cng cu.
D hin thi cac cng, cac thanh ghi cac ban chon trong peripherals.
Cac ban thy 1 cua s nho Parallel Port xut hin do la cai d m phong cho 1 cng cua AT89C51. du tick tuong duong chn o muc cao (5V), khng tick chn o muc thp 0V.trong menu peripherals con co cac ngoai vi khac nhu timer, interrupt, serial.
D chay chuong trinh cac ban n chut phai vao man hinh soan thao, ri n F11.mi lan n s chay 1 lnh.khi debug nu cac ban cho ham delay lu qua 1000 ln lp cac ban nhn ctrlF11 d bo qua ham. hoc n F10 d chay tung dong lnh Bai 2: Diu khin Led don, Led 7 thanh va nut nhn
I. Hin thi Led don i on:Ghep noi LED don voi chan P1.0 cua vi diu khin, vit chuong trinh diu khin LED nhap nhav voi thoi gian tr la 1s.
+ Luu d thut toan cua bai LED nhay:
START Khoi tao h thng Sang Led Tr 1S Tt Led Tr 1S Chuong trinh diu 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 ham*/ /*------------------------------ham tre -------------------------------------*/ void delay(long time) { while(time--); } /*--------------------------------ham chinh--------------------------------*/ void main(void) { while(1) { Led = bat; // bat Led delay(25000); // tre 1s Led = tat; // tat Led delay(25000); //tre 1s } }
II. Phi hop Led va nut nhn 1. Phi hop Led don va nut nhn i on: Mot den Led duoc noi voi chan P1.0 cua vi diu khin. Mot cong tc START noi voi chan P3.0 va cong tc STOP noi voi chan P3.1 cua vi diu khin. hv vit chuong trinh diu khin d khi bat cong tc START thi Led sang, khi bat cong tc STOP thi Led tt.
Luu d thut giai cua bai toan:
Chuong trinh diu khin: */==================Bo tien xu li===================*/ #include<AT89x51.h> // Dinh kem file thu vien Start Led = tat Start = 0 Stop = 0 Led = tat Led = bat #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 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){ if((START==0)&&(STOP==1)) { Led = bat; } if((START==1)&&(STOP==0)){ Led = tat; } } }
2. Phi hop Led 7 thanh va nut nhn Cac s hin thi P1.0 g P1.1 f P1.2 e P1.3 d P1.4 c P1.5 b P1.6 a
i on Mot Nut bam duoc noi voi chan P3.4, hv lap trinh diu khin dm so lan an phim tu 0 dn 9 va hin thi trn Led 7 thanh.
Luu d thut giai:
Chuong trinh diu 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) START Dem=0; ctac==0? dem++; dem<=10? dem=0; hin thi ra Led 7 thanh { 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) { 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;} }; } /*-------------------------chuong trinh chinh-------------------------------------------*/ void main(void) { dataP = 0x81; // ban dau la so 0 while(1){ phim_an(); solan_an(); } } Bai 3 Hin thi LCD, Giao tip ban phim Hex, Hin thi ma trn Led I. LCD hp ni vi iu khin vi D x - Bang m ta so d chn cua LCD 16x2: Chn Ky hiu I/O M ta 1 V ss - Mass 2 V cc - Duong ngun 5v 3 V EE - Cp ngun diu khin tuong phan 4 RS I RS0 chon thanh ghi lnh RS1 chon thanh ghi du liu 5 R/W I R/W1 doc du liu, R/W1 ghi 6 E I/O Cho phep 7 DB0 I/O Bit du liu 8 DB1 I/O Nt 9 DB2 I/O Nt 10 DB3 I/O Nt 11 DB4 I/O Nt 12 DB5 I/O Nt 13 DB6 I/O Nt 14 DB7 I/O Nt Chn 15 va 16 la A va K. No duoc ni voi 2 chn cua 1 con Led dung d sang LCD trong bong ti chung ta khng su dung. - So d ghep ni LCD voi vi diu khin:
guyn l ho ng ca CD. - Chn V CC , V ss , va V EE : cac chn V CC va V SS cap duong ngun 5v va mass tuong ung. Chn V EE duoc dung d diu khin d tuong phan. - Chn chon thanh ghi RS(Register Select): co 2 thanh ghi trong LCD chn RS duoc dung d chon thanh ghi. nu RS0 thi thanh ghi m lnh duoc chon d cho phep nguoi dung gui 1 lnh ln chng han nhu xoa man hinh, dua con tro v du dong. Nu RS1 thi thanh ghi du liu duoc chon cho phep nguoi dung gui du liu cn hin thi ln LCD. - Chn doc/ghi (R/W): du vao doc/ghi cho phep nguoi dung doc thng tin tu LCD khi R/W1 hoc ghi thng tin ln LCD. - Chn cho phep E(Enable): chn cho phep duoc su dung boi LCD d cht du liu cua no. Khi du liu duoc cp dn chn du liu thi 1 xung muc cao xung thp phai duoc ap dn chn nay d LCD cht du liu trn cac chn du liu. Xung nay co d rng ti thiu 450ns. - Chn DB0-DB7: dy la duong du liu 8 bit, duoc dung d gui thng tin ln LCD hoc doc ni dung cac thanh ghi trong LCD. D hin thi cac chu cai va cac con s, chung ta gui m ASCII cua cac chu cai tu A dn Z , a dn z va cac chu s tu 0 dn 9 dn cac chn nay khi bt RS1. - Bang m lnh cua LCD: M (HEX) Lnh dn thanh ghi cua LCD 01 Xoa man hinh hin thi 02 Tro v du dong 04 Giam con tro(dich con tro sang trai ) 06 Tng con tro(dich con tro sang phai) 05 Dich hin thi sang phai 07 Dich hin thi sang trai 08 Tt con tro, tt hin thi 0a Tt hin thi, bt con tro 0c Bt hin thi, tt con tro 0e Bt hin thi, nhp nhay con tro 0f Tt con tro, nhp nhay con tro 10 Dich vi tri con tro sang trai 14 Dich vi tri con tro sang phai 18 Dich toan b hin thi sang trai 1c Dich toan b hin thi sang phai 80 Ep con tro v du dong thu nht 0c0 Ep con tro v du dong thu 2 38 Hai dong va ma tn 5x7.
hn luyn p Hv vit chuong trinh hin thi trn LCD. Dong 1 ch 'JIETNAM` bng cach hin thi tung ki tu Dong 2 ch "JI DIEU KHIEN"bng cach hin thi ca ch. Joi so do mach cho duoi dav.
Chuong trinh. /*=========bo tien xu li===============*/ #include<AT89x51.h> #include<string.h> /*===========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 /*===========cac chuong trinh con cua LCD==========*/ /*--------------kiem tra su san sang cua LCD------------------------*/ void wait(void) { RS=0; //chon thanh ghi lenh RW1; //doc tu LCD LCDdata=0xff; //gia tri 0xff while(BF) //kiem tra co ban { EN0; //dua xung cao xuong thap de chot. EN=1; //dua chan cho phep len cao } } /*------------------------thiet lap lenh cho LCD--------------------------*/ void LCDcontrol(unsigned char x) { RS=0;//chon thanh ghi lenh RW=0;//ghi len LCD. LCDdata=x ;// gia tri x EN=1;//cho phep muc cao EN=0;//xung cao xuong thap wait();//doi LCD san sang. } /*------------------------------Khoi tao LCD-------------------------*/ void LCDinit(void) { LCDcontrol(0x38);//2 dong va ma tran 5x7 LCDcontrol(0x0e);//bat man hinh, bat con tro LCDcontrol(0x01);//xoa man hinh } /*-------------------------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 wait();//cho } void LCDwrites(unsigned char *s) { unsigned char data lens,count; lens=strlen(s); for(count=0;count<lens;count++){ LCDwrite(*(s+count)); } } /*=====================chuong trinh tre================*/ void delay(long time) { while(time--); } /*========================ham chinh==================*/ void main(void) { LCDinit(); // khoi tao LCD LCDcontrol(0x82);// dua con tro den vi tri thu 4 dong 1 LCDwrite(V); LCDwrite(I); LCDwrite(E); LCDwrite(T); LCDwrite( ); LCDwrite(N); LCDwrite(A); LCDwrite(M); LCDcontrol(0xC0); LCDwrites("VI DIEU KHIEN"); while(1); //vong lap vo han } II. Giao tip ban phim Hex (ma trn phim 4x4) 1. Thut toan doc ban phim
2. Chuong trinh Hv vit chuong trinh doc ma tran phim va hin thi so thu tu phim trn LCD.
Chuong trinh. Ct i = 0 (i=1-4) Begin Hang i = 0 (i =1-4) Tra lai kt qua phim d nhn Dung Sai /*=========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){ delay(500); phimnhan=dem+1; delay(500); }else if(!H2){ delay(500); phimnhan=dem+5; delay(500); }else if(!H3){ delay(500); phimnhan=dem+9; delay(500); }else if(!H4){ delay(500); phimnhan=dem+13; delay(500); } chot>>=1; } return phimnhan; } void viewphim(unsigned char phimnhan) { if(phimnhan<10){ LCDwrite(phimnhan+48); }else{ LCDwrite(phimnhan/10+48); LCDwrite(phimnhan%10+48); } } 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); viewphim(phimnhan); } } }
III. Hin thi ma trn Led 1. Thut toan 2. Xy dung chuong trinh Bai toan: Vit chuong trinh hin thi ma trn LED bng phuong phap quet ct hin thi dong chu "LAP TRINH VI DIEU KHIEN BANG NGON NGU C", voi dong chu chay tu trai sang phai.
Chuong trinh: // Khai bao chi thi tien xu ly #include<AT89x51.h>
// Dinh nghia cac hang so #define Nhanh 10 #define Trungbinh 25 #define Cham 50 #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,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 */ 0,63,72,136,72,63,/* A */ 0,255,144,144,144,96,/* P */ 0, 0,128,128,255,128,128,/* T */ 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, 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 */ 0, 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,255,145,145,145,110,/* B */ 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,126,129,129,129,126,/* O */ 0,255,96,24,6,255,/* N */ 0, 0,255,96,24,6,255,/* N */ 0,126,129,129,137,78,/* G */ 0,254,1,1,1,254,/* U */ 0, 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 };
// 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);
/*===========khai bao bien toan cuc============*/ sfr LCDdata = 0xA0; // cong P2, 8 bit du lieu. 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 RD P3_3 #define WR P3_4 #define INTR P3_5 /*-------- Ham tre ---------------*/ void delay(long time) { 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); LCDwrite(var%10+48); LCDwrite(val%10+48); } } void main(void) { unsigned char ADCval=0; RD=0; LCDinit(); LCDcontrol(0x83); LCDwrites("ADC0804"); while(1){ WR=1; WR=0; while(!INTR); ADCval=P1; LCDcontrol(0x01); LCDcontrol(0x83); LCDwrites("ADC0804"); LCDcontrol(0xC0); view(ADCval); delay(5000); } } II. Lp trinh xu ly ngt g ime/coune c ch o ca ime v cch nh on gi np vo ime a ch - o ch d 1 do la b dinh thoi 16 bit, do do cac gia tri trong khoang tu 0000 dn FFFF co th su dung d nap cho TH va TL cua b dinh thoi. - Sau khi TH, TL duoc nap gia tri ban du 16 bit thi b dinh thoi phai duoc khoi dng voi lnh TR0 1 voi timer0 va TR1 1 voi timer1, khi nay b dinh thoi bt du dm tng theo xung clock tu gia tri ban du cho toi gia tri dinh la FFFF. Khi do b dinh thoi s quay vong tu FFFF v 0000 va bt co bao tran TF0 voi timer0 va TF1 voi timer1(ban du TFx0) khi do cn phai co thao tac d xoa co d ln sau con bit duoc khi nao b dm tran. - khi b dm tran thi TH va Tl cua b dinh thoi s mang gia tri 0 do do phai co thao tac nap lai gia tri ban du cho chung va xoa co TF d b dm duoc lp lai. - Nhu vy khoang thoi gian ma b dinh thoi tao tr chinh la khoangre thoi gian no dm tng tu gia tri ban du duoc nap cho toi gia tri dinh FFFF. - tinh toan gia tri nap vao thanh ghi chua cua b dinh thoi tu thoi gian mun tao tr(t): goi N 65536 t/chu ki may. Sau khi chuyn sang m HEX duoc 1 s co 4 chu s co dang: x1x2y1y2. khi do gia tri nap cho thanh ghi chua nhu sau: TH x1x2, TL y1y2. Vi du: mun tao tr 500us thi: Gia su chu ki may la 1us: co N 65536 500/1 65036. chuyn sang m HEX la FE0C, tu do: TH 0xFE, TL 0x0C. - cac buoc lp trinh cho b dinh thoi d tao tr o ch d 1: B1: chon ch d 1 cho b dinh thoi cn dung, tu do xac dinh gia tri nap cho thanh ghi TMOD. B2: tinh toan gia tri ban du cn nap cho TH va TL tu thoi gian tr mong mun. B3: khoi dng b dinh thoi. B4: kim tra trang thai bt cua co TF. B5:dung b dinh thoi. B6: xoa co TF cho vong lp k tip. B7: quay tro v B2 d nap lai gia tri cho TH va TL. b h - O ch d nay b dinh thoi la 8 bit, do vy chi cho phep cac gia tri tu 00 dn FF duoc nap vao thanh ghi TH cua b dinh thoi. sau khi nap gia tri 8 bit thi vi diu khin s sao ni dung cua TH sang TL va b dinh thoi duoc khoi dng bng lnh TRx1. - Sau khi duoc khoi dng thi b dinh thoi bt du dm tng trong thanh ghi TL tu gia tri ban du dn gia tri dinh FF. va khi quay vong tu FF v 00 thi co TFx duoc bt ln 1, khi nay thanh ghi TL mang gia tri 0 nhung TL s ngay lp tuc duoc tu dng nap lai voi gia tri ban du duoc luu trong thanh ghi TH. - nhu vy trong ch d nay mi khi b dm tran thi thanh ghi chua s duoc vi diu khin nap lai gia tri ban du, do do ch d nay duoc goi la ch d tu dng nap lai. - tinh gia tri nap vao thanh ghi chua cua b dinh thoi tu thoi gian tr (t): Goi N 256 t/chu ki may. Sau khi chuyn sang m HEX duoc 1 s, ta nap s nay vao thanh ghi TH va ca TL(nap vao TL gia tri dm ln 1 va nap vao TH cho nhung ln sau d khi b dm tran thi phn cung cua vi diu khin s tu dng sao TH sang TL). Vi du: tao tr 50usthi la: Gia su chu ki may la 1us: co N 256 50/1 205, chuyn sang m HEX : 0CE Tu do: TH 0xCE va TL 0xCE. - cac buoc lp trinh cho b dinh thoi d tao tr o ch d 2. B1: nap gia tri cho thanh ghi thit lp ch d TMOD voi timer mun su dung. B2: nap vao TH gia tri dem ban du. B3: khoi dng b dinh thoi. + B4: kim tra co bao tran TFx. B5: xoa co tran TFx, quay v B4. * luu y: 2 ch d khac cua b dinh thoi la ch d 0(ch d b dinh thoi 13 bit, b dinh thoi/b dm 8 bit, dinh ty l truoc 5 bit ) va ch d 3(ch d b dinh thoi chia tach) o day khng gioi thiu. g ca b nh hi - nguyn tc su dung b dinh thoi o ch d ngt: khai bao ngt cua b dinh thoi mun su dung ngun gy ngt. chuong trinh chinh va chuong trinh phuc vu ngt. - voi ngt dinh thoi vic khai bao ngun ngt bao gm vic khai bao ngt toan cuc la EA 1 va khai bao ngt cho tung b dinh thoi mun dung ET0 1(timer0) va ET1 1(timer1) - Ngun bao ngt dinh thoi(voi ca 2 ch d) du la khi b dm tran(khi co TFx 1), khi co TFx 1 thi vi diu khin kt thuc cng vic hin tai o chuong trinh chinh va chuyn vao chuong trinh phuc vu ngt cn cu theo dia chi cua chuong trinh phuc vu ngt.khi thuc hin xong chuong trinh phuc vu ngt vi diu khin quay tro v chuong trinh tai noi bi gian doan khi truoc. - Tom lai ngt dinh thoi la vic ta su dung b dinh thoi tao tr mt khoang thoi gian duoc tinh toan truoc, sau khoang thoi gian nay 1 cng vic ta mong mun s duoc thuc hin o chuong trinh phuc vu ngt. cng vic do co th coi la dc lp voi cng vic o chuong trinh chinh - cac cng vic lp trinh su dung ngt dinh thoi : tinh toan thoi gian tr mong mun va cng vic mun thuc hin sau khoang thoi gian do. khai bao ngt dinh thoi trong chuong trinh chinh (EA1, ETX1). lua chon b dinh thoi va ch d cua no trong thanh ghi TMOD khoi dng b dinh thoi. Xy dung chuong trinh chinh va cac chuong trinh con cn thit. xy dung chuong trinh phuc vu ngt thuc hin 1 cng vic mong mun (xac dinh r dia chi ngt theo thu tu ngt trong bang vector ngt) - Chu y: trong chuong trinh phuc vu ngt cac ban phai xoa co bao tran TFx va nap lai gia tri cho b dinh thoi voi ch d 1 con ch d 2 thi khng cn. bi on su dung bo dinh thoi voi ngt cua no tao mot xung vuong voi tan so 1kHZ doi xung (50 muc 1 va 50 muc 0 ) trn chan P1.0. Bai giai. - ta co : I 1kHZ T 1/1000s 1000us T ON = T OFF T/2 500us. Nhu vy chu ki xung la di xung nn hai phn nay b dm dm ging nhau(tao tr khoang thoi gian bng nhau). nua chu ki du b dm tao tr 500us cho muc 0, sau khi b dm dm dn gia tri dinh cua thanh ghi chua la FFFF thi co bao TFx 1 gy ngt, vi diu khin phai chuyn vao chuong trinh phuc vu ngt va s lt trang thai xung ra. Trong nua chu ki con lai cung nhu vy va cu nhu th. - Do thoi gian tr la 500us do do ta chon ch d 16 bit, su dung kt qua tu vi du trn d nap gia tri ban du cho TH va TL. - Chuong trinh diu khin: /*================khai bao thu vien===============*/ #include<AT89x51.h>
/*=============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 0Ie0c (thach anh 12MHz) TL0 = 0x0c; } /*=============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 0Ie0c (thach anh 12MHz) TL0 = 0x0c; TR0 = 1; // khoi dong timer while(1) PCON|=1; //khong lam gi ca de doi ngat. } su dung bo dinh thoi voi ngt cua tao dong ho so hin thi ln LCD.
+ hng nh /*================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; #include"lcd.h" /*=============khai bao bien=====================*/ unsigned char data Time[8]; unsigned char data i;
p nh vi cc ng ngoi ca vi iu khin hi nim - b vi diu khin 8051co hai ngt ngoai la INT0 va INT1 voi 2 chn tac dng du vao tuong ung la P3.2 va P3.3. - Ngt ngoai la ngt cua vi diu khin ma tac dng ngt o dy chinh la cac tac dng bn ngoai cua vi diu khin tac dng vao vi diu khin thong qua cac chn ngt duoi dang mt tin hiu din ap dang xung. - tac dng ngt ngoai co hai dang la tac dng theo dang muc va dang suon. kich hoat theo muc: o ch d nay cac chn INT0 va INT1 binh thuong o muc cao ging nhu cac chn khac cua vi diu khin, khi co tin hiu muc thp cp toi thi tin hiu nay kich hoat ngt. luu y la truoc khi thuc hin lnh cui cung cua chuong trinh phuc vu ngt thi muc thp tai cac chn ngt phai duoc chuyn ln muc cao, nu khng s lai gy ra mt ngt ngay lp tuc. Kich hoat theo suon: binh thuong cac chn ngt cua vi diu khin o muc cao, khi co tin hiu tac dng vao chung co dang suon xung thi s tac dng ngt. - D su dung ch d ngt nay thi phai tac dng vao thanh ghi TCON cu th la TCON.11 hoc IT01 thi cho phep ngt ngoai 0 kich hoat suon, con TCON.21 hoc IT11 thi cho phep ngt ngoai 1 kich hoat suon. cch lp nh - D lp trinh cho ngt cua vi diu khin ta phai thuc su hiu ban cht cua ngt va qua trinh thuc hin ngt cua vi diu khin din ra. - mu vit ham ngt nhu sau: Void name(void)interrupt x(x la s thu tu ngt ngoai x 0 hoc 2) { //chuong trinh phuc vu ngt } - Trong chuong trinh chinh ta phai co thao tac thit lp vic cho phep cac ngt duoc su dung. bi on su dung ngt ngoai cua vi diu khin voi nhim vu la. binh thuong vi diu khin bat mot Led don tai chan P1.0 va khi co ngt ngoai thi tt Led o P1.0 va bat Led o chan P1.1 sau 1s thi bat lai Led P1.0 va tt Led P1.1.
Bai giai. /*==================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 ham*/ /*------------------------------ham tre -------------------------------------*/ void delay(long time) { 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); } Bai 6: Diu khin dng co DC, dng co Servo, dng co buoc 1. Dng co DC 2. Dng co Servo 3. Dng co buoc (Step motor) Diu khin dng co buoc voi tc d tng dn tu 5 dn 100 v/p, mi ln chuyn tc d tng 5v/p thoi gian chuyn 1s, hin thi tc d trn LCD.
void main() { unsigned char data i; TMOD=17; EA=1; 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); LCDcontrol(0x80); LCDwrites("CT DK DC buoc" ); Xuly(i); delay(500000); } } } Bai 7: Giao tip Vi diu khin voi May tinh I. Cng truyn thng ni tip
1. Thanh ghi SCON SBUF II. Xy dung chuong trinh 1. Chuong trinh VB Giao din
Thut toan Chuong trinh:
Option Explicit Dim Mau As Byte Private Sub cbcolor_Click() If (cbcolor.Text = "Mau do") Then Mau = 1 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 Mau = 3 txtchu.ForeColor = &H80FF& lbHienthi.ForeColor = &H80FF& End If End Sub
Private Sub cbcolor_GotFocus() SendKeys "%{DOWN}" 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 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)) Next
End Function Private Sub OpenPort() Dim s As String MSComm1.Settings = "57600,N,8,1" MSComm1.CommPort = 1 MSComm1.PortOpen = True MSComm1.InputLen = 0 s = MSComm1.Input MsgBox "Port did open" End Sub Private Sub cmdOpenport_Click() If MSComm1.PortOpen Then MSComm1.PortOpen = False 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 MSComm1.Output = s End If
End Sub
Private Sub cmdStop_Click() MSComm1.Output = Chr(250) MsgBox "Port Stoped" End Sub
Private Sub Form_Load()
txtchu.ForeColor = vbRed txtchu.Text = "DO AN GHEP NOI" 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 txtchu.SelLength = Len(txtchu) End Sub
2. Chuong trinh vi diu khin Thut toan Chuong trinh: /************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****/ 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 */ 53,0,226,145,145,145,142,/* 5 */ 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 */ 68,0,255,129,129,129,126,/* D */ 69,0,255,145,145,145,129,/* E */ 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 */ 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 */ 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 Pxanh=0x90; sfr Pdo=0xA0;
sbit Clear=P3^4; sbit Data=P3^3; sbit Clock=P3^2; /**************Khai bao bien toan cuc*************/ unsigned char data Ktnhan,nhanmau,j,i,Maxc,Count,nLap; unsigned char data Mau,Chay,tam,dem; unsigned char data MC[76],MQ[32]; /**********Khoi ham chuong trinh**********/ // Ham ngat noi tiep void Ngatnoitiep(void) interrupt 4 using 0 { if(RI){ RI=0; tam=SBUF; if(tam==250){ Chay=1;i=j=77;dem=8; Count=0; Clear=0; }else{ if(nhanmau){ Mau=tam; Chay=1;i=j=77;dem=8; Count=nhanmau=0; P1=P2=0; Clear=0; }else if(tam==255){ Clear=1; Chay=0; Ktnhan=nhanmau=1; }else{ if(Ktnhan){ Maxc=tam; Ktnhan=0; }else if(Count<76&&Count<Maxc){ MC[Count]=tam; Count++; } } } } } void Khoitao(void) { PCON|=128; EA=1; ES=1; SM0=0; SM1=1; Ktnhan=nhanmau=1; Chay=1; P0=P1=P2=0; P3_0=1; nLap=1; } // Ham tao tre void delay(void) { 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; Pdo=Pxanh=MQ[j]; delay(); Pxanh=Pdo=0; } }
} // Ham hien thi mau xanh void Xanh(void) { while(nLap--) { Data=1; for(j=0;j<32;j++){ Clock=1; Data=0; Clock=0; Pxanh=MQ[j]; delay(); Pxanh=0; } }
} // Ham hien thi mau do void Do(void) { while(nLap--) { Data=1; for(j=0;j<32;j++){ Clock=1; Data=0; Clock=0; Pdo=MQ[j]; delay(); Pdo=0; } } } // Ham thay doi mang hien thi void change(void) { 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]; } // 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; }else if(chr==Mchar[35][0]){ return 35; }else{ End=35; Start=0; while(1){ Mid=(End+Start)/2; Mctam=Mchar[Mid][0]; if(chr==Mctam){ return Mid; }else if(chr<Mctam){ End=Mid; }else{ Start=Mid; } } } } void Chaychu(void) { unsigned char vitri;