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

📄 固定八字显示模拟串口.c

📁 固定八字显示模拟串口 原创 用P1 模拟串口发送数据 实现点阵显示
💻 C
字号:
/*点阵显示汉字程串口输出字符数据,P2口输出行扫描信号,P0_0输出595锁存信号。
  由于595接在LED阴极所以取模时要反白处理*/
#include<reg51.h>
sbit P2_7=P2^7;//定义控制端口
sbit P0_0=P0^0;
unsigned char code hanzi[32][32]={		 //二维数据
/*--  文字:  普  --*/
/*--  黑体12;  此字体下对应的点阵为:宽x高=16x16   --*/
0xF3,0xCF,0xF9,0x9F,0xC0,0x01,0xC0,0x01,0xEC,0x9B,0xE4,0x93,0x80,0x00,0x80,0x00,
0xFF,0xFF,0xE0,0x07,0xE7,0xE7,0xE0,0x07,0xE7,0xE7,0xE0,0x07,0xE7,0xE7,0xFF,0xFF,

/*--  文字:  乐  --*/
/*--  黑体12;  此字体下对应的点阵为:宽x高=16x16   --*/
0xF0,0xFF,0xE0,0x03,0xFF,0x83,0xFF,0xF3,0xFE,0x73,0xFE,0x79,0xE0,0x01,0xE0,0x01,
0xFE,0x7F,0xFA,0x6F,0xF2,0x67,0xE6,0x73,0xCE,0x79,0xDE,0x1F,0xFF,0x3F,0xFF,0xFF,

/*--  文字:  普  --*/
/*--  黑体12;  此字体下对应的点阵为:宽x高=16x16   --*/
0xF3,0xCF,0xF9,0x9F,0xC0,0x01,0xC0,0x01,0xEC,0x9B,0xE4,0x93,0x80,0x00,0x80,0x00,
0xFF,0xFF,0xE0,0x07,0xE7,0xE7,0xE0,0x07,0xE7,0xE7,0xE0,0x07,0xE7,0xE7,0xFF,0xFF,

/*--  文字:  乐  --*/
/*--  黑体12;  此字体下对应的点阵为:宽x高=16x16   --*/
0xF0,0xFF,0xE0,0x03,0xFF,0x83,0xFF,0xF3,0xFE,0x73,0xFE,0x79,0xE0,0x01,0xE0,0x01,
0xFE,0x7F,0xFA,0x6F,0xF2,0x67,0xE6,0x73,0xCE,0x79,0xDE,0x1F,0xFF,0x3F,0xFF,0xFF,
/*--  文字:  普  --*/
/*--  黑体12;  此字体下对应的点阵为:宽x高=16x16   --*/
0xF3,0xCF,0xF9,0x9F,0xC0,0x01,0xC0,0x01,0xEC,0x9B,0xE4,0x93,0x80,0x00,0x80,0x00,
0xFF,0xFF,0xE0,0x07,0xE7,0xE7,0xE0,0x07,0xE7,0xE7,0xE0,0x07,0xE7,0xE7,0xFF,0xFF,

/*--  文字:  乐  --*/
/*--  黑体12;  此字体下对应的点阵为:宽x高=16x16   --*/
0xF0,0xFF,0xE0,0x03,0xFF,0x83,0xFF,0xF3,0xFE,0x73,0xFE,0x79,0xE0,0x01,0xE0,0x01,
0xFE,0x7F,0xFA,0x6F,0xF2,0x67,0xE6,0x73,0xCE,0x79,0xDE,0x1F,0xFF,0x3F,0xFF,0xFF,
/*--  文字:  普  --*/
/*--  黑体12;  此字体下对应的点阵为:宽x高=16x16   --*/
0xF3,0xCF,0xF9,0x9F,0xC0,0x01,0xC0,0x01,0xEC,0x9B,0xE4,0x93,0x80,0x00,0x80,0x00,
0xFF,0xFF,0xE0,0x07,0xE7,0xE7,0xE0,0x07,0xE7,0xE7,0xE0,0x07,0xE7,0xE7,0xFF,0xFF,

/*--  文字:  乐  --*/
/*--  黑体12;  此字体下对应的点阵为:宽x高=16x16   --*/
0xF0,0xFF,0xE0,0x03,0xFF,0x83,0xFF,0xF3,0xFE,0x73,0xFE,0x79,0xE0,0x01,0xE0,0x01,
0xFE,0x7F,0xFA,0x6F,0xF2,0x67,0xE6,0x73,0xCE,0x79,0xDE,0x1F,0xFF,0x3F,0xFF,0xFF,
/*--  文字:  普  --*/
/*--  黑体12;  此字体下对应的点阵为:宽x高=16x16   --*/
0xF3,0xCF,0xF9,0x9F,0xC0,0x01,0xC0,0x01,0xEC,0x9B,0xE4,0x93,0x80,0x00,0x80,0x00,
0xFF,0xFF,0xE0,0x07,0xE7,0xE7,0xE0,0x07,0xE7,0xE7,0xE0,0x07,0xE7,0xE7,0xFF,0xFF,

/*--  文字:  乐  --*/
/*--  黑体12;  此字体下对应的点阵为:宽x高=16x16   --*/
0xF0,0xFF,0xE0,0x03,0xFF,0x83,0xFF,0xF3,0xFE,0x73,0xFE,0x79,0xE0,0x01,0xE0,0x01,
0xFE,0x7F,0xFA,0x6F,0xF2,0x67,0xE6,0x73,0xCE,0x79,0xDE,0x1F,0xFF,0x3F,0xFF,0xFF,

/*--  文字:  普  --*/
/*--  黑体12;  此字体下对应的点阵为:宽x高=16x16   --*/
0xF3,0xCF,0xF9,0x9F,0xC0,0x01,0xC0,0x01,0xEC,0x9B,0xE4,0x93,0x80,0x00,0x80,0x00,
0xFF,0xFF,0xE0,0x07,0xE7,0xE7,0xE0,0x07,0xE7,0xE7,0xE0,0x07,0xE7,0xE7,0xFF,0xFF,

/*--  文字:  乐  --*/
/*--  黑体12;  此字体下对应的点阵为:宽x高=16x16   --*/
0xF0,0xFF,0xE0,0x03,0xFF,0x83,0xFF,0xF3,0xFE,0x73,0xFE,0x79,0xE0,0x01,0xE0,0x01,
0xFE,0x7F,0xFA,0x6F,0xF2,0x67,0xE6,0x73,0xCE,0x79,0xDE,0x1F,0xFF,0x3F,0xFF,0xFF,
/*--  文字:  普  --*/
/*--  黑体12;  此字体下对应的点阵为:宽x高=16x16   --*/
0xF3,0xCF,0xF9,0x9F,0xC0,0x01,0xC0,0x01,0xEC,0x9B,0xE4,0x93,0x80,0x00,0x80,0x00,
0xFF,0xFF,0xE0,0x07,0xE7,0xE7,0xE0,0x07,0xE7,0xE7,0xE0,0x07,0xE7,0xE7,0xFF,0xFF,

/*--  文字:  乐  --*/
/*--  黑体12;  此字体下对应的点阵为:宽x高=16x16   --*/
0xF0,0xFF,0xE0,0x03,0xFF,0x83,0xFF,0xF3,0xFE,0x73,0xFE,0x79,0xE0,0x01,0xE0,0x01,
0xFE,0x7F,0xFA,0x6F,0xF2,0x67,0xE6,0x73,0xCE,0x79,0xDE,0x1F,0xFF,0x3F,0xFF,0xFF,
/*--  文字:  普  --*/
/*--  黑体12;  此字体下对应的点阵为:宽x高=16x16   --*/
0xF3,0xCF,0xF9,0x9F,0xC0,0x01,0xC0,0x01,0xEC,0x9B,0xE4,0x93,0x80,0x00,0x80,0x00,
0xFF,0xFF,0xE0,0x07,0xE7,0xE7,0xE0,0x07,0xE7,0xE7,0xE0,0x07,0xE7,0xE7,0xFF,0xFF,

/*--  文字:  乐  --*/
/*--  黑体12;  此字体下对应的点阵为:宽x高=16x16   --*/
0xF0,0xFF,0xE0,0x03,0xFF,0x83,0xFF,0xF3,0xFE,0x73,0xFE,0x79,0xE0,0x01,0xE0,0x01,
0xFE,0x7F,0xFA,0x6F,0xF2,0x67,0xE6,0x73,0xCE,0x79,0xDE,0x1F,0xFF,0x3F,0xFF,0xFF,
/*--  文字:  普  --*/
/*--  黑体12;  此字体下对应的点阵为:宽x高=16x16   --*/
0xF3,0xCF,0xF9,0x9F,0xC0,0x01,0xC0,0x01,0xEC,0x9B,0xE4,0x93,0x80,0x00,0x80,0x00,
0xFF,0xFF,0xE0,0x07,0xE7,0xE7,0xE0,0x07,0xE7,0xE7,0xE0,0x07,0xE7,0xE7,0xFF,0xFF,

/*--  文字:  乐  --*/
/*--  黑体12;  此字体下对应的点阵为:宽x高=16x16   --*/
0xF0,0xFF,0xE0,0x03,0xFF,0x83,0xFF,0xF3,0xFE,0x73,0xFE,0x79,0xE0,0x01,0xE0,0x01,
0xFE,0x7F,0xFA,0x6F,0xF2,0x67,0xE6,0x73,0xCE,0x79,0xDE,0x1F,0xFF,0x3F,0xFF,0xFF,

/*--  文字:  普  --*/
/*--  黑体12;  此字体下对应的点阵为:宽x高=16x16   --*/
0xF3,0xCF,0xF9,0x9F,0xC0,0x01,0xC0,0x01,0xEC,0x9B,0xE4,0x93,0x80,0x00,0x80,0x00,
0xFF,0xFF,0xE0,0x07,0xE7,0xE7,0xE0,0x07,0xE7,0xE7,0xE0,0x07,0xE7,0xE7,0xFF,0xFF,

/*--  文字:  乐  --*/
/*--  黑体12;  此字体下对应的点阵为:宽x高=16x16   --*/
0xF0,0xFF,0xE0,0x03,0xFF,0x83,0xFF,0xF3,0xFE,0x73,0xFE,0x79,0xE0,0x01,0xE0,0x01,
0xFE,0x7F,0xFA,0x6F,0xF2,0x67,0xE6,0x73,0xCE,0x79,0xDE,0x1F,0xFF,0x3F,0xFF,0xFF,
/*--  文字:  普  --*/
/*--  黑体12;  此字体下对应的点阵为:宽x高=16x16   --*/
0xF3,0xCF,0xF9,0x9F,0xC0,0x01,0xC0,0x01,0xEC,0x9B,0xE4,0x93,0x80,0x00,0x80,0x00,
0xFF,0xFF,0xE0,0x07,0xE7,0xE7,0xE0,0x07,0xE7,0xE7,0xE0,0x07,0xE7,0xE7,0xFF,0xFF,

/*--  文字:  乐  --*/
/*--  黑体12;  此字体下对应的点阵为:宽x高=16x16   --*/
0xF0,0xFF,0xE0,0x03,0xFF,0x83,0xFF,0xF3,0xFE,0x73,0xFE,0x79,0xE0,0x01,0xE0,0x01,
0xFE,0x7F,0xFA,0x6F,0xF2,0x67,0xE6,0x73,0xCE,0x79,0xDE,0x1F,0xFF,0x3F,0xFF,0xFF,
/*--  文字:  普  --*/
/*--  黑体12;  此字体下对应的点阵为:宽x高=16x16   --*/
0xF3,0xCF,0xF9,0x9F,0xC0,0x01,0xC0,0x01,0xEC,0x9B,0xE4,0x93,0x80,0x00,0x80,0x00,
0xFF,0xFF,0xE0,0x07,0xE7,0xE7,0xE0,0x07,0xE7,0xE7,0xE0,0x07,0xE7,0xE7,0xFF,0xFF,

/*--  文字:  乐  --*/
/*--  黑体12;  此字体下对应的点阵为:宽x高=16x16   --*/
0xF0,0xFF,0xE0,0x03,0xFF,0x83,0xFF,0xF3,0xFE,0x73,0xFE,0x79,0xE0,0x01,0xE0,0x01,
0xFE,0x7F,0xFA,0x6F,0xF2,0x67,0xE6,0x73,0xCE,0x79,0xDE,0x1F,0xFF,0x3F,0xFF,0xFF,
/*--  文字:  普  --*/
/*--  黑体12;  此字体下对应的点阵为:宽x高=16x16   --*/
0xF3,0xCF,0xF9,0x9F,0xC0,0x01,0xC0,0x01,0xEC,0x9B,0xE4,0x93,0x80,0x00,0x80,0x00,
0xFF,0xFF,0xE0,0x07,0xE7,0xE7,0xE0,0x07,0xE7,0xE7,0xE0,0x07,0xE7,0xE7,0xFF,0xFF,

/*--  文字:  乐  --*/
/*--  黑体12;  此字体下对应的点阵为:宽x高=16x16   --*/
0xF0,0xFF,0xE0,0x03,0xFF,0x83,0xFF,0xF3,0xFE,0x73,0xFE,0x79,0xE0,0x01,0xE0,0x01,
0xFE,0x7F,0xFA,0x6F,0xF2,0x67,0xE6,0x73,0xCE,0x79,0xDE,0x1F,0xFF,0x3F,0xFF,0xFF,

/*--  文字:  普  --*/
/*--  黑体12;  此字体下对应的点阵为:宽x高=16x16   --*/
0xF3,0xCF,0xF9,0x9F,0xC0,0x01,0xC0,0x01,0xEC,0x9B,0xE4,0x93,0x80,0x00,0x80,0x00,
0xFF,0xFF,0xE0,0x07,0xE7,0xE7,0xE0,0x07,0xE7,0xE7,0xE0,0x07,0xE7,0xE7,0xFF,0xFF,

/*--  文字:  乐  --*/
/*--  黑体12;  此字体下对应的点阵为:宽x高=16x16   --*/
0xF0,0xFF,0xE0,0x03,0xFF,0x83,0xFF,0xF3,0xFE,0x73,0xFE,0x79,0xE0,0x01,0xE0,0x01,
0xFE,0x7F,0xFA,0x6F,0xF2,0x67,0xE6,0x73,0xCE,0x79,0xDE,0x1F,0xFF,0x3F,0xFF,0xFF,
/*--  文字:  普  --*/
/*--  黑体12;  此字体下对应的点阵为:宽x高=16x16   --*/
0xF3,0xCF,0xF9,0x9F,0xC0,0x01,0xC0,0x01,0xEC,0x9B,0xE4,0x93,0x80,0x00,0x80,0x00,
0xFF,0xFF,0xE0,0x07,0xE7,0xE7,0xE0,0x07,0xE7,0xE7,0xE0,0x07,0xE7,0xE7,0xFF,0xFF,

/*--  文字:  乐  --*/
/*--  黑体12;  此字体下对应的点阵为:宽x高=16x16   --*/
0xF0,0xFF,0xE0,0x03,0xFF,0x83,0xFF,0xF3,0xFE,0x73,0xFE,0x79,0xE0,0x01,0xE0,0x01,
0xFE,0x7F,0xFA,0x6F,0xF2,0x67,0xE6,0x73,0xCE,0x79,0xDE,0x1F,0xFF,0x3F,0xFF,0xFF,
/*--  文字:  普  --*/
/*--  黑体12;  此字体下对应的点阵为:宽x高=16x16   --*/
0xF3,0xCF,0xF9,0x9F,0xC0,0x01,0xC0,0x01,0xEC,0x9B,0xE4,0x93,0x80,0x00,0x80,0x00,
0xFF,0xFF,0xE0,0x07,0xE7,0xE7,0xE0,0x07,0xE7,0xE7,0xE0,0x07,0xE7,0xE7,0xFF,0xFF,

/*--  文字:  乐  --*/
/*--  黑体12;  此字体下对应的点阵为:宽x高=16x16   --*/
0xF0,0xFF,0xE0,0x03,0xFF,0x83,0xFF,0xF3,0xFE,0x73,0xFE,0x79,0xE0,0x01,0xE0,0x01,
0xFE,0x7F,0xFA,0x6F,0xF2,0x67,0xE6,0x73,0xCE,0x79,0xDE,0x1F,0xFF,0x3F,0xFF,0xFF,
};

unsigned char code sw[16]={0xe0,0xe2,0xe4,0xe6,0xe8,0xea,0xec,0xee,0xf0,0xf2,0xf4,0xf6,0xf8,0xfa,0xfc,0xfe}; /*16行段码*/
//********C51端口模拟串口程序***************
/*****端口定义****************/
sbit  skl=P1^0;             //数据口
sbit  lck=P1^1;             //时钟口
/**************************/
/********C51端口模拟串口程序***************
函 数 名:TXD_data()
功    能:串口发送一字节
入口参数:d 写入的数据
返 回 值:无
***********************************************************************/

void delay(unsigned char i)
{
    while(--i);
}
void TXD_data(unsigned char d)
{
    unsigned char h=8;
	while(1)
	{
		skl= 0x01&d;                    //取出第零位数
		lck=1;               //发送时钟信号
        lck=0;
        d =d>>1;              //右移一位
		if(--h==0) break;
    }
}
unsigned char e;
void delay();                      /*延时*/
void out_rxd(unsigned char *d);   /*串口发送*/
/*主函数*/
void main()
{
	unsigned char i=1;    //i是从字模数组里向后取数据时的计数器,用以改变显示文字的内容.
	unsigned char n;
    unsigned char a;
	
    //SCON=0;//初始化串口为工作方式0(同步通信方式,TxD输出同步脉冲?
P2=0xff;
    while(1)            //重复循环显示
    {
	a=P0^3;
 		if (a=1)
		    	{
			 		n=0; 
			 	}
			else 
		  		{
					n=1;
				}
				
//	while(1)
		//for(i=1;i<=31;i+=2)
	    //  { 
			TXD_data(hanzi[n][i]);	    //从串口输出第1个字的第一字节。
			TXD_data(hanzi[n][i-1]);    //从串口输出第1个字的第二字节。
	   	 	TXD_data(hanzi[n+1][i]);	//从串口输出第2个字的第一字节。
			TXD_data(hanzi[n+1][i-1]);  //从串口输出第2个字的第二字节。
			TXD_data(hanzi[n+2][i]);    //从串口输出第3个字的第一字节。
	   		TXD_data(hanzi[n+2][i-1]);  //从串口输出第3个字的第一字节。
			TXD_data(hanzi[n+3][i]);    //从串口输出第4个字的第一字节。
			TXD_data(hanzi[n+3][i-1]);  //从串口输出第4个字的第一字节。
			TXD_data(hanzi[n+4][i]);	//从串口输出第5个字的第一字节。
			TXD_data(hanzi[n+4][i-1]);  //从串口输出第5个字的第二字节。
	    	TXD_data(hanzi[n+5][i]);	//从串口输出第6个字的第一字节。
			TXD_data(hanzi[n+5][i-1]);  //从串口输出第6个字的第二字节。
	    	TXD_data(hanzi[n+6][i]);	//从串口输出第7个字的第一字节。
		    TXD_data(hanzi[n+6][i-1]);  //从串口输出第7个字的第一字节。
			TXD_data(hanzi[n+7][i]);	//从串口输出第8个字的第一字节。
			TXD_data(hanzi[n+7][i-1]);  //从串口输出第8个字的第一字节。
			TXD_data(hanzi[n+8][i]);	//从串口输出第9个字的第一字节。
			TXD_data(hanzi[n+8][i-1]);  //从串口输出第9个字的第二字节。
	    	TXD_data(hanzi[n+9][i]);	//从串口输出第10个字的第一字节。
			TXD_data(hanzi[n+9][i-1]);  //从串口输出第10个字的第二字节。
	    	TXD_data(hanzi[n+10][i]);	//从串口输出第11个字的第一字节。
		    TXD_data(hanzi[n+10][i-1]); //从串口输出第11个字的第一字节。
			TXD_data(hanzi[n+11][i]);	//从串口输出第12个字的第一字节。
			TXD_data(hanzi[n+11][i-1]); //从串口输出第12个字的第一字节。
			TXD_data(hanzi[n+12][i]);	//从串口输出第13个字的第一字节。
			TXD_data(hanzi[n+12][i-1]); //从串口输出第13个字的第二字节。
	    	TXD_data(hanzi[n+13][i]);	//从串口输出第14个字的第一字节。
			TXD_data(hanzi[n+13][i-1]); //从串口输出第14个字的第二字节。
	    	TXD_data(hanzi[n+14][i]);	//从串口输出第15个字的第一字节。
		    TXD_data(hanzi[n+14][i-1]); //从串口输出第15个字的第一字节。
			TXD_data(hanzi[n+15][i]);	//从串口输出第16个字的第一字节。
			TXD_data(hanzi[n+15][i-1]); //从串口输出第16个字的第一字节。
			P2_7=1;
        	P2=0xff;	//锁存为高,595锁存信号
			P2_7=0;
			P2=sw[e];	//输出行信号
		
	  //delay();	//延时,等待一段时间,让这列显示的内容在人眼内产生“视觉暂留”现象。*/
		P2_7=1;
		if((++e)==16) 
		e=0;	   
		i += 2;		//行加一
	 	if(i>31) break;
		}
   }

//}

⌨️ 快捷键说明

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