#include <reg51.h>
#include <intrins.h>
sbit SRCLK=P3^6;
sbit RCLK=P3^5;
sbit SER=P3^4;
unsigned char lei[]={/*-- 文字: 蕾 --*/
/*-- 宋體12; 此字體下對應的點陣為:寬x高=16x16 --*/
0x82,0x62,0x2A,0xAA,0xAF,0xAA,0x2A,0xFA,0x2A,0xAA,0xAF,0xAA,0x2A,0xA2,0x62,0x00,
0x00,0x00,0xF8,0xAA,0xAA,0xAA,0xA8,0xFB,0xA8,0xAA,0xAA,0xAA,0xF8,0x00,0x00,0x00,};
unsigned char 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};
void delay(unsigned int i)
{
while(i--);
}
void delay1s(void) //誤差 -0.000000000227us
{
unsigned char a,b,c;
for(c=13;c>0;c--)
for(b=247;b>0;b--)
for(a=142;a>0;a--);
_nop_(); //if Keil,require use intrins.h
}
void send_74hc595(unsigned char dat1,unsigned char dat2,unsigned char dat3,unsigned char dat4)
{ unsigned char i;
SRCLK = 1;
RCLK = 1;
for(i=0;i<8;i++) //移位
{
SER=dat1>>7; //傳送最高位
dat1<<=1;
SRCLK=0;
_nop_();
_nop_();
SRCLK=1;
}
for(i=0;i<8;i++) //移位
{
SER=dat2>>7; //傳送最高位
dat2<<=1;
SRCLK=0;
_nop_();
_nop_();
SRCLK=1;
}
for(i=0;i<8;i++) //移位
{
SER=dat3>>7; //傳送最高位
dat3<<=1;
SRCLK=0;
_nop_();
_nop_();
SRCLK=1;
}
for(i=0;i<8;i++) //移位
{
SER=dat4>>7; //傳送最高位
dat4<<=1;
SRCLK=0;
_nop_();
_nop_();
SRCLK=1;
}
RCLK=0;
_nop_();
_nop_();
RCLK=1;
}
void main()
{
unsigned char i;
unsigned int j=100;
while(1)
{
for(i=0;i<16;i++)
{
send_74hc595(~ledwei[i+16],~ledwei[i],lei[i+16],lei[i]);
delay(10);
}
}
} |