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

📄 newyear.c

📁 16*16点阵实现
💻 C
字号:

#include <reg51.h>       //51芯片管脚定义头文件
#include <intrins.h>	 //内部包含延时函数 _nop_();

#define uchar unsigned char
#define uint  unsigned int

#define BLKN 2          //列锁存器数

sbit  SDATA_595=P0^0;   //串行数据输入
sbit  SCLK_595 =P2^7;   //移位时钟脉冲
sbit  RCK_595  =P0^2;   //输出锁存器控制脉冲
sbit  G_74138  =P2^4;   //显示允许控制信号端口

uchar data  dispram[32];  //显示缓存
uchar temp;

void  delay(uint );

uchar code Bmp[][32]=          
 {
   {0xff,0x7f,0xff,0x7f,0xfe,0xbf,0xfe,0xbf,0xfd,0xdf,0x83,0xe0,0xdf,0xfd,0xef,0xfb,0xf7,0xf7,0xfb,0xef,0xf7,0x77,0xf6,0xb7,0xe9,0xcb,0xe7,0xf3,0xdf,0xfd,0xff,0xff},

   {0xff,0x7f,0xff,0x7f,0xfe,0x3f,0xfe,0x3f,0xfc,0x1f,0x80,0x0,0xc0,0x1,0xe0,0x3,0xf0,0x7,0xf8,0xf,0xf0,0x7,0xf0,0x87,0xe1,0xc3,0xe7,0xf3,0xdf,0xfd,0xff,0xff},

  {0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
    0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
	0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF},

   {0x7F,0xFF,0xBF,0xFF,0xDF,0xFF,0xEF,0xFF,0xF7,0xFF,0xFB,0xFF,
    0xFD,0xFF,0xFE,0xFF,0xFF,0x7F,0xFF,0xBF,0xFF,0xDF,0xFF,0xEF,
    0xFF,0xF7,0xFF,0xFB,0xFF,0xFD,0xFF,0xFE},

   {0xef,0xf7,0xf5,0xe3,0x80,0x9f,0xff,0xbf,0xdd,0xbf,0xeb,0xbb,0x0,0x1,0xf5,0xb7,0x80,0xb7,0xf7,0xb7,0xf5,0xb7,0xd6,0x77,0xb7,0x77,0x76,0xf7,0xd7,0xf7,0xef,0xf7},//新
 
   {0xf7,0xff,0xf7,0xf7,0xe0,0x3,0xee,0xff,0xde,0xff,0xbe,0xef,0xe0,0x7,0xee,0xff,0xee,0xff,0xee,0xfb,0x0,0x1,0xfe,0xff,0xfe,0xff,0xfe,0xff,0xfe,0xff,0xfe,0xff},//年
  
   {0xef,0x7f,0xef,0x7f,0xef,0x7f,0xef,0x77,0xa4,0x3,0xab,0x77,0xaf,0x77,0x6f,0x77,0xef,0x77,0xe0,0x1,0xef,0x7f,0xee,0xbf,0xee,0xdf,0xed,0xef,0xeb,0xf1,0xe7,0xfb},//快
  
   {0xff,0xdf,0xff,0xf,0xe0,0xff,0xef,0xff,0xee,0xff,0xee,0xff,0xde,0xfb,0x80,0x1,0xfe,0xff,0xfe,0xff,0xf6,0xdf,0xf6,0xef,0xee,0xf7,0xde,0xf3,0xba,0xfb,0xfd,0xff}//乐 
 };

/*******************************************************
*                                                      *
* 延时函数                                             *
*                                                      *
*******************************************************/
void  delay(uint dt)
{
   uchar bt;
   for(;dt;dt--)
   for(bt=0;bt<255;bt++);
 }

/**********************************************************/
void delay0(uint x)    //x*0.14MS
{
   uchar b;
   while(x--)
   {
    for (b = 0; b<13; b++) {}
   }
} 
/*******************************************************
*                                                      *
*将显示数据送入74HC595内部移位寄存器                   *
*                                                      *
*******************************************************/
void WR_595(void)
{
     uchar x;
      for (x=0;x<8;x++)
     {
      temp=temp<<1; 
      SDATA_595=CY;
      SCLK_595=1;        //上升沿发生移位
       _nop_();
       _nop_();
      SCLK_595=0;
     }        
}

/*******************************************************
*                                                      *
* 主函数                                               *
*                                                      *
*******************************************************/
void  main(void)
{
  uchar i,k,h,s;
  TMOD = 0x01;             //定时器T0工作方式1
  TH0 = 0xFC;              //1ms定时常数
  TL0 = 0x66;
  G_74138 = 1;             //关闭显示
  RCK_595=0;
  P2 =0xF0;                //行号端口清零

  IE = 0x82;               //允许定时器T0中断
  TR0 = 1;                 //启动定时器T0
  while(1)
  {
    for(k=0;k<3;k++)       
    {
      for(i=0;i<32;i++)         
  	  {
  	    dispram[i]= Bmp[k][i];
      }
  	  delay(1500);
    }

      TR0=0;
	  s=0;
      h=0;
      while(s!=32)        
  	  {
	    G_74138=1;          //关闭显示
        s++; 	      	  
        temp = Bmp[3][s];  
        WR_595();
		s--;  	  
        temp = Bmp[3][s];
        WR_595();
		s++;
		s++;

		RCK_595 = 1;        //上升沿将数据送到输出锁存器
         _nop_();
        RCK_595 = 0;        //锁存显示数据

        G_74138=0;          //打开显示
        
		for(i=0;i<16;i++)
	    {
          while(h!=0x10)
		  {		 
		   P2=h;
		   h++;
		   delay0(10);
          }	    
		 h=0;
        }
      }
     
      temp = 0x00;
      WR_595();
	  WR_595();
      RCK_595 = 1;        //上升沿将数据送到输出锁存器
       _nop_();
      RCK_595 = 0;        //锁存显示数据
      h=0;
	  while(h!=0x10)
	  {		 
		P2=h;
		h++;
		delay0(2000);
      }	      	  
	  TR0=1;

     for(k=4;k<8;k++)       //显示"伟纳电子"
    {
      for(i=0;i<32;i++)         
  	  {
  	    dispram[i]= Bmp[k][i];
      }
  	  delay(1500);
    }

  } //end of while(1)
} //end of main()


 
/*******************************************************
*                                                      *
* 中断服务函数                                         *
*                                                      *
*******************************************************/
void  leddisplay(void) interrupt 1 using 1
{
   uchar i,j=BLKN;
   TH0 = 0xFC;          //1ms定时常数
   TL0 = 0x66;
   i=P2;                //读取当前显示的行号
   i=++i & 0x0f;        //行号加1,屏蔽高4位
   do{
   	  j--;
      temp = dispram[i*BLKN+j];
      WR_595();
     }while(j);
   
   G_74138=1;          //关闭显示
   P2 &= 0xf0;         //行号端口清零
   RCK_595 = 1;        //上升沿将数据送到输出锁存器
   P2 |=i;             //写入行号
   RCK_595 = 0;        //锁存显示数据
   G_74138=0;          //打开显示
}

/******************************************************/

⌨️ 快捷键说明

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