(高分)急!C语言编程中如何显示汉字

(高分)急!C语言编程中如何显示汉字,第1张

wintc 自带没雹汉显 字库 可以下来看看

他那个是用点阵枯碧帆显示的 用的是graphics.h这个库

例如

char guan48[]={

/* 以下是 '灌' 的 48点阵黑体 字慧镇模,288 byte */

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

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

0x00,0x00,0x00,0x00,0x03,0xC0,0x38,0x00,

0x03,0x00,0x03,0xC0,0x38,0x00,0x07,0x80,

0x03,0xC0,0x38,0x00,0x07,0xC0,0x03,0xC0,

0x38,0x00,0x03,0xF1,0xFF,0xFF,0xFF,0xFC,

0x01,0xF9,0xFF,0xFF,0xFF,0xFC,0x00,0x79,

0xF1,0xC0,0x39,0xFC,0x00,0x30,0x01,0xC0,

0x38,0x00,0x00,0x00,0x00,0x00,0x00,0x00,

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

0xFF,0xF0,0xFF,0xE0,0x00,0x00,0xFF,0xF0,

0xFF,0xE0,0x00,0x00,0xE0,0x70,0xE0,0xE0,

0x0E,0x00,0xE0,0x70,0xE0,0xE0,0x1F,0x80,

0xE0,0x70,0xE0,0xE0,0x1F,0xE0,0xFF,0xF0,

0xFF,0xE0,0x07,0xF0,0xFF,0xF0,0xFF,0xE0,

0x01,0xF0,0xFF,0xF1,0xFF,0xE0,0x00,0x60,

0x08,0x07,0x00,0x00,0x00,0x20,0x1E,0x03,

0x80,0x00,0x00,0x00,0x1E,0x03,0x00,0x00,

0x00,0x00,0x1F,0xFF,0xFF,0xF0,0x00,0x00,

0x3F,0xFF,0xFF,0xF0,0x00,0x00,0x3F,0xFF,

0xFF,0xF0,0x00,0x00,0x7C,0x03,0x80,0x00,

0x00,0x20,0x7C,0x03,0x80,0x00,0x00,0x70,

0xFC,0x03,0x80,0x00,0x00,0x71,0xFF,0xFF,

0xFF,0xE0,0x00,0x73,0xFF,0xFF,0xFF,0xE0,

0x00,0xF3,0xBC,0x03,0x80,0x60,0x00,0xE3,

0xBC,0x03,0x80,0x00,0x01,0xE1,0x3C,0x03,

0x80,0x00,0x01,0xC0,0x3F,0xFF,0xFF,0xE0,

0x01,0xC0,0x3F,0xFF,0xFF,0xE0,0x03,0xC0,

0x3F,0xFF,0xFF,0xE0,0x03,0x80,0x3C,0x03,

0x80,0x00,0x07,0x80,0x3C,0x03,0x80,0x00,

0x0F,0x80,0x3C,0x03,0x80,0x00,0x0F,0x00,

0x3F,0xFF,0xFF,0xF8,0x1F,0x00,0x3F,0xFF,

0xFF,0xF8,0x1F,0x00,0x3C,0x00,0x00,0x00,

0x06,0x00,0x3C,0x00,0x00,0x00,0x00,0x00,

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

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

}

一、OCM12864液晶显示模块概述

1. OCM12864液晶显示模块是128×64点阵型液晶显示模块,可显示各种字符及图形,可与CPU直接接口,具有8位标准数据总线、6条控制线及电源线。采用KS0107控制IC。

2. 外观尺寸:113×65×11mm(ocm12864-1), 93×70×10mm(ocm12864-2)

78×70×10mm(ocm12864-3),

3. 视域尺闭改寸:73.4×38.8mm(ocm12864-1) 70.7×38mm(ocm12864-2),

64×44mm(ocm12864-3)

4. 重量:大约 g

l 补充说明:外观尺寸可根据用户的要求进行适度调整。

二、最大桥好工作范围

1、逻辑工作电压(Vcc):4.5~5.5V

2、电源地(GND):0V

3、LCD驱动电压(Vee):0~-10V

4、输入电压:Vee~Vdd

5、工作温度(Ta):0~55℃(常温) / -20~70℃(宽温)

6、保存温度(Tstg):-10~65℃

三、电气特性(测试条件 Ta=25,Vdd=5.0+/-0.25V)

1、输入高电平(Vih):3.5Vmin

2、输入低电平(Vil):0.55Vmax

3、输出高电平(Voh):3.75Vmin

4、输出低电平(Vol):1.0Vmax

5、工作电流:2.0mAmax

四、接口说明

1. 12864-1,12864-2接口说明表

管脚号 管脚 电平 说明

1 VSS 0V 逻辑电源地。

2 VDD 5.0V 逻辑电源正。

3 V0 LCD驱动电压,应用时在VEE与V0之间加一2K可调电阻。

4 D/I H/L 数据\指令选择:高电平:数据D0-D7将送入显示RAM;

低电平:数据D0-D7将送入指令寄存器执行。

5 R/W H/L 读\写选择:高电平:读数据;低电平:写数据。

6 E H.H/L 读写使能,高电平有效,下降沿锁定数据。

7 DB0 H/L 数据输入输出引脚。

8 DB1 H/L 数据输入输出引脚。

9 DB2 H/L 数据输入输出引脚。

10 DB3 H/L 数据输入输出引脚。

11 DB4 H/L 数据输入输出引脚。

12 DB5 H/L 数据输入输出引脚。

13 DB6 H/L 数据输入输出引脚。

14 DB7 H/L 数据输入输出引脚。

15 CS1 H/L 片选择信号,低电平时选择前64列。

16 CS2 H 片选择信号,低电平时选择后64列。

17 RET L 复位信号,低电平有效。

18 VEE -10V LCD驱动电源。

19 BL AC 背光电源,LED+。

20 BL AC 背光电源,LED-。

2. 12864-3A接口说明表

管脚号 管脚 电平 说明

1 CSA H/L 片选择信号,低电平时选择前64列。

2 CSB H 片选择信号,低电平时选择后64列。

3 GND 0V 逻辑电源地。

4 VCC 5V 逻辑电源。

5 VEE -10V LCD驱动电轿消判源。

6 D/I H/L 数据\指令选择,高电平:数据D0-D7将送入显示RAM;

低电平:数据D0-D7将送入指令寄存器执行。

7 R/W H/L 读\写选择,高电平:读数据;低电平:写数据。

8 E H.H/L 读写使能,高电平有效,下降沿锁定数据。

9 DB0 H/L 数据输入输出引脚。

10 DB1 H/L 数据输入输出引脚。

11 DB2 H/L 数据输入输出引脚。

12 DB3 H/L 数据输入输出引脚。

13 DB4 H/L 数据输入输出引脚。

14 DB5 H/L 数据输入输出引脚。

15 DB6 H/L 数据输入输出引脚。

16 DB7 H/L 数据输入输出引脚。

3. 12864-3B接口说明表

管脚号 管脚 电平 说明

1 CSA H/L 片选择信号,低电平时选择前64列。

2 CSB H 片选择信号,低电平时选择后64列。

3 GND 0V 逻辑电源地。

4 VCC 5V 逻辑电源。

5 V0 -10V LCD驱动电源。

6 D/I H/L 数据\指令选择,高电平:数据D0-D7将送入显示RAM;

低电平:数据D0-D7将送入指令寄存器执行。

7 R/W H/L 读\写选择,高电平:读数据;低电平:写数据。

8 E H.H/L 读写使能,高电平有效,下降沿锁定数据。

9 DB0 H/L 数据输入输出引脚。

10 DB1 H/L 数据输入输出引脚。

11 DB2 H/L 数据输入输出引脚。

12 DB3 H/L 数据输入输出引脚。

13 DB4 H/L 数据输入输出引脚。

14 DB5 H/L 数据输入输出引脚。

15 DB6 H/L 数据输入输出引脚。

16 DB7 H/L 数据输入输出引脚。

17 RET L 复位信号,低电平有效。

18 VEE -10V LCD驱动电源。

19 BL AC 背光电源,LED+。

20 BL AC 背光电源,LED-。

五、指令描述

1、显示开/关设置

CODE: R/WD/I DB7 DB6 DB5 DB4 DB3 DB2 DB1 DB0

L L L L H H H H H H/L

功能:设置屏幕显示开/关。

DB0=H,开显示;DB0=L,关显示。不影响显示RAM(DD RAM)中的内容。

2、设置显示起始行

CODE: R/WD/I DB7 DB6 DB5 DB4 DB3 DB2 DB1 DB0

L L H H 行地址(0~63)

功能:执行该命令后,所设置的行将显示在屏幕的第一行。显示起始行是由Z地址计数器控制的,该命令自动将A0-A5位地址送入Z地址计数器,起始地址可以是0-63范围内任意一行。Z地址计数器具有循环计数功能,用于显示行扫描同步,当扫描完一行后自动加一。

3、设置页地址

CODE: R/WD/I DB7 DB6 DB5 DB4 DB3 DB2 DB1 DB0

L L H L H H H 页地址(0~7)

功能:执行本指令后,下面的读写 *** 作将在指定页内,直到重新设置。页地址就是DD RAM 的行地址,页地址存储在X地址计数器中,A2-A0可表示8页,读写数据对页地址没有影响,除本指令可改变页地址外,复位信号(RST)可把页地址计数器内容清零。

DD RAM地址映像表

Y 地址

0 1 2 ……………………… 61 62 63

DB0

∫ PAGE0

DB7X=0

DB0

∫ PAGE1

DB7X=1

DB0

∫ PAGE6

DB7X=7

DB0

∫ PAGE7

DB7X=8

4、设置列地址

CODE: R/WD/I DB7 DB6 DB5 DB4 DB3 DB2 DB1 DB0

L L L H 列地址(0~63)

功能: DD RAM 的列地址存储在Y地址计数器中,读写数据对列地址有影响,在对DD RAM进行读写 *** 作后,Y地址自动加一。

5、状态检测

CODE: R/WD/I DB7 DB6 DB5DB4 DB3 DB2 DB1 DB0

H L BF L ON/OFF RST L L L L

功能:读忙信号标志位(BF)、复位标志位(RST)以及显示状态位(ON/OFF)。

BF=H:内部正在执行 *** 作;BF=L:空闲状态。

RST=H:正处于复位初始化状态; RST=L:正常状态。

ON/OFF=H:表示显示关闭;ON/OFF=L:表示显示开。

6、写显示数据

CODE: R/WD/I DB7 DB6 DB5 DB4 DB3 DB2 DB1 DB0

L H D7 D6 D5 D4 D3 D2 D1 D0

功能:写数据到DD RAM,DD RAM是存储图形显示数据的,写指令执行后Y地址计数器自动加1。D7-D0位数据为1表示显示,数据为0表示不显示。写数据到DD RAM前,要先执行“设置页地址”及“设置列地址”命令。

7、读显示数据

CODE: RS R/W DB7 DB6 DB5 DB4 DB3 DB2 DB1 DB0

H H D7 D6 D5 D4 D3 D2 D1 D0

功能:从DD RAM读数据,读指令执行后Y地址计数器自动加1。从DD RAM读数据前要先执行“设置页地址” 及“设置列地址”命令。

六、接口时序

1.写 *** 作时序

时序1

4. 读 *** 作时序

************************************************************

串行连接 *** 作程序

新势力单片机网站:[url]www.xinshili.net[/url]

对外函数列表:

void LCD_Init( void )//初始化

void LCD_PutStr(unsigned char row,unsigned char col,unsigned char *puts)//写入文本

void LCD_PutBMP(unsigned char *puts)//写入图片

void LCD_ClearTXT( void )//清除文本

void LCD_ClearBMP( void )//清除图片

***********************************************************/

#define LCDNOP() NOP()NOP()

//以下配置IO管脚

//=========================================================

#define LCDSIDPORT PORTE //SID PORT

#define LCDSIDDDR DDRE //SID DDR

#define LCDSIDPIN PINE //SID PINE

#define LCDSIDIO 2 //SID IO

#define LCDSCLKPORT PORTE

#define LCDSCLKDDR DDRE

#define LCDSCLKPIN PINE

#define LCDSCLKIO 3

#define LCDRSTPORT PORTE

#define LCDRSTDDR DDRE

#define LCDRSTPIN PINE

#define LCDRSTIO 4

//========================================================

#define OUTLCDSCLK() LCDSCLKDDR |= 1 <<LCDSCLKIO //设置输出

#define SETLCDSCLK() LCDSCLKPORT |= 1 <<LCDSCLKIO //拉高

#define CLRLCDSCLK() LCDSCLKPORT &= ~(1 <<LCDSCLKIO) //拉低

#define OUTLCDSID() LCDSIDDDR |= 1 <<LCDSIDIO //设置输出

#define INLCDSID() LCDSIDDDR &= ~(1 <<LCDSIDIO)LCDSIDPORT |= 1 <<LCDSIDIO //设置输入

#define SETLCDSID() LCDSIDPORT |= 1 <<LCDSIDIO //拉高

#define CLRLCDSID() LCDSIDPORT &= ~(1 <<LCDSIDIO) //拉低

#define GETLCDSID() ((LCDSIDPIN &(1 <<LCDSIDIO)) >>LCDSIDIO) //读IO值

const unsigned char AC_TABLE[]={

0x80,0x81,0x82,0x83,0x84,0x85,0x86,0x87,//第一行汉字位置

0x90,0x91,0x92,0x93,0x94,0x95,0x96,0x97,//第二行汉字位置

0x88,0x89,0x8a,0x8b,0x8c,0x8d,0x8e,0x8f,//第三行汉字位置

0x98,0x99,0x9a,0x9b,0x9c,0x9d,0x9e,0x9f,//第四行汉字位置

}

//串口发送一个字节

void LCD_WriteByte(unsigned char Dbyte)

{

unsigned char i

OUTLCDSCLK()

OUTLCDSID()

for(i=0i<8i++)

{

CLRLCDSCLK()

Dbyte=Dbyte<<1 //左移一位

if (SREG &1)

SETLCDSID()

else

CLRLCDSID()

SETLCDSCLK()

LCDNOP()

CLRLCDSCLK()

}

return

}

//串口接收一个字节

//仅在读取数据的时候用到

//而读出的数据是一次只能读出4bit的

unsigned char LCD_ReadByte(void)

{

unsigned char i,temp1,temp2

temp1=temp2=0

OUTLCDSCLK()

INLCDSID()

for(i=0i<8i++)

{

temp1=temp1<<1

CLRLCDSCLK()

LCDNOP()

SETLCDSCLK()

LCDNOP()

CLRLCDSCLK()

if(GETLCDSID()) temp1++

}

for(i=0i<8i++)

{

temp2=temp2<<1

CLRLCDSCLK()

LCDNOP()

SETLCDSCLK()

LCDNOP()

CLRLCDSCLK()

if(GETLCDSID()) temp2++

}

return ((0xf0&temp1)+(0x0f&temp2))

}

void LCD_CheckBusy( void )

{

LCDNOP()

return

do LCD_WriteByte(0xfc) //11111,RW(1),RS(0),0

while(0x80&LCD_ReadByte()) //BF(.7)=1 Busy

}

void LCD_WriteCmd( unsigned char Cbyte )

{

//LCD_CS = 1

LCD_CheckBusy()

LCD_WriteByte(0xf8)//11111,RW(0),RS(0),0

LCD_WriteByte(0xf0&Cbyte) //高四位

LCD_WriteByte(0xf0&Cbyte<<4)//低四位(先执行<<)

//LCD_CS = 0

}

void LCD_WriteData( unsigned char Dbyte )

{

//LCD_CS = 1

LCD_CheckBusy()

LCD_WriteByte(0xfa)//11111,RW(0),RS(1),0

LCD_WriteByte(0xf0&Dbyte) //高四位

LCD_WriteByte(0xf0&Dbyte<<4)//低四位(先执行<<)

//LCD_CS = 0

}

unsigned char LCD_ReadData( void )

{

LCD_CheckBusy()

LCD_WriteByte(0xfe)//11111,RW(1),RS(1),0

return LCD_ReadByte()

}

void LCD_Init( void )

{

LCD_WriteCmd(0x30) //8BitMCU,基本指令集合

LCD_WriteCmd(0x03) //AC归0,不改变DDRAM内容

LCD_WriteCmd(0x0C) //显示ON,游标OFF,游标位反白OFF

LCD_WriteCmd(0x01) //清屏,AC归0

LCD_WriteCmd(0x06) //写入时,游标右移动

}

//文本区清RAM函数

void LCD_ClearTXT( void )

{

unsigned char i

LCD_WriteCmd(0x30) //8BitMCU,基本指令集合

LCD_WriteCmd(0x80) //AC归起始位

for(i=0i<64i++)

LCD_WriteData(0x20)

}

//图形区和文本区显示在两个不同的RAM区

//图形区清RAM函数

void LCD_ClearBMP( void )

{

unsigned char i,j

LCD_WriteCmd(0x34) //8Bit扩充指令集,即使是36H也要写两次

LCD_WriteCmd(0x36) //绘图ON,基本指令集里面36H不能开绘图

for(i=0i<32i++) //12864实际为256x32

{

LCD_WriteCmd(0x80|i) //行位置

LCD_WriteCmd(0x80) //列位置

for(j=0j<32j++) //256/8=32 byte

LCD_WriteData(0)

}

}

void LCD_PutStr(unsigned char row,unsigned char col,unsigned char *puts)

{

LCD_WriteCmd(0x30) //8BitMCU,基本指令集合

LCD_WriteCmd(AC_TABLE[8*row+col]) //起始位置

while(*puts != '\0')//判断字符串是否显示完毕

{

if(col==8) //判断换行

{ //若不判断,则自动从第一行到第三行

col=0

row++

}

if(row==4) row=0 //一屏显示完,回到屏左上角

LCD_WriteCmd(AC_TABLE[8*row+col])

LCD_WriteData(*puts) //一个汉字要写两次

puts++

if (*puts != '\0')

{

LCD_WriteData(*puts)

puts++

}else{break}

col++

}

}

void LCD_PutBMP(unsigned char *puts)

{

unsigned int x=0

unsigned char i,j

LCD_WriteCmd(0x34) //8Bit扩充指令集,即使是36H也要写两次

LCD_WriteCmd(0x36) //绘图ON,基本指令集里面36H不能开绘图

for(i=0i<32i++) //12864实际为256x32

{

LCD_WriteCmd(0x80|i) //行位置

LCD_WriteCmd(0x80) //列位置

for(j=0j<32j++)//256/8=32 byte

{ //列位置每行自动增加

LCD_WriteData(puts[x])

x++

}

}

}

本文转自:新势力单片机 [url]http://www.XinShiLi.net[/url]

昊锐大字库仪表意思是昊锐汽车中文汉显和多功能菜单的显示。

斯柯达昊锐,是上海大众汽车有限公司推出的一谈知轿个汽车品牌猛如,首批上市的有9款车型,其中1.8T5款,2.0T4款。9款车型中除了1.8TSI版本中带有一款手挡车型外,其余8款昊锐产含肆品均为6速手自一体变速器,DSG版昊锐将会在2010年推出,为国产7速DSG变速器。


欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/yw/8241733.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-04-14
下一篇2023-04-14

发表评论

登录后才能评论

评论列表(0条)

    保存