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

📄 hanzixianshi.c

📁 汉字点阵显示.能实现上行,左移动,卷帘入,出等功能.
💻 C
字号:
  #include<reg51.h>
  #define BLKN 2    //列锁存器数
  sbit G=0x97;      //痬 1.7为显示允许控制信号端日
  sbit RCLK=0x96;      //P1. 6为输出锁存器时钟信号端口

  sbit SCLR=0X95;  //P1.5为移位寄存器清0端
  void delay(unsigned int);  //延时函数
  unsigned char data dispram[64];   //显示缓存
  void main(void)
    
    {    
    unsigned char code Bmp[][32]={   //字模表
        
{
/*--  文字:  贺  --*/
/*--  Fixedsys12;  此字体下对应的点阵为:宽x高=16x16   --*/
0xF7,0xFF,0x80,0x83,0xF6,0xBB,0xF6,0xBB,0xEE,0x83,0xDA,0xBB,0xBD,0xFF,0xF0,0x0F,
0xF7,0xEF,0xF7,0x6F,0xF7,0x6F,0xF7,0x6F,0xF6,0xBF,0xFD,0xCF,0xF3,0xE3,0xCF,0xF7
},
{
/*--  文字:  明  --*/
/*--  Fixedsys12;  此字体下对应的点阵为:宽x高=16x16   --*/
0xFF,0x03,0x83,0x7B,0xBB,0x7B,0xBB,0x7B,0xBB,0x03,0x83,0x7B,0xBB,0x7B,0xBB,0x7B,
0xBB,0x03,0x83,0x7B,0xFF,0x7B,0xFE,0xFB,0xFE,0xFB,0xFD,0xFB,0xFB,0xEB,0xFF,0xF7
},
{
/*--  文字:  老  --*/
/*--  Fixedsys12;  此字体下对应的点阵为:宽x高=16x16   --*/
0xFD,0xFF,0xFD,0xF7,0x80,0x03,0xFD,0xF7,0xFD,0xEF,0xFD,0xDF,0x00,0x01,0xFE,0x7F,
0xFD,0xFF,0xF3,0xCF,0xCB,0x3F,0x38,0xFF,0xFB,0xFB,0xFB,0xFB,0xFC,0x03,0xFF,0xFF
},
{
/*--  文字:  师  --*/
/*--  Fixedsys12;  此字体下对应的点阵为:宽x高=16x16   --*/
0xF7,0xFF,0xF4,0x01,0xB7,0xDF,0xB7,0xDF,0xB4,0x01,0xB5,0xDD,0xB5,0xDD,0xB5,0xDD,
0xB5,0xDD,0xAD,0xDD,0xAD,0xD5,0xED,0xDB,0xDF,0xDF,0xBF,0xDF,0x7F,0xDF,0xFF,0xDF
},
{
/*--  文字:  好  --*/
/*--  Fixedsys12;  此字体下对应的点阵为:宽x高=16x16   --*/
0xEF,0xFF,0xEE,0x03,0xEF,0xF7,0xEF,0xEF,0x03,0xDF,0xDB,0xDF,0xDB,0xDF,0xD8,0x01,
0xBB,0xDF,0x9B,0xDF,0xE7,0xDF,0xF7,0xDF,0xEB,0xDF,0xD9,0xDF,0xBB,0x5F,0x7F,0xBF
  },
  {
    0xf8,0x3f,0xe7,0xcf,0xdf,0xF7,0xBF,0xFB,0xB3,0x9B,0x73,0x9D,0x7F,0xFD,0x7E,0xFD,
    0x6F,0xED,0x67,0xCD,0xB3,0x9B,0xB8,0x3B,0xDF,0xF7,0xE7,0xCF,0xF8,0x3F,0xFF,0xFF
    }    /*◎*/
	 };
  register unsigned char i,j,k,l;
SCON=0x00;    //串口工作模式0:移位寄存器方式
TMOD=0x01;    //定时器T0工作方式1:16位方式
TR0=1;    //启动定时器T0
P1=0x3f;    //PI端口初值:允许接收、锁存、显示
IE=0x82;    //允许定时器T0中断
while(1)
{
  delay(2000);    //延时2S
  for(i=0;i<32;i++)    //显示效果:卷帘出
{
dispram[i]=Bmp[5][i];
if(i%2)delay(100);
}
delay(3000);
for(i=0;i<6;i++)      //显示效果:上滚屏
  {
  for(j=0;j<16;j++)
    {
    for(k=0;k<15;k++)
	 {
  dispram[k*BLKN]= dispram[(k+1)*BLKN];
  dispram[k*BLKN+1]=dispram[(k+1)*BLKN+1];
}
  dispram[30]=Bmp[i][j*BLKN];
  dispram[31]=Bmp[i][j*BLKN+1];
  delay(100);
  }
  }
delay(3000);
for(i=0;i<6;i++)    //显示效果:左跑马
  {
  for(j=0;j<2;j++)
    for(k=1;k<9;k++)
	 {
    for(l=0;l<32;l++)
 {
dispram[l*BLKN]=dispram[l*BLKN]<<1|dispram[l*BLKN+1]>>7;
dispram[l*BLKN+1]=dispram[l*BLKN+1]<<1|Bmp[i][l*BLKN+j]>>(8-k);


    }
    delay(100);
    }    //end(k=0;k<16;k++)
    }    //end f0r(i=0; i<6;i++)    
    delay(3000);
    for(i=0;i<32;i++)     //显示效果:卷帘入
    {
    dispram[i]=0x00;
    if(i%2)delay(100);
    }     
    }  //end while(1)
    }
    
/*延时函数*/
  
  void delay(unsigned int dt)
    {
    register unsigned char bt;
    for(;dt;dt--)
    for(bt=0;bt<255;bt++);
    }


    /*显示屏扫描(定时器T0中断)函数*/
    void leddisplay(void)interrupt 1 using 1
    {
    register unsigned char i,j=BLKN;

    TH0=0xFc;    //设定显示屏刷新率62 5帧/s(12MHz)
    TL0=0x18;

    //TH0=0xF8;    //设定显示屏刷新率62 5帧/s(24MHz)
    //TL0=0x30;



    i=P1;     //读取当前显示的行号
    i=++i&0x0f;   //行号加l,屏蔽高4位
	    
	 do{
  	 j--;
    SBUF=dispram[i*BLKN+j];    //送显示数据
    while(!TI);
	 TI=0;
    }
	 while(j);       //完成一行数据的发送

    j=BLKN;
	 do{
  	 j--;
    SBUF=dispram[i*BLKN+j];    //送显示数据
    while(!TI);
	 TI=0;
    }
	 while(j);       //完成一行数据的发送
   
    G=1;       //消隐(关闭显示)
    P1&=0xf0;    //行号端口清0
    RCLK=1;       //最示数据打入输出锁存器
P1|=i;       //写入行号
RCLK=0;      //锁存显示数据
G=0;  //打开显示
}

⌨️ 快捷键说明

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