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

📄 mnj_1335._c

📁 lcd320240驱动程序
💻 _C
📖 第 1 页 / 共 4 页
字号:
0xC0,0x13,0x6F,0xFE,0x1F,0xEF,0xFE,0x13,
0x20,0xCE,0x1F,0xE0,0xCC,0x3F,0xC0,0xC0,
0x03,0x30,0xC0,0x07,0xE0,0xC0,0x7F,0x21,
0xC0,0x70,0x1F,0xC0,0x00,0x07,0x80,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,/*"野",16*/


0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x07,0x00,0x18,0x07,0x00,
0x1E,0x0C,0xC0,0x0F,0x18,0x70,0x00,0x70,
0x38,0x60,0xFF,0xEC,0x7C,0x47,0x80,0x3E,
0x00,0x00,0x00,0x3F,0xF8,0x00,0x30,0x38,
0x03,0x30,0x18,0x1E,0x38,0x38,0x1C,0x3F,
0xF8,0x08,0x18,0x30,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,/*"治",17*/

0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x0E,0x00,0x07,0x0E,0x00,
0x07,0xFF,0xF8,0x03,0x06,0x00,0x33,0x7F,
0xF0,0x3F,0x40,0x70,0x03,0x07,0x80,0x3F,
0x03,0x00,0x13,0x03,0x00,0x06,0x01,0x80,
0x0E,0x01,0x80,0x3C,0x03,0x80,0x78,0x63,
0x00,0x30,0x3F,0x00,0x00,0x0C,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,/*"疗",18*/

0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x1C,0x00,0x04,0x1E,0x00,
0x07,0xFF,0xF8,0x06,0x0C,0x00,0x06,0x0C,
0x00,0x06,0xFF,0xE0,0x06,0xFF,0xE0,0x06,
0x1F,0x00,0x0C,0x3F,0x80,0x0C,0x7D,0xE0,
0x1D,0xEC,0x7E,0x7B,0xCC,0x3E,0x70,0x0C,
0x1C,0x00,0x0C,0x00,0x00,0x0C,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,/*"床",19*/

};

/*==============================================================================
               ;------------ 文本方式下汉字写入子程序 ------------
;	该汉字字模是根据清华蓬远公司提供的PICKHZ.EXE软件从计算机中提取的汉字 16x16	
	点阵字模, 其排列顺序是:	前16字节为汉字左半部分(自上而下), 后16字节为汉字右
	半部分(自上而下). 下面提供的在文本方式下汉字的写入子程序可以在文本显示区任意
	地方写入汉字. 程序如下:
==============================================================================*/
void PutWordInAlpha( void ) {
						                // 首先建立CGRAM,
	sed1335_write_command( Ovlay );		// 显示合成方式设置.代码0x5b
	sed1335_write_data( 0x01 );			// 设置参数:显示3区为文本属性,二重xor合成
	BuildCgram( 0,8 );					// 调建立CGRAM子程序设置写入字模量八个汉字模
// 开始调用显示cgram内所建立的汉字模	
	PutCdotInAlpha(0,8,0x80);			// 调文本方式下汉字写入子程序,88H= "模"
	PutCdotInAlpha(2,8,0x84);			// 调文本方式下汉字写入子程序,8cH= "拟"
	PutCdotInAlpha(4,8,0x88);			// 调文本方式下汉字写入子程序,90H= "定"
	PutCdotInAlpha(6,8,0x8c);			// 调文本方式下汉字写入子程序,94H= "位"
	PutCdotInAlpha(8,8,0x90);			// 调文本方式下汉字写入子程序,90H= "机"
	delay_ms(50);
}
/*============================================================================
 汉字写入子程序(文本方式)
 在文本方式下显示汉字,	首先要建立汉字Cgram, 要定义汉字代码.
 在文本方式下写汉字需要写入4 个代码以组成一个汉字 
 每8字节组成一个点阵Ascii小区,4个小区组合成一个汉字所以需要4个代码
 ============================================================================*/
void PutCdotInAlpha( Uchar Ox, Uchar Oy, Uchar Cnumber ) {
Uint tempPtr;
Uchar tempCount;
	tempPtr = (Uint)Oy * paraP9 + Ox;
	sed1335_write_command( CsrDirD );					    // CSRDIR 代码(下移)
	for(tempCount=0;tempCount<2;tempCount++) {
		sed1335_write_command( CsrW );					    // CSRW 代码,光标指针设置
		sed1335_write_data( (Uchar)(tempPtr &0xff) );	    // 设置光标地址CSR
		sed1335_write_data( tempPtr /256 + BasePart3 );
		sed1335_write_command( mWrite );					// 代码0x42,数据写入指令
		sed1335_write_data( Cnumber++ );					// 写入汉字代码
		sed1335_write_data( Cnumber++ );					// 写入汉字代码
		tempPtr++;								            // 修正光标地址
	}
}
/*============================================
 建立 cgram,将显示字符送入cgram中

  入口参数约定:Base.... 起始
=============================================*/
void BuildCgram( Uchar Base, Uchar EndlCode ) {

Uchar iCgram,ii,ij;
	sed1335_write_command( CgramAdr );		// CGRAMADR 代码
	sed1335_write_data( 0 );				// 设置SAG=0C000H
	sed1335_write_data( 0x70 );				// 汉字模在cgram中的编码0x70~0x73
	sed1335_write_command( CsrW );			// CSRW 代码,光标指针设置
	sed1335_write_data( 0 );				// 设置CSR=0C400H(字符代码=80H)
	sed1335_write_data( 0x74 );				// 汉字模在cgram中的编码0x70~0x73
	sed1335_write_command( CsrDirR );		// CSRDIR 代码
	sed1335_write_command( mWrite );		// 代码0x42,数据写入指令
	for (ii=0;ii<EndlCode;ii++){
		for (ij=0;ij<2;ij++){
			for (iCgram=0;iCgram<32;iCgram+=2) 
				sed1335_write_data( Cdotlib[Base+ii].Msk[ij+iCgram] );	// 将制定的数据块写入 cgram
		}
	}
}
/*==============================================================================
; 汉字写入子程序(图形方式)。每次调用输出一个汉字
; 支持图形方式使用,完成汉字点阵码的输出。
; 携入参数: Ox,Oy....写入显示的左上角坐标,Ox是以字节单位,Oy以行扫描线单位
			Ptr......汉字码,库内的排列编码,大型程序时请改用unsigned int类型
; 无返回数据。
 ==============================================================================*/
void PutCdotInGraph( Uint Ox, Uchar Oy, Uint Cnumber, Uchar DotWidth ) {

Uint tempPtr,Optr;
Uchar tempCount1,tempCount2,nByte;
	Optr = (Uint)Oy * paraP9 + Ox;
	nByte = DotWidth/8;
	sed1335_write_command( CsrDirD );						// 自动右移。
	tempPtr = (Uint)Cnumber * DotWidth*nByte;
	for (tempCount1=0;tempCount1<nByte;tempCount1++) {
		sed1335_write_command( CsrW );						// 光标定位指令
		sed1335_write_data( (Uchar)(Optr &0xff) );		    // 设置光标地址CSR
		sed1335_write_data( (Uchar)(Optr /256 ) );
		sed1335_write_command( mWrite );					// ram写指令
		switch(DotWidth){
			case 16:	for(tempCount2=0;tempCount2<DotWidth;tempCount2++) {
						sed1335_write_data( Cdotlib[Cnumber].Msk[tempCount2*2+tempCount1] );		// 写入数据
						}
						break;
			case 24:	for(tempCount2=0;tempCount2<DotWidth;tempCount2++) {
						sed1335_write_data( Cdot24lib[tempPtr] );		// 写入数据
						tempPtr += nByte;
						}
						break;
		}
		tempPtr = Cnumber * DotWidth*nByte + tempCount1 + 1;
		Optr++;
	}
}
//; 图形方式下汉字显示方法,x方向2字节一个汉字
void PutWordInGraph( void ) {	
//x坐标以半个汉字定位左起0开始计算
//y坐标以像素行定位,顶部0开始计算
//汉字码以点阵码列表所对应32字节位单位进界,从0开始计算

	PutCdotInGraph( 8, 30, 0, 16 );	// 调汉字写入子程序,0=设置汉字代码
	PutCdotInGraph( 10, 30, 1, 16 );	// 调汉字写入子程序,1=设置汉字代码
	PutCdotInGraph(	12, 30, 2, 16 );	// 调汉字写入子程序
	PutCdotInGraph( 14, 30, 3, 16 );	// 调汉字写入子程序
	PutCdotInGraph( 16, 30, 4, 16 );	// 调汉字写入子程序,0=设置汉字代码
	PutCdotInGraph( 18, 30, 5, 16 );	// 调汉字写入子程序,1=设置汉字代码
	delay_ms(50);
}
void PutWord24InGraph( void ) {	
//x坐标以半个汉字定位左起0开始计算
//y坐标以像素行定位,顶部0开始计算
//汉字码以点阵码列表所对应32字节位单位进界,从0开始计算
	PutCdotInGraph( 19, 7, 0, 24 );	// 调汉字写入子程序
	PutCdotInGraph( 22, 6, 1, 24 );	// 调汉字写入子程序
	PutCdotInGraph( 25, 6, 2, 24 );	// 调汉字写入子程序
	PutCdotInGraph(	28, 6, 3, 24 );	// 调汉字写入子程序
	PutCdotInGraph( 31, 6, 4, 24 );	// 调汉字写入子程序
	delay_ms(50);
}

//---------------------------
// 读参数及显示数据子程序
Uchar ReadDataLcm( void ) {
	return LcmRdataPort;
}
/*============================================================================
 光标位定位,用于在1区图形方式下。
 输入参数约定:	x...水平方向字节单位坐标,即可以以半个汉字宽度设定水平坐标。
 				y...垂直方向以行线定位的坐标,可以定位到点单位。
				左上角约定坐标为( 0, 0 )

 ============================================================================*/
void Locatexy(Uchar x,Uchar y, Uchar attribs) {
Uint temp;
	temp = (Uint)y*paraP9+x;
	if(attribs)temp += BasePart2*256;	// 如果需要就指向第二区,加上第二区首地址
	sed1335_write_command( CsrW );				// 光标Locate,定位
	sed1335_write_data( (Uchar)(temp & 0xff) );	// 写入参数CSRL设置参数光标指针低8位
	sed1335_write_data( (Uchar)(temp /256 ) );	// 写入参数CSRH设置参数光标指针高8位
}

/*=============================================================================
  ASCII(16*32) 及 汉字(16*16) 混合字符串显示函数	
  输入参数约定:
	x,y显示字符串的左上角xy坐标.x..8点一字节位置; y..一条扫描线定位
	*ptr...字符串指针,本函数所指的是flash字串
	att....显示区标志,0...第一区;1...第二区
  返回参数:输出字串长度,留意汉字一个算两个
  其它假定:调用时汉字必须在字库数组中已经存在,否则将输出不正确的结果
==============================================================================*/
Uchar dprintf32(Uchar x,Uchar y, char  *ptr, Uchar att)
{
	Uchar  c1,c2;
	Uchar i,j,uLen,uRow,uCol,temp,address;
	Uint  k;
	uRow = x;
	uCol = y;
	uLen=0;
	address=(Uchar)y*paraP9+x;
	sed1335_write_command( CsrDirD );           // 光标移动方向定义:自动下移
	Locatexy(uRow,uCol,att);					//起点定位
	while ( (Uchar)ptr[uLen]!= 0 ){uLen++;};	//探测字串长度
	i=0;
	while(i<uLen)
	{
		c1 = ptr[i];
		c2 = ptr[i+1];

//ascii字符与汉字内码的区别在于128做分界,大于界线的为汉字码
		if(c1 <=128)								// ASCII
		{
			if (c1 >= 0x10)	{
				sed1335_write_command( mWrite );				// 写数据(命令)
				for(j=0;j<32;j++) sed1335_write_data( ASC_MSK32[(c1-0x30)*64 +j ]);
				uRow++;			
				Locatexy(uRow,uCol,att);
				sed1335_write_command( mWrite );				// 写数据(命令)			
				for(j=0;j<32;j++) sed1335_write_data( ASC_MSK32[(c1-0x30)*64 +j+32 ]);
			}
			uRow++;							                    // 列数加1
			Locatexy(uRow,uCol,att);
		}
		else										            // 中文
		{
			for(j=0;j<sizeof(Cdotlib)/sizeof(Cdotlib[0]);j++)	// 查找定位
			{
				if((c1 == Cdotlib[j].Index[0]) && (c2 == Cdotlib[j].Index[1]))
					break;
			}
			for(k=0;k<2;k++)						            // 分16行输出
			{
				Locatexy(uRow+k,uCol,att);
				sed1335_write_command( mWrite );				// 写数据(命令)

				for(temp=0;temp<16;temp++) sed1335_write_data( Cdotlib[j].Msk[temp*2 + k]);
			}
			uRow +=2;								// 光标右移一大格
			i++;
		}
		if(uRow >= 40)								// 光标后移
		{
			uCol += 32;								// Y坐标
			uRow = 0;					    		// X坐标
			if( uCol >= 240 ) uCol = 0;
		}

		Locatexy((uRow+0),(uCol+0),att);
		i++;
	}
	return uLen;									//返回字串长度,汉字按2字节计算
}

 //串口初始化//
void UART_init(void)
  {
     UCSRB = BIT(RXCIE)| BIT(RXEN) |BIT(TXEN);   //允许串口发送和接收,并响应接收完成中断
     UBRR = 25;                                  //时钟4Mhz,波特率9600
     UCSRC = BIT(URSEL)|BIT(UCSZ1)|BIT(UCSZ0);   //8位数据+1位stop位
  }
 //串口接收中断函数// 
#pragma interrupt_handler UART_rx: iv_USART_RX
void UART_rx(void)                   
  { Uchar  temp;
    temp = UDR;                        
       switch (temp)
                       {
                         case '0': { LcmInition();           //液晶初始化
								    delay_ms(100);     
                                    dprintf32(12,96,"receive=0",0);
									puts("00ok");           //字符串发送函数 
									delay_ms(2000);   	 
                                   }  break;
                         case '1': {LcmInition();           //液晶初始化
								    delay_ms(100);
                                    dprintf32(12,96,"receive=1",0);	
									delay_ms(2000);                                
                                   }  break;
						 default:
						           {LcmInition();           //液晶初始化
								    delay_ms(100);
									dprintf32(12,96,"receive>1",0);
										delay_ms(2000);    
						}           }		  		   
								   
     RX_data[RX_counter] = UDR;
     
     if (RX_data[RX_counter]=='s')
       {
       	  RX_data[0]=RX_data[RX_counter];
       	  RX_counter=0;
       }
     
     RX_counter++;                   //接收的字节数计数
  }
void puts(unsigned char *s)          //字符串发送函数
  {
     while (*s)
       {
       	  putchar(*s);
       	  s++;
       }
  }
void putchar(unsigned char c)        //字符输出函数
  {
     while (!(UCSRA&(1 << UDRE)));   //判断上次发送有没有完成
     UDR = c;    
  }

//循环显示函数//
void LOOP_DISP(void)  
 {         //LcmInition();
		  dprintf32(4,0, "MD500_<",0);	// 图形方式下中英文混合字符串的显示
		  PutWord24InGraph();
		  PutCdotInGraph( 2, 36, 5, 24 );	// 调汉字写入子程序
		  PutCdotInGraph( 5, 36, 6, 24 );	// 调汉字写入子程序
		  PutCdotInGraph( 8, 36, 7, 24 );	// 调汉字写入子程序
		  dprintf32(12,32, "SAD=1300^cm",0);	// 图形方式下中英文混合字符串的显示
		  PutCdotInGraph( 2, 67, 8, 24 );	// 调汉字写入子程序
		  PutCdotInGraph( 5, 67, 9, 24 );	// 调汉字写入子程序
		  PutCdotInGraph( 8, 67, 10, 24 );	// 调汉字写入子程序
		  dprintf32(12,64, "^G^=^360`",0);	// `=度,^=空格,-=_,图形方式下中英文混合字符串的显示
		  PutCdotInGraph( 2, 99, 11, 24 );	// 调汉字写入子程序
		  PutCdotInGraph( 5, 99, 12, 24 );	// 调汉字写入子程序
		  PutCdotInGraph( 8, 99, 13, 24 );	// 调汉字写入子程序
		  dprintf32(12,96, "^C^=^125`",0);	// 图形方式下中英文混合字符串的显示
		  PutCdotInGraph( 2, 145, 14, 24 );	// 调汉字写入子程序
		  PutCdotInGraph( 5, 145, 15, 24 );	// 调汉字写入子程序
		  PutCdotInGraph( 8, 145, 16, 24 );	// 调汉字写入子程序
		  dprintf32(12,128,"^X^=^400^mm",0);	// 图形方式下中英文混合字符串的显示
		  dprintf32(12,160,"^Y^=^400^mm",0);	// 图形方式下中英文混合字符串的显示
		  PutCdotInGraph( 2, 199, 17, 24 );	// 调汉字写入子程序
		  PutCdotInGraph( 5, 199, 18, 24 );	// 调汉字写入子程序
		  PutCdotInGraph( 8, 199, 19, 24 );	// 调汉字写入子程序
		  dprintf32(12,196,"TH^=^^35^cm",0);	// 图形方式下中英文混合字符串的显示
		  delay_ms(1450);
		 
 }

void main(void) 
{  delay_ms(100); 
    SelfInit();             //CPU初始化
	delay_ms(100);
    LcmInition();           //液晶初始化
	delay_ms(100);
    UART_init();            //串口初始化//
    SEI();                  //开中断
    LOOP_DISP();
	delay_ms(9000);  
   while(1)
    {LOOP_DISP();
	puts("ok");             //字符串发送函数 
	 delay_ms(100); 
	 LOOP_DISP();  
	 	
	}
}  

⌨️ 快捷键说明

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