近几个月有点空闲时间,看到Arduino比较好玩,就开始学习,近来想做个数控电源,想用Arduino por mini做主控,TFT屏做显示,找到一个ILI9341的库,但该库只支持英文字符显示,搜了很久,也许本人比较笨,英文很差,没找到合用的库,又想显示汉字,实在没办法,只好自已照冬瓜画葫芦乱编了一个,请各位高人指点指点。TFT屏为2.2吋SPI接口,刷屏比较慢,有明显的闪烁,本来用5V的,但出现白屏,只好改为3.3V。本程序只解决中文显示,其他东西还没时间编。
[pre lang="arduino" line="1" file="ILI9341"]/*
本程序是在TFT2.h库的基础上,参考库文件中ASCII字符显示一段胡乱而编----chbhbgtx;
*/
#include <stdint.h>
#include <TFTv2.h>
#include <SPI.h>
int inPin_A = 0;
int inPin_B = 1;
/******汉字字库**********/
static const byte hanzi24x24[][72]={
//"0 数",
{0x00,0x40,0x42,0x4C,0x58,0xC0,0xFF,0xFE,
0x62,0x58,0x4E,0x64,0x44,0x00,0xF0,0xFF,
0x4E,0x42,0xC0,0xC0,0x60,0x60,0x40,0x00,
0x00,0x48,0x48,0x44,0xC3,0xE1,0x7F,0x57,
0x41,0xC3,0xE6,0x48,0x04,0x03,0x3F,0xE0,
0x00,0x80,0xFF,0x3F,0x00,0x00,0x00,0x00,
0x00,0x40,0x40,0x62,0x23,0x35,0x14,0x08,
0x0E,0x1F,0xB1,0x80,0x40,0x20,0x30,0x1D,
0x0F,0x0F,0x18,0x30,0x70,0x20,0x20,0x00},
//"1 控",
{0x00,0x40,0x40,0x40,0xFF,0xFE,0x42,0x60,
0x00,0xC0,0xF8,0x10,0x90,0x11,0x13,0x1E,
0x14,0x90,0x10,0x50,0x30,0x38,0x10,0x00,
0x00,0x20,0x60,0x30,0xFF,0xFF,0x08,0x08,
0x24,0x50,0x4C,0x46,0x43,0x41,0xC1,0xC0,
0x40,0x40,0x61,0x67,0x4E,0x1C,0x00,0x00,
0x00,0x20,0x20,0xE0,0x7F,0x3F,0x00,0x00,
0x20,0x20,0x20,0x20,0x20,0x20,0x3F,0x3F,
0x20,0x20,0x20,0x20,0x30,0x30,0x20,0x00},
//"2 电",
{0x00,0x00,0x00,0xF0,0xE0,0x20,0x20,0x20,
0x20,0x20,0xFF,0xFE,0x22,0x20,0x20,0x20,
0x20,0xF0,0xF0,0x20,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0xFF,0xFF,0x84,0x84,0x84,
0x84,0x84,0xFF,0xFF,0x84,0x84,0x84,0x84,
0x84,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x03,0x01,0x00,0x00,0x00,
0x00,0x00,0x3F,0x7F,0x60,0x60,0x60,0x60,
0x60,0x61,0x60,0x60,0x60,0x7E,0x30,0x00},
//"3 源",
{0x00,0x40,0xC0,0x86,0x1C,0x08,0xC0,0x00,
0xFE,0xFC,0x04,0x04,0xE4,0xC4,0x44,0x7C,
0x54,0x44,0x44,0xE4,0xE6,0x46,0x04,0x00,
0x00,0x80,0x83,0xC1,0xF0,0x0F,0x00,0x80,
0xFF,0x7F,0x00,0x00,0xBF,0x1F,0x12,0xF2,
0xF2,0x12,0x12,0x7F,0x3F,0x00,0x00,0x00,
0x00,0x00,0x00,0x1F,0x3F,0x40,0x38,0x0F,
0x23,0x10,0x18,0x0E,0x23,0x21,0xE0,0x7F,
0x3F,0x00,0x01,0x02,0x06,0x1C,0x38,0x00},
// "4 压",
{0x00,0x00,0x00,0x00,0xFC,0xF8,0x08,0x08,
0x08,0x08,0x08,0x08,0xE8,0xC8,0x48,0x08,
0x08,0x08,0x08,0x0C,0x0C,0x08,0x00,0x00,
0x00,0x00,0x00,0x00,0xFF,0xFF,0x00,0x08,
0x08,0x08,0x08,0x08,0xFF,0xFF,0x08,0x08,
0x48,0xC8,0x8C,0x0C,0x08,0x00,0x00,0x00,
0x00,0x40,0x30,0x1E,0x07,0x21,0x20,0x20,
0x20,0x20,0x20,0x20,0x3F,0x3F,0x20,0x20,
0x20,0x21,0x27,0x23,0x30,0x30,0x20,0x00},
//"5 流",
{0x00,0x80,0x00,0x04,0x0C,0x38,0x10,0xC0,
0x10,0x10,0x10,0xD0,0x71,0x36,0x1E,0x14,
0x50,0x90,0x90,0x18,0x18,0x10,0x00,0x00,
0x00,0x01,0x07,0x8E,0xC0,0x38,0x07,0x00,
0x02,0xF6,0xE7,0x26,0x02,0xF2,0xE2,0x22,
0x02,0xF2,0xE3,0x27,0x0E,0x00,0x00,0x00,
0x00,0x01,0x01,0x3F,0x7F,0x80,0x40,0x20,
0x1E,0x0F,0x01,0x00,0x00,0x7F,0x3F,0x00,
0x00,0x3F,0x7F,0x60,0x60,0x7E,0x30,0x00},
//"6 设",
{0x00,0x00,0x00,0x02,0x06,0x1C,0x38,0x00,
0x00,0x00,0x80,0xFE,0x7C,0x04,0x04,0x04,
0x04,0xFE,0xFE,0x84,0x80,0xC0,0x80,0x00,
0x00,0x02,0x02,0x02,0xFF,0xFF,0x02,0x00,
0x02,0x09,0x89,0x38,0xC8,0x08,0x08,0x08,
0xC8,0xF8,0x3D,0x0D,0x09,0x01,0x00,0x00,
0x00,0x00,0x00,0x10,0x3F,0x9F,0x8C,0x44,
0x42,0x21,0x20,0x10,0x19,0x0F,0x06,0x0F,
0x19,0x30,0x30,0x60,0x60,0x20,0x20,0x00},
//"7 置",
{0x00,0x00,0x00,0x00,0x7F,0x3E,0x22,0x22,
0x22,0x3E,0x3E,0xE2,0xE2,0x3E,0x3E,0x22,
0x22,0x22,0x7F,0x3F,0x82,0x80,0x00,0x00,
0x00,0x01,0x01,0x01,0x01,0x01,0xFD,0xF9,
0x49,0x49,0x4F,0x4F,0x49,0x49,0x49,0x49,
0xFD,0xFD,0x09,0x01,0x01,0x01,0x01,0x00,
0x00,0x40,0x40,0x40,0x40,0x40,0x7F,0x7F,
0x49,0x49,0x49,0x49,0x49,0x49,0x49,0x49,
0x7F,0x7F,0x40,0x40,0x60,0x60,0x40,0x00},
//"8 测",
{0x00,0x40,0xC2,0x86,0x1C,0xCC,0x00,0xFC,
0x08,0x08,0xE8,0x48,0x08,0xFC,0xFC,0x08,
0x00,0xF8,0x10,0x00,0xFE,0xFC,0x04,0x00,
0x00,0x80,0x83,0xE1,0x1C,0x03,0x00,0xFF,
0x00,0x00,0xFF,0x00,0x00,0xFF,0xFF,0x00,
0x00,0xFF,0x00,0x00,0xFF,0xFF,0x00,0x00,
0x00,0x00,0x3F,0x7F,0x00,0x80,0x40,0x23,
0x18,0x0C,0x07,0x00,0x04,0x1B,0x31,0x60,
0x00,0x23,0x20,0xE0,0x7F,0x3F,0x00,0x00},
//"9 定",
{0x00,0x00,0xC0,0xFC,0x10,0x10,0x10,0x10,
0x10,0x10,0x11,0x13,0x1E,0x14,0x10,0x10,
0x10,0x90,0x50,0x70,0x38,0x18,0x10,0x00,
0x00,0x00,0x00,0x02,0x02,0xF2,0xE2,0x22,
0x02,0x02,0x02,0xFE,0xFE,0x82,0x82,0x82,
0x82,0xC2,0xC2,0x83,0x03,0x02,0x00,0x00,
0x00,0x40,0x20,0x18,0x0E,0x07,0x03,0x0C,
0x18,0x30,0x60,0x7F,0x7F,0x60,0x60,0x60,
0x60,0x60,0x60,0x60,0x60,0x20,0x20,0x00}
};
/********** 24x24点 汉字显示 ************/
/*
hanzi:汉字在字库中位置;poX, poY:显示坐标;size :汉字大小;fgcolor:颜色
下面一段是我照冬瓜画葫芦乱编的,其实有些语句我自已都不是很明白,见笑,请高手注释。
*/
void TFT_write_hanzi(INT8U hanzi, INT16U poX, INT16U poY,INT16U size, INT16U fgcolor)
{
for (int i =0; i<24; i++ )
{
INT8U temp = hanzi24x24[hanzi];
for(INT8U j=0;j<8;j++)
{
if((temp>>j)&0x01)
{
Tft.fillRectangle(poX+i*size, poY+j*size, size, size, fgcolor);
}
}
}
for (int i =24; i<48; i++ )
{
INT8U temp = hanzi24x24[hanzi];
for(INT8U j=0;j<8;j++)
{
if((temp>>j)&0x01)
{
Tft.fillRectangle(poX+(i-24)*size, poY+8*size+j*size, size, size, fgcolor);
}
}
}
for (int i =48; i<72; i++ )
{
INT8U temp = hanzi24x24[hanzi];
for(INT8U j=0;j<8;j++)
{
if((temp>>j)&0x01)
{
Tft.fillRectangle(poX+(i-48)*size, poY+8*size*2+j*size, size, size, fgcolor);
}
}
}
}
void setup()
{
TFT_BL_ON; // turn on the background light
Tft.TFTinit(); //init TFT library
//"数控电源"
INT16U poX_1 = 20;
INT16U poY_1 = 5;
INT16U size_1 = 2;
TFT_write_hanzi(0, poX_1, poY_1,size_1, GREEN);
TFT_write_hanzi(1, poX_1+24*size_1*1+4, poY_1,size_1, GREEN);
TFT_write_hanzi(2, poX_1+24*size_1*2+4, poY_1,size_1, GREEN);
TFT_write_hanzi(3, poX_1+24*size_1*3+4, poY_1,size_1, GREEN);
//"测定电压"
INT16U poX_2 = 5;
INT16U poY_2 = 65;
INT16U size_2 = 1;
TFT_write_hanzi(8, poX_2, poY_2,size_2, GREEN);
TFT_write_hanzi(9, poX_2+24*size_2*1+4, poY_2,size_2, GREEN);
TFT_write_hanzi(2, poX_2+24*size_2*2+4, poY_2,size_2, GREEN);
TFT_write_hanzi(4, poX_2+24*size_2*3+4, poY_2,size_2, GREEN);
Tft.drawString("V",215,110,3,YELLOW);
//"设定电压"
INT16U poX_4 = 5;
INT16U poY_4 = 155;
INT16U size_4 = 1;
TFT_write_hanzi(6, poX_4, poY_4,size_2, GREEN);
TFT_write_hanzi(9, poX_4+24*size_4*1+4, poY_4,size_4, GREEN);
TFT_write_hanzi(2, poX_4+24*size_4*2+4, poY_4,size_4, GREEN);
TFT_write_hanzi(4, poX_4+24*size_4*3+4, poY_4,size_4, GREEN);
Tft.drawString("15.17",110,157,3,CYAN);
Tft.drawString("V",215,157,3,YELLOW);
//"测定电流"
INT16U poX_6 = 5;
INT16U poY_6 = 190;
INT16U size_6 = 1;
TFT_write_hanzi(8, poX_6, poY_6,size_2, GREEN);
TFT_write_hanzi(9, poX_6+24*size_6*1+4, poY_6,size_6, GREEN);
TFT_write_hanzi(2, poX_6+24*size_6*2+4, poY_6,size_6, GREEN);
TFT_write_hanzi(5, poX_6+24*size_6*3+4, poY_6,size_6, GREEN);
Tft.drawString("A",215,240,3,YELLOW);
//"设定电流"
INT16U poX_8 = 5;
INT16U poY_8 = 290;
INT16U size_8 = 1;
TFT_write_hanzi(6, poX_8, poY_8,size_2, GREEN);
TFT_write_hanzi(9, poX_8+24*size_8*1+4, poY_8,size_8, GREEN);
TFT_write_hanzi(2, poX_8+24*size_8*2+4, poY_8,size_8, GREEN);
TFT_write_hanzi(5, poX_8+24*size_8*3+4, poY_8,size_8, GREEN);
Tft.drawString("1.345",115,290,3,CYAN);
Tft.drawString("A",215,290,3,YELLOW);
}
void loop()
{
float vol_1B = 0;
float vol_2B = 0;
for (int i = 0 ;i < 256; i ++)
{
int reading_A = analogRead(inPin_A);
float vol_1A = 3.25 * ( reading_A / 1023.0) ;
vol_1B = vol_1B + vol_1A;
int reading_B = analogRead(inPin_B);
float vol_2A = 2 * ( reading_B / 1023.0) ;
vol_2B = vol_2B + vol_2A;
}
float vol_1 = vol_1B / 256;
float vol_2 = vol_2B / 256;
Tft.fillScreen(45,200,90,150,BLACK);
Tft.fillScreen(45,200,225,280,BLACK);
if (vol_1 < 10.0)
{
Tft.drawFloat(vol_1,2,75,95,5,GREEN);//显示测定电压
}
else
{
Tft.drawFloat(vol_1,2,45,95,5,GREEN);//显示测定电压
}
Tft.drawFloat(vol_2,3,45,230,5,GREEN);//显示测定电流
delay(500);
}
[/code]
|