2017年1月25日 星期三

LinkIt Smart 7688 Duo + Noritake Itron VFD GU280X16G -7002 跑馬顯示


    VFD (Vacuum Fluorescent Display)真空螢光顯示器是和陰極射線管相似的顯示設備,真空螢光管的主要器件是一個帶有柵極的電子管,陰極射出的電子在柵極的吸引下加速射向陽極,撞擊到陽極上塗覆的螢光粉後發出可見光。通過調節柵極的電壓可以改變真空螢光管的亮度,大量的真空螢光管排列起來就可組成真空螢光顯示器,每個螢光管顯示一個像素。

 這次使用的是 Noritake Itron 出品的 GU280X16G -7002 ,具有280 X 16 點的解析度,傳輸介面可以用並列或是串列。

可到這裡下載 GU7000系列的 Libraries

http://www.noritake-elec.com/specification.php?id=Arduino_Noritake_VFD_GU7000&category=10&type=gu7000

 目前測試結果用Serial_Async interface 的傳輸方式有問題需用Serial_Sync interface的傳輸方式,要用Serial_Sync 的方式傳輸在GU280X16G -7002 的模組PCB上的J2必須銲接短路。



  Noritake Itron 也提供了簡單的圖形轉2進位程式可在這裡下載。

https://www.noritake-elec.com/support/design-resources/tools/bitmap-image-tool-gu-7000

這個VFD模組沒有中文字型ROM這次的跑馬顯示是採用圖形方式顯示。

先開啟一個繪圖程式將圖紙大小設成 280 X 16畫上想要顯示的圖案。


    GU7000系列Libraries的虛擬視窗限制是512無法將280X16的圖案寫到視窗外所以必須將畫面截成兩段分開存檔。

 第一段 140 X16
 第二段 140 X16

 開啟Noritake Itron下載的BitmapImageTool 按 Select Image 選擇要轉換的檔案。
    剛剛在做圖檔時底色是白色須勾選 Invert Image 將圖檔顏色反轉,按Copy Code Clipboard 複製到剪貼簿直接貼在Arduino 就可。


以下是完成的Arduino程式碼

/* GU7000系列 */
#include <GU7000_Interface.h>
#include <GU7000_Serial_Sync.h>
#include <Noritake_VFD_GU7000.h>

/*定義GU7000 VDF 的傳輸方式與 Arduino 接腳 */
GU7000_Serial_Sync interface(3, 5, 6, 7); // SIN,BUSY,SCK,RESET

Noritake_VFD_GU7000 vfd;

/*圖形的前半段 */
/* 140x16 image "y" */
static const uint8_t PROGMEM image_y1[] = {

    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x02,0x00,0x03,0x00,0x03,0x00,0x02,0x8c,
    0x02,0x78,0x02,0x08,0x06,0x10,0x38,0x10,0x18,0x10,0x06,0x10,0x02,0x48,0x02,0x78,
    0x02,0x8c,0x03,0x00,0x03,0x00,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x02,0x00,
    0x02,0x00,0x05,0x00,0x05,0x00,0x05,0x00,0x18,0xc0,0x60,0x30,0x18,0xc0,0x05,0x00,
    0x05,0x00,0x05,0x00,0x02,0x00,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
    0x04,0x00,0x06,0x00,0x06,0x60,0x05,0xc0,0x0c,0x40,0x30,0x80,0x0c,0x40,0x05,0xc0,
    0x06,0x60,0x06,0x00,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
    0x00,0x00,0x04,0x00,0x07,0x80,0x1d,0x00,0x0d,0x00,0x07,0x80,0x04,0x00,0x00,0x00,
    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
    0x00,0x00,0x00,0x00,0x12,0x48,0x1a,0x58,0x1e,0x40,0x37,0xfc,0x37,0xfc,0x1e,0x54,
    0x00,0x0c,0x1f,0xf8,0x1f,0xf0,0x12,0x00,0x33,0xfc,0x23,0xfc,0x22,0x00,0x00,0x00,
    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
    0x02,0x20,0x0e,0x20,0x3d,0xe0,0x39,0xe0,0x29,0x20,0x09,0x20,0x0f,0xfc,0x0f,0xfc,
    0x09,0x20,0x19,0x20,0x19,0x20,0x08,0x20,0x00,0x20,0x00,0x00,0x00,0x00,0x00,0x00,
    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0e,0x00,0x00,0x00,
    0x3f,0xfc,0x3f,0xfc,0x04,0x84,0x0c,0x8c,0x08,0xb8,0x3f,0xf0,0x3f,0xe0,0x08,0xb0,
    0x0f,0x98,0x0f,0x8c,0x00,0x8c,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00

};

/*圖形的後半段 */
/* 140x16 image  "y2" */
static const uint8_t PROGMEM image_y2[] = {
    0x1b,0x44,0x3d,0x44,0x2f,0x4c,0x18,0x58,0x1f,0x40,0x35,0xfc,0x3f,0xfc,0x1f,0x50,
    0x1b,0x50,0x3d,0x58,0x2f,0x4c,0x1b,0x4c,0x10,0x40,0x00,0x00,0x00,0x00,0x00,0x00,
    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
    0x01,0x00,0x01,0x80,0x01,0x84,0x01,0x7c,0x01,0x08,0x06,0x10,0x18,0x10,0x06,0x10,
    0x01,0x08,0x01,0x7c,0x01,0x84,0x01,0x80,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0x00,0x06,0x20,
    0x05,0xc0,0x3c,0x40,0x1c,0x40,0x05,0xc0,0x06,0x20,0x04,0x00,0x00,0x00,0x00,0x00,
    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x08,0x00,0x0e,0x00,0x34,0x00,
    0x14,0x00,0x0e,0x00,0x08,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x01,0x80,
    0x01,0x84,0x01,0x7c,0x01,0x08,0x06,0x10,0x18,0x10,0x06,0x10,0x01,0x08,0x01,0x7c,
    0x01,0x84,0x01,0x80,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x10,
    0x00,0x18,0x00,0x18,0x00,0x18,0x00,0x24,0x00,0xc3,0x00,0x24,0x00,0x18,0x00,0x18,
    0x00,0x18,0x00,0x10,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x02,0x00,0x03,0x00,0x03,0x00,0x03,0x00,
    0x0c,0xc0,0x30,0x30,0x0c,0xc0,0x03,0x00,0x03,0x00,0x03,0x00,0x02,0x00,0x00,0x00,
    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
};

/*這一行是塗黑用*/

/* 1x16 image "16_line" */
const static uint8_t PROGMEM image_16_line[] = {
    0x00,0x00
};


void setup() {

  vfd.begin(280,16);         // 280X16 VFD模組
  vfd.interface(interface);
  vfd.isModelClass(7002);
  vfd.GU7000_reset();       //重置 VFD
  vfd.GU7000_init();        //初始化 VFD
}

  void printScroll(){                           //滾動顯示函式
  vfd.GU7000_defineWindow(1, 0, 0, 420, 16);    //定義式窗大小 420 X16 目前試起來無法超過512
  vfd.GU7000_selectWindow(1);                  //使用視窗 1
  vfd.GU7000_setCursor(280, 0);                //游標位置移到 280,0
  vfd.GU7000_drawImage_p(140, 16, image_y1);   //貼上 Y1 圖片
   scrollY1();                                 // 水平滾動140
   vfd.GU7000_setCursor(280, 0);               //游標位置移到 280,0
   vfd.GU7000_drawImage_p(140, 16, image_y2);  //貼上 Y1 圖片
   scrollY2();                                 // 水平滾動420移動時後面塗黑
}
void scrollY1(){                  // Y1滾動函式
  int i = 0;
  while(i < 140){                //滾動距離
    vfd.GU7000_home();
    vfd.GU7000_scrollScreen(1, 2, 1, 2); //滾動速度
    i++;
  }
}
void scrollY2(){         // Y1滾動函式
  int i = 0;
  while(i < 420){            //滾動距離
    vfd.GU7000_home();
    vfd.GU7000_drawImage_p(1, 16,image_16_line);   //將滾動後的顯示塗黑
    vfd.GU7000_scrollScreen(1, 2, 1, 2);
    i++;
  }
}

void loop() {

printScroll();

}

上傳 LinkIt Smart 7688 Duo後VFD會開始做跑馬顯示



參考資料 : 

https://www.noritake-elec.com/
http://vfd-fun.blogspot.tw/

2017年1月14日 星期六

LinkIt Smart 7688 Duo + Grove - IMU 10DOF 測試

****注意 Arduino IDE 使用1.6.7***** 



Grove - IMU 10DOF是採用 MPU-9250 三軸陀螺儀+三軸加速度+三軸磁場 加上 BMP180 氣壓感測器所組合而成。

規格 :
供電電源:3V-5V
通信方式:標準I2C
陀螺儀範圍:±250 500 1000 2000 °/s
加速度範圍:± 2 ±4 ±8 ±16g   
磁場範圍:  ±4800uT 
氣壓表範圍 300〜1100hPa


Library下載位置 :
https://github.com/Seeed-Studio/IMU_10DOF

這程式是用 IMU_10DOF Library 附的範例改寫。



#include <Adafruit_GFX.h>
#include <SPI.h>
#include <Wire.h>
#include <Adafruit_ILI9341.h>
#include <TouchScreen.h>

#include "I2Cdev.h"
#include "MPU9250.h"
#include "BMP180.h"

#define TFT_RST   5       //LCM  接腳
#define TFT_DC    6
#define TFT_CS    7
#define TFT_MOSI  8
#define TFT_MISO  9
#define TFT_CLK   10

Adafruit_ILI9341 tft = Adafruit_ILI9341(TFT_CS, TFT_DC, TFT_MOSI, TFT_CLK, TFT_RST, TFT_MISO);


MPU9250 accelgyro;
I2Cdev   I2C_M;

uint8_t buffer_m[6];

int16_t ax, ay, az;
int16_t gx, gy, gz;
int16_t   mx, my, mz;

float heading;
float tiltheading;

float Axyz[3];
float Gxyz[3];
float Mxyz[3];

volatile float mx_sample[3];
volatile float my_sample[3];
volatile float mz_sample[3];

static float mx_centre = 0;
static float my_centre = 0;
static float mz_centre = 0;

volatile int mx_max = 0;
volatile int my_max = 0;
volatile int mz_max = 0;

volatile int mx_min = 0;
volatile int my_min = 0;
volatile int mz_min = 0;

float temperature;
float pressure;
float atm;
float altitude;
BMP180 Barometer;

void setup()
{
    // join I2C bus (I2Cdev library doesn't do this automatically)
    Wire.begin();
    
    tft.begin();
    tft.fillScreen(ILI9341_BLACK);
    tft.setRotation(3);

    // initialize device
   // Serial.println("Initializing I2C devices...");
    accelgyro.initialize();
    Barometer.init();
    
    tft.setCursor(0,20);
    tft.print("Acceleration(g) of X,Y,Z:"); 
    
    tft.setCursor(0,40);
    tft.print("Gyro(degress/s) of X,Y,Z:");

    tft.setCursor(0,60);
    tft.print("Compass Value of X,Y,Z:");
    
    tft.setCursor(0,80);
    tft.print("Heading:");

    tft.setCursor(0,100);
    tft.print(" Tilt Heading:");

    tft.setCursor(0,120);
    tft.print("Temperature: ");
    
    tft.setCursor(0,140);
    tft.print("Pressure: ");
    
    tft.setCursor(0,160);
    tft.print("Ralated Atmosphere: ");
    
    tft.setCursor(0,180);
    tft.print("Altitude: ");
    
}

void loop()
{

    getAccel_Data();
    getGyro_Data();
    getCompassDate_calibrated(); // compass data has been calibrated here
    getHeading();               //before we use this function we should run 'getCompassDate_calibrated()' frist, so that we can get calibrated data ,then we can get correct angle .
    getTiltHeading();
    
    tft.fillRect(0,30,120,10,0);
    tft.setCursor(0,30);
    tft.print(Axyz[0]);
    tft.print(" , ");
    tft.print(Axyz[1]);
    tft.print(" , ");
    tft.print(Axyz[2]);

   
    tft.fillRect(0,50,120,10,0);
    tft.setCursor(0,50);
    tft.print(Gxyz[0]);
    tft.print(",");
    tft.print(Gxyz[1]);
    tft.print(",");
    tft.print(Gxyz[2]);

    
    tft.fillRect(0,70,120,10,0);
    tft.setCursor(0,70);
    tft.print(Mxyz[0]);
    tft.print(",");
    tft.print(Mxyz[1]);
    tft.print(",");
    tft.print(Mxyz[2]);

    
    tft.fillRect(0,90,120,10,0);
    tft.setCursor(0,90);
    tft.print(heading);

    
    tft.fillRect(0,110,120,10,0);
    tft.setCursor(0,110);
    tft.println(tiltheading);

    temperature = Barometer.bmp180GetTemperature(Barometer.bmp180ReadUT()); //Get the temperature, bmp180ReadUT MUST be called first
    pressure = Barometer.bmp180GetPressure(Barometer.bmp180ReadUP());//Get the temperature
    altitude = Barometer.calcAltitude(pressure); //Uncompensated caculation - in Meters
    atm = pressure / 101325;

    
    tft.fillRect(0,130,120,10,0);
    tft.setCursor(0,130);
    tft.print(temperature, 2); //display 2 decimal places
    tft.print(" deg C");


    tft.fillRect(0,150,120,10,0);
    tft.setCursor(0,150);
    tft.print(pressure, 0); //whole number only.
    tft.print(" Pa");

    
    tft.fillRect(0,170,120,10,0);
    tft.setCursor(0,170);
    tft.print(atm, 4); //display 4 decimal places

    
    tft.fillRect(0,190,120,10,0);
    tft.setCursor(0,190);
    tft.print(altitude, 2); //display 2 decimal places
    tft.print(" m");
    
    delay(1000);

}


void getHeading(void)
{
    heading = 180 * atan2(Mxyz[1], Mxyz[0]) / PI;
    if (heading < 0) heading += 360;
}

void getTiltHeading(void)
{
    float pitch = asin(-Axyz[0]);
    float roll = asin(Axyz[1] / cos(pitch));

    float xh = Mxyz[0] * cos(pitch) + Mxyz[2] * sin(pitch);
    float yh = Mxyz[0] * sin(roll) * sin(pitch) + Mxyz[1] * cos(roll) - Mxyz[2] * sin(roll) * cos(pitch);
    float zh = -Mxyz[0] * cos(roll) * sin(pitch) + Mxyz[1] * sin(roll) + Mxyz[2] * cos(roll) * cos(pitch);
    tiltheading = 180 * atan2(yh, xh) / PI;
    if (yh < 0)    tiltheading += 360;
}



void Mxyz_init_calibrated ()
{

    
    while (!Serial.find("ready"));
   
    get_calibration_Data ();

}


void get_calibration_Data ()
{
    for (int i = 0; i < sample_num_mdate; i++)
    {
        get_one_sample_date_mxyz();
   
        if (mx_sample[2] >= mx_sample[1])mx_sample[1] = mx_sample[2];
        if (my_sample[2] >= my_sample[1])my_sample[1] = my_sample[2]; //find max value
        if (mz_sample[2] >= mz_sample[1])mz_sample[1] = mz_sample[2];

        if (mx_sample[2] <= mx_sample[0])mx_sample[0] = mx_sample[2];
        if (my_sample[2] <= my_sample[0])my_sample[0] = my_sample[2]; //find min value
        if (mz_sample[2] <= mz_sample[0])mz_sample[0] = mz_sample[2];

    }

    mx_max = mx_sample[1];
    my_max = my_sample[1];
    mz_max = mz_sample[1];

    mx_min = mx_sample[0];
    my_min = my_sample[0];
    mz_min = mz_sample[0];

    mx_centre = (mx_max + mx_min) / 2;
    my_centre = (my_max + my_min) / 2;
    mz_centre = (mz_max + mz_min) / 2;

}

void get_one_sample_date_mxyz()
{
    getCompass_Data();
    mx_sample[2] = Mxyz[0];
    my_sample[2] = Mxyz[1];
    mz_sample[2] = Mxyz[2];
}

void getAccel_Data(void)
{
    accelgyro.getMotion9(&ax, &ay, &az, &gx, &gy, &gz, &mx, &my, &mz);
    Axyz[0] = (double) ax / 16384;
    Axyz[1] = (double) ay / 16384;
    Axyz[2] = (double) az / 16384;
}

void getGyro_Data(void)
{
    accelgyro.getMotion9(&ax, &ay, &az, &gx, &gy, &gz, &mx, &my, &mz);
    Gxyz[0] = (double) gx * 250 / 32768;
    Gxyz[1] = (double) gy * 250 / 32768;
    Gxyz[2] = (double) gz * 250 / 32768;
}

void getCompass_Data(void)
{
    I2C_M.writeByte(MPU9150_RA_MAG_ADDRESS, 0x0A, 0x01); //enable the magnetometer
    delay(10);
    I2C_M.readBytes(MPU9150_RA_MAG_ADDRESS, MPU9150_RA_MAG_XOUT_L, 6, buffer_m);

    mx = ((int16_t)(buffer_m[1]) << 8) | buffer_m[0] ;
    my = ((int16_t)(buffer_m[3]) << 8) | buffer_m[2] ;
    mz = ((int16_t)(buffer_m[5]) << 8) | buffer_m[4] ;

    Mxyz[0] = (double) mx * 1200 / 4096;
    Mxyz[1] = (double) my * 1200 / 4096;
    Mxyz[2] = (double) mz * 1200 / 4096;
}

void getCompassDate_calibrated ()
{
    getCompass_Data();
    Mxyz[0] = Mxyz[0] - mx_centre;
    Mxyz[1] = Mxyz[1] - my_centre;
    Mxyz[2] = Mxyz[2] - mz_centre;
}

上傳完成後就會顯示 IMU_10DOF個軸向的值。



LinkIt Smart 7688 Duo + TSL237 Light-to-frequency Sensor

****注意 Arduino IDE 使用1.6.7***** 

   
    TSL237光至頻率轉換器在單個 CMOS 單片上組合了矽光電二極體和電流至頻率轉換器。輸出是方波(50%佔空比),頻率與光電二極體上的光強度成正比。數字輸出允許與微控制器或其他邏輯電路的直接接口。TSL237 已經對320nm至700nm的紫外 - 可見光範圍進行溫度補償,響應範圍在320nm至1050nm。

主要特徵 :

電壓 : 2.7V ~ 5V 
5M:1輸入動態範圍
低暗輸出頻率0.1 Hz
亮度響應 2.3kHz /(μW/ cm 2)@λp= 524nm

2X增益的鏡頭

TSL237 的原廠資料:

http://ams.com/eng/Products/Light-Sensors/Light-to-Frequency/TSL237

TSL237的接腳圖
TSL237 的實際接線




#include <Adafruit_GFX.h>
#include <SPI.h>
#include <Wire.h>
#include <Adafruit_ILI9341.h>

#define TFT_RST   5       //LCM  接腳
#define TFT_DC    6
#define TFT_CS    7
#define TFT_MOSI  8
#define TFT_MISO  9
#define TFT_CLK   10

Adafruit_ILI9341 tft = Adafruit_ILI9341(TFT_CS, TFT_DC, TFT_MOSI, TFT_CLK, TFT_RST, TFT_MISO);

const int input=12;    //TSL237 的輸出接腳
int high_time;
int low_time;
float time_period;
float frequency;

void setup()
{
  pinMode(input,INPUT);    
  tft.begin();                                          //LCM 啟始
  tft.fillScreen(ILI9341_BLACK);      //LCM 畫面更新為黑色
  tft.setRotation(3);                             // LCM 旋轉270度
}
void loop()
{
 tft.setCursor(0,0),  
 tft.setTextSize(2);
  tft.fillRect(0,0,320,40,0);
  tft.println("Frequency Meter");

  high_time=pulseIn(input,HIGH);
  low_time=pulseIn(input,LOW);
 
  time_period=high_time+low_time;
  time_period=time_period/1000;
  frequency=1000/time_period;

  tft.print(frequency);
  tft.print(" Hz");
  delay(1000);
}

上傳後LCM就會開始顯示TSL237的輸出頻率




2017年1月12日 星期四

PSoC 5LP - CY8CKIT-059 + Adafruit 2.4" TFT Breakout 測試

****使用軟體版本 PSoC Creator 4.0 ****

    Adafruit 2.4" TFT 主控晶片是採用ILI9341仿間有很多採用ILI9341的 TFT LCD 電源與控制信號只接受3.3VAdafruit 電源與控制信號可接受5V。

 先到這裡下載 element14 在 PSoC 4200 上做好的範例下載後解壓縮。

https://www.hackster.io/rayburne/psoc-4-using-the-color-glcd-ili9341-8c92f5


開啟PSoC Creator 選擇使用 CY8CKIT-059。


使用線路圖。


填入專案名稱與路徑。


 1.會出現一張空白線路圖。

  2. 將剛剛下載的檔案目錄內的 Bitmaps.h  device.h  fonts.h TFT.c TFT.h 複製到專案工作目錄下C:\Users\${name}\Desktop\PSOC\ILI9341\ILI9341.cydsn



在左邊 Header Files 按滑鼠右鍵 ADD >>  Existing Item...


將工作目錄內的 Bitmaps.h  device.h  fonts.h  TFT.h 加入專案。


加好後專案就會有這四個檔案。


在Source Files 案右鍵 ADD  >>  Existing Item...


將工作目錄內的 TFT.c 加入專案。


1.在右邊零件區搜尋SPI。

2.將SPI Master [V2.50] 拖曳進線路圖內。
.

1. 在零件區搜尋PIN。
2. 拖曳4個 Digital Output Pin [v2.20] 進線路圖更改名稱為MOSI SCK CS D_C。
3. 拖曳1 個 Digital Output Pin [v2.20] 進線路圖更改名稱為 MISO。


接好線路圖 。


1.用滑鼠點兩下SPIM_1這個零件。
2.將名稱改為SPIM Data Bits : 改為 8 Bit Rate: 改為 12 Mbps。


在Advanced 的地方 圈選 Internal Clock 勾選 Enable High Speed Mode Rx Buffer Size (8-bit words) 填入 8  Tx Buffer Size (8-bit words) 填入 8 然後按OK。


點選左邊 Desing Wide Resources (ILI9341.cydwr) 開始配置接腳。


綠色部分為可配置接腳。

接腳配置完成。


編輯 main.c

#include <project.h>
#include <TFT.h>
#include <device.h>
#include <stdio.h>                  

extern uint16_t MAX_X, MAX_Y ;      

int main()
{
    SPIM_Start();
    TFT_Init(3);  
    TFT_FillScreen(0, MAX_X, 0, MAX_Y, BLACK);
 
    while(1)
 
    {
 
    TFT_DrawString("TFT TEST...",  15, 50, 1, GREEN);
    CyDelay(1000);
    TFT_FillRectangle(0,  50,   320,    50, BLACK);
 
    TFT_DrawString("TFT_FillRectangle",  15, 50, 1, RED);
    CyDelay(1000);
 
    TFT_FillRectangle(0,  0,   320,    20, BLACK);

     
    TFT_FillCircle(160, 120, 50,RED);
    CyDelay(1000);
 
    TFT_FillCircle(160, 120, 50,BLACK);
 
    TFT_FillScreen(0, MAX_X, 0, MAX_Y, RED);
    TFT_FillScreen(0, MAX_X, 0, MAX_Y, GREEN);
    TFT_FillScreen(0, MAX_X, 0, MAX_Y, BLUE);
 
    TFT_FillScreen(0, MAX_X, 0, MAX_Y, BLACK);
 
    }
}
//******
輸入好後按燒錄。


燒錄完成後就會開始顯示測試畫面。