ssd1306显示汉字

屏幕快照 2019-10-06 下午3.54.53.png

我是利用avr来驱动的,关于avr如何连接ssd1306。大家可以翻看手册,能够更好的理解。这里我选择的是IIC的连线方式,所以ssd1306的D1和D2我连在一起了,这也是手册里推荐的方式。

这里我选择的编译器是bascom,听说AVR STUDIO更好并且免费。bascom是收费的,所以使用前你需要购买,网上的破解版我基本上都有尝试,基本上无法使用,因为版本太低。高版本的只提供demo只能编译4K一般够用。

由于内部的驱动方式,什么屏幕点亮,清理内存,复位屏幕。等等一些操作,如果你的线连接的方式对,那么bascom会自动帮你整好整个这一套流程,不然你就得按照手册一步一步去操作。代码直接使用bascom官网提供的:

'-------------------------------------------------------------------------------
'                       SSD1306-I2C.BAS
'                     (c) MCS Electronics 1995-2015
'          Sample to demo the 128x64 I2C OLED display
'
'-------------------------------------------------------------------------------
$regfile = "m88pdef.dat"
$hwstack = 32
$swstack = 32
$framesize = 32
$crystal = 8000000
Config Clockdiv = 1                                         ' make sure the chip runs at 8 MHz
 
Config Scl = Portc.5                                       ' used i2c pins
Config Sda = Portc.4
Config Twi = 400000                                         ' i2c speed
 
I2cinit
$lib "i2c_twi.lbx"                                         ' we do not use software emulated I2C but the TWI
$lib "glcdSSD1306-I2C.lib"                                 ' override the default lib with this special one
 
#if _build < 20784
Dim ___lcdrow As Byte , ___lcdcol As Byte                 ' dim these for older compiler versions
#endif
 
Config Graphlcd = Custom , Cols = 128 , Rows = 64 , Lcdname = "SSD1306"
Cls
Setfont Font8x8tt                                           ' select font
 
Lcdat 1 , 1 , "BASCOM-AVR"
Lcdat 2 , 10 , "1995-2015"
Lcdat 8 , 5 , "MCS Electronics" , 1
Waitms 3000
 
Showpic 0 , 0 , Plaatje
 
End
 
 
$include "font8x8TT.font"                                   ' this is a true type font with variable spacing
 
 
Plaatje:
  $bgf "ks108.bgf"                                         ' include the picture data

这里的glcdSSD1306-I2C.lib库就是一个封装好的ssd1306库。如果你大致能看懂的话,那么你可以继续看,如果不行的话,那就去查些资料吧。首先要知道一点,一个汉字或者字符显示在屏幕上有这么几个要素,宽度,高度,块大小(字体)。这些东西可以去看字体方面的知识点。还有阴码,阳码,扫描方式。bascom显示字符利用了一个叫做font的字体文件,这个文件加载后你就可以使用其中的文字内容。注意它虽然叫做font但是它不是原来windows上理解的这种字体。这种概念要有。

bascom生成这种文件有两种方式:

1、ide本身的font edit 

2、Bascom AVR Font Converter

这两种方式都可以,我推荐第二个。因为它可以生成不同宽度高度和块的font文件,并且它是一键生成的方式(购买后的情况下)。

格式说明:

A font file is a plain text file.

Lets have a look at the first few lines of the 8x8 font:


Font8x8:

$asm

.db 1,8,8,0

.db 0,0,0,0,0,0,0,0 ;

.db 0,0,6,95,6,0,0,0 ; !


The first line contains the name of the font. With the SETFONT statement you can select the font. Essential, this sets a data pointer to the location of the font data.

The second line ($ASM) is a directive for the internal assembler that asm code will follow.

All other lines are data lines.

The third line contains 4 bytes: 1 (height in bytes of the font) , 8 (width in pixels of the font), 8 (block size of the font) and a 0 which was not used before the 'truetype' support, but used for aligning the data in memory. This because AVR object code is a word long.

This last position is 0 by default. Except for 'TrueType' fonts. In BASCOM a TrueType font is a font where every character can have it's own width. The letter 'i' for example takes less space then the letter 'w'. The EADOG128 library demonstrates the TrueType option.

In order to display TT, the code need to determine the space at the left and right of the character. This space is then skipped and a fixed space is used between the characters. You can replace the 0 by the width you want to use. The value 2 seems a good one for small fonts.

All other lines are bytes that represent the character.

看不懂的话直接右键翻译,知道这些后你还是无法显示汉字,因为你不知道怎么去索引font的汉字位置,我也是翻来翻去看到的。打开ide的font edit。你会发现一个ascii。

屏幕快照 2019-10-06 下午4.12.45.png

可以看到有32和33,所以直接lcdat 1,1,chr(32)就可以索引到“王”这个汉字

整个代码

Cls
Setfont Font16x16
Lcdat 0,0,chr(32);
Setfont Font8x8tt 
Lcdat 8,16, "And" 
Setfont Font16x16
Lcdat 0,16+8+8+8-3,chr(33);
Setfont Font8x8tt 
Lcdat 8,16+8+8+8-3+16, "PCB"
Waitms 3500
Cls

批量制作汉字的话可以利用PCtoLcd,配置模式如下:

屏幕快照 2019-10-06 下午4.15.21.png

这是ssd1306芯片的取模方式的配置。其他的需要自己看手册。这样就会生成db代码。然后把db代码放到一个font文件里,载入到font edit 就可以看到效果。 如果遇到错误建议删除空行。


ssd1306显示汉字


本站如无特别说明即为原创,转而告知:(https://www.iwonmo.com/archives/1620.html)

标签: 显示中文, 显示汉字

添加新评论