em đang mò về lập trình c, em đang viết thử đoạn chương trình điều khiển led & đoạn cho đếm lên, xin các tiền bối chỉ dẫn giùm em về ngắt time dùng để quét led 7 đoạn. em có tham khảo ở các vidu mà làm hoài khong chạy mấy anh giúm em sửa lỗi và chỉ em cách dùng ngăt time với. đây là đoạn chương trình em viết:
#include <REGX51.H>
#define down P2_0
#define mode P2_1
#define up P2_2
#define led_dv P2_3
#define led_ch P2_4
#define led_tr P2_5
#define led_ng P2_6
#define data_led P0
unsigned char mang[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x9 0};
unsigned char don_vi=0, chuc=0, tram=0, ngan=0;
unsigned int x=0;void delay_ms(unsigned int time);
void delay_ms(unsigned int time);
void tang_giam(void);
void display(void);
void init(void);
void delay_ms(unsigned int n)
{
unsigned int i,j;
for(i=0;i<n;i++)
for(j=0;j<100;j++);
}
void main(void)
{
init();
while(1)
{
x++;
delay_ms(10);
if(x==10000)
{
x=0;
}
}
}
void display(void)
{
led_dv=0;
data_led=mang[x%10];
delay_ms(1);
led_dv=1;
data_led=255;
led_ch=0;
data_led=mang[(x%100)/10];
delay_ms(1);
led_ch=1;
data_led=255;
led_tr=0;
data_led=mang[(x/100)%10];
delay_ms(1);
led_tr=1;
data_led=255;
led_ng=0;
data_led=mang[x/1000];
delay_ms(1);
led_ng=1;
data_led=255;
}
void init(void)
{
IE=0x82;
TMOD=0x01;
TH0=0x3C;
TL0=0Xaf;
TR0=1;
}
void time0(void) interrupt 1 using 0
{
TR0=0;
TH0=0x3C;
TL0=0Xaf;
TR0=1;
display();
}
đây là mô phỏng: mo phong.rar
#include <REGX51.H>
#define down P2_0
#define mode P2_1
#define up P2_2
#define led_dv P2_3
#define led_ch P2_4
#define led_tr P2_5
#define led_ng P2_6
#define data_led P0
unsigned char mang[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x9 0};
unsigned char don_vi=0, chuc=0, tram=0, ngan=0;
unsigned int x=0;void delay_ms(unsigned int time);
void delay_ms(unsigned int time);
void tang_giam(void);
void display(void);
void init(void);
void delay_ms(unsigned int n)
{
unsigned int i,j;
for(i=0;i<n;i++)
for(j=0;j<100;j++);
}
void main(void)
{
init();
while(1)
{
x++;
delay_ms(10);
if(x==10000)
{
x=0;
}
}
}
void display(void)
{
led_dv=0;
data_led=mang[x%10];
delay_ms(1);
led_dv=1;
data_led=255;
led_ch=0;
data_led=mang[(x%100)/10];
delay_ms(1);
led_ch=1;
data_led=255;
led_tr=0;
data_led=mang[(x/100)%10];
delay_ms(1);
led_tr=1;
data_led=255;
led_ng=0;
data_led=mang[x/1000];
delay_ms(1);
led_ng=1;
data_led=255;
}
void init(void)
{
IE=0x82;
TMOD=0x01;
TH0=0x3C;
TL0=0Xaf;
TR0=1;
}
void time0(void) interrupt 1 using 0
{
TR0=0;
TH0=0x3C;
TL0=0Xaf;
TR0=1;
display();
}
đây là mô phỏng: mo phong.rar
Comment