Professional Documents
Culture Documents
S Byte
1
1
2
2
4
4
4
Khong gi tr
-128 +127
0 255
-32768 - +32767
0 - 65535
-2147483648 - +2147483647
0 4294697295
* Khai bo bin:
- C php: Kiu_d_liu Vng_nh Tn_bin _at_ ia_ch;
V d:
Unsigned char data x;
- Khi khai bo bin c th gn lun cho bin gi tr ban u.
V d:
Thay v: unsigned char x;
x = 0;
Ta ch cn: unsigned char x = 0;
- C th khai bo nhiu bin cng mt kiu mt lc.
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
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
CODE
DATA
BDATA
IDATA
PDATA
XDATA
ngha
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
s dng vi iu khin sau ny
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
a ch t trn P0 v P2
* 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
cc bin khc
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
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
trn vi iu khin dng truy nhp cc on d liu 1 bit, 8 bit, 16 bit
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
Khai bo:
- 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.
V d:
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
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
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.
Kch thc
3 byte
2 byte
2 byte
1 byte
1 byte
1 byte
Php
ton
>
ngha
V d
So snh ln hn
>=
<
So snh nh hn
a>b
4>5 cc gi tr
0
a>=b
6>=2 cc gi
tr 1
a<b
6<7 cc gi tr
1
<=
==
!=
a<=b
8<=5 cc gi
tr 0
a==b
6==6 cc gi
tr 1
a!=b
9!=9 cc gi tr
0
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
a+=5 <=> a=a+5
V d
Bit_1 & Bit_2
Bit_1 | Bit_2
!Bit_1
Bit_1 ^ Bit_2
a<<3
a>>4
~a
-=
*=
/=
%=
Khai bo nguyn mu hm
Xy dng cc hm v chng
trnh chnh
- V d:
Cch 1: #include<regx51.h>
cch ny tp regx51.h s c tm trong th mc INC chn vo chng
trnh ngun.
Cch 2: #includeregx51.h
cch ny tp regx51.h s c tm trong th mc cha chng trnh ngun
nu khng c mi tm trong th mc INC
Khi mun chn tp ngoi th vin hoc ngoi th mc cha chng trnh ngun th
tn_tp s bao gm c ng dn th mc cha tp.
* Ch th #ifdef
Ch th #ifdef ny thng dng bin dch cc tp th vin.
- C php:
Cch 1: #ifdef ten_macro
on chng trnh
#endif
Cch 2: #ifdef ten_macro
on chng trnh 1
#else
on chng trnh 2
#endif
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.
- C php:
Cch 1: #ifndef ten_macro
on chng trnh
#endif
Cch 2: #ifndef ten_macro
on chng trnh 1
#else
on chng trnh 2
#endif
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
chng trnh hoc hm hot ng nh th no v lm g. Vit ch thch s gip cho ngi
c c th hiu c chng trnh d dng v nhanh chng hn, sa li n gin hn hoc
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 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
+ Cu lnh r nhnh if:
- Cu trc: if(dieu_kien)
{
// on chng trnh
}
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
{
// 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:
Cu trc:
switch(bien)
{
case gia_tri_1: {//cc cu lnh break;}
case gia_tri_2: {//cc cu lnh break;}
case gia_tri_3: {//cc cu lnh break;}
...
case gia_tri_n: {//cc cu lnh break;}
}
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.
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:
Cu trc: for(n=m;n<l;n++)
{
// cc cu lnh x l
}
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
}
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
} while(dieu_kien);
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.
Trong ny c 1 lot cc hng in t sn xut 8051. bn lp trnh cho con no th chn con
y, kch chut vo du + m rng cc con IC ca cc hang. y ta lp trnh cho
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.
Ca s text1 hin ra. Tip theo bn chn File save As hoc Ctrl+S, lu File mc d
cha c g nh sau:
c ca s 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:
By gi trong hnh nhn thy trong Source Group 1 c file VIDU.C. cc bn nhp chut phi
vo vng son tho file VIDU.C thm file th vin. Chon Insert #include<REGX51.H>.
Phn cui cng ca cng vic khi to l cc bn vit li gii thch cho d n ca mnh.
phn ny rt cn thit v n ngi khc hiu mnh lm g trong project ny v khi mnh
cn s dng li code c li cn bit n l ci g.
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:
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:
bin dch chng trnh thnh file HEX cc bn chn: Projectoption for target 1 nh
hnh v:
Led = tat
Start =
0
Led = bat
Stop =
0
Led = tat
#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;
}
}
}
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
dp
1
1
1
1
1
1
1
1
1
1
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.
+ Lu thut gii:
START
Dem=0;
ctac==0?
dem++;
dem<=10?
dem=0;
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();
}
}
K hiu
Vss
Vcc
VEE
RS
I/O
I
M t
Mass
Dng ngun 5v
Cp ngun iu khin tng phn
RS=0 chon thanh ghi lnh
RS=1 chon thanh ghi d liu
5
R/W
I
R/W=1 c d liu, R/W=1 ghi
6
E
I/O
Cho php
7
DB0
I/O
Bit d 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 v 16 l A v K. N c ni vi 2 chn ca 1 con Led dng sng
LCD trong bng ti chng ta khng s dng.
- S ghp ni LCD vi vi iu khin:
M (HEX)
01
02
04
06
05
07
08
0a
0c
0e
0f
10
14
18
1c
80
0c0
38
Chng trnh:
/*=========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
RW=1; //oc tu LCD
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
}
}
/*------------------------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();//oi 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 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)
ng
Tr li kt qu phm
nhn
2. Chng trnh
Hy vit chng trnh c ma trn phm v hin thi s th t phm trn LCD.
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){
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);
}
}
}
+ 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
#define Pxanh P1
#define Pdo P2
// 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);
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 Chaychuxanh(void)
{
for(i=Start+1;i<Dk1;i++)
{
Tocdolap=Nhanh;
while(Tocdolap--)
{
DATA=1;
Dk2=i+32;
for(j=i;j<Dk2;j++)Xanh(j);
}
}
}
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);
}
}
}
void Chaychu(void)
{
Dk1=End-31;
if(Mau==Mxanh)Chaychuxanh();
else if(Mau==Mdo)Chaychudo();
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);
Pdo=0;
Pxanh=0;
}
void Dobyte(unsigned char chiso)
{
CLOCK=1;
DATA=0;
CLOCK=0;
Pdo=Mdata2[chiso];
delay(12);
Pdo=0;
}
void Xanhbyte(unsigned char chiso)
{
CLOCK=1;
DATA=0;
CLOCK=0;
Pxanh=Mdata2[chiso];
delay(12);
Pxanh=0;
}
void Nhapnhaydo(void)
{
while(Tocdolap--){
DATA=1;
for(k=0;k<32;k++)Dobyte(k);
}
}
void Nhapnhayxanh(void)
{
while(Tocdolap--){
DATA=1;
for(k=0;k<32;k++)Xanhbyte(k);
}
}
void Nhapnhaycam(void)
{
while(Tocdolap--){
DATA=1;
for(k=0;k<32;k++)Cambyte(k);
}
}
void Taomangnhapnhay(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++)
Mdata2[i]=Mcode[Start+i-Dk5];
}
void Nhapnhay(void)
{
unsigned char demnhay;
demnhay=10;
Taomangnhapnhay();
while(demnhay--)
{
Tocdolap=Nhanh;
if(Mau==Mxanh)Nhapnhayxanh();
else if(Mau==Mdo)Nhapnhaydo();
else Nhapnhaycam();
CLEAR=0;
delay(1250);
CLEAR=1;
}
}
// 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);
}
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++)
Mdata1[i]=Mcode[Start+i-Dk5];
i=8;
}
void Lcam(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];
Pdo=Pxanh;
delay(12);
Pxanh=0;
Pdo=0;
}
}
}
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;
Pdo=Mdata2[dem];
delay(12);
Pdo=0;
}
}
}
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];
delay(12);
Pxanh=0;
}
}
}
void Len(void)
{
Taomanglen();
while(i--)
{
for(j=Dk5;j<Dk4;j++)
Mdata2[j]= Mdata1[j]/Mu2(i);
if(Mau==Mxanh)Lxanh();
else if(Mau==Mdo)Ldo();
else Lcam();
}
for(i=0;i<7;i++)
{
for(j=Dk5;j<Dk4;j++)
Mdata2[j]= Mdata2[j]*2;
if(Mau==Mxanh)Lxanh();
else if(Mau==Mdo)Ldo();
else Lcam();
}
}
/*Ham chinh*/
void main(void)
{
TMOD=0x01;
Pxanh=0;
Pdo=0;
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;
Len();
Start=89;End=118;Mau=1;
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;
Nhapnhay();
Start=89;End=118;Mau=2;
Nhapnhay();
Start=120;End=143;Mau=2;
Nhapnhay();
Start=145;End=168;Mau=2;
Nhapnhay();
Start=170;End=187;Mau=2;
Nhapnhay();
Start=189;End=194;Mau=2;
Nhapnhay();
}
}
+Chng trnh:
#include<regx51.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 = 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 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.
}
/*=============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.
+ 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;
#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);
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)
{
//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.
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)
{
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);
}
+ Chng trnh:
#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"
unsigned char data Bytecao1,Bytethap1;
unsigned char data Buoc,Nbuoc;
unsigned char data Mbuoc[4]={144,192,96,48};
{
while(time--);
}
void viewspeed(unsigned char speed)
{
unsigned char data a1,a2;
LCDcontrol(0xc0);
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;
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);
}
}
}
+ Thut ton
+ Chng trnh:
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)
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)
{
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;
for(j=0;j<32;j++){
MQ[j]=0;
}
for(i=0;i<Count;i++)
{
if(MC[i]==32){
change();
MQ[31]=0;
if(Mau==Mxanh)Xanh();
else if(Mau==Mdo)Do();
else Cam();
change();
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++){
change();
MQ[31]=Mchar[vitri][dem];
if(Mau==Mxanh)Xanh();
else if(Mau==Mdo)Do();
else Cam();
}
}
}
if(!Chay){
for(i=0;i<32;i++){
change();
MQ[31]=0;
if(Mau==Mxanh)Xanh();
else if(Mau==Mdo)Do();
else Cam();
}
}
}
// Chuong trinh chinh
void main()
{
Khoitao();
REN=1;
while(1){
while(Chay);
Chaychu();
}
}