#include <reg51.h>
typedef unsigned char u8;
typedef unsigned int u16;
#define DOT_MATRIX_PORT P0
#define LINE_SELECT_PORT P2
#define INTERRUPT_PIN P3^2
void delay_10us(u16 ten_us)
{
while(ten_us--);
}
void delay_ms(u16 ms)
{
u16 i, j;
for(i=ms;i>0;i--)
for(j=110;j>0;j--);
}
unsigned char heart_pattern[16][16]={0x78,0xFC,0x7E,0x3F,0x7E,0xFC,0x78,0x00,
0x70,0xF8,0x7C,0x3E,0x7C,0xF8,0x70,0x00,
0x60,0xF0,0x78,0x3C,0x78,0xF0,0x60,0x00,
0x40,0xE0,0x70,0x38,0x70,0xE0,0x40,0x00,
0x78,0xFC,0x7E,0x3F,0x7E,0xFC,0x78,0x00};
volatile bit donghua_on = 0;
void display_heart(void);
void init_interrupt(void);
void main(void)
{
init_interrupt();
while(1)
{
if (donghua_on)
{
display_heart();
donghua_on = 0;
delay_ms(1000);
}
}
}
void display_heart(void)
{
int row;
for(row=0; row<16; row++)
{
LINE_SELECT_PORT = ~(1<<row);
DOT_MATRIX_PORT = heart_pattern[row];
delay_us(1000);
}
}
void interrupt isr(void)
{
donghua_on = 1;
EXTI0_IF = 0;
}
void init_interrupt(void)
{
IT0 = 1;
EX0 = 1;
EA = 1;
}
|