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

📄 单片机点阵led中文显示.c

📁 本人收集和自己写的部分51系列例程,供各位参考
💻 C
字号:
/*单片机16*16点阵LED中文显示这是一个占用系统资源非常少的程序,没有使用任何“显存”形式RAM占用。

使用更好的算法实时获取显示数据。这个程序还有一个修改版本,可以实现文字从平屏幕右侧进入,流动显示,从左侧消失。

但是两个程序最多只能显示253个文字的字符串,并可以调节流动速度。

希望各位高手指点。*/

/*下面是资源占用情况:

TYPE    BASE      LENGTH    RELOCATION   SEGMENT NAME
            -----------------------------------------------------

            * * * * * * *   D A T A   M E M O R Y   * * * * * * *
            REG     0000H     0008H     ABSOLUTE     "REG BANK 0"
            DATA    0008H     000DH     UNIT         _DATA_GROUP_
            IDATA   0015H     0001H     UNIT         ?STACK

            * * * * * * *   C O D E   M E M O R Y   * * * * * * *
            CODE    0000H     0003H     ABSOLUTE     
            CODE    0003H     0115H     UNIT         ?PR?_DISNFONT?LED謃文流__
            CODE    0118H     00A0H     UNIT         ?CO?LED謃文流__
            CODE    01B8H     004EH     UNIT         ?PR?_DISONEFONT?LED謃文流__
            CODE    0206H     0046H     UNIT         ?C?LIB_CODE
            CODE    024CH     001BH     UNIT         ?PR?MAIN?LED謃文流__
            CODE    0267H     000EH     UNIT         ?PR?_DELAY_50US?LED謃文流__
            CODE    0275H     000CH     UNIT         ?C_C51STARTUP

下面是源代码:
*/

//--------------------------------
//
// 文件名: LED中文流动1.c
//   作者: 张子墨
//   版本: 0.9
//最后更新: 2006/12/01
//测试硬件: at89s51  +  16*16点阵LED
//--------------------------------

//--------------------------------
//
// 16*16点阵LED显示中文程序
// 本程序逐个显示中文,从右至左流动显示
// 使用横向,流动只有字节间操作
// 字模数据:文字下侧存储为数组中奇数
//    文字上侧存储为数组中偶数
//
//--------------------------------


#include <at89s53.h>

#define SEL P3       //行选线,P3 低四位
#define UP8 P0       //点阵文字上8行IO
#define DOWN8 P2     //点阵文字下8行IO

unsigned char code FontData [5][32] = {
/*--  文字:  张  --*/
/*--  宋体12;  此字体下对应的点阵为:宽x高=16x16   --*/
{0x01,0x02,0x03,0xF2,0x41,0x12,0x81,0x12,0x7F,0x1E,0x00,0x00,0x00,0x80,0x40,0x80,
0xFF,0xFF,0x40,0xA0,0x23,0x90,0x0C,0x88,0x10,0x86,0x60,0x84,0x20,0x80,0x00,0x00},
/*--  文字:  子  --*/
/*--  宋体12;  此字体下对应的点阵为:宽x高=16x16   --*/
{0x01,0x00,0x01,0x00,0x01,0x02,0x01,0x02,0x01,0x02,0x41,0x02,0x81,0x02,0x7F,0xE2,
0x01,0x12,0x01,0x0A,0x01,0x06,0x01,0x02,0x01,0x00,0x01,0x80,0x01,0x00,0x00,0x00},
/*--  文字:  墨  --*/
/*--  宋体12;  此字体下对应的点阵为:宽x高=16x16   --*/
{0x40,0x80,0x44,0x80,0x43,0xAF,0x50,0xA9,0x51,0xAB,0x56,0xAD,0x52,0xA9,0x78,0xFF,
0x51,0xA9,0x56,0xAD,0x52,0xAB,0x50,0xA9,0x51,0xAF,0x46,0xA0,0x42,0x80,0x00,0x00},
/*--  文字:  制  --*/
/*--  宋体12;  此字体下对应的点阵为:宽x高=16x16   --*/
{0x00,0x00,0x00,0x50,0x3F,0x4F,0x01,0x4A,0x01,0x48,0xFF,0xFF,0x21,0x48,0x61,0x48,
0x3F,0x48,0x00,0x00,0x0F,0xFC,0x40,0x00,0x80,0x00,0x7F,0xFF,0x00,0x00,0x00,0x00},
/*--  文字:  作  --*/
/*--  宋体12;  此字体下对应的点阵为:宽x高=16x16   --*/
{0x00,0x80,0x00,0x40,0x00,0x20,0xFF,0xF8,0x00,0x07,0x00,0x22,0x00,0x18,0x00,0x0C,
0xFF,0xFB,0x04,0x48,0x04,0x48,0x04,0x48,0x04,0x68,0x06,0x48,0x04,0x08,0x00,0x00}
};

void Delay_50us(unsigned char t)      //50us延时程序
{
  unsigned char j;  
  for(;t>0;t--)   
    for(j=19;j>0;j--);
}

void DisNFont (unsigned char *FontBufferStart,unsigned char N,unsigned char Time) //流动显示N个汉字
{   //参数三个:字符串字模首地址、字数、显示流动速度
 unsigned char FontNum,i,j,row;     //循环变量,字数计数、16次流动、16列扫描
 for(FontNum=0;FontNum<N-1;FontNum++)
 {
  for(i=0;i<16;i++)       //字到字流动 16次左移才能完成
  {
   for(j=0;j<Time;j++)      //显示延迟,决定流动速度
   {
    for(row=0;row<16;row++)    //显示16*16屏幕一次
    {
     SEL = row;      //选通显示列
     UP8   = *(FontBufferStart+FontNum*32+(i+row)*2+1); //获取显示数据  循环显示关键算法
     DOWN8 = *(FontBufferStart+FontNum*32+(i+row)*2); //以移动偏移为基础获取新数据
     Delay_50us (15);         //适当延时
     UP8 = 0x00;           //关闭显示
     DOWN8 = 0x00;          //关闭显示  防止花屏
    }
   }
  }
 }
}

void main (void)
{
 while(1)
 {
  DisNFont (FontData[0],5,20);
 }
}

⌨️ 快捷键说明

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