arduino串口显示屏

arduino串口显示屏

在家呆的经费已经耗尽了,想做一个电子钟项目却缺少一个合适的串口屏,于是我盯上了闲着的arduino和买了很长时间的8bit9341屏幕。。。。。。

就是图里这两个板子
先列目标:我的要求是一个比传统意义上串口屏更加简单的屏幕模块
串口输入什么就显示上去,第一版仅开发字符显示,用于显示数据的应急。

所以有如下的程序,简单有效:

#include <LCDWIKI_GUI.h> //Core graphics library
#include <LCDWIKI_KBV.h> //Hardware-specific library

LCDWIKI_KBV mylcd(ILI9341,A3,A2,A1,A0,A4); //model,cs,cd,wr,rd,reset

//我们的目的:在指定坐标,指定颜色和字号,显示一个字符
//这是最底层,之后要做各种显示拓展
//先做串口解码实验,解码数据后打回
//一字节表明要 输出文字(起始帧也携带显示种类数据)。一字节表明 字号和颜色(均为16种)2字节表示坐标,一字节表示字符,一字节表示结束
//一次显示共计6个字节,//可能会降速。。。一秒可能只能刷新50个字符。。但应该够了


String comdata = "";//接收数据缓冲组//0xf0为开始,0xff为结束

#define BLACK  0x0000
#define BLUE    0x001F
#define RED     0xF800
#define GREEN   0x07E0
#define CYAN    0x07FF
#define MAGENTA 0xF81F
#define YELLOW  0xFFE0
#define WHITE   0xFFFF

unsigned char view=0;//显示标志位,决定是否进入显示模式

unsigned char x=0;
unsigned char y=0;//坐标
unsigned char Size=0;//字号
 char color=0;//色号
 char backcolor=0;//色号
String Char= "";//要显示的字符序号

void setup() {
  // start serial port at 9600 bps and wait for port to open:
  Serial.begin(38400);
  while (!Serial) {
    ; // wait for serial port to connect. Needed for native USB port only
  }
 mylcd.Init_LCD();
 Serial.println(mylcd.Read_ID(), HEX);
 mylcd.Set_Text_Mode(1);           //设置显示模式
 mylcd.Fill_Screen(BLACK);         //刷成黑屏
 mylcd.Set_Text_Back_colour(BLACK);//设置背景色 
 mylcd.Set_Rotation(1);//设置显示方向
}

void loop() {
  // if we get a valid byte, read analog ins:
  while (Serial.available() > 0)  
    {
        comdata += char(Serial.read());
        delay(1);
    }
   if(comdata.length() >= 6)//收满了统一处理//还是6个字节,留最后一个字节待用
  {
     if(comdata[0]==0x50)//要显示的是文字:
      {
       Size=comdata[1]>>4;//右移4位
       color= comdata[1]&0x0f;
       x=comdata[2];
       y=comdata[3]; 
       Char += char(comdata[4]);
       backcolor=comdata[5];
       view=1;//录入完数据,开显示
       Serial.println(0xff);
      }
       //待补充其余显示变量,首字节不同,显示内容也不同 
       comdata = "";//收满5个都请一次
  }
 
if(view==1)//如果有值要显示的话:
  {
   switch(color)//选择画笔颜色(支持16色)
      {
       case 0:mylcd.Set_Text_colour(0X01CF);break;
       case 1:mylcd.Set_Text_colour(BLACK);break;
       case 2:mylcd.Set_Text_colour(RED);break;
       case 3:mylcd.Set_Text_colour(BLUE);break;
       case 4:mylcd.Set_Text_colour(GREEN);break;
       case 5:mylcd.Set_Text_colour(CYAN);break;
       case 6:mylcd.Set_Text_colour(MAGENTA);break;
       case 7:mylcd.Set_Text_colour(WHITE);break;
       case 8:mylcd.Set_Text_colour(YELLOW);break;
       case 9:mylcd.Set_Text_colour(0X7D7C);break;
       case 10:mylcd.Set_Text_colour(0X5458);break;
       case 11:mylcd.Set_Text_colour(0XBC40);break;
       case 12:mylcd.Set_Text_colour(0XFC07);break;
       case 13:mylcd.Set_Text_colour(0X8430);break;
       case 14:mylcd.Set_Text_colour(0X841F);break;
       case 15:mylcd.Set_Text_colour(0X2B12);break;
      }  
   mylcd.Set_Text_Size(Size);//字符大小,最大值为7 
   mylcd.Print_String(Char, x, y);//打印一个字符
   Char = "";
   view=0;//显示完一次,清零
  }

}

该程序实现了在波特率38400下,arduino读取一个6位字符串,并在屏幕指定位置显示一个指定字号颜色的指定字符的功能,有剩余数据容量,等待二次开发时拓展。
可以看到仅使用了56% 的空间,有剩余空间可以拓展其他控件

这篇是保姆级教程,所以还有一些信息要补充完整:
代码开头的两个头文件,属于屏幕自带的两个文件,获取方法请上淘宝搜索
2.4寸 TFT屏幕 在店铺给的资料里,找到这个屏幕的官网下载arduino的库即可
之后请参考arduino手动添加库教程,将两个屏幕库加入到arduino库中,即可编译上方代码烧录

串口格式如下:
1位 :起始位,0x50表示显示字符 (虽然现在也只能显示字符)
2位 : 大小及颜色位,高4位大小(1-7)低4位颜色
3,4位: XY坐标值
5位 :要显示的字符
6位 :待用

最后谈一谈做这个东西的意义:
其实是挺无厘头的一个想法。。。。。。。真的是因为没有经费买串口屏了
算一下帐的话,这一套其实和淘宝最便宜的串口屏相差不多。。。。(我记得是27元)
唯一的一点优势可能就是和单片机对接的便捷性,因为显示命令可以做的很好理解,做产品应该不会用(因为本身特点限制了不能做非常好看的效果),但在比赛或者需要提升速度的场合,这个特点还是很有用的。

会一直更新,有兴趣的来个关注吧

显示数字效果

(bug:这一版代码刷新字符会有叠加现象。。。。。这个库属实有问题
待解决。。。。。。。。。。
应该在刷新字符之前,先对应字符大小刷一个长方形底色,再刷数字

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值