#include <REGX51.H>
#include <stdio.H>
#include <intrins.H>
sbit dvgiay1 = P1^0;
sbit chucgiay1 = P1^1;
sbit dvphut1 = P1^2;
sbit chucphut1 = P1^3;
sbit staa = P3^5;
unsigned int DEM1;
unsigned int PHUT1,GIAY1;
unsigned int munit1, se1;
unsigned int DV_PHUT1,CH_PHUT1,DV_GIAY1,CH_GIAY1;
unsigned int MA[10] = {0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90 }; //P0.1.2.3.4.5.6 A. B. C. D. E. F. G
void delay(unsigned int ms)
{
unsigned int i;
for(i=0;i<ms;i++);
}
void time0_int(void) interrupt 1
{
DEM1++;
TH0=0x3C;
TL0=0xB0;
TF0=0;
}
void hex_bcd(void)
{
CH_PHUT1 = munit1/10;
DV_PHUT1 = munit1%10;
CH_GIAY1 = se1/10;
DV_GIAY1 = se1%10;
}
void hienthi(void)
{
unsigned int k;
for(k=0;k<100;k++);
{ P0=MA[CH_PHUT1];
chucphut1=0;
delay(100);
chucphut1=1;
P0=MA[DV_PHUT1];
dvphut1=0;
delay(100);
dvphut1=1;
P0=MA[CH_GIAY1];
chucgiay1=0;
delay(100);
chucgiay1=1;
P0=MA[DV_GIAY1];
dvgiay1=0;
delay(100);
dvgiay1=1;
}
void main(void)
{
TH0 = 0X3C;
TL0 = 0XB0;
TMOD = 0X01;
IE = 0X87;
TR0 = 1;
while(!staa)
{
if(DEM1==20)
{
DEM1=0;
GIAY1++;
se1=GIAY1;
}
if(GIAY1==60)
{
GIAY1=0;
PHUT1++;
munit1=PHUT1;
}
if(PHUT1==60)
{PHUT1=0;}
hex_bcd();
hienthi1();
}
}
}
hỏi là có cách nào để mỗi khi ấn staa (của mình là P3.5) chương trình chạy nhưng chạy tiếp chứ không chạy từ đầu không? mình đã lưu biến phụ là se1 và munit1 vào vùng nhớ idata rồi nhưng biến đó không được lưu mà lại về 0 khi điều kiện "!staa " đảm bảo. cảm ơn mọi người.
#include <stdio.H>
#include <intrins.H>
sbit dvgiay1 = P1^0;
sbit chucgiay1 = P1^1;
sbit dvphut1 = P1^2;
sbit chucphut1 = P1^3;
sbit staa = P3^5;
unsigned int DEM1;
unsigned int PHUT1,GIAY1;
unsigned int munit1, se1;
unsigned int DV_PHUT1,CH_PHUT1,DV_GIAY1,CH_GIAY1;
unsigned int MA[10] = {0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90 }; //P0.1.2.3.4.5.6 A. B. C. D. E. F. G
void delay(unsigned int ms)
{
unsigned int i;
for(i=0;i<ms;i++);
}
void time0_int(void) interrupt 1
{
DEM1++;
TH0=0x3C;
TL0=0xB0;
TF0=0;
}
void hex_bcd(void)
{
CH_PHUT1 = munit1/10;
DV_PHUT1 = munit1%10;
CH_GIAY1 = se1/10;
DV_GIAY1 = se1%10;
}
void hienthi(void)
{
unsigned int k;
for(k=0;k<100;k++);
{ P0=MA[CH_PHUT1];
chucphut1=0;
delay(100);
chucphut1=1;
P0=MA[DV_PHUT1];
dvphut1=0;
delay(100);
dvphut1=1;
P0=MA[CH_GIAY1];
chucgiay1=0;
delay(100);
chucgiay1=1;
P0=MA[DV_GIAY1];
dvgiay1=0;
delay(100);
dvgiay1=1;
}
void main(void)
{
TH0 = 0X3C;
TL0 = 0XB0;
TMOD = 0X01;
IE = 0X87;
TR0 = 1;
while(!staa)
{
if(DEM1==20)
{
DEM1=0;
GIAY1++;
se1=GIAY1;
}
if(GIAY1==60)
{
GIAY1=0;
PHUT1++;
munit1=PHUT1;
}
if(PHUT1==60)
{PHUT1=0;}
hex_bcd();
hienthi1();
}
}
}
hỏi là có cách nào để mỗi khi ấn staa (của mình là P3.5) chương trình chạy nhưng chạy tiếp chứ không chạy từ đầu không? mình đã lưu biến phụ là se1 và munit1 vào vùng nhớ idata rồi nhưng biến đó không được lưu mà lại về 0 khi điều kiện "!staa " đảm bảo. cảm ơn mọi người.
Comment