补充上上篇的-自己做的汉字(有增加,增加了将输出到一个文件中)

在这里插入图片描述

取模软件PCtoLCD2002

#include<stdio.h>
#include<stdlib.h>//exit(0)需要这个头文件 
#define N 7//输出汉字个数 

#define Max 16//用于取模保存的数组最大值 

#define out_string0  printf("某"); 
#define out_string1  printf("某"); 
#define out_string2  printf("生"); 
#define out_string3  printf("日"); 
#define out_string4  printf("快"); 
#define out_string5  printf("乐"); 
#define out_string6  printf("!"); 
#define out_string7  printf("某"); 


// 新(0) 年(1) 快(2) 乐(3) ^(4) -(5) ^(6)
//0x10,0x00,0x08,0x04,0x7F,0x78,0x00,0x40,0x22,0x40,0x14,0x40,0xFF,0x7E,0x08,0x48,
//0x08,0x48,0x7F,0x48,0x08,0x48,0x2A,0x48,0x49,0x48,0x88,0x88,0x28,0x88,0x11,0x08,/*"新",0*/
//0x10,0x00,0x10,0x00,0x1F,0xFC,0x20,0x80,0x20,0x80,0x40,0x80,0x1F,0xF8,0x10,0x80,
//0x10,0x80,0x10,0x80,0xFF,0xFE,0x00,0x80,0x00,0x80,0x00,0x80,0x00,0x80,0x00,0x80,/*"年",1*/
//0x10,0x40,0x10,0x40,0x10,0x40,0x13,0xF8,0x18,0x48,0x54,0x48,0x50,0x48,0x50,0x48,
//0x97,0xFE,0x10,0x40,0x10,0xA0,0x10,0xA0,0x11,0x10,0x11,0x10,0x12,0x08,0x14,0x06,/*"快",2*/
//0x00,0x20,0x00,0xF0,0x1F,0x00,0x10,0x00,0x11,0x00,0x21,0x00,0x21,0x00,0x3F,0xFC,
//0x01,0x00,0x09,0x20,0x09,0x10,0x11,0x08,0x21,0x04,0x41,0x04,0x05,0x00,0x02,0x00,/*"乐",3*/
//0x00,0x18,0x24,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,/*"^",4*/
//0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x7E,0x00,0x00,0x00,0x00,0x00,0x00,0x00,/*"-",5*/
//0x00,0x18,0x24,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,/*"^",6*/



int temp[Max][32]=
{

0x08,0x20,0x08,0x20,0xFF,0xFE,0x08,0x20,0x08,0x20,0x0F,0xE0,0x08,0x20,0x08,0x20,
0x0F,0xE0,0x01,0x00,0xFF,0xFE,0x05,0x40,0x09,0x20,0x31,0x18,0xC1,0x06,0x01,0x00,/*"某",0*/
0x08,0x20,0x08,0x20,0xFF,0xFE,0x08,0x20,0x08,0x20,0x0F,0xE0,0x08,0x20,0x08,0x20,
0x0F,0xE0,0x01,0x00,0xFF,0xFE,0x05,0x40,0x09,0x20,0x31,0x18,0xC1,0x06,0x01,0x00,/*"某",1*/

	0x01,0x00,0x11,0x00,0x11,0x00,0x11,0x00,0x3F,0xFC,0x21,0x00,0x41,0x00,0x81,0x00,
	0x01,0x00,0x3F,0xF8,0x01,0x00,0x01,0x00,0x01,0x00,0x01,0x00,0xFF,0xFE,0x00,0x00,/*"生",2*/
	0x00,0x00,0x1F,0xF0,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x1F,0xF0,
	0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x1F,0xF0,0x10,0x10,/*"日",3*/
	0x10,0x40,0x10,0x40,0x10,0x40,0x13,0xF8,0x18,0x48,0x54,0x48,0x50,0x48,0x50,0x48,
	0x97,0xFE,0x10,0x40,0x10,0xA0,0x10,0xA0,0x11,0x10,0x11,0x10,0x12,0x08,0x14,0x06,/*"快",4*/
	0x00,0x20,0x00,0xF0,0x1F,0x00,0x10,0x00,0x11,0x00,0x21,0x00,0x21,0x00,0x3F,0xFC,
	0x01,0x00,0x09,0x20,0x09,0x10,0x11,0x08,0x21,0x04,0x41,0x04,0x05,0x00,0x02,0x00,/*"乐",5*/
	0x00,0x00,0x10,0x00,0x10,0x00,0x10,0x00,0x10,0x00,0x10,0x00,0x10,0x00,0x10,0x00,
	0x10,0x00,0x10,0x00,0x00,0x00,0x00,0x00,0x10,0x00,0x10,0x00,0x00,0x00,0x00,0x00,/*"!",6*/

};
/*************************************************************
***************取模方式 :阴码-逐行式-顺向-16进制-C51-后缀为 ','
*************************************************************/
//函数声明 
void Sixteen_ten(int temp[32],char c,int num);//16进制转10再转2进制 
void draw(int temp[32][8],char c,int num);//显示在黑框上 
void show_two(int tmp[32][8]);//输出二进制 
void File_out(char a[32][8]);//文件输出 
char arr[32][8]={0};//定义传入文件的数组 
void select(int n);//选择输出什么样的文字-用于黑屏幕上输出 
int num1=1;//用于每输出一个汉字,则变换一个字 
int flag=0;
/**************************************************************
*************输入:传入一个数组 
*************返回:无 
*************功能:文件操作,将字符输出到一个文本文件 
**************************************************************/ 
void File_out(char a[32][8],int num)
{
	int i=0,j=0,k=0;
	char str[7][3]={"某","某","生","日","快","乐","!"}; //三个字节存一个汉字 
	char chinese[][3]={"新","年","快","乐","^","_","^"}; 
    //下面是写数据,将字符写入到Output_Chines.txt文件中  
    FILE *fp=fopen("Output_Chines.txt","a");//a-用于在文件末尾追加  
    if(fp==NULL)  
    {  
    	printf("Can not open file!\n");
        exit(0);  
    }  
    switch(num)//选择输出模式->0:字符  大于0:汉字 (用于输出文件模式)
    {
    	case 0://输出字符 
	    for(i=0;i<32;i++)
		{
			for(j=0;j<8;j++)
			{
				if(a[i][j]==' ')//调试过程发现遇到空格要多输出一个空格 
				{
					fputc(' ',fp);
				}
				//字符输出fp->创建的文件-------%c->字符------a[i][j]->传入的数据
				fprintf(fp,"%c",a[i][j]);
			}
			if ((i+1)%2==0)//因为a[0][8]和a[1][8]才构成16*16的第一行 所以两个二维数组换一行 
			{
				fprintf(fp,"\n");	
			}
		}  
		break;	
		default://输出汉字	
		for(i=0;i<32;i++)
		{
			for(j=0;j<8;j++)
			{
				if(a[i][j]==0)
				{
					for(k=0;k<3;k++)//输出三个空格比较好看 
					{
						fputc(' ',fp);	
					}
				}
				else if(a[i][j]==1)
				{
					fprintf(fp,"%s",str[flag]);	
				} 
			}
			if ((i+1)%2==0)//因为a[0][8]和a[1][8]才构成16*16的第一行 所以两个二维数组换一行 
			{
				fprintf(fp,"\n");	
			}
		} 
		break;
	}
	fprintf(fp,"\n");//每输出一个字就换行 
	flag++;
	fclose(fp);//关闭文件 	
}  
/**************************************************************
*************输入:0-7 
*************返回:无 
*************功能:选择输出的中文汉字-可以在led里面修改 
**************************************************************/
void select(int n)
{
	switch(n)
	{
		case 1:out_string0 break;
		case 2:out_string1 break;
		case 3:out_string2 break;
		case 4:out_string3 break;
		case 5:out_string4 break;
		case 6:out_string5 break;
		case 7:out_string6 break;
		case 8:out_string7 break;
		default:printf("输入有错!");break; 
	}	
}
/**************************************************************
*************输入:temp[][]传入的16进制数组
			char c输出的字符
			int num 传入0或1用来选择输出的是字符还是汉字 
************返回:无 
************功能:16进制转为10和10进制转为2进制 
**************************************************************/
void Sixteen_ten(int temp[][32],char c,int num)
{
	int value=7;
	int j=0,i=0,t=0,k=0;
	int change=0;
	int tmp[32][8]={0};
	int sixteen_to_ten[8]={0};
	
	for(i=0;i<N;i++)
	{
		for(j=0;j<32;j++)
		{
			change=(int)temp[i][j];//16进制转10 
			for(k=7;k>=0;k--)//10进制转2 
			{
				sixteen_to_ten[k]=change%2;
				tmp[j][k]=sixteen_to_ten[k];
				change=change/2;
			}
		}
		draw(tmp,c,num);
		printf("\n");
		File_out(arr,num);
	}
	//show_two(tmp);	
}
/**************************************************************
*************输入:tem[][]传入的2进制数组
*************返回:无 
*************功能:输出2进制 
**************************************************************/
void show_two(int tmp[32][8])//输出2进制	
{
	int i=0,j=0;
	
	for(i=0;i<32;i++)
	{
		printf("tmp[%d][]=",i);
		for(j=0;j<8;j++)
		{
			printf("%d",tmp[i][j]);
		}
		printf("\n");
	}	 
}
/**************************************************************
************输入:temp[][]传入的2进制数组
			char c输出的字符
			int num 传入0或1用来选择输出的是字符还是汉字 
************返回:无 
***********功能:打印-即显示函数 
**************************************************************/
void draw(int temp[32][8],char c,int num)
{
	int i=0,j=0,k=0;
	for (i=0;i<32;i++)//行 
	{
		for (j=0;j<8;j++)//列 
		{
			switch(num)//0和其他数选择输出的是字符还是汉字 
			{		
				case 0:
					if (temp[i][j]==1)//规定当数组有1时输出字符 
					{
						arr[i][j]=c;
						printf("%c",c);
					}
					else
					{
						arr[i][j]=' ';
						printf(" ");
						
					}break;
					
				default:
					if (temp[i][j]==1)
					{			
						arr[i][j]=1;		
						select(num1); 
					}
					else
					{
						arr[i][j]=0;
						printf("  ");
					}break;
			}
		}
//因为要两个temp[0][8] 和temp[1][8]才构成16*16的第一行 所以两个二维数组换一行 
		if ((i+1)%2==0)
		{
			printf("\n");	
		}	
	}
	num1++;
}

int main()
{	
	char c=0;
	int num=0;
	printf("请输入想要输出的字符:\n");
	scanf("%c",&c);
	 
	printf("请输入(任意数字)或0;大于0-输出文字,0-输出字符\n");//else 比如1、2、3、4…… 
	scanf("%d",&num);
	if(num!=0)
	{
		printf("您输入的字符将不会显示!\n"); 
	} 
	Sixteen_ten(temp,c,num);
	
	return 0;
} 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值