I.
LED ĐƠN
1. BÀI TẬP YÊU CẦU
• Viết chương trình điều khiển 16 led đơn: chớp tắt 5 lần 2 led dịch từ trái sang phải 3 led
dịch từ phải sang trái sau đó lặp lại
2. PHẦN CỨNG
3. CHƯƠNG TRÌNH VIẾT BẰNG ASM
ORG 0000H
MAIN:
MOV P1,#0FFH
MOV P0,#0FFH
MOV R0,#5
CT:
LCALL CHOPTAT
DJNZ R0,CT
LCALL DICHLED
JMP MAIN
CHOPTAT:
MOV P1,#00H
MOV P0,#00H
LCALL DELAY
MOV P1,#0FFH
MOV P0,#0FFH
LCALL DELAY
RET
DICHLED:
MOV A,#0FFH
LA1:
CLR C
RRC A
MOV P1,A
LCALL DELAY
JB P1.6,LA1
LA2:
RR A
MOV P1,A
LCALL DELAY
JB P1.0,LA2
MOV P1,#0FEH
MOV P0,#07FH
LCALL DELAY
MOV A,#07FH
MOV P1,#0FFH
LA3:
CLR C
RRC A
MOV P0,A
LCALL DELAY
JB P0.6,LA3
LA4:
RR
A
MOV P0,A
LCALL DELAY
JB P0.0,LA4
MOV P0,#0FEH
CALL DELAY
MOV P0,#0FFH
LCALL DELAY
MOV A,#0FFH
LA5:
CLR C
RLC A
MOV P0,A
CALL DELAY
JB P0.2,LA5
LA6:
RL A
MOV P0,A
CALL DELAY
JB P0.7,LA6
MOV P0,#3FH
MOV P1,#0FEH
CALL DELAY
MOV P0,#7FH
MOV P1,#0FCH
CALL DELAY
MOV P0,#0FFH
MOV P1,#0F8H
MOV A,#0F8H
LA7:
RL A
MOV P1,A
CALL DELAY
JB P1.7,LA7
MOV P1,#3FH
CALL DELAY
MOV P1,#7FH
CALL DELAY
MOV P1,#0FFH
CALL DELAY
RET
DELAY:
MOV R5,#200
SC3:
MOV R6,#250
DJNZ R6,$
DJNZ R5,SC3
RET
END
4. CHƯƠNG TRÌNH VIẾT BẰNG C
#include <REGX52.H>
void delay_ms(unsigned int t)
{
unsigned int x,y;
for(x=0;x
{
for(y=0;y<123;y++);}
}
void main()
{
while(1)
{
unsigned int a,b,c;
for(a=0;a<5;a++)
{
P1=0x00;
P0=0x00;
delay_ms(500);
P0=0xff;
P1=0xff;
delay_ms(500);
}
P0=0xff;
P1=0xeFf;
for(b=0;b<2;b++)
{
P1=P1>>1;
delay_ms(500);
}
for(b=0;b<6;b++)
{
P1=(P1>>1)|0x80;
delay_ms(500);
}
P1=0xfe;
P0=0x7f;
delay_ms(500);
P1=0xff;
P0=0x3f;
delay_ms(500);
for(c=0;c<8;c++)
{
P0=(P0>>1)|0x80;
delay_ms(500);
}
for(c=0;c<3;c++)
{
P0=P0<<1;
delay_ms(500);
}
for(c=0;c<5;c++)
{
P0=(P0<<1)|0x01;
delay_ms(500);
}
P0=0x3f;
P1=0xfe;
delay_ms(500);
P0=0x7f;
P1=0xfc;
delay_ms(500);
P0=0xff;
P1=0xf8;
delay_ms(500);
for(b=0;b<8;b++)
{
P1=(P1<<1)|0x01;
delay_ms(500);
}
}
}
II.
7 SEG (LED 7 ĐOẠN)
1. BÀI TẬP YÊU CẦU
• Viết chương trình điều khiển led 7 đoạn đếm từ 20 về 0
2. PHẦN CỨNG
3. CHƯƠNG TRÌNH VIẾT BẰNG ASM
ORG 0000H
MAIN:
MOV DPTR,#MALED
MOV R0,#20
MOV R4,#170
LAP1:
MOV P0,#0FFH
MOV B,#10
MOV A,R0
DIV AB
MOV P2,#0BFH
MOVC A,@A+DPTR
MOV P0,A
CALL QUET
MOV P0,#0FFH
MOV A,B
MOV P2,#7FH
MOVC A,@A+DPTR
MOV P0,A
CALL QUET
MOV P0,#0FFH
MOV P2,#0DFH
MOV P0,#0C0H
CALL QUET
MOV P0,#0FFH
MOV P2,#0EFH
MOV P0,#0C0H
CALL QUET
MOV P0,#0FFH
MOV P2,#0F7H
MOV P0,#0C0H
CALL QUET
MOV P0,#0FFH
MOV P2,#0FBH
MOV P0,#0C0H
CALL QUET
MOV P0,#0FFH
MOV P2,#0FDH
MOV P0,#0C0H
CALL QUET
MOV P0,#0FFH
MOV P2,#0FEH
MOV P0,#0C0H
CALL QUET
DJNZ R4,LAP1
DEC R0
MOV R4,#170
CJNE R0,#-1,LAP1
SJMP MAIN
MALED:
DB 0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H
QUET:
MOV R2,#20
CV:
MOV R3,#15
DJNZ R3,$
DJNZ R2,CV
RET
END
4. CHƯƠNG TRÌNH VIẾT BẰNG C
#include <REGX52.H>
void delay_ms(unsigned int t)
{
unsigned int x,y;
for(x=0;x
{
for(y=0;y<100;y++);}
}
unsigned char code a[]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90};
void main()
{
char dem,chuc,dv;
unsigned int i;
while(1)
{
for(dem=20;dem>=0;dem--)
{
chuc=dem/10;
dv=dem%10;
for(i=0;i<130;i++)
{
P0=0xff;
P2=0x7F;
P0=a[dv];
delay_ms(1);
P0=0xff;
P2=0xBF;
P0=a[chuc];
delay_ms(1);
P0=0xff;
P2=0xDF;
P0=a[0];
delay_ms(1);
P0=0xff;
P2=0xEF;
P0=a[0];
delay_ms(1);
P0=0xff;
P2=0xF7;
P0=a[0];
delay_ms(1);
P0=0xff;
P2=0xFB;
P0=a[0];
delay_ms(1);
P0=0xff;
P2=0xFD;
P0=a[0];
delay_ms(1);
P0=0xff;
P2=0xFE;
P0=a[0];
delay_ms(1);
}
}
}
}
III.
PHẦN LCD
1. BÀI TẬP YÊU CẦU
Viết chương trình hiên thị tên trường,họ tên sinh viên,mã số sinh viên,lớp,môn học giáo viên
hướng dẫn nhóm thực hành trên 2 dòng của LCD
2. PHẦN CỨNG
3. CHƯƠNG TRÌNH VIẾT BẰNG ASM
ORG 0000H
MAIN:
MOV A,#38H
LCALL GUILENH
MOV A,#0CH
CALL GUILENH
MOV A,#01H
CALL GUILENH
MOV A,#80H
CALL GUILENH
MOV DPTR,#DONG1
CALL HIENTHI
CALL DELAY
MOV A,#0C0H
LCALL GUILENH
LCALL DELAY
MOV DPTR,#DONG2
CALL HIENTHI
CALL DELAY
MOV A,#01H
CALL GUILENH
MOV A,#80H
CALL GUILENH
MOV DPTR,#DONG3
CALL HIENTHI
CALL DELAY
MOV A,#0C0H
CALL GUILENH
MOV DPTR,#DONG4
CALL HIENTHI
CALL DELAY
MOV A,#01H
CALL GUILENH
MOV A,#80H
CALL GUILENH
MOV DPTR,#DONG5
CALL HIENTHI
CALL DELAY
MOV A,#0C0H
CALL GUILENH
MOV DPTR,#DONG6
CALL HIENTHI
CALL DELAY
SJMP MAIN
GUILENH:
MOV P3,A
CLR P2.0
CLR P2.1
SETB P2.2
CLR P2.2
LCALL wait
RET
DULIEU:
MOV P3,A
SETB P2.0
CLR P2.1
SETB P2.2
CLR P2.2
LCALL wait
RET
MOV R0,#0
HIENTHI:
MOV A,R0
MOVC A,@A+DPTR
CALL DULIEU
MOV A,#06H
LCALL GUILENH
LCALL DELAY
INC R0
CJNE R0,#15,HIENTHI
MOV R0,#0
LCALL DELAY
RET
DELAY:
MOV R4,#200
DC:
MOV R5,#200
DJNZ R5,$
DJNZ R4,DC
wait:
MOV TMOD,#10H
MOV TH1,#HIGH(-2000)
MOV TL1,#LOW(-2000)
CLR TF1
SETB TR1
JNB TF1,$
CLR TR1
CLR TF1
RET
DONG1:
DB " TRUONG DAI HOC "
DONG2:
DB " CN TP HCM "
DONG3:
DB " NGUYEN VAN DAN"
DONG4:
DB " MSSV:13095631"
DONG5:
DB " TH VI XU LY"
DONG6:
DB " NHOM 3 "
END
4. CHƯƠNG TRÌNH VIẾT BẰNG C
#include <REGX52.H>
sbit RS=P2^0;
sbit RW=P2^1;
sbit EN=P2^2;
#define LCD_DATA P0
void delay_ms(unsigned int t)
{
unsigned int x,y;
for(x=0;x
{
for(y=0;y<100;y++);}
}
void lcd_cmd(unsigned char cmd)
{
RS=0;
RW=0;
LCD_DATA=cmd;
EN=0;
EN=1;
delay_ms(2);
}
void lcd_ch(char c)
{
RS=1;
RW=0;
LCD_DATA=c;
EN=0;
EN=1;
delay_ms(1);
}
void lcd_out(char *st)
{
unsigned char i=0;
while(st[i]!=0)
{
lcd_ch(st[i]);
i++;
}
}
void lcd_out_ch(unsigned char row,unsigned char col,char *st)
{
unsigned char cmd;
cmd=(row==1?0x80:0xc0)+col-1;
lcd_cmd(cmd);
lcd_out(st);
}
void lcd_int()
{
lcd_cmd(0x30);
delay_ms(5);
lcd_cmd(0x30);
delay_ms(1);
lcd_cmd(0x38);
lcd_cmd(0x01);
lcd_cmd(0x0C);
}
void main()
{
int i;
lcd_int();
lcd_out_ch(1,2,"TRUONG DAI HOC");
delay_ms(2000);
lcd_cmd(0xc0);
lcd_out_ch(2,5,"CN_TP_HCM");
delay_ms(2000);
lcd_cmd(0x01);
lcd_cmd(0x80);
lcd_out_ch(1,1,"NGUYEN VAN DAN") ;
delay_ms(2000);
lcd_cmd(0xc0);
lcd_out_ch(2,1,"MSSV:13095631");
delay_ms(2000);
lcd_cmd(0x01);
lcd_cmd(0x80);
lcd_out_ch(1,1,"THUC HANH VI XU LY NHOM 3");
delay_ms(2000);
lcd_cmd(0xc0);
lcd_out_ch(2,1,"GVHD:NGUYEN TRUNG DUNG");
while(1)
{
for(i=0;i<16;i++)
{
delay_ms(500);
lcd_cmd(0x18);
}
for(i=0;i<18;i++)
{
delay_ms(500);
lcd_cmd(0x1c);
}
}
}
IV.
MA TRẬN PHÍM
1. BÀI TẬP YÊU CẦU
Viết chương trình ma trận phím
2. PHẦN CỨNG
3. CHƯƠNG TRÌNH VIẾT BẰNG ASM
ORG 0000H
MAIN:
MOV R0,#0
MOV A,#0
MOV R1,#0
LAP2:
MOV P1,0FFH
LCALL QUETPHIM
HIENTHI:
MOV R0,A
MOV DPTR,#MALED
LAP1:
MOV P0,#0FFH
MOV B,#100
DIV AB
MOV P2,#0FDH
MOVC A,@A+DPTR
MOV P0,A
LCALL QUET
MOV P0,#0FFH
MOV A,B
MOV B,#10
DIV AB
MOV P2,#0FBH
MOVC A,@A+DPTR
MOV P0,A
LCALL QUET
MOV A,B
MOV P0,#0FFH
MOV P2,#0F7H
MOVC A,@A+DPTR
MOV P0,A
LCALL QUET
MOV P0,#0FFH
MOV P2,#0FEH
MOV P0,#0C0H
LCALL QUET
MOV A,R0
SJMP LAP2
QUETPHIM:
MOV P1,#0FEH
JNB P1.4,XOA
JNB P1.5,KEY1
JNB P1.6,KEY2
JNB P1.7,KEY3
MOV P1,#0FDH
JNB P1.4,KEY4
JNB P1.5,KEY5
JNB P1.6,KEY6
JNB P1.7,KEY7
MOV P1,#0FBH
JNB P1.4,KEY8
JNB P1.5,KEY9
JNB P1.6,CONG
JNB P1.7,TRU
MOV P1,#0F7H
JNB P1.4,BANG
JNB P1.5,ANS
RET
XOA:
JNB P1.4,$
MOV A,#0
JMP LAP2
RET
KEY1:
JNB P1.5,$
MOV A,#1
JMP HIENTHI
RET
KEY2:
JNB P1.6,$
MOV A,#2
JMP HIENTHI
RET
KEY3:
JNB P1.7,$
MOV A,#3
JMP HIENTHI
RET
KEY4:
JNB P1.4,$
MOV A,#4
JMP HIENTHI
RET
KEY5:
JNB P1.5,$
MOV A,#5
JMP HIENTHI
RET
KEY6:
JNB P1.6,$
MOV A,#6
JMP HIENTHI
RET
KEY7:
JNB P1.7,$
MOV A,#7
JMP HIENTHI
RET
KEY8:
JNB P1.4,$
MOV A,#8
JMP HIENTHI
RET
KEY9:
JNB P1.5,$
MOV A,#9
JMP HIENTHI
RET
CONG:
JNB P1.6,$
MOV R5,A
MOV R1,#1
JMP LAP2
RET
TRU:
JNB P1.7,$
MOV R5,A
MOV R1,#2
RET
BANG:
JNB P1.4,$
CJNE R1,#0,KQ1
JMP LAP2
KQ1:
CJNE R1,#1,KQ2
ADD A,R5
MOV R6,A
MOV R1,#0
JMP HIENTHI
KQ2:
MOV 00H,A
MOV A,R5
SUBB A,00H
MOV R1,#0
MOV R6,A
JMP HIENTHI
RET
ANS:
JNB P1.5,$
MOV A,R6
RET
QUET:
MOV R2,#15
CV:
MOV R3,#15
DJNZ R3,$
DJNZ R2,CV
RET
MALED:
DB 0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H
END
4. CHƯƠNG TRÌNH VIẾT BẰNG C
#include <REGX52.H>
void delay_ms(unsigned int t)
{
unsigned int x,y;
for(x=0;x
{
for(y=0;y<123;y++);}
}
sbit HANG1=P1^0;
sbit HANG2=P1^1;
sbit HANG3=P1^2;
sbit HANG4=P1^3;
sbit COL1=P1^4;
sbit COL2=P1^5;
sbit COL3=P1^6;
sbit COL4=P1^7;
void main()
{
unsigned char KEY=0;
int CHUC,DV,I,TRAM,A,ANS;
unsigned char code a[]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90};
P1=0XFF;
P0=0XFF;
while (1)
{
HANG1=0;
if(COL1==0)
{
while(COL1==0)
{
}
KEY=0;
}
if(COL2==0)
{
while(COL2==0)
{
}
KEY=1;
}
if(COL3==0)
{
while(COL3==0)
{
}
KEY=2;
}
if(COL4==0)
{
while(COL4==0)
{
}
KEY=3;
}
HANG1=1;
HANG2=0;
if(COL1==0)
{
while(COL1==0)
{
}
KEY=4;
}
if(COL2==0)
{
while(COL2==0)
{
}
KEY=5;
}
if(COL3==0)
{
while(COL3==0)
{
}
KEY=6;
}
if(COL4==0)
{
while(COL4==0)
{
}
KEY=7;
}
HANG2=1;
HANG3=0;
if(COL1==0)
{
while(COL1==0)
{
}
KEY=8;
}
if(COL2==0)
{
while(COL2==0)
{
}
KEY=9;
}
if(COL3==0)
{
while(COL3==0)
{
}
A=1;
I=KEY;
}
if(COL4==0)
{
while(COL4==0)
{
}
A=2;
I=KEY;
}
HANG3=1;
HANG4=0;
if(COL1==0)
{
while(COL1==0)
{
}
if(A==1)
{
KEY=KEY+I;
ANS=KEY;
A=0;
}
if(A==2)
{
KEY=I-KEY;
A=0;
ANS=KEY;
}
}
if(COL2==0)
{
while(COL2==0)
{
}
KEY=ANS;
}
if(COL3==0)
{
while(COL3==0)
{
}
KEY=KEY+1;
A=0;
}
HANG4=1;
TRAM=KEY/100;
CHUC=(KEY%100)/10;
DV=(KEY%100)%10;