Các anh các chị cho em hỏi.Em có một đoạn CODE về mạch đếm sản phẩm như sau:
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// khai bao Header
#include<reg52.h>
#include<stdio.h>
#define m 2
sbit start = P1^4;
sbit Led1 = P1^0;
sbit Led2 = P1^1;
sbit Led3 = P1^2;
sbit Led4 = P1^3;
sbit note = P3^6;
unsigned char M[10]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x9 0};
unsigned long int result;
unsigned char thousand,hundred,tens,unit;
void delay_ms(unsigned int time)
{
unsigned int i;
unsigned int j;
for(i = time;i>0;i--)
for(j=0;j<300;j++);
}
void clear_led(void)
{
P1=0xff;
P2=0xff;
}
void Display(void)
{
thousand = result/1000;
if (thousand == 0)
clear_led();
else
{ Led4 = 0; Led3 = 1; Led2=1; Led1 = 1;
P2=M[thousand];
delay_ms(m);
clear_led();
}
hundred =(result%1000)/100;
if ((thousand == 0)&&(hundred == 0))
clear_led();
else
{ Led4 = 1; Led3 = 0; Led2=1; Led1 = 1;
P2=M[hundred];
delay_ms(m);
clear_led();
}
tens = ((result%1000)%100)/10;
if ((thousand == 0)&&(hundred == 0)&&(tens == 0))
clear_led();
else
{ Led4 = 1; Led3 = 1; Led2=0; Led1 = 1;
P2=M[tens];
delay_ms(m);
clear_led();
}
unit = ((result%1000)%100)%10;
Led4 = 1; Led3 = 1; Led2=1; Led1 = 0;
P2=M[unit];
delay_ms(m);
clear_led();
}
void init(void)
{
TMOD=0x01;
IE=0x86;
IP=0x04;
TH0=-5000/256; // Tre 1s
TL0=-5000%256;
result = 0;
clear_led(); // Xoa LED
IT1=1;
TF0=1;
TR0=1;
}
void Outdata(void) interrupt 1
{
TR0=0;
Display();
TH0=-5000/256;
TL0=-5000%256;
TR0=1;
}
// Ham dem su dung ngat ngoai
void Count(void) interrupt 2
{
EA=0;
result++;
if(result >= 9999)
{note=1;
result=0;}
delay_ms(10);
EA=1;
}
void main(void)
{
EA = 0;
init();
delay_ms(100);
while(start);
EA = 1;
result = 0;
while(1)
{
}
}
///////////////////////////////////////////////////////
Giờ em muốn phát triển chương trình đó là:"Có một nút nhấn ,nhấn lần một thì tất cả các LED đều sáng con số 9999,nhấn lần 2 thì mới bắt đầu đếm và khi đếm tới 9999 thì đưa ra cảnh báo ra LED hoặc ra Loa CHIP". Em làm mãi mà vẫn không được.Xin các anh các chị chỉ giúp.Cảm ơn các anh chị nhiều!
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// khai bao Header
#include<reg52.h>
#include<stdio.h>
#define m 2
sbit start = P1^4;
sbit Led1 = P1^0;
sbit Led2 = P1^1;
sbit Led3 = P1^2;
sbit Led4 = P1^3;
sbit note = P3^6;
unsigned char M[10]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x9 0};
unsigned long int result;
unsigned char thousand,hundred,tens,unit;
void delay_ms(unsigned int time)
{
unsigned int i;
unsigned int j;
for(i = time;i>0;i--)
for(j=0;j<300;j++);
}
void clear_led(void)
{
P1=0xff;
P2=0xff;
}
void Display(void)
{
thousand = result/1000;
if (thousand == 0)
clear_led();
else
{ Led4 = 0; Led3 = 1; Led2=1; Led1 = 1;
P2=M[thousand];
delay_ms(m);
clear_led();
}
hundred =(result%1000)/100;
if ((thousand == 0)&&(hundred == 0))
clear_led();
else
{ Led4 = 1; Led3 = 0; Led2=1; Led1 = 1;
P2=M[hundred];
delay_ms(m);
clear_led();
}
tens = ((result%1000)%100)/10;
if ((thousand == 0)&&(hundred == 0)&&(tens == 0))
clear_led();
else
{ Led4 = 1; Led3 = 1; Led2=0; Led1 = 1;
P2=M[tens];
delay_ms(m);
clear_led();
}
unit = ((result%1000)%100)%10;
Led4 = 1; Led3 = 1; Led2=1; Led1 = 0;
P2=M[unit];
delay_ms(m);
clear_led();
}
void init(void)
{
TMOD=0x01;
IE=0x86;
IP=0x04;
TH0=-5000/256; // Tre 1s
TL0=-5000%256;
result = 0;
clear_led(); // Xoa LED
IT1=1;
TF0=1;
TR0=1;
}
void Outdata(void) interrupt 1
{
TR0=0;
Display();
TH0=-5000/256;
TL0=-5000%256;
TR0=1;
}
// Ham dem su dung ngat ngoai
void Count(void) interrupt 2
{
EA=0;
result++;
if(result >= 9999)
{note=1;
result=0;}
delay_ms(10);
EA=1;
}
void main(void)
{
EA = 0;
init();
delay_ms(100);
while(start);
EA = 1;
result = 0;
while(1)
{
}
}
///////////////////////////////////////////////////////
Giờ em muốn phát triển chương trình đó là:"Có một nút nhấn ,nhấn lần một thì tất cả các LED đều sáng con số 9999,nhấn lần 2 thì mới bắt đầu đếm và khi đếm tới 9999 thì đưa ra cảnh báo ra LED hoặc ra Loa CHIP". Em làm mãi mà vẫn không được.Xin các anh các chị chỉ giúp.Cảm ơn các anh chị nhiều!
Comment