Professional Documents
Culture Documents
S Byte
Khong gi tr
Char
-128 +127
Unsigned char
0 255
Int
-32768 - +32767
Unsigned int
0 - 65535
Long
-2147483648 - +2147483647
Unsigned long
0 4294697295
Float
* 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 ngha
CODE
DATA
BDATA
IDATA
PDATA
XDATA
* 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
S bit
Bit
Sbit
Sfr
Sfr16
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
Kch thc
3 byte
Con tr XDATA
2 byte
Con tr CODE
2 byte
Con tr DATA
1 byte
Con tr IDATA
1 byte
Con tr PDATA
1 byte
char month;
int year;
} Date_type;
Date_type date,date_arr[5];
2.2 Php ton
Php gn k hiu: =.
- C php: Bin_1 = Bin_2;
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
V d
X=a+b
X=a-b
X=a*b
X=a/b
nguyn
a%b
(a=9, b=2 X=1)
Php
ngha
V d
So snh ln hn
a>b
ton
>
4>5 cc gi tr
0
>=
a>=b
6>=2 cc gi
tr 1
<
So snh nh hn
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
V d
&
Php v (AND)
Bit_1 | Bit_2
Php o (NOT)
!Bit_1
Bit_1 ^ Bit_2
<<
Dch tri
a<<3
>>
Dch phi
a>>4
Ly b theo bit
~a
V d
+=
-=
*=
/=
%=
Khai bo ch th tin x l
Khai bo nguyn mu hm
Xy dng cc hm v chng
trnh chnh
{
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
hm trn nn c th xy dng hm bt k v tr no trong chng trnh.
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
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:
+ Php thay th #define
+ Php chn tp #include
+ Php la chn bin dch #ifdef
Cc ch th tin x l gip ta vit chng trnh ngn gn hn v t chc bin dch,
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:
- V d:
#undef Tn_thay_th
#define N 100
* Ch th #include
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;}
}
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
Stop = 0
Led = bat
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
P1.0
g
P1.1
f
P1.2
e
P1.3
d
P1.4
c
P1.5
b
P1.6
a
dp
s np hex
mov P1,#
81
cf
92
86
cc
a4
a0
8f
80
84
Bi ton:
Mt Nt bm c ni vi chn P3.4, hy lp trnh iu khin m s ln n
phm t 0 n 9 v hin th trn Led 7 thanh.
+ 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;}
};
}
K hiu
I/O
M t
Vss
Mass
Vcc
Dng ngun 5v
VEE
RS
R/W
I/O
Cho php
DB0
I/O
Bit d liu
DB1
I/O
Nt
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
M (HEX)
01
Xo mn hnh hin th
02
Tr v u dng
04
06
05
07
08
0a
0c
0e
0f
10
14
18
1c
80
0c0
p con tr v u dng th 2
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
}
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)
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:
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 th ma trn Led
1. Thut ton
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.
+ 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);
Pxanh=Mcode[chiso];
delay(12);
Pxanh=0;
}
void Do(unsigned char chiso)
{
CLOCK=1;
DATA=0;
CLOCK=0;
Pdo=Mcode[chiso];
delay(12);
Pdo=0;
}
void Cam(unsigned char chiso)
{
CLOCK=1;
DATA=0;
CLOCK=0;
Pxanh=Mcode[chiso];
Pdo=Pxanh;
delay(12);
Pdo=0;
Pxanh=0;
}
void Chaychucam(void)
{
for(i=Start+1;i<Dk1;i++)
{
Tocdolap=Nhanh;
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;
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;
}
{
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"
}
/*==============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)
{
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();
}
}