用獨(dú)立按鍵控制16*16LED點(diǎn)陣模塊點(diǎn)亮和熄滅 按下K1 出現(xiàn)漢字“開(kāi)”,顯示10S后熄滅。 按下K2出現(xiàn)漢字“關(guān)”,顯示10S后熄滅
#include "reg51.h"
#include "intrins.h"
typedef unsigned int u16;
typedef unsigned char u8;
sbit SRCLK=P3^6;
sbit RCLK=P3^5;
sbit SER=P3^4;
sbit k1=P1^0;
u8 code ledwei[]=
{
0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80,
};
u8 code ledwei1[]=
{
0x80,0x82,0x82,0x82,0xFE,0x82,0x82,0x82,0x82,0x82,0xFE,0x82,0x82,0x82,0x80,0x00,
0x00,0x80,0x40,0x30,0x0F,0x00,0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0x00,
};
u8 code ledwei2[]=
{
0x00,0x00,0x10,0x11,0x16,0x10,0x10,0xF0,0x10,0x10,0x14,0x13,0x10,0x00,0x00,0x00,
0x81,0x81,0x41,0x41,0x21,0x11,0x0D,0x03,0x0D,0x11,0x21,0x41,0x41,0x81,0x81,0x00,
};
void delay(u16 i)
{
while(i--);
}
void keypros()
{
if(k1==0)
{
delay(1000);
if(k1==0)
{
ledwei=!ledwei;
}
while(!k1);
}
}
void main()
{
ledwei=1;
while(1)
{
keypros();
}
}
void delay(u16 i)
{
while(i--);
}
void Hc595SendByte(u8 dat1,u8 dat2,u8 dat3,u8 dat4)
{
u8 a;
SRCLK = 1;
RCLK = 1;
for(a=0;a<8;a++)
{
SER = dat1 >> 7;
dat1 <<= 1;
SRCLK = 0;
_nop_();
_nop_();
SRCLK = 1;
}
for(a=0;a<8;a++)
{
SER = dat2 >> 7;
dat2 <<= 1;
SRCLK = 0;
_nop_();
_nop_();
SRCLK = 1;
}
for(a=0;a<8;a++)
{
SER = dat3 >> 7;
dat3 <<= 1;
SRCLK = 0;
_nop_();
_nop_();
SRCLK = 1;
}
for(a=0;a<8;a++)
{
SER = dat4 >> 7;
dat4 <<= 1;
SRCLK = 0;
_nop_();
_nop_();
SRCLK = 1;
}
RCLK = 0;
_nop_();
_nop_();
RCLK = 1;
}
void main()
{
u8 i;
while(1)
{
for(i=0;i<16;i++)
{
Hc595SendByte(~ledwei[i+16],~ledwei[ i],ledduan1[16+i],ledduan1[ i]);
delay(10);
}
}
}
|