中景園LCD顯示主函數

/***STM32 Mini板按鍵輸入輸出測試2019 2 2 PAST ********/
/**Program Size: Code=3616 RO-data=5056 RW-data=1128 ZI-data=1832  */
/****KEY0 KEY1 PB11 PB13輸入中景園顯示屏顯示STM32 TEST 1,2,3,4 *****/
#include "sys.h"
#include "usart.h"        
#include "delay.h"    
#include "led.h" 
#include "key.h" 
#include "bmp.h"
#include "stdlib.h"
u8 s;
u8 ref=0;//刷新顯示
               u16 vx=15542,vy=11165;  //比例因子,此值除以1000以後多少個AD值代表一個像素點
               u16 chx=140,chy=146;//默認像素點座標爲0時的AD起始值
               u8 hanzi[]={              
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x00,0x00,0x00,0x80,0x01,0x00,
0x00,0x80,0x01,0x00,0x00,0x80,0x01,0x00,0x00,0x80,0x01,0x00,0x00,0x80,0x01,0x00,
0x10,0x80,0x01,0x0C,0xF0,0xFF,0xFF,0x0F,0x30,0x80,0x01,0x04,0x30,0x80,0x01,0x04,
0x30,0x80,0x01,0x04,0x30,0x80,0x01,0x04,0x30,0x80,0x01,0x04,0x30,0x80,0x01,0x04,
0x30,0x80,0x01,0x04,0x30,0x80,0x01,0x04,0xF0,0xFF,0xFF,0x07,0x30,0x80,0x01,0x04,
0x30,0x80,0x01,0x04,0x00,0x80,0x01,0x00,0x00,0x80,0x01,0x00,0x00,0x80,0x01,0x00,
0x00,0x80,0x01,0x00,0x00,0x80,0x01,0x00,0x00,0x80,0x01,0x00,0x00,0x80,0x01,0x00,
0x00,0x80,0x01,0x00,0x00,0x80,0x01,0x00,0x00,0x80,0x00,0x00,0x00,0x00,0x00,0x00,/*"?",0*/
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x80,0x01,
0x00,0xFF,0xFF,0x01,0x00,0x03,0x80,0x01,0x00,0x03,0x80,0x01,0x00,0xFF,0xFF,0x01,
0x00,0x03,0x80,0x01,0x00,0x03,0x80,0x01,0x00,0xFF,0xFF,0x01,0x00,0x81,0x81,0x00,
0x00,0x00,0x03,0x00,0x00,0x00,0x03,0x1C,0xFC,0xFF,0xFF,0x3F,0x00,0x00,0x40,0x00,
0x00,0x03,0xC0,0x01,0x00,0xFF,0xFF,0x01,0x00,0x03,0xC0,0x00,0x00,0x03,0xC0,0x00,
0x00,0x03,0xC0,0x00,0x00,0xFF,0xFF,0x00,0x00,0x01,0x41,0x00,0x00,0x04,0x01,0x00,
0x00,0x0E,0x71,0x00,0x00,0x07,0x81,0x01,0x80,0x01,0x01,0x07,0x60,0x00,0x01,0x0E,
0x18,0x98,0x01,0x1C,0x04,0xE0,0x01,0x18,0x00,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,/*"?",1*/
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x08,0xF0,0xFF,0xFF,0x1F,
0x30,0x00,0x00,0x0C,0x30,0x00,0x00,0x0C,0x30,0x00,0x10,0x0C,0x30,0xFE,0x3F,0x0C,
0x30,0x04,0x00,0x0C,0x30,0x00,0x00,0x0C,0x30,0x00,0x00,0x0C,0x30,0x00,0x00,0x0C,
0x30,0x00,0xC0,0x0C,0xF0,0xFF,0xFF,0x0D,0x30,0x30,0x06,0x0E,0x30,0x30,0x06,0x0C,
0x30,0x10,0x06,0x0C,0x30,0x10,0x06,0x0C,0x30,0x10,0x06,0x0C,0x30,0x18,0x86,0x0C,
0x30,0x18,0x86,0x0C,0x30,0x08,0x06,0x0D,0x30,0x0C,0x86,0x0D,0x30,0x06,0xEE,0x0F,
0x30,0x02,0xFC,0x0D,0x30,0x01,0x00,0x0C,0xF0,0x00,0x00,0x0C,0x30,0x00,0x00,0x0C,
0xF0,0xFF,0xFF,0x0F,0x30,0x00,0x00,0x0C,0x10,0x00,0x00,0x04,0x00,0x00,0x00,0x00,/*"?",2*/
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xC0,0x00,0x00,0x00,0xC0,0x01,0x00,
0x00,0xC0,0x00,0x00,0x00,0xC0,0x00,0x00,0x00,0xC0,0x00,0x00,0x00,0xC0,0x00,0x00,
0xE0,0xFF,0xFF,0x03,0x60,0xC0,0x00,0x03,0x60,0xC0,0x00,0x03,0x60,0xC0,0x00,0x03,
0x60,0xC0,0x00,0x03,0x60,0xC0,0x00,0x03,0x60,0xC0,0x00,0x03,0xE0,0xFF,0xFF,0x03,
0x60,0xC0,0x00,0x03,0x60,0xC0,0x00,0x03,0x60,0xC0,0x00,0x03,0x60,0xC0,0x00,0x03,
0x60,0xC0,0x00,0x03,0xE0,0xFF,0xFF,0x03,0x60,0xC0,0x00,0x01,0x60,0xC0,0x00,0x00,
0x00,0xC0,0x00,0x08,0x00,0xC0,0x00,0x10,0x00,0xC0,0x00,0x10,0x00,0xC0,0x00,0x18,
0x00,0xC0,0x01,0x38,0x00,0x80,0xFF,0x1F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,/*"?",3*/
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03,
0xC0,0xFF,0xFF,0x07,0x00,0x00,0x80,0x07,0x00,0x00,0xC0,0x00,0x00,0x00,0x60,0x00,
0x00,0x00,0x18,0x00,0x00,0x00,0x0C,0x00,0x00,0x80,0x03,0x00,0x00,0x80,0x03,0x00,
0x00,0x80,0x01,0x00,0x00,0x80,0x01,0x08,0x00,0x80,0x01,0x1C,0xFC,0xFF,0xFF,0x3F,
0x00,0x80,0x01,0x00,0x00,0x80,0x01,0x00,0x00,0x80,0x01,0x00,0x00,0x80,0x01,0x00,
0x00,0x80,0x01,0x00,0x00,0x80,0x01,0x00,0x00,0x80,0x01,0x00,0x00,0x80,0x01,0x00,
0x00,0x80,0x01,0x00,0x00,0x80,0x01,0x00,0x00,0x80,0x01,0x00,0x00,0x80,0x01,0x00,
0x00,0xFC,0x01,0x00,0x00,0xE0,0x00,0x00,0x00,0x40,0x00,0x00,0x00,0x00,0x00,0x00,/*"?",4*/};

const u8 asc2_1608[1520]={
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x00,0x00,0x18,0x18,0x00,0x00,
0x00,0x48,0x6C,0x24,0x12,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x24,0x24,0x24,0x7F,0x12,0x12,0x12,0x7F,0x12,0x12,0x12,0x00,0x00,
0x00,0x00,0x08,0x1C,0x2A,0x2A,0x0A,0x0C,0x18,0x28,0x28,0x2A,0x2A,0x1C,0x08,0x08,
0x00,0x00,0x00,0x22,0x25,0x15,0x15,0x15,0x2A,0x58,0x54,0x54,0x54,0x22,0x00,0x00,
0x00,0x00,0x00,0x0C,0x12,0x12,0x12,0x0A,0x76,0x25,0x29,0x11,0x91,0x6E,0x00,0x00,
0x00,0x06,0x06,0x04,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x40,0x20,0x10,0x10,0x08,0x08,0x08,0x08,0x08,0x08,0x10,0x10,0x20,0x40,0x00,
0x00,0x02,0x04,0x08,0x08,0x10,0x10,0x10,0x10,0x10,0x10,0x08,0x08,0x04,0x02,0x00,
0x00,0x00,0x00,0x00,0x08,0x08,0x6B,0x1C,0x1C,0x6B,0x08,0x08,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x08,0x08,0x08,0x08,0x7F,0x08,0x08,0x08,0x08,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x06,0x06,0x04,0x03,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFE,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x06,0x06,0x00,0x00,
0x00,0x00,0x80,0x40,0x40,0x20,0x20,0x10,0x10,0x08,0x08,0x04,0x04,0x02,0x02,0x00,
0x00,0x00,0x00,0x18,0x24,0x42,0x42,0x42,0x42,0x42,0x42,0x42,0x24,0x18,0x00,0x00,
0x00,0x00,0x00,0x08,0x0E,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x3E,0x00,0x00,
0x00,0x00,0x00,0x3C,0x42,0x42,0x42,0x20,0x20,0x10,0x08,0x04,0x42,0x7E,0x00,0x00,
0x00,0x00,0x00,0x3C,0x42,0x42,0x20,0x18,0x20,0x40,0x40,0x42,0x22,0x1C,0x00,0x00,
0x00,0x00,0x00,0x20,0x30,0x28,0x24,0x24,0x22,0x22,0x7E,0x20,0x20,0x78,0x00,0x00,
0x00,0x00,0x00,0x7E,0x02,0x02,0x02,0x1A,0x26,0x40,0x40,0x42,0x22,0x1C,0x00,0x00,
0x00,0x00,0x00,0x38,0x24,0x02,0x02,0x1A,0x26,0x42,0x42,0x42,0x24,0x18,0x00,0x00,
0x00,0x00,0x00,0x7E,0x22,0x22,0x10,0x10,0x08,0x08,0x08,0x08,0x08,0x08,0x00,0x00,
0x00,0x00,0x00,0x3C,0x42,0x42,0x42,0x24,0x18,0x24,0x42,0x42,0x42,0x3C,0x00,0x00,
0x00,0x00,0x00,0x18,0x24,0x42,0x42,0x42,0x64,0x58,0x40,0x40,0x24,0x1C,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x18,0x18,0x00,0x00,0x00,0x00,0x18,0x18,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x08,0x00,0x00,0x00,0x00,0x00,0x08,0x08,0x04,
0x00,0x00,0x00,0x40,0x20,0x10,0x08,0x04,0x02,0x04,0x08,0x10,0x20,0x40,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x7F,0x00,0x00,0x00,0x7F,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x02,0x04,0x08,0x10,0x20,0x40,0x20,0x10,0x08,0x04,0x02,0x00,0x00,
0x00,0x00,0x00,0x3C,0x42,0x42,0x46,0x40,0x20,0x10,0x10,0x00,0x18,0x18,0x00,0x00,
0x00,0x00,0x00,0x1C,0x22,0x5A,0x55,0x55,0x55,0x55,0x2D,0x42,0x22,0x1C,0x00,0x00,
0x00,0x00,0x00,0x08,0x08,0x18,0x14,0x14,0x24,0x3C,0x22,0x42,0x42,0xE7,0x00,0x00,
0x00,0x00,0x00,0x1F,0x22,0x22,0x22,0x1E,0x22,0x42,0x42,0x42,0x22,0x1F,0x00,0x00,
0x00,0x00,0x00,0x7C,0x42,0x42,0x01,0x01,0x01,0x01,0x01,0x42,0x22,0x1C,0x00,0x00,
0x00,0x00,0x00,0x1F,0x22,0x42,0x42,0x42,0x42,0x42,0x42,0x42,0x22,0x1F,0x00,0x00,
0x00,0x00,0x00,0x3F,0x42,0x12,0x12,0x1E,0x12,0x12,0x02,0x42,0x42,0x3F,0x00,0x00,
0x00,0x00,0x00,0x3F,0x42,0x12,0x12,0x1E,0x12,0x12,0x02,0x02,0x02,0x07,0x00,0x00,
0x00,0x00,0x00,0x3C,0x22,0x22,0x01,0x01,0x01,0x71,0x21,0x22,0x22,0x1C,0x00,0x00,
0x00,0x00,0x00,0xE7,0x42,0x42,0x42,0x42,0x7E,0x42,0x42,0x42,0x42,0xE7,0x00,0x00,
0x00,0x00,0x00,0x3E,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x3E,0x00,0x00,
0x00,0x00,0x00,0x7C,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x11,0x0F,
0x00,0x00,0x00,0x77,0x22,0x12,0x0A,0x0E,0x0A,0x12,0x12,0x22,0x22,0x77,0x00,0x00,
0x00,0x00,0x00,0x07,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x42,0x7F,0x00,0x00,
0x00,0x00,0x00,0x77,0x36,0x36,0x36,0x36,0x2A,0x2A,0x2A,0x2A,0x2A,0x6B,0x00,0x00,
0x00,0x00,0x00,0xE3,0x46,0x46,0x4A,0x4A,0x52,0x52,0x52,0x62,0x62,0x47,0x00,0x00,
0x00,0x00,0x00,0x1C,0x22,0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x22,0x1C,0x00,0x00,
0x00,0x00,0x00,0x3F,0x42,0x42,0x42,0x42,0x3E,0x02,0x02,0x02,0x02,0x07,0x00,0x00,
0x00,0x00,0x00,0x1C,0x22,0x41,0x41,0x41,0x41,0x41,0x4D,0x53,0x32,0x1C,0x60,0x00,
0x00,0x00,0x00,0x3F,0x42,0x42,0x42,0x3E,0x12,0x12,0x22,0x22,0x42,0xC7,0x00,0x00,
0x00,0x00,0x00,0x7C,0x42,0x42,0x02,0x04,0x18,0x20,0x40,0x42,0x42,0x3E,0x00,0x00,
0x00,0x00,0x00,0x7F,0x49,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x1C,0x00,0x00,
0x00,0x00,0x00,0xE7,0x42,0x42,0x42,0x42,0x42,0x42,0x42,0x42,0x42,0x3C,0x00,0x00,
0x00,0x00,0x00,0xE7,0x42,0x42,0x22,0x24,0x24,0x14,0x14,0x18,0x08,0x08,0x00,0x00,
0x00,0x00,0x00,0x6B,0x49,0x49,0x49,0x49,0x55,0x55,0x36,0x22,0x22,0x22,0x00,0x00,
0x00,0x00,0x00,0xE7,0x42,0x24,0x24,0x18,0x18,0x18,0x24,0x24,0x42,0xE7,0x00,0x00,
0x00,0x00,0x00,0x77,0x22,0x22,0x14,0x14,0x08,0x08,0x08,0x08,0x08,0x1C,0x00,0x00,
0x00,0x00,0x00,0x7E,0x21,0x20,0x10,0x10,0x08,0x04,0x04,0x42,0x42,0x3F,0x00,0x00,
0x00,0x78,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x78,0x00,
0x00,0x00,0x02,0x02,0x04,0x04,0x08,0x08,0x08,0x10,0x10,0x20,0x20,0x20,0x40,0x40,
0x00,0x1E,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x1E,0x00,
0x00,0x38,0x44,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,0x00,0x00,0xFF,
0x00,0x06,0x08,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3C,0x42,0x78,0x44,0x42,0x42,0xFC,0x00,0x00,
0x00,0x00,0x00,0x03,0x02,0x02,0x02,0x1A,0x26,0x42,0x42,0x42,0x26,0x1A,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x38,0x44,0x02,0x02,0x02,0x44,0x38,0x00,0x00,
0x00,0x00,0x00,0x60,0x40,0x40,0x40,0x78,0x44,0x42,0x42,0x42,0x64,0xD8,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3C,0x42,0x7E,0x02,0x02,0x42,0x3C,0x00,0x00,
0x00,0x00,0x00,0xF0,0x88,0x08,0x08,0x7E,0x08,0x08,0x08,0x08,0x08,0x3E,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x7C,0x22,0x22,0x1C,0x02,0x3C,0x42,0x42,0x3C,
0x00,0x00,0x00,0x03,0x02,0x02,0x02,0x3A,0x46,0x42,0x42,0x42,0x42,0xE7,0x00,0x00,
0x00,0x00,0x00,0x0C,0x0C,0x00,0x00,0x0E,0x08,0x08,0x08,0x08,0x08,0x3E,0x00,0x00,
0x00,0x00,0x00,0x30,0x30,0x00,0x00,0x38,0x20,0x20,0x20,0x20,0x20,0x20,0x22,0x1E,
0x00,0x00,0x00,0x03,0x02,0x02,0x02,0x72,0x12,0x0A,0x16,0x12,0x22,0x77,0x00,0x00,
0x00,0x00,0x00,0x0E,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x3E,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x7F,0x92,0x92,0x92,0x92,0x92,0xB7,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3B,0x46,0x42,0x42,0x42,0x42,0xE7,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3C,0x42,0x42,0x42,0x42,0x42,0x3C,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1B,0x26,0x42,0x42,0x42,0x22,0x1E,0x02,0x07,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x78,0x44,0x42,0x42,0x42,0x44,0x78,0x40,0xE0,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x77,0x4C,0x04,0x04,0x04,0x04,0x1F,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x7C,0x42,0x02,0x3C,0x40,0x42,0x3E,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x08,0x08,0x3E,0x08,0x08,0x08,0x08,0x08,0x30,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x63,0x42,0x42,0x42,0x42,0x62,0xDC,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xE7,0x42,0x24,0x24,0x14,0x08,0x08,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xEB,0x49,0x49,0x55,0x55,0x22,0x22,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x76,0x24,0x18,0x18,0x18,0x24,0x6E,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xE7,0x42,0x24,0x24,0x14,0x18,0x08,0x08,0x07,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x7E,0x22,0x10,0x08,0x08,0x44,0x7E,0x00,0x00,
0x00,0xC0,0x20,0x20,0x20,0x20,0x20,0x10,0x20,0x20,0x20,0x20,0x20,0x20,0xC0,0x00,
0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,
0x00,0x06,0x08,0x08,0x08,0x08,0x08,0x10,0x08,0x08,0x08,0x08,0x08,0x08,0x06,0x00,
0x0C,0x32,0xC2,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
}; 


u8 Hzk[][32]={

{0x00,0x00,0xF0,0x10,0x10,0x10,0x10,0xFF,0x10,0x10,0x10,0x10,0xF0,0x00,0x00,0x00},
{0x00,0x00,0x0F,0x04,0x04,0x04,0x04,0xFF,0x04,0x04,0x04,0x04,0x0F,0x00,0x00,0x00},/*"?D",0*/

{0x40,0x40,0x40,0x5F,0x55,0x55,0x55,0x75,0x55,0x55,0x55,0x5F,0x40,0x40,0x40,0x00},
{0x00,0x40,0x20,0x0F,0x09,0x49,0x89,0x79,0x09,0x09,0x09,0x0F,0x20,0x40,0x00,0x00},/*"?°",1*/

{0x00,0xFE,0x02,0x42,0x4A,0xCA,0x4A,0x4A,0xCA,0x4A,0x4A,0x42,0x02,0xFE,0x00,0x00},
{0x00,0xFF,0x40,0x50,0x4C,0x43,0x40,0x40,0x4F,0x50,0x50,0x5C,0x40,0xFF,0x00,0x00},/*"?°",2*/

{0x00,0x00,0xF8,0x88,0x88,0x88,0x88,0xFF,0x88,0x88,0x88,0x88,0xF8,0x00,0x00,0x00},
{0x00,0x00,0x1F,0x08,0x08,0x08,0x08,0x7F,0x88,0x88,0x88,0x88,0x9F,0x80,0xF0,0x00},/*"μ?",3*/

{0x80,0x82,0x82,0x82,0x82,0x82,0x82,0xE2,0xA2,0x92,0x8A,0x86,0x82,0x80,0x80,0x00},
{0x00,0x00,0x00,0x00,0x00,0x40,0x80,0x7F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},/*"×ó",4*/

{0x24,0x24,0xA4,0xFE,0xA3,0x22,0x00,0x22,0xCC,0x00,0x00,0xFF,0x00,0x00,0x00,0x00},
{0x08,0x06,0x01,0xFF,0x00,0x01,0x04,0x04,0x04,0x04,0x04,0xFF,0x02,0x02,0x02,0x00},/*"??",5*/

{0x10,0x10,0x10,0xFF,0x10,0x90,0x08,0x88,0x88,0x88,0xFF,0x88,0x88,0x88,0x08,0x00},
{0x04,0x44,0x82,0x7F,0x01,0x80,0x80,0x40,0x43,0x2C,0x10,0x28,0x46,0x81,0x80,0x00},/*"??",6*/

};
/********************************************/              
              void xianshi()//顯示信息
               {   
               BACK_COLOR=WHITE;
                 POINT_COLOR=RED;    
                 showhanzi(10,0,0);  //中
                 showhanzi(45,0,1);  //景
                 showhanzi(80,0,2);  //園
                 showhanzi(115,0,3);  //電
                 showhanzi(150,0,4);  //子
               LCD_ShowString(10,35,"2.4 TFT SPI 240*320");
                 LCD_ShowString(10,55,"LCD_W:");    LCD_ShowNum(70,55,LCD_W,3);
                 LCD_ShowString(110,55,"LCD_H:");LCD_ShowNum(160,55,LCD_H,3);    
               }
/*****************************************/
               void showimage() //顯示40*40圖片
               {
                  int i,j,k; 
                for(k=3;k<8;k++)
                {
                    for(j=0;j<6;j++)
                 {
                 Address_set(40*j,40*k,40*j+39,40*k+39);        //座標設置
                  for(i=0;i<1600;i++)
                  {     
                  LCD_WR_DATA8(image[i*2+1]);     
                  LCD_WR_DATA8(image[i*2]);                
                  }    
                 }
                }
                ref=0;                
                }
/*************增加中景園LCD文件函數**************/
              u16 BACK_COLOR, POINT_COLOR;   //背景色,畫筆色
              void LCD_Writ_Bus(char dat)   //串行數據寫入
              {    
              u8 i;              
              for(i=0;i<8;i++)
               {  
               LCD_CLK=0;
               if(dat&0x80)
               LCD_SDIN=1;
               else 
               LCD_SDIN=0;
               LCD_CLK=1;
               dat<<=1;   
               }            
              }
/************************************/
              void LCD_WR_DATA8(char da) //發送數據-8位參數
              {    
//OLED_CS_Clr();
              LCD_DC=1;
              LCD_Writ_Bus(da);  
//OLED_CS_Set();
              }  
/************************************/
              void LCD_WR_DATA(int da)
              {
//OLED_CS_Clr();
              LCD_DC=1;
              LCD_Writ_Bus(da>>8);
              LCD_Writ_Bus(da);
//OLED_CS_Set();
              }
/************************************/      
              void LCD_WR_REG(char da)     
              {    
//OLED_CS_Clr();
              LCD_DC=0;
              LCD_Writ_Bus(da);
//OLED_CS_Set();
              }
/************************************/
              void LCD_WR_REG_DATA(int reg,int da)
              {
//OLED_CS_Clr();
              LCD_WR_REG(reg);
              LCD_WR_DATA(da);
//OLED_CS_Set();
           }
/************************************/
           void Address_set(unsigned int x1,unsigned int y1,unsigned int x2,unsigned int y2)
           { 
           LCD_WR_REG(0x2a);
           LCD_WR_DATA8(x1>>8);
           LCD_WR_DATA8(x1);
           LCD_WR_DATA8(x2>>8);
           LCD_WR_DATA8(x2);
           LCD_WR_REG(0x2b);
           LCD_WR_DATA8(y1>>8);
           LCD_WR_DATA8(y1);
           LCD_WR_DATA8(y2>>8);
           LCD_WR_DATA8(y2);
           LCD_WR_REG(0x2C);                                              
           }
/************************************/
              void Lcd_Init(void)
              {
                 LCD_RES=0;
                delay_ms(200);
                LCD_RES=1;
                delay_ms(200);
//************* Start Initial Sequence **********// 
              LCD_WR_REG(0xCF);  
              LCD_WR_DATA8(0x00); 
              LCD_WR_DATA8(0xD9); 
              LCD_WR_DATA8(0X30); 
              LCD_WR_REG(0xED);  
              LCD_WR_DATA8(0x64); 
              LCD_WR_DATA8(0x03); 
              LCD_WR_DATA8(0X12); 
              LCD_WR_DATA8(0X81); 
              LCD_WR_REG(0xE8);  
              LCD_WR_DATA8(0x85); 
              LCD_WR_DATA8(0x10); 
              LCD_WR_DATA8(0x78); 
              LCD_WR_REG(0xCB);  
              LCD_WR_DATA8(0x39); 
              LCD_WR_DATA8(0x2C); 
              LCD_WR_DATA8(0x00); 
              LCD_WR_DATA8(0x34); 
              LCD_WR_DATA8(0x02); 
              LCD_WR_REG(0xF7);  
              LCD_WR_DATA8(0x20); 
              LCD_WR_REG(0xEA);  
              LCD_WR_DATA8(0x00); 
              LCD_WR_DATA8(0x00); 
              LCD_WR_REG(0xC0);    //Power control 
              LCD_WR_DATA8(0x21);   //VRH[5:0] 
              LCD_WR_REG(0xC1);    //Power control 
              LCD_WR_DATA8(0x12);   //SAP[2:0];BT[3:0] 
              LCD_WR_REG(0xC5);    //VCM control 
              LCD_WR_DATA8(0x32); 
              LCD_WR_DATA8(0x3C); 
              LCD_WR_REG(0xC7);    //VCM control2 
              LCD_WR_DATA8(0XC1); 
              LCD_WR_REG(0x36);    // Memory Access Control 
              LCD_WR_DATA8(0x08); 
              LCD_WR_REG(0x3A);   
              LCD_WR_DATA8(0x55); 
              LCD_WR_REG(0xB1);   
              LCD_WR_DATA8(0x00);   
              LCD_WR_DATA8(0x18); 
              LCD_WR_REG(0xB6);    // Display Function Control 
              LCD_WR_DATA8(0x0A); 
              LCD_WR_DATA8(0xA2); 
              LCD_WR_REG(0xF2);    // 3Gamma Function Disable 
              LCD_WR_DATA8(0x00); 
              LCD_WR_REG(0x26);    //Gamma curve selected 
              LCD_WR_DATA8(0x01); 
              LCD_WR_REG(0xE0);    //Set Gamma 
              LCD_WR_DATA8(0x0F); 
              LCD_WR_DATA8(0x20); 
              LCD_WR_DATA8(0x1E); 
              LCD_WR_DATA8(0x09); 
              LCD_WR_DATA8(0x12); 
              LCD_WR_DATA8(0x0B); 
              LCD_WR_DATA8(0x50); 
              LCD_WR_DATA8(0XBA); 
              LCD_WR_DATA8(0x44); 
              LCD_WR_DATA8(0x09); 
              LCD_WR_DATA8(0x14); 
              LCD_WR_DATA8(0x05); 
              LCD_WR_DATA8(0x23); 
              LCD_WR_DATA8(0x21); 
              LCD_WR_DATA8(0x00); 
              LCD_WR_REG(0XE1);    //Set Gamma 
              LCD_WR_DATA8(0x00); 
              LCD_WR_DATA8(0x19); 
              LCD_WR_DATA8(0x19); 
              LCD_WR_DATA8(0x00); 
              LCD_WR_DATA8(0x12); 
              LCD_WR_DATA8(0x07); 
              LCD_WR_DATA8(0x2D); 
              LCD_WR_DATA8(0x28); 
              LCD_WR_DATA8(0x3F); 
              LCD_WR_DATA8(0x02); 
              LCD_WR_DATA8(0x0A); 
              LCD_WR_DATA8(0x08); 
              LCD_WR_DATA8(0x25); 
              LCD_WR_DATA8(0x2D); 
              LCD_WR_DATA8(0x0F); 
              LCD_WR_REG(0x11);    //Exit Sleep 
              delay_ms(120); 
              LCD_WR_REG(0x29);    //Display on 
              } 
/*****清屏函數Color:要清屏的填充?********/
              void LCD_Clear(u16 Color)
              {
                u16 i,j;      
                Address_set(0,0,LCD_W-1,LCD_H-1);
               for(i=0;i<LCD_W;i++)
                {
                 for (j=0;j<LCD_H;j++)
                 {
                LCD_WR_DATA(Color);                  
                 }
              }
             }
/************************************/
//在指定位置顯示一個漢字(30*30的大小)
//dcolor?爲內容顏色,gbcolor爲背景顏色
              void showhanzi(unsigned int x,unsigned int y,unsigned char index)    
              {  
                u8 i,j;
                u8 *temp=hanzi;    
              Address_set(x,y,x+31,y+31); //設置區域     
                temp+=index*128;    
                for(j=0;j<128;j++)
                {
                 for(i=0;i<8;i++)
                 {              
                  if((*temp&(1<<i))!=0)
                  {
                  LCD_WR_DATA(POINT_COLOR);
                  } 
                  else
                  {
                  LCD_WR_DATA(BACK_COLOR);
                  }   
                 }
                 temp++;
                }
            }
//畫點
//POINT_COLOR:此點的顏色
/************************************/
              void LCD_DrawPoint(u16 x,u16 y)
              {
                Address_set(x,y,x,y);//設置光標位置
                LCD_WR_DATA(POINT_COLOR);         
              }      
//畫一個大點
//POINT_COLOR:此點的顏色
              void LCD_DrawPoint_big(u16 x,u16 y)
              {
                LCD_Fill(x-1,y-1,x+1,y+1,POINT_COLOR);
              } 
//在指定區域內填充指定顏色
//區域大小
//  (xend-xsta)*(yend-ysta)
              void LCD_Fill(u16 xsta,u16 ysta,u16 xend,u16 yend,u16 color)
              {          
                u16 i,j; 
                Address_set(xsta,ysta,xend,yend);      //éè??1a±ê???? 
                 for(i=ysta;i<=yend;i++)
                 {                                                                
                 for(j=xsta;j<=xend;j++)LCD_WR_DATA(color);//éè??1a±ê????         
                 }                               
              }  
//畫線
//x1,y1:起點座標
//x2,y2:終點座標
              void LCD_DrawLine(u16 x1, u16 y1, u16 x2, u16 y2)
              {
                u16 t; 
                int xerr=0,yerr=0,delta_x,delta_y,distance; 
                int incx,incy,uRow,uCol; 
              delta_x=x2-x1; //計算座標增量
                delta_y=y2-y1; 
                uRow=x1; 
                uCol=y1; 
                if(delta_x>0)incx=1; //設置單步方向
                else if(delta_x==0)incx=0;//垂直線
                else {incx=-1;delta_x=-delta_x;} 
                if(delta_y>0)incy=1; 
                else if(delta_y==0)incy=0;//水平線
                else{incy=-1;delta_y=-delta_y;} 
                if(delta_x>delta_y)distance=delta_x; //選取基本增量座標軸 
                else distance=delta_y; 
                 for(t=0;t<=distance+1;t++ )//畫線輸出
                  {  
                  LCD_DrawPoint(uRow,uCol);//畫點
                  xerr+=delta_x ; 
                  yerr+=delta_y ; 
                   if(xerr>distance) 
                   { 
                   xerr-=distance; 
                   uRow+=incx; 
                   } 
                   if(yerr>distance) 
                   { 
                   yerr-=distance; 
                   uCol+=incy; 
                   } 
                  }  
              }    
//畫矩形
              void LCD_DrawRectangle(u16 x1, u16 y1, u16 x2, u16 y2)
              {
                LCD_DrawLine(x1,y1,x2,y1);
                LCD_DrawLine(x1,y1,x1,y2);
                LCD_DrawLine(x1,y2,x2,y2);
                LCD_DrawLine(x2,y1,x2,y2);
              }
//在指定位置畫一個指定大小的圓
//(x,y):中心點
//r    :半徑
              void Draw_Circle(u16 x0,u16 y0,u8 r)
              {
                int a,b;
                int di;
                a=0;b=r;      
                di=3-(r<<1);             //判斷下個點位置的標誌
                while(a<=b)
                {
                 LCD_DrawPoint(x0-b,y0-a);             //3           
                 LCD_DrawPoint(x0+b,y0-a);             //0           
                 LCD_DrawPoint(x0-a,y0+b);             //1       
                 LCD_DrawPoint(x0-b,y0-a);             //7           
                 LCD_DrawPoint(x0-a,y0-b);             //2             
                 LCD_DrawPoint(x0+b,y0+a);             //4               
                 LCD_DrawPoint(x0+a,y0-b);             //5
                 LCD_DrawPoint(x0+a,y0+b);             //6 
                 LCD_DrawPoint(x0-b,y0+a);             
                 a++;
//使用Bresenham的算法畫圖 
                  if(di<0)di +=4*a+6;      
                  else
                  {
                  di+=10+4*(a-b);   
                  b--;
                  } 
                  LCD_DrawPoint(x0+a,y0+b);
                  }
              } 
//在指定位置顯示一個字符
//num:要顯示的字符:" "--->"~"
//mode:要疊加的方式(1)還是非疊加的方式(0)
//在指定位置顯示一個字符
//num:要顯示的字符:" "--->"~"
//mode:要疊加的方式(1)還是非疊加的方式(0)
              void LCD_ShowChar(u16 x,u16 y,u8 num,u8 mode)
              {
              u8 temp;
              u8 pos,t;
                u16 x0=x;
                u16 colortemp=POINT_COLOR;      
              if(x>LCD_W-16||y>LCD_H-16)return;        
//設置窗口           
                num=num-' ';//得到偏移後的值
                Address_set(x,y,x+8-1,y+16-1);      //設置光標位置
                 if(!mode) //非疊加方式
                 {
                  for(pos=0;pos<16;pos++)
                  { 
                  temp=asc2_1608[(u16)num*16+pos];         //調用1608字體
                   for(t=0;t<8;t++)
                   {                 
                   if(temp&0x01)POINT_COLOR=colortemp;
                   else POINT_COLOR=BACK_COLOR;
                   LCD_WR_DATA(POINT_COLOR);    
                   temp>>=1; 
                   x++;
                   }
                   x=x0;
                   y++;
                  }    
                 }
              else//疊加方式
                {
                 for(pos=0;pos<16;pos++)
                 {
                  temp=asc2_1608[(u16)num*16+pos];    //調用1608字體
                  for(t=0;t<8;t++)
                  {                 
                  if(temp&0x01)LCD_DrawPoint(x+t,y+pos);//畫一個點     
                  temp>>=1; 
                  }
                 }
                }
                POINT_COLOR=colortemp;                          
              }   
//m^n函數
/************************************/
              u32 mypow(u8 m,u8 n)
              {
                u32 result=1;     
                while(n--)result*=m;    
                return result;
              }             
//顯示2個數字
//x,y :起點座標     
//len :數字的位數
//color:顏色
//num:數值(0~4294967295);
/************************************/    
              void LCD_ShowNum(u16 x,u16 y,u32 num,u8 len)
              {             
                u8 t,temp;
                u8 enshow=0;
                num=(u16)num;
                 for(t=0;t<len;t++)
                 {
                 temp=(num/mypow(10,len-t-1))%10;
                  if(enshow==0&&t<(len-1))
                  {
                   if(temp==0)
                   {
                   LCD_ShowChar(x+8*t,y,' ',0);
                   continue;
                   }
                else enshow=1; 
                  }
                 LCD_ShowChar(x+8*t,y,temp+48,0); 
                 }
              } 
//顯示2個數字
//x,y:起點座標
//num:數值(0~99);
/************************************/     
              void LCD_Show2Num(u16 x,u16 y,u16 num,u8 len)
              {             
                u8 t,temp;                           
                 for(t=0;t<len;t++)
                 {
                 temp=(num/mypow(10,len-t-1))%10;
                 LCD_ShowChar(x+8*t,y,temp+'0',0); 
                 }
              } 
//顯示字符串
//x,y:起點座標
//*p:字符串起始地址
//用16字體
/************************************/
              void LCD_ShowString(u16 x,u16 y,const u8 *p)
              {         
               while(*p!='\0')
               {       
               if(x>LCD_W-16){x=0;y+=16;}
               if(y>LCD_H-16){y=x=0;LCD_Clear(RED);}
               LCD_ShowChar(x,y,*p,0);
               x+=8;
               p++;
               }  
              }
/******************************/                            
             void led0()
             {
               for(s=0;s<10;s++)
                {
                  LED=0;
                  LED0=0;
                  delay_ms(10000);
                  LED=1;
                LED0=1;
                  delay_ms(10000);
                }
             }
                         void Dis_A()
                         {
                             LCD_ShowString(10,60,"STM32   TEST -1");
                         }
                         void Dis_B()
                         {
                             LCD_ShowString(10,60,"STM32   TEST -2");
                         }
                          void Dis_C()
                         {
                             LCD_ShowString(10,60,"STM32   TEST -3");
                         }
                         void Dis_D()
                         {
                             LCD_ShowString(10,60,"STM32   TEST -4");
                         }
/******************************/
              int main(void)
              {    
                Stm32_Clock_Init(9);     //系統時鐘設置
                delay_init(72);             //延時初始化 
                LED_Init();                     //初始化與LED連接的硬件接口
                KEY_Init();              //初始化與按鍵連接的硬件接口
                led0();
                LED0=1;
                LED=1;
                Lcd_Init();
                LCD_Clear(WHITE); //清屏
                BACK_COLOR=BLACK;;POINT_COLOR=WHITE; 
              xianshi(); //顯示信息
              showimage(); //顯示40*40圖片
                while(1)
                {
                             if(KEY0==0)
                             {
                                LCD_Clear(WHITE); //清屏
                 BACK_COLOR=BLACK;;POINT_COLOR=WHITE; 
                                Dis_A();
                             }
                   if(KEY1==0)
                             {
                                LCD_Clear(WHITE); //清屏
                 BACK_COLOR=BLACK;;POINT_COLOR=WHITE; 
                                Dis_B();
                             }
                             if(KEY2==0)
                             {
                                LCD_Clear(WHITE); //清屏
                 BACK_COLOR=BLACK;;POINT_COLOR=WHITE; 
                                Dis_C();
                             }
                   if(KEY3==0)
                             {
                                LCD_Clear(WHITE); //清屏
                 BACK_COLOR=BLACK;;POINT_COLOR=WHITE; 
                                Dis_D();
                             }
                  }         
             }

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章