e mới tìm hiểu về cách quét led, bắt đầu từ bài toán đơn giản này
thực ra đoạn chương trình trên chỉ là hiển thị 4 chữ số 9 8 7 6 trên 4 led 7 đoạn. Như hình dưới các bác à
nhưng giả dụ bây h em muốn đếm ngược, tức là mõi led sẽ giảm đi 1 sau 1 giây ( các led cứ đôc lập với nhau ) thì làm thế nào ạ
thực ra là e đang muốn cải tiền cái mạch đếm ngược của e.. ko dùng con IC giải mã 7447 nữa ý mà mong các bác giúp e
#include <REGX51.H>
unsigned char led,g;
void display()
{ // 0 1 2 3 4 5 6 7 8 9 A B C D E F
unsigned char male7[] = {0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90 ,0x88,0x83,0xC6,0xA1,0x86,0x8E};
switch (led)
{
case 0 :
P1=male7[0];
break;
case 1 :
P1=male7[1];
break;
case 2 :
P1=male7[2];
break;
case 3 :
P1=male7[3];
break;
case 4 :
P1=male7[4];
break;
case 5 :
P1=male7[5];
break;
case 6 :
P1=male7[6];
break;
case 7 :
P1=male7[7];
break;
case 8 :
P1=male7[8];
break;
case 9 :
P1=male7[9];
break;
}
}
void delay_100us()
{
TH0=0xFF; // FF9C= -100
TL0=0x9C;
TR0=1;
while(1)
{
if(TF0==1) break;
}
TR0=0;
TF0=0;
}
void delay(unsigned char t)
{
int i;
for(i=0;i<t;i++)
delay_100us();
}
void main()
{
unsigned char count=9;
TMOD=0x01;
count=9;
while(1)
{
{
P3=0;
led=count;
P3_0=1;
display();
delay(33);
P3=0;
led=count-1;
P3_1=1;
display();
delay(33);
P3=0;
led=count-2;
P3_2=1;
display();
delay(33);
P3=0;
led=count-3;
P3_3=1;
display();
delay(33);
}
}
}
unsigned char led,g;
void display()
{ // 0 1 2 3 4 5 6 7 8 9 A B C D E F
unsigned char male7[] = {0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90 ,0x88,0x83,0xC6,0xA1,0x86,0x8E};
switch (led)
{
case 0 :
P1=male7[0];
break;
case 1 :
P1=male7[1];
break;
case 2 :
P1=male7[2];
break;
case 3 :
P1=male7[3];
break;
case 4 :
P1=male7[4];
break;
case 5 :
P1=male7[5];
break;
case 6 :
P1=male7[6];
break;
case 7 :
P1=male7[7];
break;
case 8 :
P1=male7[8];
break;
case 9 :
P1=male7[9];
break;
}
}
void delay_100us()
{
TH0=0xFF; // FF9C= -100
TL0=0x9C;
TR0=1;
while(1)
{
if(TF0==1) break;
}
TR0=0;
TF0=0;
}
void delay(unsigned char t)
{
int i;
for(i=0;i<t;i++)
delay_100us();
}
void main()
{
unsigned char count=9;
TMOD=0x01;
count=9;
while(1)
{
{
P3=0;
led=count;
P3_0=1;
display();
delay(33);
P3=0;
led=count-1;
P3_1=1;
display();
delay(33);
P3=0;
led=count-2;
P3_2=1;
display();
delay(33);
P3=0;
led=count-3;
P3_3=1;
display();
delay(33);
}
}
}
nhưng giả dụ bây h em muốn đếm ngược, tức là mõi led sẽ giảm đi 1 sau 1 giây ( các led cứ đôc lập với nhau ) thì làm thế nào ạ
thực ra là e đang muốn cải tiền cái mạch đếm ngược của e.. ko dùng con IC giải mã 7447 nữa ý mà mong các bác giúp e
Comment