• 8x8LED点阵汉字滚动显示。有proteus仿真,C语言程序源代码。可以显示汉字,并且能实现简单的上、下、左、右四种显示方式。
  • 基于单片机80C51、C语言制作的8×8LED点阵显示数字,文档包含Proteus仿真原理图,Keil C51源代码。 资源来源网络,仅供学习参考,请勿用于商业用途。
  • #include <reg51.h> #include <intrins.h>//要用到 _nop_() #define uint unsigned int #define uchar unsigned char sbit SH_595=P2^1;...sbit DATA_595=P2^0;...//74HC595(12)-ST_CP上升沿...

    #include <reg51.h>
    #include <intrins.h>//要用到 _nop_()
    #define uint unsigned int
    #define uchar unsigned char

    sbit SH_595=P2^1;
    sbit DATA_595=P2^0;
    sbit ST_CP_595=P2^2;//74HC595(12)-ST_CP上升沿-移位寄存器的数据进入数据存储寄存器 输出锁存器的时钟信号端口
    sbit MR_595=P2^3; //74HC595(10)-MR 为0将移位寄存器的数据清0
    sbit E1_154=P2^4;//74HC154(18)-E1为0开列(col)输出 显示允许   控制信号端口
        
    uchar keynum;
    uchar tempbmp[64];


    uint base=0;  //在bmp地址中移动,从0 到 rows - 15,每次加2,实现移动效果
    uint tmp=0;        
    uint col=0;        

    unsigned char code bmp1[]={    //字模表


    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,


    0x00,0x08,0x00,0x08,0x1F,0xC8,0x92,0x48,0x52,0x48,0x32,0x48,0x12,0x48,0x1F,0xFF,
    0x12,0x48,0x32,0x48,0x52,0x48,0x92,0x48,0x1F,0xC8,0x00,0x08,0x00,0x08,0x00,0x00,/*"单",0*/

    0x00,0x00,0x00,0x01,0x00,0x06,0x7F,0xF8,0x04,0x40,0x04,0x40,0x04,0x40,0x04,0x40,
    0x04,0x40,0xFC,0x40,0x04,0x7F,0x04,0x00,0x04,0x00,0x04,0x00,0x00,0x00,0x00,0x00,/*"片",1*/

    0x08,0x20,0x08,0xC0,0x0B,0x00,0xFF,0xFF,0x09,0x00,0x08,0xC1,0x00,0x06,0x7F,0xF8,
    0x40,0x00,0x40,0x00,0x40,0x00,0x7F,0xFC,0x00,0x02,0x00,0x02,0x00,0x1E,0x00,0x00,/*"机",2*/

    0x02,0x00,0x02,0x00,0x42,0x00,0x33,0xFC,0x00,0x09,0x02,0x11,0x05,0x02,0x79,0xC2,
    0x41,0x34,0x41,0x08,0x41,0x14,0x79,0x62,0x05,0x82,0x04,0x01,0x04,0x01,0x00,0x00,/*"设",3*/

    0x02,0x00,0x02,0x00,0x42,0x00,0x33,0xFE,0x00,0x04,0x02,0x08,0x02,0x00,0x02,0x00,
    0x02,0x00,0xFF,0xFF,0x02,0x00,0x02,0x00,0x02,0x00,0x02,0x00,0x02,0x00,0x00,0x00,/*"计",4*/

    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,

    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,


    };

    void delayXms(uchar ms)               // 延时毫秒@12M,ms最大值255   
    {   
        uchar i;   
        while(ms--)   
            for(i = 0;i<10;i++);    
    }
    void SendByte(uchar a) // 
    {
        uchar byte,i;
        byte=a;
        for(i=0;i<8;i++)
        {
            SH_595=0;
            if(byte&0X80)
                DATA_595=1;
            else
                DATA_595=0;
            SH_595=1;
            byte<<=1;
        }
    }
    void sendbmp(uchar *bmp,uint rows)
    {

            for(base=0;base<=rows-64;base=base+2)// 左移动
             {
                 for(tmp=0;tmp<5;tmp++) //每个字块显示5次
                 {
                    for(col=0;col<16;col++)
                    {
                        E1_154=0;                   //为0,允许显示
                        MR_595=0;                //清理行输出,将移位寄存器的数据清0
                        MR_595=1;
                        ST_CP_595=0;            //上升沿
                        ST_CP_595=1;    
                    //    base=64;            
                        SendByte(bmp[base+col*2]);        // 实际上595是输出    行数据分为第一个字上半屏,下半屏 第二个字上下半屏
                        SendByte(bmp[base+col*2+1]);

                         P1=col;                //列控制
                        ST_CP_595=0;        //上升沿
                        ST_CP_595=1;                    
                        delayXms(7);        //显示2ms
                    }
            }
        }
    }

    void main()
    {
            //列选线
         MR_595=1;
          E1_154=1;


        while(1)
        {
             sendbmp(&bmp1,sizeof(bmp1));//显示第2次字
        }
    }
     

    展开全文
  • Proteus并不提供16X16的点阵,只能我们自己通过4个8X8的组装为16X16的点阵。 由此可知8*8变成16*16 列需要这样连接: 行需要这样连接: 再把四个放在一起即可: 2.74hc595 详细介绍见我上一篇文章 ...

    原创文章,转载注明地址作者,作者TEER。

    一、效果展示

    二、所用材料

    1.16X16点阵

    Proteus并不提供16X16的点阵,只能我们自己通过4个8X8的组装为16X16的点阵。

    由此可知8*8变成16*16

    列需要这样连接:

    行需要这样连接:

    再把四个放在一起即可:

    2.74hc595

    详细介绍见我上一篇文章

    https://blog.csdn.net/qq_41639829/article/details/82151706

    这里需要用到级联,也不算太难,就相当于原来是输入8个数,这需要输入16个,然后再输出,前八个输入的就被自动挤到级联的下一个595中了!

    3.stc89c52

    三、原理

    1.静态显示

    同8位的静态显示一样,只不过是从8个变成16个而已。

    详见上一篇文章。

    https://mp.csdn.net/postedit/82222753

    2.动态显示

    同8位的动态显示一样,只不过是从8个变成16个而已。

    详见上一篇文章。

    https://mp.csdn.net/postedit/82222753

    四、proteus接线方式

    五、代码展示

    #include <reg51.h>
    #include<intrins.h>
    
    /*  数据端接口定义 */
    sbit  LSH = P2^0;     //列数时钟
    sbit  LDS = P2^1;     //输入
    sbit  LST = P2^2;     //列寄存器
    
    sbit  HSH = P2^3;     //行数时钟
    sbit  HDS = P2^4;     //输入
    sbit  HST = P2^5;     //行寄存器时钟
    
    unsigned int sel[17]={0x7fff,0xbfff,0xdfff,0xefff,0xf7ff,0xfbff,0xfdff,0xfeff,
    											0xff7f,0xffbf,0xffdf,0xffef,0xfff7,0xfffb,0xfffd,0xfffe,
    	                    0xffff,
    										 };
    
    char code hanzi[170] =
    {
    0x01,0x00,0x01,0x00,0x01,0x00,0x3F,0xF8,0x21,0x08,0x21,0x08,0x21,0x08,0x3F,0xF8,
    0x21,0x08,0x21,0x08,0x21,0x08,0x3F,0xF8,0x21,0x0A,0x01,0x02,0x01,0x02,0x00,0xFE,//电
    0x00,0x00,
    0x00,0x00,0x7F,0xF8,0x00,0x10,0x00,0x20,0x00,0x40,0x01,0x80,0x01,0x00,0xFF,0xFE,
    0x01,0x00,0x01,0x00,0x01,0x00,0x01,0x00,0x01,0x00,0x01,0x00,0x05,0x00,0x02,0x00,//子
    0x00,0x00,
    0x01,0x00,0x01,0x00,0x7F,0xFC,0x01,0x00,0x1F,0xF0,0x00,0x00,0x7F,0xFE,0x40,0x02,
    0x9F,0xF4,0x00,0x00,0x1F,0xF0,0x10,0x10,0x1F,0xF0,0x08,0x20,0x04,0x40,0xFF,0xFE,//壹
    0x00,0x00,
    0x20,0x80,0x10,0x80,0x00,0x9C,0x47,0xE0,0x20,0x80,0x08,0x84,0x10,0x84,0x60,0x7C,
    0x21,0x00,0x01,0x00,0xFF,0xFE,0x05,0x40,0x09,0x20,0x31,0x18,0xC1,0x06,0x01,0x00,//柒
    0x00,0x00,
    0x01,0x00,0x00,0x80,0x3F,0xFE,0x20,0x80,0x2F,0xF8,0x20,0x88,0x3F,0xFE,0x20,0x88,
    0x2F,0xF8,0x28,0x80,0x24,0xC4,0x22,0xA8,0x44,0x90,0x48,0x88,0x92,0x86,0x01,0x00,//康
    0x00,0x00,
    };
    
    
    
    void send_data_H(unsigned int dat);  /*  发送行数据端数据函数  */
    void send_data_L(unsigned int dat);  /*  发送列选通端数据函数  */
    void display(int a);                 //每一次显示什么东西
    void delay(unsigned int m);
    
    
    void main()
    {
      unsigned int j=0,num;
    	while(1)
    	{
    		num=6;
    		while(num--)
    		{
    				display(j);
    			  delay(10);
    	  }
    		j=j+2;
    		//if(j>150)
    			//j=0;
    	}
    }
    	  //unsigned int a,b;	
    		//a=sel[i]%256;//后八位
    	  //b=sel[i]/256;//前八位
        //send_data_H(b);
    void send_data_L(unsigned int dat)
    {
        unsigned char i;
        
        for(i=0;i<8;i++)
        {
            LSH = 0;
            LDS = dat&0x80;       //temp<<=1;
            dat = dat<<1;               //ds = CY;
            LSH = 1;
        }
    		LST = 0;
        _nop_();
        _nop_();
        LST = 1;
    }
    
    void send_data_H(unsigned int dat)
    {
        int i; 
        for(i=0;i<16;i++)
        {
    			  
            HSH = 0;
            HDS = dat&0x8000;
            dat =dat<<1;
            HSH = 1;
        }	
    		HST = 0;
        _nop_();
        HST = 1;
    }
    void delay(unsigned int m)
    {
        unsigned char i;
        for(;m>0;m--)
        {
            for(i=0;i<124;i++)
    			{}
        }
    }
    
    void display( int a)
    {
        unsigned char i;
    	  unsigned int x;
        for(i=0;i<16;i++)
        {
            send_data_H(sel[i]);
    			  x=a+2*i;//展示第几个字符
    			  if(a+2*i>168)
    					x=(a+2*i)%170;
    			  send_data_L(hanzi[x]);
    			  send_data_L(hanzi[x+1]);
    			  delay(1);	  
        }
    }

    展开全文
  • 51单片机LED点阵显示文字 代码如下。 #include #define u8 unsigned char sbit SER = P3^4; sbit RCLK = P3^5; sbit SCLK = P3^6;  //横向 D0->D7 u8 tao[32]={8,240,8,15,8,136,126,145,8,82,8,2,62,8,8,231,8,...

    51单片机LED点阵显示文字 代码如下。

    #include <REGX51.H>

    #define u8 unsigned char
    sbit SER = P3^4;
    sbit RCLK = P3^5;
    sbit SCLK = P3^6; 

    //横向 D0->D7

    u8 tao[32]={8,240,8,15,8,136,126,145,8,82,8,2,62,8,8,231,8,129,126,129,72,231,72,129,88,129,40,129,8,255,8,129};


    u8 heng[32]=
    {
    0x00,0x01,0x00,0x02,0x00,0x04,0x00,0x08,
    0x00,0x10,0x00,0x20,0x00,0x40,0x00,0x80,
    0x01,0x00,0x02,0x00,0x04,0x00,0x08,0x00,
    0x10,0x00,0x20,0x00,0x40,0x00,0x80,0x00
    };
    void display(u8 zimo[],u8 heng[]);
    void sendData(u8 d1, u8 d2, u8 d3, u8 d4);


    void main(void)
    {
    display(tao,heng); 
    }


    void display(u8 zimo[],u8 heng[])
    {
    unsigned char i;
    for (i=0;i<16;i++)
    {
    sendData(~zimo[2*i+1],~zimo[2*i],heng[2*i],heng[2*i+1]);
    }

    }


    void sendData(u8 d1, u8 d2, u8 d3, u8 d4)
    {


    u8 i;
    RCLK = 0;
    SCLK = 0;
    for(i=0;i<8;i++)
    {
    SER = d1>>7; //往74HC595的串口送信
    SCLK = 0;
    SCLK = 1;  //74HC595的移位
    d1 = d1 << 1;
    }
    // d1送到了74HC595A

    for(i=0;i<8;i++)
    {
    SER = d2>>7; //往74HC595的串口送信
    SCLK = 0;
    SCLK = 1;  //74HC595的移位
    d2 = d2 << 1;
    }
    // d1送到了74HC595B,d2送到了74HC595A


    for(i=0;i<8;i++)
    {
    SER = d3>>7; //往74HC595的串口送信
    SCLK = 0;
    SCLK = 1;  //74HC595的移位
    d3 = d3 << 1;
    }
    // d1送到了74HC595C,d2送到了74HC595B,d3送到了74HC595A


    for(i=0;i<8;i++)
    {
    SER = d4>>7; //往74HC595的串口送信
    SCLK = 0;
    SCLK = 1;  //74HC595的移位
    d4 = d4 << 1;
    }
    // d1送到了74HC595D,d2送到了74HC595C,
    // d3送到了74HC595B,d4送到了74HC595A


    RCLK = 0;
    RCLK = 1;//74HC595 锁存,往LED点阵送信
     

    }

    图片如下



    展开全文
  • 近年来,点阵LED显示屏利用发光二极管构成的点阵模块或像素单元组成可变面积的显示屏幕,以可靠性高、使用寿命长、环境适应能力强、性能价格比高、使用成本低等特点,已成为众多显示媒体以及户外作业显示的电子工具...

           近年来,点阵LED显示屏利用发光二极管构成的点阵模块或像素单元组成可变面积的显示屏幕,以可靠性高、使用寿命长、环境适应能力强、性能价格比高、使用成本低等特点,已成为众多显示媒体以及户外作业显示的电子工具,广泛地应用于车站、宾馆、金融、证券、邮电、体育等广告发布或交通运输等行业。本文中所介绍的16x16LED显示屏是采用4块最基本的8X8 LED点阵显示模块,理解8X8 LED点阵的工作原理就可以基本掌握LED点阵显示技术。 

    LED点阵显示的基本原理  

          8X8点阵LED结构如下图所示


           从图中可以看出,8X8点阵是由一排排的LED灯组成的,它们的阴端连接到行,阳端连接到列,当想要点阵显示什么数字或者字母或者图形的时候,只需要点亮相应的LED就可以了。比如说我们想点亮左上角第一个LED,而其它的都是灭的,我们只需要将行1位置置为1,其它行位置置为0,列1位置置为0,其他位置置为1则可以点亮左上角第一个LED,而其它的不亮。且每个发光二极管是放置在行线和列线的交叉点上,当对应的某一列置1电平,某一行置0电平,则相应的二极管就亮;要实现显示图形或字体,只需考虑其显示方式。通过编程控制各显示点对应LED阳极和阴极端的电平,就可以有效的控制各显示点的亮灭。

           当在LED点阵上显示中文时,可以用现成的汉字取模工具去生成,而不需要手动去计算(字模生成软件:点击打开链接)。在16x16点阵中,点阵显示是通过4块8x8LED显示的,而最先输入的8x8LED块会被压入最后(右下角块),所以发送字节数据的时候是从最后一块往第一块发。16 x 16点阵使用指针显示“点阵使用指针显示汉字”10个汉字代码如下:

    #include <reg51.h>
    #include <intrins.h>
    #include "array.h"
    #define uint unsigned int
    #define uchar unsigned char
    #define ulong unsigned long
    sbit MOSIO = P3^4;
    sbit R_CLK = P3^5;
    sbit S_CLK = P3^6;
    
    /*******************************************************************************
    * 函 数 名         : HC595SendData
    * 函数功能		   : 通过595发送四个字节的数据
    * 输    入         : BT3:第四个595输出数值
    *                  * BT2: 第三个595输出数值
    *                  * BT1:第二个595输出数值
    *                  * BT0:第一个595输出数值
    * 输    出         : 无
    *******************************************************************************/
    void HC595SendData(  uchar BT3, uchar BT2,uchar BT1,uchar BT0)
    {  
    	uchar i;
    	for(i = 0; i < 8; i++)
    	{
    		MOSIO = BT3 >> 7 ;	//从高位到低位
    		BT3 <<= 1;
    		S_CLK = 0;
    		S_CLK = 1;		
    	}
    
    	for(i = 0; i < 8; i++)
    	{
    		MOSIO = BT2 >>7;
    		BT2 <<= 1;
    		S_CLK = 0;
    		S_CLK = 1;	
    	}
    
    	for(i = 0; i < 8; i++)
    	{
    		MOSIO = BT1 >> 7;
    		BT1 <<= 1;
    		S_CLK = 0;
    		S_CLK = 1;	
    	}
    
    	for(i = 0; i < 8; i++)
    	{
    		MOSIO = BT0 >> 7;
    		BT0 <<= 1;
    		S_CLK = 0;
    		S_CLK = 1;
    	}
       
    	//--输出--//
    	R_CLK = 0;
    	R_CLK = 1; //片选
    	R_CLK = 0;
    }
    
    void main()
    {
    	int i, j, ms;
    	uchar *p[] = {tab1, tab2, tab3, tab4, tab5, tab6, tab7, tab8, tab9, tab10};	//--定义一个指针数据指向汉字--//
    	while(1)
    	{
    		for(i = 0; i < 10; i++)	   //总共10个汉字
    		{
    			for(ms = 50; ms > 0; ms--)
    			{
    				for(j = 0; j < 16; j++)	  //显示一个字
    				{
    					//--因为字模软件取的数组是高电平有效,所以列要取反--//
    					HC595SendData(~(*(p[i]+2*j+1)),~(*(p[i]+2*j)),tab0[2*j],tab0[2*j+1]);
    				}
    
    				HC595SendData(0xff,0xff,0x00,0x00);	//清屏
    			}	
    		}
    	}
    }
    
    array.h
    //--字模生成器生成出对应的C代码--//
    unsigned char code tab0[] = {0x00, 0x01, 0x00, 0x02, 0x00, 0x04, 0x00, 0x08, 0x00, 0x10, 0x00, 0x20, 0x00, 0x40, 0x00, 0x80,
                                 0x01, 0x00, 0x02, 0x00, 0x04, 0x00, 0x08, 0x00, 0x10, 0x00, 0x20, 0x00, 0x40, 0x00, 0x80, 0x00}; 
    
    unsigned char code tab1[] = {128,0,128,0,128,0,128,127,128,0,128,0,248,31,8,16,8,16,8,16,248,31,0,0,72,34,136,68,132,68,2,64};	//点
    
    unsigned char code tab2[] = {0,2,62,2,34,2,210,127,18,1,10,5,146,4,146,63,34,4,34,4,34,4,214,127,10,4,2,4,2,4,2,4};	//阵
    
    unsigned char code tab3[] = {8,2,8,2,248,127,4,2,4,2,230,63,38,34,37,34,228,63,4,2,68,2,132,2,4,1,132,2,68,12,52,112};	//使
    
    unsigned char code tab4[] = {0,0,252,31,132,16,132,16,132,16,252,31,132,16,132,16,132,16,252,31,132,16,132,16,132,16,130,16,130,20,1,8};	//用
    
    unsigned char code tab5[] = {136,0,136,32,136,28,136,3,191,64,136,64,8,127,40,0,152,63,140,32,139,32,136,63,136,32,136,32,138,63,132,32};	//指
    
    unsigned char code tab6[] = {8,4,8,4,120,4,4,4,4,4,62,4,201,127,8,4,127,4,8,4,8,4,72,4,40,4,24,4,8,4,0,4};	//针
    
    unsigned char code tab7[] = {0,0,248,15,8,8,8,8,248,15,8,8,8,8,248,15,32,2,34,34,36,34,40,18,40,10,32,2,255,127,0,0};	//显
    
    unsigned char code tab8[] = {0,0,252,31,0,0,0,0,0,0,0,0,255,127,128,0,128,0,136,8,136,16,132,32,130,64,129,64,160,0,64,0};	//示
    
    unsigned char code tab9[] = {0,0,228,31,72,16,72,16,65,16,130,8,146,8,144,8,8,5,8,5,7,2,4,2,4,5,132,8,68,16,48,96};	//汉
    
    unsigned char code tab10[] = {64,0,128,0,254,127,2,64,1,32,248,7,0,2,0,1,128,0,255,127,128,0,128,0,128,0,128,0,160,0,64,0};	//字




    展开全文
  • 基于stc89c52单片机的LED点阵静态显示一个汉字
  • 单片机应用经常会用到液晶显示或者LED点阵屏,是用点阵的方式显示的,要显示汉字或字符的时候会用到字模,字模就是字在点阵显示时对应的编码。以字模的方式存储图形或者文字,每一个点都需要一个bit位来存储,该位...

        单片机应用经常会用到液晶显示或者LED点阵屏,是用点阵的方式显示的,要显示汉字或字符的时候会用到字模,字模就是字在点阵上显示时对应的编码。以字模的方式存储图形或者文字,每一个点都需要一个bit位来存储,该位为0代表该像素点不显示,为1代表显示。这样,一个字节就可以存储8个像素点的显示情况。

        一般采用宋体小四号的字符来做显示,这样一个英文字符刚好占8*16个像素;而汉字需要两倍,即16*16像素来显示一个汉字。这样,存储一个英文字符每行8个点需要1个字节存储,一共16行需要16个字节,

     同理一个汉字需要32个


    所以如果M这个英文字符按从左到右从上到下的方式从高位到低位取模

    C代码  收藏代码
    1. 0 0 0 0 0 0 0 0   
    2. 0 0 0 0 0 0 0 0   
    3. 0 0 0 0 0 0 0 0   
    4. 1 1 1 0 1 1 1 0   
    5. 0 1 1 0 1 1 0 0   
    6. 0 1 1 0 1 1 0 0   
    7. 0 1 1 0 1 1 0 0   
    8. 0 1 1 0 1 1 0 0   
    9. 0 1 0 1 0 1 0 0   
    10. 0 1 0 1 0 1 0 0   
    11. 0 1 0 1 0 1 0 0   
    12. 0 1 0 1 0 1 0 0   
    13. 0 1 0 1 0 1 0 0   
    14. 1 1 0 1 0 1 1 0   
    15. 0 0 0 0 0 0 0 0   
    16. 0 0 0 0 0 0 0 0   

     

     其中为1的地方画出了M的形状;如果把0换成空格,由1拼成的M就显示出来了:             

    C代码  收藏代码
    1.                   
    2.                   
    3.                   
    4. 1 1 1   1 1 1     
    5.   1 1   1 1       
    6.   1 1   1 1       
    7.   1 1   1 1       
    8.   1 1   1 1       
    9.   1   1   1       
    10.   1   1   1       
    11.   1   1   1       
    12.   1   1   1       
    13.   1   1   1       
    14. 1 1   1   1 1     

     因此,我们要记录16行中每一行由0和1组成的一字节整数的值,就记录了这张位图;   
    如第1,2,3行是00000000,它的值为0,第四行是11101110,用十六进制表示就是0xee;

    以此类推,得到16个单字节整数:0x00,0x00,0x00,0xEE,0x6C,0x6C,0x6C,0x6C,0x54,0x54,0x54,0x54,0x54,0xD6,0x00,0x00

    这些数组可以通过软件计算出来,我们只需要在单片机中通过代码读取这些数据就可以显示出来了,


    解析过程与编码这些数据是刚好相反的。

    C代码  收藏代码
    1. #include <stdio.h>  
    2. #include <stdlib.h>  
    3.   
    4. unsigned char am[] = {0x00,0x00,0x00,0xEE,0x6C,0x6C,0x6C,0x6C,0x54,0x54,0x54,0x54,0x54,0xD6,0x00,0x00}; //M  
    5.   
    6. void showM(){  
    7.     int i,j;  
    8.     unsigned char t;  
    9.     for (i = 0; i < 16; ++i) {   //对于每一行  
    10.         t = am[i];              //取出代表这一行点的数据  
    11.         for (j = 0; j < 8; ++j) {    //对于这行中的每个点  
    12.             if (0x80 & t) {     //从左到右如果最左位1,则显示  
    13.                 printf("MM");  
    14.             }else{  
    15.                 printf("  ");  
    16.             }  
    17.             t <<= 1;          //将右边的数据往左移动  
    18.         }  
    19.         printf("\n");  
    20.     }  
    21. }  
    22.   
    23. int main(void) {  
    24.     showM();  
    25.     return EXIT_SUCCESS;  
    26. }  

     

     

     

     然而,对于中文字符,每个汉字每行有16个像素,需要2个字节,所以每行需要对两个字节数据进行打印,所以要增加一个for循环:
    C代码  收藏代码
    1. #include <stdio.h>  
    2. #include <stdlib.h>  
    3.   
    4. unsigned char ch[] = {  
    5.         /*--  文字:  播  --*/  
    6.         /*--  宋体12;  此字体下对应的点阵为:宽x高=16x16   --*/  
    7.         0x20,0x3C,0x27,0xC0,0x22,0x48,0xF9,0x50,0x27,0xFE,0x20,0xE0,0x29,0x50,0x32,0x4E,  
    8.         0x6F,0xFC,0xA2,0x48,0x22,0x48,0x23,0xF8,0x22,0x48,0x22,0x48,0xA3,0xF8,0x42,0x08  
    9. };  
    10.   
    11. void showM()  
    12. {  
    13.     int i, j;  
    14.     unsigned char t, u;     //分别表示一个汉字每行的左半边8像素和右半边8像素  
    15.     for (i = 0; i < 16; ++i)  
    16.     {   //对于每一行  
    17.         t = ch[i * 2];              //取出代表这一行点的数据  
    18.         u = ch[i * 2 + 1];  
    19.         for (j = 0; j < 8; ++j)//打印左半边像素  
    20.         {   //对于这行中的每个点  
    21.             if (0x80 & t)  
    22.             {       //从左到右如果最左位1,则显示  
    23.                 printf("MM");  
    24.             }  
    25.             else  
    26.             {  
    27.                 printf("  ");  
    28.             }  
    29.             t <<= 1;          //将右边的数据往左移动  
    30.         }  
    31.         for (j = 0; j < 8; ++j)//打印右半边像素  
    32.         {   //对于这行中的每个点  
    33.             if (0x80 & u)  
    34.             {       //从左到右如果最左位1,则显示  
    35.                 printf("MM");  
    36.             }  
    37.             else  
    38.             {  
    39.                 printf("  ");  
    40.             }  
    41.             u <<= 1;          //将右边的数据往左移动  
    42.         }  
    43.         printf("\n");  
    44.     }  
    45. }  
    46.   
    47. int main(void) {  
    48.     showM();  
    49.     return EXIT_SUCCESS;  
    50. }  
     打印结果:
    C代码  收藏代码
    1.     MM              MMMMMMMM      
    2.     MM    MMMMMMMMMM              
    3.     MM      MM    MM    MM        
    4. MMMMMMMMMM    MM  MM  MM          
    5.     MM    MMMMMMMMMMMMMMMMMMMM    
    6.     MM          MMMMMM            
    7.     MM  MM    MM  MM  MM          
    8.     MMMM    MM    MM    MMMMMM    
    9.   MMMM  MMMMMMMMMMMMMMMMMMMM      
    10. MM  MM      MM    MM    MM        
    11.     MM      MM    MM    MM        
    12.     MM      MMMMMMMMMMMMMM        
    13.     MM      MM    MM    MM        
    14.     MM      MM    MM    MM        
    15. MM  MM      MMMMMMMMMMMMMM        
    16.   MM        MM          MM        
     这样就显示了一个汉字。

     

     

     

    • 下载次数: 16



    public class en {
    	public static char am[] = {0x00,0x00,0x00,0xEE,0x6C,0x6C,0x6C,0x6C,0x54,0x54,0x54,0x54,0x54,0xD6,0x00,0x00}; //M 
    	
    	public static void showM(){  
    	    int i,j;  
    	    char t;  
    	    for (i = 0; i < 16; ++i) {   //对于每一行  
    	        t = am[i];              //取出代表这一行点的数据  
    	        for (j = 0; j < 8; ++j) {    //对于这行中的每个点  
    	            if ((0x80&t)>0) {     //从左到右如果最左位1,则显示  
    	                System.out.print("MM");  
    	            }else{
    	            	System.out.print("  ");  
    	            }
    	            t <<= 1;//将右边的数据往左移动  
    	        }  
    	        System.out.println();  
    	    }  
    	}  
    	
    	public static void main(String[] args) {
    		showM();  
    	}
    
    }
    
    
    
    
    public class cn {
    
    	public static char ch[] = {
    			/*--  文字:  播  --*/
    			/*--  宋体12;  此字体下对应的点阵为:宽x高=16x16   --*/
    			0x20, 0x3C, 0x27, 0xC0, 0x22, 0x48, 0xF9, 0x50, 0x27, 0xFE, 0x20, 0xE0, 0x29, 0x50, 0x32, 0x4E, 0x6F, 0xFC,
    			0xA2, 0x48, 0x22, 0x48, 0x23, 0xF8, 0x22, 0x48, 0x22, 0x48, 0xA3, 0xF8, 0x42, 0x08 };
    
    	public static void showM() {
    		int i, j;
    		char t, u; //分别表示一个汉字每行的左半边8像素和右半边8像素
    		for (i = 0; i < 16; ++i) { // 对于每一行
    			t = ch[i * 2]; // 取出代表这一行点的数据
    			u = ch[i * 2 + 1];
    			for (j = 0; j < 8; ++j)// 打印左半边像素
    			{ // 对于这行中的每个点
    				if ((0x80 & t) > 1) { // 从左到右如果最左位1,则显示
    					System.out.print("MM");
    				} else {
    					System.out.print("  ");
    				}
    				t <<= 1; // 将右边的数据往左移动
    			}
    			for (j = 0; j < 8; ++j)// 打印右半边像素
    			{ // 对于这行中的每个点
    				if ((0x80 & u) > 1) { // 从左到右如果最左位1,则显示
    					System.out.print("MM");
    				} else {
    					System.out.print("  ");
    				}
    				u <<= 1; // 将右边的数据往左移动
    			}
    			System.out.println();
    		}
    	}
    
    	public static void main(String[] args) {
    		showM();
    	}
    }
    


    展开全文
  • 本实验回顾:是关于字符型LCD的显示原理的学习以及掌握字符型LCD显示字符的用法。1.使用LCD显示两行字符,第一行显示“hello + 英文名字”,第二行显示时间(正确的年月日)!注意,这里使用1602是无法显示汉字的,...
  • 单片机LCD少量汉字取模显示(不需要字库) 最近在做一个小项目的时候需要用到LCD显示中文汉字,用到的字数不多,如果使用字库占的内存大,而且本人不太熟悉。上网看了一下别人的方法,移植了一下,觉得这个方法不错。...
  • 单片机汉字显示

    2010-04-02 15:13:00
     如果使用中文DOS系统(如UCDOS),则可以解决在字符界面下的汉字显示问题。也就是说,可以用printf或其他字符串函数来输出汉字。 但是,这样仍然有一些不方便。必须先启动中文DOS系统,再执行Turbo C或编译好的...
  • 基于51单片机的16X16点阵动态显示数字,包含说明书,布线,源码,烧录文件
  • 51单片机 16X192点阵程序动态显示任意汉字 程序参考源代码如下: #include<AT89X52.H> sbit ST=P3^5; sbit E1=P3^4; sbit MR=P3^7; char cashe[12]; char code wd[12][16]={ {0xFF,0xC0,0xFE,0xFE,0xFE,0xFE...
  • 16X16点阵显示汉字

    2020-07-04 07:03:41
    基于51单片机的led点阵,实现基本汉字显示
  • 摘要:VC/C++源码,其它分类,点阵测试,单片机控制  单片机8X8点阵滚动显示C程序,LED8*8滚动显示,列扫描,低电平有效,取模方式,阴码,列扫描,逆向。
  • 16*16点阵显示汉字

    2020-05-31 23:30:33
    51单片机,16*16点阵显示汉字,经过测试。
  • 74hc595.h: #ifndef __74hc595_H__ #define __74hc595_H__ /************************************位定义************************************/ sbit DATA_IN = P1^0; //串行数据输入 sbit ST_CK = P1^1;...
  • 51单片机LED16X16点阵滚动显示51单片机LED16X16点阵滚动显示51单片机LED16X16点阵滚动显示
  • ;预定义 SER BIT P1.4 SCLR BIT P1.5 SRCLK BIT P1.6 RCK BIT P1.7;主程序 org 0000h ljmp start org 0100h start: mov dptr,#tab mov r2,#05...
  • 基于51单片机的16×16点阵屏流动显示一. 制作所需器材1.单片机开发扳一块;2.16*16LED点阵一块;3.杜邦线若干;二.STC89C52简介 STC89C52是STC公司生产的一种低功耗、高性能CMOS8位微控制器,具有 8K 在系统可编程...
1 2 3 4 5 ... 20
收藏数 2,803
精华内容 1,121