Mình xin lập topic này, mục đích chính là share một số bài tập về At89s52. Hy vọng đây sẽ là nguồn cho các bạn tham khảo thực sự hữu ích
BÀI TẬP SỐ 1: Chương trình điều khiển 32 led theo yêu cầu sau:
-Sáng dồn port 0
- 1 điểm sáng chạy từ phải sang trái
- 2 điểm sáng chạy từ phải sang trái
- 3 điểm sáng chạy từ phải sang trái
- 4 điểm sáng chạy từ phải sang trái
- 5 điểm sáng chạy từ phải sang trái
- 6 điểm sáng chạy từ phải sang trái
- 7điểm sáng chạy từ phải sang trái
- 8 điểm sáng chạy từ phải sang trái
-chớp tắt 5 lần
-sáng dồn từ ngoài vào 32 led.
-chớp tắt 5 lần
-Sáng dần tắt dần từ phải sang trái, tắt đần từ phải sang trái 2 lần.
-chớp tắt 5 lần
-Sáng dần tắt dần từ trái sang phải, tắt đần từ trái sang phải 2 lần.
-chớp tắt 5 lần
-Sáng tắt dần từ ngoài vào và từ trong ra 2 lần.
-chớp tắt 5 lần
-Sáng dần từ phải sang trái, tắt dần từ trái sang phải 2 lần
-chớp tắt 5 lần
-Sáng dần từ trái sang phải, tắt dần từ phải sang trái 2 lần
TẢI VỀ CODE VÀ FILE MÔ PHỎNG: BAI_987_32LED_TONG_HOP_2.rar
code:
#include<at89x52.h>
unsigned int z,v;
unsigned long w; signed char i,j;
void delay(unsigned int x)
{
unsigned int y;
for(y=0;y<x;y++) {}
}
void choptat()
{
for(i=0;i<5;i++)
{
P0=0XFF;P1=0XFF;P2=0XFF;P3=0XFF;delay(8000);
P0=0;P1=0;P2=0;P3=0;delay(8000);
}
}
void xuat4port()
{
P0=z;P1=(z>>8);P2=v;P3=(v>>8);
}
void tach16bit_xuat4port()
{
z=w;v=(w>>16);xuat4port();
}
void sangdan_tatdan(unsigned char chon1,unsigned char chon2)
{
for(i=0;i<2;i++)
{
for(j=0;j<32;j++)
{
if(chon1==0)
{w=(w<<1)+1;}//sang dan phai sang trai
else if(chon1==1)
{w=(w>>1)+0x80000000;}//sang dan trai sang phai
tach16bit_xuat4port(); delay(10000);
}
for(j=0;j<32;j++)
{
if(chon2==0)
{w=(w<<1);}//tat dan phai sang trai
else if(chon2==1)
{ w=(w>>1);} //tat dan trai sang phai
tach16bit_xuat4port(); delay(10000);
}
}
}
void stdnv_tr_2lan()
{
for(i=0;i<2;i++)
{
for(j=0;j<16;j++)
{
z=(z<<1)+1;v=(v>>1)+0x8000;xuat4port();delay(10000 );
}
for(j=0;j<16;j++)
{
z=(z<<1);v=(v>>1);xuat4port();delay(10000);
}
for(j=0;j<16;j++)
{
v=(v<<1)+1;z=(z>>1)+0x8000;xuat4port();delay(10000 );
}
for(j=0;j<16;j++)
{
v=(v<<1);z=(z>>1);xuat4port();delay(10000);
}
}
}
void sangdon()
{
unsigned long u,t; unsigned char k;
w=0; tach16bit_xuat4port(); delay(5000);
{
for(i=32;i>-1;i--)
{
u=w; t=0x00000001;
for(k=0;k<i;k++)
{
w=u|t; tach16bit_xuat4port(); delay(5000); t=t<<1;
}
}
}
}
void sangdon_tnv()
{
unsigned long ut,up,tt,tp; unsigned char k;
for(j=0;j<2;j++)
{
w=0; xuat4port(); delay(5000);
{
for(i=16;i>-1;i--)
{
ut=v; tt=0x0001;up=z;tp=0x8000;
for(k=0;k<i;k++)
{
v=ut|tt; z=up|tp; xuat4port(); delay(5000); tt=tt<<1;tp=tp>>1;
}
}
}
}
}
void diemsangchay(unsigned int q)
{
unsigned long u,t; unsigned char k;
for(j=0;j<2;j++)
{
w=0; tach16bit_xuat4port(); delay(5000);
{
for(i=32;i<-1;i--)
{
u=w;
switch(q)
{
case 1: t=0x00000001; break;
case 2: t=0x00000003; break;
case 3: t=0x00000007; break;
case 4: t=0x0000000f; break;
case 5: t=0x0000001f; break;
case 6: t=0x0000003f; break;
case 7: t=0x0000007f; break;
case 8: t=0x000000ff; break;
}
for(k=0;k<i;k++)
{
w=u|t; tach16bit_xuat4port(); delay(5000); t=t<<1;
}
}
}
}
}
void sangdonport0()
{
unsigned char tam,ttcd,ttdc;
P0=0xff;tam=0xff;delay(5000);
for(j=8;j>0;j--)
{
ttcd=tam;
ttdc=0xfe;
for(i=0;i<j;i++)
{
P0=ttcd&ttdc;
delay(5000);
ttdc=(ttdc<<1)|0x01;
}
tam=P0;
}
}
void main()
{
w=0; tach16bit_xuat4port(); delay(10000);
while(1)
{
sangdonport0();
choptat();
diemsangchay(1);
diemsangchay(2);
diemsangchay(3);
diemsangchay(4);
diemsangchay(5);
diemsangchay(6);
diemsangchay(7);
diemsangchay(8);
choptat();
sangdon_tnv();
sangdon();
choptat();
sangdan_tatdan(0,0);//sangdan tu phai sang trai,tat dan tu phai sang trai
choptat();
sangdan_tatdan(1,1);//sangdan tu trai sang phai,tat dan tu trai sang phai
choptat();
stdnv_tr_2lan();
choptat();
sangdan_tatdan(0,1);//sangdan tu phai sang trai,tat dan tu trai sang phai
choptat();
sangdan_tatdan(1,0);//sangdan tu trai sang phai,tat dan tu phai sang trai
choptat();
}
}
BÀI TẬP SỐ 1: Chương trình điều khiển 32 led theo yêu cầu sau:
-Sáng dồn port 0
- 1 điểm sáng chạy từ phải sang trái
- 2 điểm sáng chạy từ phải sang trái
- 3 điểm sáng chạy từ phải sang trái
- 4 điểm sáng chạy từ phải sang trái
- 5 điểm sáng chạy từ phải sang trái
- 6 điểm sáng chạy từ phải sang trái
- 7điểm sáng chạy từ phải sang trái
- 8 điểm sáng chạy từ phải sang trái
-chớp tắt 5 lần
-sáng dồn từ ngoài vào 32 led.
-chớp tắt 5 lần
-Sáng dần tắt dần từ phải sang trái, tắt đần từ phải sang trái 2 lần.
-chớp tắt 5 lần
-Sáng dần tắt dần từ trái sang phải, tắt đần từ trái sang phải 2 lần.
-chớp tắt 5 lần
-Sáng tắt dần từ ngoài vào và từ trong ra 2 lần.
-chớp tắt 5 lần
-Sáng dần từ phải sang trái, tắt dần từ trái sang phải 2 lần
-chớp tắt 5 lần
-Sáng dần từ trái sang phải, tắt dần từ phải sang trái 2 lần
TẢI VỀ CODE VÀ FILE MÔ PHỎNG: BAI_987_32LED_TONG_HOP_2.rar
code:
#include<at89x52.h>
unsigned int z,v;
unsigned long w; signed char i,j;
void delay(unsigned int x)
{
unsigned int y;
for(y=0;y<x;y++) {}
}
void choptat()
{
for(i=0;i<5;i++)
{
P0=0XFF;P1=0XFF;P2=0XFF;P3=0XFF;delay(8000);
P0=0;P1=0;P2=0;P3=0;delay(8000);
}
}
void xuat4port()
{
P0=z;P1=(z>>8);P2=v;P3=(v>>8);
}
void tach16bit_xuat4port()
{
z=w;v=(w>>16);xuat4port();
}
void sangdan_tatdan(unsigned char chon1,unsigned char chon2)
{
for(i=0;i<2;i++)
{
for(j=0;j<32;j++)
{
if(chon1==0)
{w=(w<<1)+1;}//sang dan phai sang trai
else if(chon1==1)
{w=(w>>1)+0x80000000;}//sang dan trai sang phai
tach16bit_xuat4port(); delay(10000);
}
for(j=0;j<32;j++)
{
if(chon2==0)
{w=(w<<1);}//tat dan phai sang trai
else if(chon2==1)
{ w=(w>>1);} //tat dan trai sang phai
tach16bit_xuat4port(); delay(10000);
}
}
}
void stdnv_tr_2lan()
{
for(i=0;i<2;i++)
{
for(j=0;j<16;j++)
{
z=(z<<1)+1;v=(v>>1)+0x8000;xuat4port();delay(10000 );
}
for(j=0;j<16;j++)
{
z=(z<<1);v=(v>>1);xuat4port();delay(10000);
}
for(j=0;j<16;j++)
{
v=(v<<1)+1;z=(z>>1)+0x8000;xuat4port();delay(10000 );
}
for(j=0;j<16;j++)
{
v=(v<<1);z=(z>>1);xuat4port();delay(10000);
}
}
}
void sangdon()
{
unsigned long u,t; unsigned char k;
w=0; tach16bit_xuat4port(); delay(5000);
{
for(i=32;i>-1;i--)
{
u=w; t=0x00000001;
for(k=0;k<i;k++)
{
w=u|t; tach16bit_xuat4port(); delay(5000); t=t<<1;
}
}
}
}
void sangdon_tnv()
{
unsigned long ut,up,tt,tp; unsigned char k;
for(j=0;j<2;j++)
{
w=0; xuat4port(); delay(5000);
{
for(i=16;i>-1;i--)
{
ut=v; tt=0x0001;up=z;tp=0x8000;
for(k=0;k<i;k++)
{
v=ut|tt; z=up|tp; xuat4port(); delay(5000); tt=tt<<1;tp=tp>>1;
}
}
}
}
}
void diemsangchay(unsigned int q)
{
unsigned long u,t; unsigned char k;
for(j=0;j<2;j++)
{
w=0; tach16bit_xuat4port(); delay(5000);
{
for(i=32;i<-1;i--)
{
u=w;
switch(q)
{
case 1: t=0x00000001; break;
case 2: t=0x00000003; break;
case 3: t=0x00000007; break;
case 4: t=0x0000000f; break;
case 5: t=0x0000001f; break;
case 6: t=0x0000003f; break;
case 7: t=0x0000007f; break;
case 8: t=0x000000ff; break;
}
for(k=0;k<i;k++)
{
w=u|t; tach16bit_xuat4port(); delay(5000); t=t<<1;
}
}
}
}
}
void sangdonport0()
{
unsigned char tam,ttcd,ttdc;
P0=0xff;tam=0xff;delay(5000);
for(j=8;j>0;j--)
{
ttcd=tam;
ttdc=0xfe;
for(i=0;i<j;i++)
{
P0=ttcd&ttdc;
delay(5000);
ttdc=(ttdc<<1)|0x01;
}
tam=P0;
}
}
void main()
{
w=0; tach16bit_xuat4port(); delay(10000);
while(1)
{
sangdonport0();
choptat();
diemsangchay(1);
diemsangchay(2);
diemsangchay(3);
diemsangchay(4);
diemsangchay(5);
diemsangchay(6);
diemsangchay(7);
diemsangchay(8);
choptat();
sangdon_tnv();
sangdon();
choptat();
sangdan_tatdan(0,0);//sangdan tu phai sang trai,tat dan tu phai sang trai
choptat();
sangdan_tatdan(1,1);//sangdan tu trai sang phai,tat dan tu trai sang phai
choptat();
stdnv_tr_2lan();
choptat();
sangdan_tatdan(0,1);//sangdan tu phai sang trai,tat dan tu trai sang phai
choptat();
sangdan_tatdan(1,0);//sangdan tu trai sang phai,tat dan tu phai sang trai
choptat();
}
}
Comment