⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 47hc595.c

📁 LED显示屏的实验
💻 C
字号:
#include <reg52.h>
#include <intrins.h>
 
sbit sdi = P3^2;
sbit shcp = P3^1;
sbit stcp = P3^0;
sbit eo = P3^7;
#define hang P1
 
unsigned char aa;
 
unsigned char g_data[16][2*3];
unsigned char F=0;
 
code unsigned char character_state[16][2*7]=
{
 {0x01,0x00,0x08,0x08,0x01,0x04,0x02,0x00,0x00,0x08,0x00,0x00,0x00,0x08,},
 {0x11,0x00,0x0B,0xFC,0x07,0x84,0x02,0x04,0x7D,0xFC,0x00,0x80,0x3F,0xFC,},
 {0x11,0x10,0x12,0x08,0x7C,0x04,0xFF,0xFE,0x45,0x08,0x04,0x80,0x00,0x08,},
 {0x1F,0xF8,0x13,0xF8,0x04,0x24,0x04,0x00,0x49,0x08,0x04,0x40,0x00,0x48,},
 {0x11,0x00,0x22,0x08,0x04,0x24,0x04,0x10,0x49,0xF8,0x08,0x40,0xFF,0xE8,},
 {0x21,0x00,0x4B,0xF8,0x05,0x24,0x0F,0xF8,0x51,0x08,0x08,0x20,0x00,0x08,},
 {0x01,0x04,0x88,0x00,0xFF,0xA4,0x08,0x10,0x49,0x08,0x11,0x10,0x00,0x88,},
 {0xFF,0xFE,0x17,0xFC,0x0C,0x24,0x18,0x10,0x49,0xF8,0x21,0x0E,0x3F,0xC8,},
 {0x04,0x80,0x30,0x10,0x0E,0x24,0x2F,0xF0,0x45,0x04,0xC2,0x04,0x20,0x88,},
 {0x04,0x80,0x50,0x14,0x15,0xA4,0x48,0x10,0x45,0x88,0x02,0x00,0x20,0x88,},
 {0x04,0x80,0x9F,0xFE,0x14,0xA4,0x88,0x10,0x45,0x50,0x04,0x00,0x20,0x88,},
 {0x08,0x80,0x12,0x10,0x24,0x24,0x0F,0xF0,0x69,0x20,0x08,0x40,0x20,0x88,},
 {0x08,0x82,0x11,0x10,0x44,0x04,0x08,0x10,0x51,0x10,0x10,0x20,0x3F,0x88,},
 {0x10,0x82,0x11,0x10,0x04,0x04,0x08,0x10,0x41,0x4E,0x1F,0xF0,0x20,0x88,},
 {0x20,0x7E,0x10,0x50,0x04,0x14,0x08,0x50,0x41,0x84,0x00,0x10,0x00,0x28,},
 {0x40,0x00,0x10,0x20,0x04,0x08,0x08,0x20,0x41,0x00,0x00,0x00,0x00,0x10,},
};  
 
void dleay(unsigned char t)
{
	unsigned char i,j;
	for(i=0;i<t;i++)
		for(j=0;j<255;j++);
}

void sendbyte(unsigned char dat)
{
 unsigned char j;
 for(j=0;j<8;j++)
 {
  shcp = 0;
  if(dat&0x80)
   sdi = 1;
  else
   sdi = 0;
  shcp = 1;
  dat = dat<<1;
 }
}
 
void display()
{
 unsigned char i;
 for(i=0;i<16;i++)//g_data
 {
  sendbyte(g_data[i][0]);
  sendbyte(g_data[i][1]); sendbyte(g_data[i][2]);
  sendbyte(g_data[i][3]); sendbyte(g_data[i][4]);sendbyte(g_data[i][5]);
  stcp = 0;
  hang = ~i;
  stcp = 1;
  //dleay(1);
 }
}
 
void updat (void) interrupt 1
{
    TH0 = -50000/255;
    TL0 = -50000%255;
     aa++;     
}
 
void ledinit(void)
{
 unsigned char s;
    TMOD=0x01;
    TH0 = -50000/255;
    TL0 = -50000%255;
    TR0=1;
    ET0=1;
    EA=1;
 for(s=0;s<16;s++)
 {
  g_data[s][0]=character_state[s][0];
  g_data[s][1]=character_state[s][1];
  g_data[s][2]=character_state[s][2];
  g_data[s][3]=character_state[s][3];
  g_data[s][4]=character_state[s][4];
  g_data[s][5]=character_state[s][5];
 } 
}
/*
void left(unsigned char *s,unsigned char length)
{
 unsigned char cur=s[0];
 unsigned char m;
 unsigned char c;
 for( m=0;m<length-1;m++ )
 {
  c=s[m+1];
  c=c>>7;
  s[m]=(s[m]<<1);
  s[m]=s[m]|c;
 }
 s[m]=(s[m]<<1);
 cur=cur>>7;
 s[m]=s[m]|cur;
}*/
void left(unsigned char *s,unsigned char length,unsigned char n)
{
 unsigned char cur=s[0];
 unsigned char m;
 unsigned char c;	    
 for( m=0;m<length-1;m++ )
 {
  c=s[m+1];
  c=c>>(8-n);
  s[m]=(s[m]<<n);
  s[m]=s[m]|c;
 }
 s[m]=(s[m]<<n);
 cur=cur>>(8-n);
 s[m]=s[m]|cur;
}  

void convert(void)
{ 
 unsigned char s; 
 unsigned char g_line[8];
 unsigned char s1,s2,s3;
 aa=0;
 eo=1;
 
/*
 for(s=0;s<16;s++)
 {
  left(&(g_data[s][0]),6);
 } 
*/
 F++;
 if( F== 14*8 ) F=0;
 //F=F%(14*8);
 
 s1=F/8;
 s2=F%8;
 
 for(s=0;s<16;s++)
 {
  for( s3=0;s3<7;s3++)
   g_line[s3]=character_state[s][(s1+s3)%14]; 
  
  left(&(g_line[0]),7,s2);
  for( s3=0;s3<6;s3++)
   g_data[s][s3]=g_line[s3];
 }
 eo=0;
}
 
void main(void)
{   
 F=0;
 ledinit();
 while(1)
 {
 if(aa>0)
  {   
    convert();
  }
  display();
 }
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -