名称:按键控制 8X8LED 点阵屏显 示图形
说明:每次按下 K1 时,会使 8X8LED 点阵屏循环显示不同图形。本例同时使用外部中断和定 时中断
#include"reg52.h"
#include"intrins.h"
#define led P0
typedef unsigned int u16;
typedef unsigned char u8;
sbit src=P3^6;
sbit rc=P3^5;
sbit ser=P3^4;
sbit key=P3^2;
u8 duan[]={0x80,0x40,0x20,0x10,0x08,0x04,0x02,0x01};
u8 count=0;
u8 i;
u8 flag=0;
void delay(u16 x)
{
while(x--);
}
void tim_init()
{
EA=1;
ET0=1;
TMOD=0X01;
TH0=0XD8;
TL0=0XF0;
TR0=1;
}
void int0_init()
{
EX0=1;
IT0=1;
}
void c595(u8 date)
{
u8 a;
src=0;
rc=0;
for(a=0;a<8;a++)
{
ser=date>>7;
date<<=1;
src=1;
_nop_();
_nop_();
src=0;
}
rc=1;
_nop_();
_nop_();
rc=0;
}
void main()
{
led=0xcc;
c595(0x00);
tim_init();
int0_init();
while(1);
}
void int0() interrupt 0
{
if(key==0)
{
delay(4);
if(key==0)
{
while(key==0);
flag=1;
}
}
}
void tim0() interrupt 1
{
TH0=0XD8;
TL0=0XF0;
count++;
if(count==50)
{
if(flag==1)
{
i++;
c595(duan[i]);
led=~led;
delay(100);
if(i==7)
{
i=0;
flag=0;
}
}
count=0;
}
}