终于弄明白怎么在TFT写字了,哈哈,不敢独自享受,分给那些还在玩TFT的同志们,咱们一起进步,嘿嘿。贴代码- #include "stm32f10x.h"
- #include "stdio.h"
- /*******************
- CS:片选信号;
- WR:向TFTLCD写入信号;
- RD:从TFTLCD读出信号;
- RS:(0读写命令,1读写数据);
- DB:16位双向数据线;*******/
- static uint32_t Time = 10;
- unsigned char ASCII_Table1[18*16] = // ASCII
- {
-
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0x00,0x00,0x07,0x80,0x00,0x00,0x00,0x00,
- 0x1F,0xC0,0x00,0x00,0x00,0x00,0x7F,0xC0,0x00,0x00,0x00,0x00,0x81,0xC0,0x00,0x00,
- 0x00,0x00,0x01,0xC0,0x00,0x00,0x00,0x00,0x01,0xC0,0x00,0x00,0x00,0x00,0x01,0xC0,
- 0x00,0x00,0x00,0x00,0x01,0xC0,0x00,0x00,0x00,0x00,0x01,0xC0,0x00,0x00,0x00,0x00,
- 0x01,0xC0,0x00,0x00,0x00,0x00,0x01,0xC0,0x00,0x00,0x0F,0xFF,0xFF,0xFF,0xFF,0xF8,
- 0x00,0x00,0x01,0xC0,0x01,0xF0,0x00,0x00,0x01,0xC0,0x00,0xE0,0x00,0x00,0x01,0xE0,
- 0x00,0x40,0x00,0x00,0x01,0xE0,0x00,0x00,0x00,0x00,0x01,0xE0,0x00,0x00,0x00,0x00,
- 0x01,0x38,0x00,0x00,0x00,0x00,0x00,0x0E,0x00,0x00,0x18,0x00,0x00,0x07,0x80,0x00,
- 0x06,0x04,0x00,0x03,0xE0,0x00,0x03,0x8F,0xFF,0xFF,0xC3,0xC0,0x00,0xC0,0x00,0x01,
- 0x87,0xF0,0x00,0x70,0x03,0x00,0x1F,0xF8,0x00,0x38,0x03,0x80,0x3F,0x80,0x00,0x1E,
- 0x03,0x80,0xFC,0x00,0x00,0x07,0x03,0x81,0xF0,0x00,0x00,0x03,0x83,0x83,0xC0,0x00,
- 0x00,0x01,0xC3,0x87,0x00,0x00,0x00,0x01,0xE3,0x86,0x00,0x00,0x00,0x00,0xF3,0x8C,
- 0x00,0x00,0x00,0x00,0x7B,0x98,0x00,0x00,0x00,0x00,0x3B,0x90,0x00,0x00,0x00,0x00,
- 0x3F,0xB0,0x00,0x00,0x0F,0xFF,0xFF,0xFF,0xFF,0xF8,0x1F,0xFF,0xFF,0xFF,0xFF,0xF0,
- 0x00,0x00,0x03,0x80,0x01,0xE0,0x00,0x00,0x03,0x80,0x00,0xC0,0x00,0x00,0x03,0x80,
- 0x00,0x00,0x00,0x00,0x03,0xC0,0x00,0x00,0x00,0x00,0x03,0xC0,0x00,0x00,0x00,0x00,
- 0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
- };
- unsigned char ASCII_Table2[18*16] =
- {
-
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
- 0x00,0x00,0x02,0x00,0x00,0x00,0x01,0x00,0x03,0x00,0x00,0x00,0x01,0xC0,0x03,0x00,
- 0x00,0x00,0x01,0xC0,0x03,0xFF,0xFF,0xFF,0xFF,0xC0,0x03,0x00,0x00,0x00,0x01,0xC0,
- 0x03,0x00,0x00,0x00,0x01,0xC0,0x03,0x00,0x00,0x00,0x01,0xC0,0x03,0x10,0x00,0x00,
- 0x01,0xC0,0x03,0x0C,0x00,0x00,0x01,0xC0,0x03,0x03,0x00,0x00,0xC1,0xC0,0x03,0x01,
- 0x80,0x00,0xE1,0xC0,0x03,0x00,0xE0,0x01,0xE1,0xC0,0x03,0x00,0x70,0x01,0xE1,0xC0,
- 0x03,0x00,0x30,0x03,0xC1,0xC0,0x03,0x00,0x18,0x03,0xC1,0xC0,0x03,0x00,0x1C,0x07,
- 0x81,0xC0,0x03,0x00,0x0C,0x0F,0x01,0xC0,0x03,0x00,0x0E,0x1E,0x01,0xC0,0x03,0x00,
- 0x06,0x38,0x01,0xC0,0x03,0x00,0x07,0x70,0x01,0xC0,0x03,0x00,0x07,0x40,0x01,0xC0,
- 0x03,0x00,0x03,0x80,0x01,0xC0,0x03,0x00,0x03,0x00,0x01,0xC0,0x03,0x00,0x03,0x80,
- 0x01,0xC0,0x03,0x00,0x03,0x80,0x01,0xC0,0x03,0x00,0x03,0x80,0x01,0xC0,0x03,0x1F,
- 0xFF,0xFF,0xF9,0xC0,0x03,0x00,0x03,0x81,0xF1,0xC0,0x03,0x00,0x03,0x80,0xE1,0xC0,
- 0x03,0x00,0x03,0x80,0x41,0xC0,0x03,0x00,0x03,0x80,0x01,0xC0,0x03,0x00,0x03,0x80,
- 0x01,0xC0,0x03,0x00,0x03,0x80,0x01,0xC0,0x03,0x00,0x03,0x80,0x01,0xC0,0x03,0x00,
- 0x03,0xC0,0x01,0xC0,0x03,0x00,0x03,0xC0,0x01,0xC0,0x03,0x00,0x02,0x00,0x01,0xC0,
- 0x03,0x00,0x00,0x00,0x01,0xC0,0x03,0x00,0x00,0x00,0x01,0xC0,0x03,0xFF,0xFF,0xFF,
- 0xFF,0xE0,0x03,0x00,0x00,0x00,0x01,0xC0,0x00,0x00,0x00,0x00,0x00,0x80,0x00,0x00,
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
- };
- void STM_32_LCDInit(void);
- void LCD_SetCursor(uint16_t Xpos,uint16_t Ypos);
- void LCD_Clear(uint16_t Color);
- void LCD_WriteRegIndex(uint8_t LCD_Reg);
- void LCD_WriteReg(uint8_t LCD_Reg,uint16_t LCD_RegValue);
- void LCD_WriteRAM_Prepare(void);
- void LCD_WriteRAMWord(uint16_t RGB_Code);
- uint16_t LCD_ReadReg(uint8_t LCD_Reg);
- void LCD_WriteRAM(uint16_t RGB_Code);
- void LCD_Pins_Config(void);
- /* 别名区宏定义 bitband macro ------------------------------------------------*/
- /* 使用bitband可以提高设计bit操作的程序的效率,外设GPIO管脚的控制效果尤为明显 */
- /* 外设别名区 对32MB外设别名区的访问映射为对1MB 外设bit-band区的访问(实际大小根据芯片有关) */
- #define Periph_BASE 0x40000000 // 外设基地址 Peripheral
- #define Periph_BB_BASE 0x42000000 // 外设别名区基地址 Peripheral bitband
- /* 注意:传入常量参数时,在编译时编译器会计算出别名区地址,这样能达到提升效率的目的(推荐)
- 如果传入变量参数,只能在运行时由STM32自己计算别名区地址,效率会大打折扣(不推荐) */
- #define Periph_BB(PeriphAddr, BitNumber) \
- *(__IO uint32_t *) (Periph_BB_BASE | ((PeriphAddr - Periph_BASE) << 5) | ((BitNumber) << 2))
-
- #define Periph_ResetBit_BB(PeriphAddr, BitNumber) \
- (*(__IO uint32_t *) (Periph_BB_BASE | ((PeriphAddr - Periph_BASE) << 5) | ((BitNumber) << 2)) = 0)
-
- #define Periph_SetBit_BB(PeriphAddr, BitNumber) \
- (*(__IO uint32_t *) (Periph_BB_BASE | ((PeriphAddr - Periph_BASE) << 5) | ((BitNumber) << 2)) = 1)
- #define Periph_GetBit_BB(PeriphAddr, BitNumber) \
- (*(__IO uint32_t *) (Periph_BB_BASE | ((PeriphAddr - Periph_BASE) << 5) | ((BitNumber) << 2)))
- /* 外设GPIO输入输出别名区定义,n为bit位置范围为0到15 */
- /* 我们对GPIOA.15操作,首先要初始化GPIO,然后使用方法: */
- /* 对GPIOA.15输出低电平: PAOutBit(15) = 0; */
- /* 对GPIOA.15输出低电平: PAOutBit(15) = 1; */
- /* 读取GPIOA.15输入的电平: data = PAInBit(15); */
- #define PAOutBit(n) Periph_BB((uint32_t)&GPIOA->IDR,n) //输出
- #define PASetBit(n) (PAOutBit(n) = 1) //输出 高
- #define PAResetBit(n) (PAOutBit(n) = 0) //输出 低
- #define PAInBit(n) Periph_BB((uint32_t)&GPIOA->IDR,n) //输入
- #define PBOutBit(n) Periph_BB((uint32_t)&GPIOB->ODR,n) //输出
- #define PBSetBit(n) (PBOutBit(n) = 1) //输出 高
- #define PBResetBit(n) (PBOutBit(n) = 0) //输出 低
- #define PBInBit(n) Periph_BB((uint32_t)&GPIOB->IDR,n) //输入
- #define PCOutBit(n) Periph_BB((uint32_t)&GPIOC->ODR,n) //输出
- #define PCSetBit(n) (PCOutBit(n) = 1) //输出 高
- #define PCResetBit(n) (PCOutBit(n) = 0) //输出 低
- #define PCInBit(n) Periph_BB((uint32_t)&GPIOC->IDR,n) //输入
- #define PDOutBit(n) Periph_BB((uint32_t)&GPIOD->ODR,n) //输出
- #define PDSetBit(n) (PDOutBit(n) = 1) //输出 高
- #define PDResetBit(n) (PDOutBit(n) = 0) //输出 低
- #define PDInBit(n) Periph_BB((uint32_t)&GPIOD->IDR,n) //输入
- #define PEOutBit(n) Periph_BB((uint32_t)&GPIOE->ODR,n) //输出
- #define PESetBit(n) (PEOutBit(n) = 1) //输出 高
- #define PEResetBit(n) (PEOutBit(n) = 0) //输出 低
- #define PEInBit(n) Periph_BB((uint32_t)&GPIOE->IDR,n) //输入
- #define PFOutBit(n) Periph_BB((uint32_t)&GPIOF->ODR,n) //输出
- #define PFSetBit(n) (PFOutBit(n) = 1) //输出 高
- #define PFResetBit(n) (PFOutBit(n) = 0) //输出 低
- #define PFInBit(n) Periph_BB((uint32_t)&GPIOF->IDR,n) //输入
- #define PGOutBit(n) Periph_BB((uint32_t)&GPIOG->ODR,n) //输出
- #define PGSetBit(n) (PGOutBit(n) = 1) //输出 高
- #define PGResetBit(n) (PGOutBit(n) = 0) //输出 低
- #define PGInBit(n) Periph_BB((uint32_t)&GPIOG->IDR,n) //输入
- /* 内部SRAM别名区 对32MB SRAM别名区的访问映射为对1MB SRAMbit-band区的访问(实际大小根据芯片有关) */
- #define RAM_BASE 0x20000000 // 内部SRAM基地址
- #define RAM_BB_BASE 0x22000000 // 内部SRAM别名区基地址
- #define SRAM_ResetBit_BB(VarAddr, BitNumber) \
- (*(__IO uint32_t *) (RAM_BB_BASE | ((VarAddr - RAM_BASE) << 5) | ((BitNumber) << 2)) = 0)
-
- #define SRAM_SetBit_BB(VarAddr, BitNumber) \
- (*(__IO uint32_t *) (RAM_BB_BASE | ((VarAddr - RAM_BASE) << 5) | ((BitNumber) << 2)) = 1)
- #define SRAM_GetBit_BB(VarAddr, BitNumber) \
- (*(__IO uint32_t *) (RAM_BB_BASE | ((VarAddr - RAM_BASE) << 5) | ((BitNumber) << 2)))
- /*****************这个是用来配置WR的引脚的*********/
- #define LCD_PinNum_WR 14
- #define LCD_Pin_WR GPIO_Pin_14
- #define LCD_PORT_WR GPIOB
- #define LCD_CLK_WR RCC_APB2Periph_GPIOB
- /******************这个是用来配置LCD的CS的引脚**************/
- #define LCD_PinNum_CS 8
- #define LCD_Pin_CS GPIO_Pin_8
- #define LCD_PORT_CS GPIOC
- #define LCD_CLK_CS RCC_APB2Periph_GPIOC
- /*********这个是用来配置LCD的RS引脚的*************/
- #define LCD_PinNum_RS 13
- #define LCD_Pin_RS GPIO_Pin_13
- #define LCD_PORT_RS GPIOD
- #define LCD_CLK_RS RCC_APB2Periph_GPIOD
- /**************这个是用来配置LCD的RD的引脚的**********/
- #define LCD_PinNum_RD 15
- #define LCD_Pin_RD GPIO_Pin_15
- #define LCD_PORT_RD GPIOD
- #define LCD_CLK_RD RCC_APB2Periph_GPIOD
- #define LCD_PIN_DATA GPIO_Pin_All;
- #define LCD_PORT_DATA GPIOE
- #define LCD_CLK_DATA RCC_APB2Periph_GPIOE
- #define LCD_REG_0 0x00
- #define LCD_REG_1 0x01
- #define LCD_REG_2 0x02
- #define LCD_REG_3 0x03
- #define LCD_REG_4 0x04
- #define LCD_REG_5 0x05
- #define LCD_REG_6 0x06
- #define LCD_REG_7 0x07
- #define LCD_REG_8 0x08
- #define LCD_REG_9 0x09
- #define LCD_REG_10 0x0A
- #define LCD_REG_12 0x0C
- #define LCD_REG_13 0x0D
- #define LCD_REG_14 0x0E
- #define LCD_REG_15 0x0F
- #define LCD_REG_16 0x10
- #define LCD_REG_17 0x11
- #define LCD_REG_18 0x12
- #define LCD_REG_19 0x13
- #define LCD_REG_20 0x14
- #define LCD_REG_21 0x15
- #define LCD_REG_22 0x16
- #define LCD_REG_23 0x17
- #define LCD_REG_24 0x18
- #define LCD_REG_25 0x19
- #define LCD_REG_26 0x1A
- #define LCD_REG_27 0x1B
- #define LCD_REG_28 0x1C
- #define LCD_REG_29 0x1D
- #define LCD_REG_30 0x1E
- #define LCD_REG_31 0x1F
- #define LCD_REG_32 0x20
- #define LCD_REG_33 0x21
- #define LCD_REG_34 0x22
- #define LCD_REG_36 0x24
- #define LCD_REG_37 0x25
- #define LCD_REG_40 0x28
- #define LCD_REG_41 0x29
- #define LCD_REG_43 0x2B
- #define LCD_REG_45 0x2D
- #define LCD_REG_48 0x30
- #define LCD_REG_49 0x31
- #define LCD_REG_50 0x32
- #define LCD_REG_51 0x33
- #define LCD_REG_52 0x34
- #define LCD_REG_53 0x35
- #define LCD_REG_54 0x36
- #define LCD_REG_55 0x37
- #define LCD_REG_56 0x38
- #define LCD_REG_57 0x39
- #define LCD_REG_59 0x3B
- #define LCD_REG_60 0x3C
- #define LCD_REG_61 0x3D
- #define LCD_REG_62 0x3E
- #define LCD_REG_63 0x3F
- #define LCD_REG_64 0x40
- #define LCD_REG_65 0x41
- #define LCD_REG_66 0x42
- #define LCD_REG_67 0x43
- #define LCD_REG_68 0x44
- #define LCD_REG_69 0x45
- #define LCD_REG_70 0x46
- #define LCD_REG_71 0x47
- #define LCD_REG_72 0x48
- #define LCD_REG_73 0x49
- #define LCD_REG_74 0x4A
- #define LCD_REG_75 0x4B
- #define LCD_REG_76 0x4C
- #define LCD_REG_77 0x4D
- #define LCD_REG_78 0x4E
- #define LCD_REG_79 0x4F
- #define LCD_REG_80 0x50
- #define LCD_REG_81 0x51
- #define LCD_REG_82 0x52
- #define LCD_REG_83 0x53
- #define LCD_REG_96 0x60
- #define LCD_REG_97 0x61
- #define LCD_REG_106 0x6A
- #define LCD_REG_118 0x76
- #define LCD_REG_128 0x80
- #define LCD_REG_129 0x81
- #define LCD_REG_130 0x82
- #define LCD_REG_131 0x83
- #define LCD_REG_132 0x84
- #define LCD_REG_133 0x85
- #define LCD_REG_134 0x86
- #define LCD_REG_135 0x87
- #define LCD_REG_136 0x88
- #define LCD_REG_137 0x89
- #define LCD_REG_139 0x8B
- #define LCD_REG_140 0x8C
- #define LCD_REG_141 0x8C
- #define LCD_REG_143 0x8F
- #define LCD_REG_144 0x90
- #define LCD_REG_145 0x91
- #define LCD_REG_146 0x92
- #define LCD_REG_147 0x93
- #define LCD_REG_148 0x94
- #define LCD_REG_149 0x95
- #define LCD_REG_150 0x96
- #define LCD_REG_151 0x97
- #define LCD_REG_152 0x98
- #define LCD_REG_153 0x99
- #define LCD_REG_154 0x9A
- #define LCD_REG_157 0x9D
- #define LCD_REG_192 0xC0
- #define LCD_REG_193 0xC1
- #define LCD_REG_229 0xE5
- #define WHITE 0xFFFF
- #define BLACK 0x0000
- #define BLUE 0x001F
- #define BRED 0XF81F
- #define GRED 0XFFE0
- #define GBLUE 0X07FF
- #define RED 0xF800
- #define MAGENTA 0xF81F
- #define GREEN 0x07E0
- #define CYAN 0x7FFF
- #define YELLOW 0xFFE0
- #define BROWN 0XBC40
- #define BRRED 0XFC07
- #define GRAY 0X8430
- #define DARKBLUE 0X01CF
- #define LIGHTBLUE 0X7D7C
- #define GRAYBLUE 0X5458
- #define LIGHTGREEN 0X841F
- #define LGRAY 0XC618
- #define LGRAYBLUE 0XA651
- #define LBBLUE 0X2B12
- #define LCD_DIR_HORIZONTAL 0x0000
- #define LCD_DIR_VERTICAL 0x0001
- #define LCD_PIXEL_WIDTH 0x0140
- #define LCD_PIXEL_HEIGHT 0x00F0
- #define SetCs Periph_BB((uint32_t)&LCD_PORT_CS->ODR,LCD_PinNum_CS) = 1;
- #define ClrCs Periph_BB((uint32_t)&LCD_PORT_CS->ODR,LCD_PinNum_CS) = 0;
- #define SetWr Periph_BB((uint32_t)&LCD_PORT_WR->ODR,LCD_PinNum_WR) = 1;
- #define ClrWr Periph_BB((uint32_t)&LCD_PORT_WR->ODR,LCD_PinNum_WR) = 0;
- #define SetRs Periph_BB((uint32_t)&LCD_PORT_RS->ODR,LCD_PinNum_RS) = 1;
- #define ClrRs Periph_BB((uint32_t)&LCD_PORT_RS->ODR,LCD_PinNum_RS) = 0;
- #define SetRd Periph_BB((uint32_t)&LCD_PORT_RD->ODR,LCD_PinNum_RD) = 1;
- #define ClrRd Periph_BB((uint32_t)&LCD_PORT_RD->ODR,LCD_PinNum_RD) = 0;
- #define LCD_Write(LCD_DATA) LCD_PORT_DATA->ODR = LCD_DATA//ODR 是端口输出数据;
- #define LCD_Read() LCD_PORT_DATA->IDR//IDR 是端口输入数据;
- static __IO uint16_t DeviceIdCode;
- void SysTick_Handler(void)
- {
- Time--;
- if(Time==0)
- {
- Time = 10;
- GPIOD->ODR ^= GPIO_Pin_2;
- }
- }
- void Delay_us(__IO u32 us)
- {
- Time = us;
- SysTick->CTRL = 0x07;//Enable SysTick IT
- while(Time!=0);
- SysTick->CTRL = 0x00;
- }
- void Delay_ms(__IO u32 ms)
- {
- Time = ms;
- Delay_us(ms*1000);
- }
- void Delay_s(__IO u32 s)
- {
- Time = s;
- Delay_ms(s*1000);
- }
- void LCD_DB_AS_InPut(void)//虚读的前面需要输入的数据
- {
- GPIO_InitTypeDef GPIO_InitStructure;
-
- GPIO_InitStructure.GPIO_Pin = LCD_PIN_DATA;
- GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;
- GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
- GPIO_Init(LCD_PORT_DATA,&GPIO_InitStructure);
- }
- void LCD_DB_AS_OutPut(void)//虚读读完之后输出的数据
- {
- GPIO_InitTypeDef GPIO_InitStructure;
-
- GPIO_InitStructure.GPIO_Pin = LCD_PIN_DATA;
- GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
- GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
- GPIO_Init(LCD_PORT_DATA,&GPIO_InitStructure);
- }
- void delay(__IO uint32_t nCount)
- {
- for (; nCount != 0; nCount--);
- }
- void STM_32_LCDInit(void)//配置LCD,主要是配置LCD的指令
- {
- LCD_Pins_Config();
-
- delay(12000);
- LCD_WriteReg(0X0000,0X0001);//打开振荡器
- delay(12000);
- DeviceIdCode = LCD_ReadReg(0X0000);//将芯片的ID读出来
- DeviceIdCode = LCD_ReadReg(0x0000);
- delay(12000);
- if(DeviceIdCode == 0x9320||DeviceIdCode == 0x9300)
- {
- LCD_WriteReg(0x00,0x0001);//打开内部振荡器
- LCD_WriteReg(0x01,0x0100);//这个额是配置ss
- //SS和GS决定是从哪个角作为第一个顶点的从上到下是GS 1---320,从右到作是1--720;
- LCD_WriteReg(0x02,0x0400);//这个配置的是是否需要画线倒置(这里只只是显示颜色所以不需要配置(B/C和EOF)
- LCD_WriteReg(0x03,0x1010);//这个是配置的是AM和ID[1:0];这里的只要两个在同一个方向上显示的额数据就基本一直;
-
- LCD_WriteReg(0x04,0x0000);//
- //这个是用来设置屏幕的大小的,
- //RSZ[1:0] 是用来设置尺寸大小的,00是不设置,
- //RCH[1:0] 是用来设置横屏剩余的像素的多少
- //RCV[1:0] 是用来设置竖屏剩余的像素的多少
- LCD_WriteReg(0x08,0x0202);
- //这个是设置的是指定前后的Line
- LCD_WriteReg(0x09,0x0000);
- //
- LCD_WriteReg(0x0a,0x0000);//这个配置的东西几乎没影响
- LCD_WriteReg(0x0c,0x0001);//这个选择的是配置的是interal System;
- LCD_WriteReg(0x0d,0x0000);//这个是设置帧周期的输出位置
- LCD_WriteReg(0x0f,0x0000);//这个是设置的是
-
- // delay(5*12000);
- // LCD_WriteReg(0x07,0x0201);
- // delay(5*12000);
-
- LCD_WriteReg(0x10,0x10E0);//这个是根据寄存器配置的//(1<<12)|(0<<8)|(1<<7)|(1<<6)|(0<<4));
- LCD_WriteReg(0x11,0x0007);//0111
- LCD_WriteReg(0x12,0x011A);//(1<<8)|(1<<4)|(0<<0));
- LCD_WriteReg(0x13,0x0b00);//
- LCD_WriteReg(0x29,0x0000);
- LCD_WriteReg(0x2b,(1<<14)|(1<<4));
- LCD_WriteReg(0x50,0);//设置左边的位置
- LCD_WriteReg(0x51,239);//设置右边的位置
- LCD_WriteReg(0x52,0);//设置上边的位置
- LCD_WriteReg(0x53,319);//设置下边的位置
- LCD_WriteReg(0x60,0x2700);//这个必须得选择一个NL来配置
- LCD_WriteReg(0x61,0x0001);//这个主要是用灰色反转;
- LCD_WriteReg(0x6a,0x0000);//changdushi 0
- LCD_WriteReg(0x80,0x0000);
- LCD_WriteReg(0x81,0x0000);
- LCD_WriteReg(0x82,0x0000);
- LCD_WriteReg(0x83,0x0000);
- LCD_WriteReg(0x84,0x0000);
- LCD_WriteReg(0x85,0x0000);
- LCD_WriteReg(0x90,0x0010);//
- LCD_WriteReg(0x92,0x0000);
- LCD_WriteReg(0x93,0x0000);
- LCD_WriteReg(0x95,0x0000);
- LCD_WriteReg(0x97,0x0000);
- LCD_WriteReg(0x98,0x0000);
- // delay(5*12000);
- LCD_WriteReg(0x07,0x0133);//BASSE位必须设为1
- // delay(5*12000);
- }
- else if(DeviceIdCode == 0x8989)
- {
- LCD_WriteReg(0x0000,0x0001);
- LCD_WriteReg(0x0003,0xA8A4);
- LCD_WriteReg(0x000c,0x0000);
- LCD_WriteReg(0x000D,0x080c);
- LCD_WriteReg(0x000E,0x2B00);
- LCD_WriteReg(0x001E,0x00B0);
- LCD_WriteReg(0x0001,0X293F);
- LCD_WriteReg(0x0002,0x0600);
- LCD_WriteReg(0x0010,0x0000);
- LCD_WriteReg(0x0011,0x6078);
- LCD_WriteReg(0x0005,0x0000);
- LCD_WriteReg(0x0006,0x0000);
- LCD_WriteReg(0x0016,0xEF1C);
- LCD_WriteReg(0x0017,0x0003);
- LCD_WriteReg(0x0007,0x0233);
- LCD_WriteReg(0x000B,0x0000);
- LCD_WriteReg(0x000F,0x0000);
- LCD_WriteReg(0x0041,0x0000);
- LCD_WriteReg(0x0042,0x0000);
- LCD_WriteReg(0x0048,0x0000);
- LCD_WriteReg(0x0049,0x013F);
- LCD_WriteReg(0x004A,0x0000);
- LCD_WriteReg(0x004B,0x0000);
- LCD_WriteReg(0x0044,0xEF00);
- LCD_WriteReg(0x0045,0x0000);
- LCD_WriteReg(0x0046,0x013F);
- LCD_WriteReg(0x0030,0x0707);
- LCD_WriteReg(0x0031,0x0204);
- LCD_WriteReg(0x0032,0x0204);
- LCD_WriteReg(0x0033,0x0502);
- LCD_WriteReg(0x0034,0x0507);
- LCD_WriteReg(0x0035,0x0204);
- LCD_WriteReg(0x0036,0x0204);
- LCD_WriteReg(0x0037,0x0502);
- LCD_WriteReg(0x003A,0x0302);
- LCD_WriteReg(0x003B,0x0302);
- LCD_WriteReg(0x0023,0x0000);
- LCD_WriteReg(0x0024,0x0000);
- LCD_WriteReg(0x0025,0xC000);
- LCD_WriteReg(0x004e,0);
- LCD_WriteReg(0x004f,0);
- }
- else if(DeviceIdCode == 0x9325||DeviceIdCode==0x9328)
- {
- LCD_WriteReg(0x00e3,0x3008);
- LCD_WriteReg(0x00e7,0x0012);
- LCD_WriteReg(0x00ef,0x1231);
- LCD_WriteReg(0x0000,0x0001);
- LCD_WriteReg(0x0002,0x0700);
- LCD_WriteReg(0x0003,(1<<12)|(0<<5)|(1<<4)|(1<<3));
- LCD_WriteReg(0x0004,0x0000);
- LCD_WriteReg(0x0008,0x0207);
- LCD_WriteReg(0x0009,0x0000);
- LCD_WriteReg(0x000a,0x0000);
- LCD_WriteReg(0x000c,0x0001);
- LCD_WriteReg(0x000d,0x0000);
- LCD_WriteReg(0x000f,0x0000);
- LCD_WriteReg(0x0010,0x0000);
- LCD_WriteReg(0x0011,0x0007);
- LCD_WriteReg(0x0012,0x0000);
- LCD_WriteReg(0x0013,0x0000);
- Delay_ms(5);
- Delay_ms(5);
- LCD_WriteReg(0x0010,0x1590);
- LCD_WriteReg(0x0011,0x0227);
- Delay_ms(5);
- Delay_ms(5);
- LCD_WriteReg(0x0012,0x009c);
- Delay_ms(5);
- Delay_ms(5);
- LCD_WriteReg(0x0013,0x1900);
- LCD_WriteReg(0x0029,0x0023);
- LCD_WriteReg(0x002b,0x000e);
- Delay_ms(5);
- Delay_ms(5);
- LCD_WriteReg(0x0020,0x0000);
- LCD_WriteReg(0x0021,0x0000);
- Delay_ms(5);
- Delay_ms(5);
- LCD_WriteReg(0x0030,0x0007);
- LCD_WriteReg(0x0031,0x0707);
- LCD_WriteReg(0x0032,0x0006);
- LCD_WriteReg(0x0035,0x0704);
- LCD_WriteReg(0x0036,0x1f04);
- LCD_WriteReg(0x0037,0x0004);
- LCD_WriteReg(0x0038,0x0000);
- LCD_WriteReg(0x0039,0x0706);
- LCD_WriteReg(0x003c,0x0701);
- LCD_WriteReg(0x003d,0x000f);
- Delay_ms(5);
- Delay_ms(5);
- LCD_WriteReg(0x0050,0x0000);
- LCD_WriteReg(0x0051,0x00ef);
- LCD_WriteReg(0x0052,0x0000);
- LCD_WriteReg(0x0053,0x013f);
- LCD_WriteReg(0x0060,0xa700);
- LCD_WriteReg(0x006a,0x0001);
- LCD_WriteReg(0x0080,0x0000);
- LCD_WriteReg(0x0081,0x0000);
- LCD_WriteReg(0x0082,0x0000);
- LCD_WriteReg(0x0083,0x0000);
- LCD_WriteReg(0x0084,0x0000);
- LCD_WriteReg(0x0085,0x0000);
- LCD_WriteReg(0x0090,0x0010);
- LCD_WriteReg(0x0092,0x0600);
- if(DeviceIdCode == 0x9328)
- {
- LCD_WriteReg(0x0093,0x0003);
- LCD_WriteReg(0x0095,0x0110);
- LCD_WriteReg(0x0097,0x0000);
- LCD_WriteReg(0x0098,0x0000);
- }
- LCD_WriteReg(0x0007,0x0133);
- LCD_WriteReg(0x0020,0x0000);
- LCD_WriteReg(0x0021,0x0000);
- }
- else if(DeviceIdCode==0x9331)
- {
- LCD_WriteReg(0x00E7,0x1014);
- LCD_WriteReg(0x0001,0x0000);
- LCD_WriteReg(0x0002,0x0200);
- LCD_WriteReg(0x0003,0x1030);
- LCD_WriteReg(0x0008,0x0202);
- LCD_WriteReg(0x0009,0x0000);
- LCD_WriteReg(0x000A,0x0000);
- LCD_WriteReg(0x000C,0x0000);
- LCD_WriteReg(0x000D,0x0000);
- LCD_WriteReg(0x000F,0x0000);
- LCD_WriteReg(0x0010,0x0000);
- LCD_WriteReg(0x0011,0x0007);
- LCD_WriteReg(0x0012,0x0000);
- LCD_WriteReg(0x0013,0x0000);
- Delay_ms(5);
- LCD_WriteReg(0x0010,0x1690);
- LCD_WriteReg(0x0011,0x0227);
- Delay_ms(2);
- LCD_WriteReg(0x0012,0x000c);
- Delay_ms(2);
- LCD_WriteReg(0x0013,0x0800);
- LCD_WriteReg(0x0029,0x0011);
- LCD_WriteReg(0x002B,0x000B);
- Delay_ms(2);
- LCD_WriteReg(0x0020,0x0000);
- LCD_WriteReg(0x0021,0x0000);
-
- LCD_WriteReg(0x0030,0x0000);
- LCD_WriteReg(0x0031,0x0106);
- LCD_WriteReg(0x0032,0x0000);
- LCD_WriteReg(0x0035,0x0204);
- LCD_WriteReg(0x0036,0x160A);
- LCD_WriteReg(0x0037,0x0707);
- LCD_WriteReg(0x0038,0x0106);
- LCD_WriteReg(0x0039,0x0707);
- LCD_WriteReg(0x003c,0x0402);
- LCD_WriteReg(0x003D,0x0C0F);
- LCD_WriteReg(0x0050,0x0000);
- LCD_WriteReg(0x0051,0x00EF);
- LCD_WriteReg(0x0052,0x0000);
- LCD_WriteReg(0x0053,0x013F);
- LCD_WriteReg(0x0060,0x2700);
- LCD_WriteReg(0x0061,0x0001);
- LCD_WriteReg(0x006A,0x0000);
- LCD_WriteReg(0x0080,0x0000);
- LCD_WriteReg(0x0081,0x0000);
- LCD_WriteReg(0x0082,0x0000);
- LCD_WriteReg(0x0083,0x0000);
- LCD_WriteReg(0x0084,0x0000);
- LCD_WriteReg(0x0085,0x0000);
- LCD_WriteReg(0x0090,0x0010);
- LCD_WriteReg(0x0092,0x0600);
- LCD_WriteReg(0x0007,0x0021);
- Delay_ms(2);
- LCD_WriteReg(0x0007,0x0133);
- Delay_ms(2);
- }
- else if(DeviceIdCode==0x9919)
- {
- LCD_WriteReg(0x28,0x0006);
- LCD_WriteReg(0x00,0x0001);
- LCD_WriteReg(0x10,0x0000);
- LCD_WriteReg(0x01,0x72ef);
- LCD_WriteReg(0x02,0x0600);
- LCD_WriteReg(0x03,0x6a38);
- LCD_WriteReg(0x11,0x6874);
- LCD_WriteReg(0x0f,0x0000);
- LCD_WriteReg(0x0c,0x0003);
- LCD_WriteReg(0x0d,0x0003);
- LCD_WriteReg(0x0e,0x000a);
- LCD_WriteReg(0x1e,0x00be);
- LCD_WriteReg(0x25,0x8000);
- LCD_WriteReg(0x26,0x7800);
- LCD_WriteReg(0x27,0x0078);
- LCD_WriteReg(0x4e,0x0000);
- LCD_WriteReg(0x4f,0x0000);
- LCD_WriteReg(0x12,0x08d9);
- LCD_WriteReg(0x30,0x0000);
- LCD_WriteReg(0x31,0x0104);
- LCD_WriteReg(0x32,0x0100);
- LCD_WriteReg(0x33,0x0305);
- LCD_WriteReg(0x34,0x0505);
- LCD_WriteReg(0x35,0x0305);
- LCD_WriteReg(0x36,0x0707);
- LCD_WriteReg(0x37,0x0300);
- LCD_WriteReg(0x3a,0x1200);
- LCD_WriteReg(0x3b,0x0800);
- LCD_WriteReg(0x07,0x0033);
- }
- else if(DeviceIdCode==0x1505)
- {
- LCD_WriteReg(0x0007,0x0000);
- Delay_ms(2);
- LCD_WriteReg(0x0012,0x011C);
- LCD_WriteReg(0x00A4,0x0001);
- LCD_WriteReg(0x0008,0x000F);
- LCD_WriteReg(0x000A,0x0008);
- LCD_WriteReg(0x000D,0x0008);
- LCD_WriteReg(0x0030,0x0707);
- LCD_WriteReg(0x0031,0x0007);
- LCD_WriteReg(0x0032,0x0603);
- LCD_WriteReg(0x0033,0x0700);
- LCD_WriteReg(0x0034,0x0202);
- LCD_WriteReg(0x0035,0x0002);
- LCD_WriteReg(0x0036,0x1F0F);
- LCD_WriteReg(0x0037,0x0707);
- LCD_WriteReg(0x0038,0x0000);
- LCD_WriteReg(0x0039,0x0000);
- LCD_WriteReg(0x003A,0x0707);
- LCD_WriteReg(0x003B,0x0000);
- LCD_WriteReg(0x003C,0x0007);
- LCD_WriteReg(0x003D,0x0000);
- Delay_ms(2);
- LCD_WriteReg(0x0007,0x0001);
- LCD_WriteReg(0x0017,0x0001);
- Delay_ms(2);
- LCD_WriteReg(0x0010,0x17A0);
- LCD_WriteReg(0x0011,0x0217);
- LCD_WriteReg(0x0012,0x011E);
- LCD_WriteReg(0x0013,0x0F00);
- LCD_WriteReg(0x002A,0x0000);
- LCD_WriteReg(0x0029,0x000A);
- LCD_WriteReg(0x0012,0x013E);
- LCD_WriteReg(0x0050,0x0000);
- LCD_WriteReg(0x0051,0x00EF);
- LCD_WriteReg(0x0052,0x0000);
- LCD_WriteReg(0x0053,0x013F);
- LCD_WriteReg(0x0060,0x013F);
- LCD_WriteReg(0x0061,0x0001);
- LCD_WriteReg(0x006A,0x0000);
- LCD_WriteReg(0x0080,0x0000);
- LCD_WriteReg(0x0081,0x0000);
- LCD_WriteReg(0x0082,0x0000);
- LCD_WriteReg(0x0083,0x0000);
- LCD_WriteReg(0x0084,0x0000);
- LCD_WriteReg(0x0085,0x0000);
- LCD_WriteReg(0x0090,0x0000);
- LCD_WriteReg(0x0092,0x0300);
- LCD_WriteReg(0x0093,0x0005);
- LCD_WriteReg(0x0095,0x0000);
- LCD_WriteReg(0x0097,0x0000);
- LCD_WriteReg(0x0098,0x0000);
- LCD_WriteReg(0x0001,0x0100);
- LCD_WriteReg(0x0002,0x0700);
- LCD_WriteReg(0x0003,0x1030);
- LCD_WriteReg(0x0004,0x0000);
- LCD_WriteReg(0x000C,0x0000);
- LCD_WriteReg(0x000F,0x0000);
- LCD_WriteReg(0x0020,0x0000);
- LCD_WriteReg(0x0020,0x0000);
- LCD_WriteReg(0x0021,0x0000);
- LCD_WriteReg(0x0007,0x0021);
- Delay_ms(2);
- LCD_WriteReg(0x0007,0x0061);
- Delay_ms(2);
- LCD_WriteReg(0x0007,0x0173);
- Delay_ms(2);
- }
- else
- {
- }
- }
- void LCD_Clear(uint16_t Color)
- {
- uint32_t index = 0;
- LCD_SetCursor(0,0);
- LCD_WriteRAM_Prepare();
- ClrCs
- SetRs
- for(index=0;index<(LCD_PIXEL_WIDTH*LCD_PIXEL_HEIGHT);index++)//这个是从屏幕上往下刷新数据的,
- {
- ClrWr
- LCD_Write(Color);
- SetWr
- }
- SetCs
-
- }
- void LCD_SetCursor(uint16_t Xpos,uint16_t Ypos)//设置光标
- {
- // if(DeviceIdCode==0x8989)这个是用来驱动ID是0x8989的驱动装置
- // {
- // LCD_WriteReg(0x004e,Xpos);
- // LCD_WriteReg(0x004f,Ypos);
- // }
- if(DeviceIdCode==0x9320)
- {
- LCD_WriteReg(0x0020,Xpos);//行
- LCD_WriteReg(0x0021,0x13f-Ypos);//列
- }
- // else if(DeviceIdCode==0x9919)//这个是用来驱动ID是0x9919的驱动的
- // {
- // LCD_WriteReg(0x004e,Xpos);
- // LCD_WriteReg(0x004f,Ypos);
- // }
- // else
- // {
- // LCD_WriteReg(0x0020,Xpos);
- // LCD_WriteReg(0x0021,0x13f-Ypos);
- // }
- }
- // void LCD_WriteRegIndex(uint8_t LCD_Reg)//这个其实就是写寄存器的那个Index,在write_Reg前边已经写好了。
- // {
- // ClrCs
- // ClrRs
- // ClrWr
- // LCD_Write(LCD_Reg);
- // SetWr
- // SetCs
- // }
- uint16_t LCD_ReadReg(uint8_t LCD_Reg)
- {
- uint16_t data;
- ClrCs
- ClrRs
- ClrWr
- LCD_Write(LCD_Reg);//xian xie ru ji cun qi
- SetWr
- SetRs
- LCD_DB_AS_InPut();//shu ru shu ju
-
-
- ClrRd
- data = LCD_Read();// ba shu ru de shu ju du chu lai
- SetRd
-
- SetCs
- LCD_DB_AS_OutPut();
- return data;
- }
- void LCD_WriteRAM_Prepare(void)//0x0022h这个是向GRAM写入数据的标志位;
- {
- ClrCs
- ClrRs
- ClrWr
- LCD_Write(LCD_REG_34);//xie ru shu ju de she zhi
- SetWr
- SetRs
-
- }
- void LCD_WriteRAMWord(uint16_t RGB_Code)//写入一个完整数据的过程
- {
- LCD_WriteRAM_Prepare();
- LCD_WriteRAM(RGB_Code);
- }
- void LCD_WriteReg(uint8_t LCD_Reg,uint16_t LCD_RegValue)//这个是写write register
- {
- ClrCs
- ClrRs
- ClrWr
- LCD_Write(LCD_Reg);//zhe ge shi xie ru de cammand
- SetWr
- SetRs
- ClrWr
- LCD_Write(LCD_RegValue);//zhe ge shi xie ru de shu ju
- SetWr
- SetCs
-
-
- }
- void LCD_WriteRAM(uint16_t RGB_Code)//Write data to GRAM
- {
-
- ClrWr
- LCD_Write(RGB_Code);//这个是写入数据
- SetWr
-
- }
- /****************配置相应的引脚**************/
- void LCD_Pins_Config(void)
- {
- GPIO_InitTypeDef GPIO_InitStructure;
-
- RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOE|RCC_APB2Periph_GPIOC|RCC_APB2Periph_GPIOD|RCC_APB2Periph_GPIOB,ENABLE);
-
- GPIO_InitStructure.GPIO_Pin = GPIO_Pin_All;
- GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
- GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
- GPIO_Init(GPIOE,&GPIO_InitStructure);
-
-
- GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8;
- GPIO_Init(GPIOC,&GPIO_InitStructure);
-
- GPIO_InitStructure.GPIO_Pin = GPIO_Pin_14;
- GPIO_Init(GPIOB,&GPIO_InitStructure);
-
- GPIO_InitStructure.GPIO_Pin = GPIO_Pin_13;
- GPIO_Init(GPIOD,&GPIO_InitStructure);
-
- GPIO_InitStructure.GPIO_Pin = GPIO_Pin_15;
- GPIO_Init(GPIOD,&GPIO_InitStructure);
-
-
-
-
- SetCs
- SetWr
- SetRd
- SetRs
- }
- void LED_Init(void)
- {
- GPIO_InitTypeDef GPIO_InitStructure;
-
- RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOD,ENABLE);
-
- GPIO_InitStructure.GPIO_Pin = GPIO_Pin_2|GPIO_Pin_3|GPIO_Pin_4|GPIO_Pin_7;
- GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
- GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
-
- GPIO_Init(GPIOD,&GPIO_InitStructure);
- }
- void STM32_USART_Configuration(void)
- {
- GPIO_InitTypeDef GPIO_InitStructure;
- USART_InitTypeDef USART_InitStructure;
-
-
-
- USART_InitStructure.USART_BaudRate = 115200;
- USART_InitStructure.USART_WordLength = USART_WordLength_8b;
- USART_InitStructure.USART_StopBits = USART_StopBits_1;
- USART_InitStructure.USART_Parity = USART_Parity_No;
- USART_InitStructure.USART_Mode = USART_Mode_Tx|USART_Mode_Rx;
- USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None;
-
- RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOD|RCC_APB2Periph_AFIO,ENABLE);
- GPIO_PinRemapConfig(GPIO_Remap_USART2,ENABLE);
- RCC_APB1PeriphClockCmd(RCC_APB1Periph_USART2,ENABLE);
-
-
- GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5;
- GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
- GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
- GPIO_Init(GPIOD,&GPIO_InitStructure);
-
- GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6;
- GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;
- GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
- GPIO_Init(GPIOD,&GPIO_InitStructure);
-
-
- USART_Init(USART2,&USART_InitStructure);
- USART_Cmd(USART2,ENABLE);
- }
- #ifndef MicroLIB//没有在MDK中打上MicroLIB对勾的话 执行下面的数据
- #pragma import(__use_no_semihosting)//这句话的意思是不调用半主机模式
- struct __FILE
- {
- int handle;
- };
- FILE __stdout;
- _sys_exit(int x)//避免使用半主机模式
- {
- x = x;
- }
- int fputc(int ch,FILE *f)//重新定义fputc函数使其输出到串口上
- {
- while(USART_GetFlagStatus(USART2,USART_FLAG_TC) == RESET)//等待发送成功
- {}
- USART_SendData(USART2,(uint8_t) ch);//发送数据
- return ch;
- }
- int ferror(FILE *f)
- {
- return EOF;
- }
- #endif
- FILE __stdin;
- int fgetc(FILE *fp)
- {
- int ch=0;
- while(USART_GetFlagStatus(USART2,USART_FLAG_RXNE) == RESET)
- {
-
- }
- ch = (int)USART2->DR & 0XFF;
- putchar(ch);//回显,就是输出你输入的数据
- return ch;
- }
- #ifdef USE_FULL_ASSERT
- /*************
- 如果你定义了USE_FULL_ASSERT
- 就可以在assert_failed,加入:
- printf("Wrong parameters value: file %s on line %d\r\n", file, line);
- 就可以使用assert_param(expr) 来判断当前参数是够正确,如果不正确,就会打印出错的文件,以及出错的行。
- 这样就可以方面调试信息了。
- *********/
- void assert_failed(uint8_t* file,uint32_t line)//输出错误信息
- {
- printf("Wrong parameters value: file %s on line %d\r\n",file,line);
- while(1)
- {
- }
- }
- #endif
- void LCD_SetPoint(uint16_t Xpos,uint16_t Ypos,uint16_t color)
- {
- LCD_SetCursor(Xpos,Ypos);
- LCD_WriteRAM_Prepare();
- LCD_WriteRAM(color);
- }
- void LCD_DrawPicture(uint16_t Xpos,uint16_t Ypos,unsigned char *shuju)
- {
- uint16_t Index=0,X,Y,k;
- for(Y=0;Y<48;Y++)
- {
- for(X=0;X<8;X++)
- {
- /*********************
- 这里找的字符的格式是48*48的像素,就是横着48个像素点(灰度),竖着是48个像素点(灰度)
- (这里是个关键点,注意的是1个unsigned char 字节代表的是8个bit(即8个像素点))
-
- **********************************************
- **********************************************
- **********************************************
- **********************************************
- **********************************************
- **********************************************
- **********************************************
- **********************************************
- **********************************************
- **********************************************
- **********************************************
- **********************************************
- **********************************************
- **********************************************
- **********************************************
- **********************************************
- **********************************************
- **********************************************
- **********************************************
- **********************************************
- **********************************************
- **********************************************
- **********************************************
- **********************************************
- **********************************************
- **********************************************
- **********************************************
- **********************************************
- **********************************************
- **********************************************
- **********************************************
- **********************************************
- **********************************************
- **********************************************
- **********************************************
- **********************************************
- **********************************************
- **********************************************
- **********************************************
- **********************************************
- **********************************************
- **********************************************
- **********************************************
- **********************************************
- **********************************************
- **********************************************
- **********************************************
- **********************************************
- **********************************************
- **********************************************
- **********************************************
- **********************************************
- **********************************************
- **********************************************
- **********************************************
- **********************************************
- **********************************************
- **********************************************
- **********************************************
- **********************************************
- **********************************************
- **********************************************
- **********************************************
- **********************************************
- 这个就是48*48,所以如果(0,0)的位置的话,右上角的坐标是(47,47),左上角是(0,47),右下角是(47,0);
- 这里的K是横着的数据的个数(48/8)6个数据,为什么要除以8,这个在上边已经提示了,因为一个unsigned char
- 类型的变量是8bit(8个像素点)所以只需要找6个unsigned char 的变量了,那么Y轴上需要48个unsigned char
- 变量了,(这里的,Y就是Y轴,X是X轴),所以在这里你可以完全的完成自己的DIY屏幕了,(还有一点就是,如何测试自己的
- 屏幕的(0,0)在哪,自己可以LCD_SetPoint(10,10,BLCAK),然后改变某个坐标的值在进行测试就可以了)
- ****************/
- for(k=0;k<6;k++)
- {
- if((shuju[Index*6+k]>>(7-X))&0x01 == 0x01)//这个是第一个字节的第j位的状态
- {
- LCD_SetPoint(Xpos+X+(k*8),Ypos+Y,RED);
- }
- else
- {
- LCD_SetPoint(Xpos+X+k*8,Ypos+Y,WHITE);
- }
- }
- }
- Index++;
- }
- }
-
- int main(void)
- {
- SysTick_Config(7200000);///这个最大的参数是2的24次方
- SysTick->CTRL = 0x00;
- LED_Init();
- STM_32_LCDInit();
- STM32_USART_Configuration();
- LED_Init();
- SysTick->CTRL = 0x07;//da kai ding shi qi zhong duan
-
- LCD_Clear(RED);//这个是显示颜色
- LCD_DrawPicture(0,100,ASCII_Table1);
- LCD_DrawPicture(47,100,ASCII_Table2);
- while(1)
- {
- }
- }
复制代码 关键的部分在那个LCD_DrawPicture()函数中,取模软件在附件中,嘿嘿,高兴。
|