澳门威尼斯人官网手机网 > 控制/MCU > 正文

STM32单片机ILI9325系列TFT的驱动原理解析

2018年11月14日 15:53 次阅读

为了更好,更深入学习了解ILI9325系列TFT的驱动原理,自己做了一块TFT板子。为了方便测试,在上面集成了STM32芯片,到时候做实验的时候就焊接STM32测试,如果只是使用,就直接焊接TFT就行了。板子还在做,先上原理图与PCB。

STM32单片机ILI9325系列TFT的驱动原理解析

STM32单片机ILI9325系列TFT的驱动原理解析

STM32单片机ILI9325系列TFT的驱动原理解析

-------------------------等板子回来,再测试,总结继续-------------

--------板子回来了,焊接好了,简单测试了一下!-----------

STM32单片机ILI9325系列TFT的驱动原理解析

STM32单片机ILI9325系列TFT的驱动原理解析

STM32单片机ILI9325系列TFT的驱动原理解析

---------第二部分---------------ili9320.h------------------代码简单分析------

#ifndef _ILI9320_H_

#define _ILI9320_H_

#include “stm32f10x.h”

#define DB0_7_RCC RCC_APB2Periph_GPIOB

#define DB_8_15_RCC RCC_APB2Periph_GPIOC

//-------------------------------------------

#define nCsPin_RCC RCC_APB2Periph_GPIOC

#define nCsPin_Port GPIOC

#define nCsPin GPIO_Pin_11

#define RsPin_RCC RCC_APB2Periph_GPIOC

#define RsPin_Port GPIOC

#define RsPin GPIO_Pin_8

#define nWrPin_RCC RCC_APB2Periph_GPIOC

#define nWrPin_Port GPIOC

#define nWrPin GPIO_Pin_9

#define nRdPin_RCC RCC_APB2Periph_GPIOC

#define nRdPin_Port GPIOC

#define nRdPin GPIO_Pin_10

#define nRstPin_RCC RCC_APB2Periph_GPIOC

#define nRstPin_Port GPIOC

#define nRstPin GPIO_Pin_12

#define LightPin_RCC RCC_APB2Periph_GPIOB

#define LightPin_Port GPIOB

#define LightPin GPIO_Pin_0

//-----------------------------------------

#define Set_nWrnCsPin_Port-》BSRR = nWrPin // GPIO_SetBits (nWrPin_Port, nWrPin)

#define Clr_nWrnCsPin_Port-》BRR = nWrPin // GPIO_ResetBits (nWrPin_Port, nWrPin)

#define Set_Cs nCsPin_Port-》BSRR = nCsPin // GPIO_SetBits (nCsPin_Port, nCsPin)

#define Clr_Cs nCsPin_Port-》BRR = nCsPin// GPIO_ResetBits (nCsPin_Port, nCsPin)

#define Set_Rs RsPin_Port-》BSRR = RsPin// GPIO_SetBits (RsPin_Port, RsPin)

#define Clr_Rs RsPin_Port-》BRR = RsPin // GPIO_ResetBits (RsPin_Port, RsPin)

#define Set_nRdnRdPin_Port-》BSRR = nRdPin// GPIO_SetBits (nRdPin_Port, nRdPin)

#define Clr_nRdnRdPin_Port-》BRR = nRdPin // GPIO_ResetBits (nRdPin_Port, nRdPin)

#define Set_RstnRstPin_Port-》BSRR = nRstPin// GPIO_SetBits (nRstPin_Port, nRstPin)

#define Clr_RstnRstPin_Port-》BRR = nRstPin // GPIO_ResetBits (nRstPin_Port, nRstPin)

#define Set_LightLightPin_Port-》BSRR = LightPin// GPIO_SetBits (LightPin_Port, LightPin)

#define Clr_LightLightPin_Port-》BRR = LightPin// GPIO_ResetBits (LightPin_Port, LightPin)

//---------------------------------

#define White 0xFFFF

#define Black 0x0000

#define Grey 0xF7DE

#define Blue 0x001F

#define Blue2 0x051F

#define Red 0xF800

#define Magenta 0xF81F

#define Green 0x07E0

#define Cyan 0x7FFF

#define Yellow 0xFFE0

void Lcd_Configuration(void); //初始化GPIO

void LCD_ili9320_IniTIalizTIon(void); //初始化ILI9320---uCGUI需要使用--1

void LCD_ili9320_Reset(void);

void LCD_ili9320_BackLight(u8 status); //背光

void LCD_ili9320_SetCursor(u16 x,u16 y); //设置坐标---uCGUI需要使用--2

void LCD_ili9320_SetWindows(u16 StartX,u16 StartY,u16 EndX,u16 EndY); //设置窗体

void LCD_ili9320_DrawPicture(u16 StartX,u16 StartY,u16 EndX,u16 EndY,u16 *pic);//画图片

void LCD_ili9320_SetPoint(u16 x,u16 y,u16 point);//画点---uCGUI需要使用--3

u16 LCD_ili9320_GetPoint(u16 x,u16 y); //读取点颜色---uCGUI需要使用--4

void LCD_ili9320_PutChar(u16 x,u16 y,u8 c,u16 charColor,u16 bkColor); //显示字符--需要字体头文件

void LCD_ili9320_Clear(u16 dat); //清屏

void LCD_ili9320_Delay(u32 nCount);

void LCD_ili9320_Test(void);

void LCD_ili9320_WriteData(u16 dat); //写数据

void LCD_ili9320_WriteIndex(u16 idx); //写地址

u16 LCD_ili9320_ReadData(void); //读数据

u16 LCD_ili9320_ReadRegister(u16 index); //读寄存器

void LCD_ili9320_WriteRegister(u16 index,u16 dat); //写寄存器

u16 LCD_ili9320_BGR2RGB(u16 c); //转换颜色格式

u16 LCD_ili9320_Color565(u32 RGB); // RGB颜色转为16位(565)

void LCD_ili9320_DrawHLine(uint16_t usX1 , uint16_t usY1 , uint16_t usX2 , uint16_t usColor);//水平线---uCGUI需要使用--5

void LCD_ili9320_DrawVLine(uint16_t usX1 , uint16_t usY1 , uint16_t usY2 , uint16_t usColor);//垂直线---uCGUI需要使用--6

void LCD_ili9320_FillRect(u16 x0, u16 y0, u16 x1, u16 y1,u16 color);//填充矩形---uCGUI需要使用--7

void LCD_ili9320_Line(u16 x0, u16 y0, u16 x1, u16 y1,u16 color); // 画任意直线线

void LCD_ili9320_Circle(u16 cx,u16 cy,u16 r,u16 color,u8 fill); // 画园

void LCD_ili9320_Rectangle(u16 x0, u16 y0, u16 x1, u16 y1,u16 color,u8 fill); // 画矩形--填充或者不填充

void LCD_ili9320_Square(u16 x0, u16 y0, u16 with, u16 color,u8 fill); // 画正方形--填充或者不填充

void LCD_ili9320_Text(u16 x, u16 y, u8 *str, u16 len,u16 Color, u16 bkColor); //简单测试--显示渐变色条

#endif

---------第三部分----------------ili9320.c------代码分析------

#include “ili9320.h”

#include “ili9320_font.h”

void Lcd_ConfiguraTIon(void)

{

GPIO_InitTypeDef GPIO_InitStructure;

RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB “ RCC_APB2Periph_GPIOC, ENABLE); //初始化数据引脚 ---DB0~~DB7是PB8~~PB15 DB8~~DB15是PC0~~PC7----------//

GPIO_InitStructure.GPIO_Pin =GPIO_Pin_8 | GPIO_Pin_9 | GPIO_Pin_10 | GPIO_Pin_11 | GPIO_Pin_12 | GPIO_Pin_13 | GPIO_Pin_14 | GPIO_Pin_15;

GPIO_InitStructure.GPIO_Speed = GPIO_Speed_2MHz;

GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;

GPIO_Init(GPIOB, &GPIO_InitStructure);

GPIO_InitStructure.GPIO_Pin =GPIO_Pin_0 | GPIO_Pin_1 | GPIO_Pin_2 |GPIO_Pin_3 | GPIO_Pin_4 | GPIO_Pin_5 | GPIO_Pin_6 | GPIO_Pin_7;

GPIO_InitStructure.GPIO_Speed = GPIO_Speed_2MHz;

GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;

GPIO_Init(GPIOC, &GPIO_InitStructure);

RCC_APB2PeriphClockCmd(nCsPin_RCC, ENABLE); // 控制脚 CS ------PC11----//

GPIO_InitStructure.GPIO_Pin = nCsPin;

GPIO_InitStructure.GPIO_Speed = GPIO_Speed_2MHz;

GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;

GPIO_Init(nCsPin_Port, &GPIO_InitStructure);

RCC_APB2PeriphClockCmd(RsPin_RCC, ENABLE); // 控制脚 RS -------PC8---//

GPIO_InitStructure.GPIO_Pin = RsPin;

GPIO_InitStructure.GPIO_Speed = GPIO_Speed_2MHz;

GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;

GPIO_Init(RsPin_Port, &GPIO_InitStructure);

RCC_APB2PeriphClockCmd(nWrPin_RCC, ENABLE); // 控制脚 WR ----PC9--//

GPIO_InitStructure.GPIO_Pin = nWrPin;

GPIO_InitStructure.GPIO_Speed = GPIO_Speed_2MHz;

GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;

GPIO_Init(nWrPin_Port, &GPIO_InitStructure);

RCC_APB2PeriphClockCmd(nRdPin_RCC, ENABLE); // 控制脚 RD ---PC10--//

GPIO_InitStructure.GPIO_Pin = nRdPin;

GPIO_InitStructure.GPIO_Speed = GPIO_Speed_2MHz;

GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;

GPIO_Init(nRdPin_Port, &GPIO_InitStructure);

RCC_APB2PeriphClockCmd(nRstPin_RCC, ENABLE); // 控制脚 RST ---PC12--//

GPIO_InitStructure.GPIO_Pin = nRstPin;

GPIO_InitStructure.GPIO_Speed = GPIO_Speed_2MHz;

GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;

GPIO_Init(nRstPin_Port, &GPIO_InitStructure);

RCC_APB2PeriphClockCmd(LightPin_RCC, ENABLE); // 控制脚背光 --PB00---//

GPIO_InitStructure.GPIO_Pin = LightPin;

GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;

GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;

GPIO_Init(LightPin_Port, &GPIO_InitStructure);

}

void delayms(int count) // X1ms

{

int i,j;

for(i=0;i for(j=0;j《1000;j++);

}

void LCD_ili9320_IniTIaliztion (void) //--功 能:初始化 ILI9320 控制器

{

volatile u16 i, j, k;

u32 DeviceCode = 0;

Lcd_Configuration();

LCD_ili9320_BackLight(0); //关背光

delayms(200);

Clr_Rst;

delayms(200);

LCD_ili9320_WriteData(0xffff);

Set_Rst; Set_nWr; Set_Cs; Set_Rs; Set_nRd; Set_Rst;

delayms(200);

LCD_ili9320_WriteRegister(0x0000,0x0001); // Start OCS

delayms(200);

DeviceCode = LCD_ili9320_ReadRegister(0x0000); // 读控制器型号 ILI9320

if(DeviceCode == 0x9320||0x9300)

{

LCD_ili9320_WriteRegister(0x00,0x0000);

LCD_ili9320_WriteRegister(0x01,0x0100);//驱动器输出控制

LCD_ili9320_WriteRegister(0x02,0x0700);//LCD驱动波形控制-反转

LCD_ili9320_WriteRegister(0x03,0x1030);//进入模式--F-

LCD_ili9320_WriteRegister(0x04,0x0000);//重新调整控制寄存器大小---缩放

LCD_ili9320_WriteRegister(0x08,0x0202);//Display Contral 2.(0x0207)

LCD_ili9320_WriteRegister(0x09,0x0000);//Display Contral 3.(0x0000)

LCD_ili9320_WriteRegister(0x0a,0x0000);//Frame信号输出间隔

LCD_ili9320_WriteRegister(0x0c,(1《《0)); //RGB显示接口控制1--16位

LCD_ili9320_WriteRegister(0x0d,0x0000);//帧标记的位置

LCD_ili9320_WriteRegister(0x0f,0x0000); //RGB显示接口控制1

delayms(5);

LCD_ili9320_WriteRegister(0x07,0x0101);//Display Contral.

delayms(5);

LCD_ili9320_WriteRegister(0x10,(1《《12)|(0《《8)|(1《《7)|(1《《6)|(0《《4));//Power Control 1.(0x16b0)

LCD_ili9320_WriteRegister(0x11,0x0007); //Power Control 2.(0x0001)

LCD_ili9320_WriteRegister(0x12,(1《《8)|(1《《4)|(0《《0));//Power Control 3.(0x0138)

LCD_ili9320_WriteRegister(0x13,0x0b00);//Power Control 4.

LCD_ili9320_WriteRegister(0x29,0x0000); //Power Control 7.

LCD_ili9320_WriteRegister(0x2b,(1《《14)|(1《《4));//帧速率和色彩控制---70

LCD_ili9320_WriteRegister(0x50,0);//Set X Star240*320

LCD_ili9320_WriteRegister(0x51,239); //水平GRAM终止位置Set X End.

LCD_ili9320_WriteRegister(0x52,0);//Set Y Star

LCD_ili9320_WriteRegister(0x53,319);//Set Y End.t.

LCD_ili9320_WriteRegister(0x60,0x2700);//门扫描控制器

LCD_ili9320_WriteRegister(0x61,0x0001);//Driver Output Control.

LCD_ili9320_WriteRegister(0x6a,0x0000); //Vertical Srcoll Control.

LCD_ili9320_WriteRegister(0x80,0x0000); //局部影像控制器1

LCD_ili9320_WriteRegister(0x81,0x0000); //局部影像控制器1--起始地址

LCD_ili9320_WriteRegister(0x82,0x0000); //局部影像控制器1--终止地址

LCD_ili9320_WriteRegister(0x83,0x0000); //Displsy Position? Partial Display 2.

LCD_ili9320_WriteRegister(0x84,0x0000); //RAM Address Start? Partial Display 2.

LCD_ili9320_WriteRegister(0x85,0x0000); //RAM Address End? Partial Display 2.

LCD_ili9320_WriteRegister(0x90,(0《《7)|(16《《0)); //平板接口控制器1(0x0013)

LCD_ili9320_WriteRegister(0x92,0x0000);//Panel Interface Contral 2.(0x0000)

LCD_ili9320_WriteRegister(0x93,0x0001); //Panel Interface Contral 3.

LCD_ili9320_WriteRegister(0x95,0x0110); //Frame Cycle Contral.(0x0110)

LCD_ili9320_WriteRegister(0x97,(0《《8)); //

LCD_ili9320_WriteRegister(0x98,0x0000); //Frame Cycle Contral.

LCD_ili9320_WriteRegister(0x07,0x0173);//(0x0173)

}

else if(DeviceCode==0x9325||DeviceCode==0x9328)//ILI9325

{

LCD_ili9320_WriteRegister(0x00e7,0x0010);

LCD_ili9320_WriteRegister(0x0000,0x0001); //开启内部时钟

LCD_ili9320_WriteRegister(0x0001,0x0100);

LCD_ili9320_WriteRegister(0x0002,0x0700); //电源开启

LCD_ili9320_WriteRegister(0x0003,(1《《12)|(3《《4)|(0《《3) ); //65K

LCD_ili9320_WriteRegister(0x0004,0x0000);

LCD_ili9320_WriteRegister(0x0008,0x0207);

LCD_ili9320_WriteRegister(0x0009,0x0000);

LCD_ili9320_WriteRegister(0x000a,0x0000);//display setting

LCD_ili9320_WriteRegister(0x000c,0x0001); //display setting

LCD_ili9320_WriteRegister(0x000d,0x0000);//0f3c

LCD_ili9320_WriteRegister(0x000f,0x0000);

//电源配置

LCD_ili9320_WriteRegister(0x0010,0x0000);

LCD_ili9320_WriteRegister(0x0011,0x0007);

LCD_ili9320_WriteRegister(0x0012,0x0000);

LCD_ili9320_WriteRegister(0x0013,0x0000);

delayms(5);

LCD_ili9320_WriteRegister(0x0010,0x1590);

LCD_ili9320_WriteRegister(0x0011,0x0227);

delayms(5);

LCD_ili9320_WriteRegister(0x0012,0x009c);

delayms(5);

LCD_ili9320_WriteRegister(0x0013,0x1900);

LCD_ili9320_WriteRegister(0x0029,0x0023);

LCD_ili9320_WriteRegister(0x002b,0x000e);

delayms(5);

LCD_ili9320_WriteRegister(0x0020,0x0000);

LCD_ili9320_WriteRegister(0x0021,0x013f);

delayms(5);

//伽马校正

LCD_ili9320_WriteRegister(0x0030,0x0007);

LCD_ili9320_WriteRegister(0x0031,0x0707);

LCD_ili9320_WriteRegister(0x0032,0x0006);

LCD_ili9320_WriteRegister(0x0035,0x0704);

LCD_ili9320_WriteRegister(0x0036,0x1f04);

LCD_ili9320_WriteRegister(0x0037,0x0004);

LCD_ili9320_WriteRegister(0x0038,0x0000);

LCD_ili9320_WriteRegister(0x0039,0x0706);

LCD_ili9320_WriteRegister(0x003c,0x0701);

LCD_ili9320_WriteRegister(0x003d,0x000f);

delayms(5);

LCD_ili9320_WriteRegister(0x0050,0x0000); //水平GRAM起始位置

LCD_ili9320_WriteRegister(0x0051,0x00ef);//水平GRAM终止位置

LCD_ili9320_WriteRegister(0x0052,0x0000); //垂直GRAM起始位置

LCD_ili9320_WriteRegister(0x0053,0x013f); //垂直GRAM终止位置

LCD_ili9320_WriteRegister(0x0060,0xa700);

LCD_ili9320_WriteRegister(0x0061,0x0001);

LCD_ili9320_WriteRegister(0x006a,0x0000);

LCD_ili9320_WriteRegister(0x0080,0x0000);

LCD_ili9320_WriteRegister(0x0081,0x0000);

LCD_ili9320_WriteRegister(0x0082,0x0000);

LCD_ili9320_WriteRegister(0x0083,0x0000);

LCD_ili9320_WriteRegister(0x0084,0x0000);

LCD_ili9320_WriteRegister(0x0085,0x0000);

LCD_ili9320_WriteRegister(0x0090,0x0010);

LCD_ili9320_WriteRegister(0x0092,0x0000);

LCD_ili9320_WriteRegister(0x0093,0x0003);

LCD_ili9320_WriteRegister(0x0095,0x0110);

LCD_ili9320_WriteRegister(0x0097,0x0000);

LCD_ili9320_WriteRegister(0x0098,0x0000);

//开启显示设置

LCD_ili9320_WriteRegister(0x0007,0x0133);

LCD_ili9320_WriteRegister(0x0020,0x0000);

LCD_ili9320_WriteRegister(0x0021,0x013f);

}

delayms(200);

LCD_ili9320_BackLight(1);//开背光

}

void LCD_ili9320_SetCursor(u16 x,u16 y) //--功 能:设置屏幕座标

{

LCD_ili9320_WriteRegister(0x0020,x);// 行

LCD_ili9320_WriteRegister(0x0021,y);// 列

}

/****************************************************************************

* 功 能:设置窗口区域

* 入口参数:StartX 行起始座标

* StartY 列起始座标

* EndX 行结束座标

* EndY 列结束座标

****************************************************************************/

void LCD_ili9320_SetWindows(u16 StartX,u16 StartY,u16 EndX,u16 EndY)

{

LCD_ili9320_SetCursor(StartX,StartY);

LCD_ili9320_WriteRegister(0x0050, StartX);

LCD_ili9320_WriteRegister(0x0052, StartY);

LCD_ili9320_WriteRegister(0x0051, EndX);

LCD_ili9320_WriteRegister(0x0053, EndY);

}

/****************************************************************************

* 功 能:将屏幕填充成指定的颜色,如清屏,则填充 0xffff

* 入口参数:dat 填充值

****************************************************************************/

void LCD_ili9320_Clear(u16 dat)

{

u32 i;

LCD_ili9320_SetCursor(0x0000, 0x0000);

Clr_Cs;

LCD_ili9320_WriteIndex(0x0022);

Set_Rs;

for(i = 0; i 《 768000; i++) //240*320=76800

{

LCD_ili9320_WriteData(dat);

Clr_nWr;

Set_nWr;

}

Set_Cs;

}

/****************************************************************************

* 功 能:获取指定座标的颜色值

* 入口参数:x 行座标

* y 列座标

* 出口参数:当前座标颜色值

****************************************************************************/

u16 LCD_ili9320_GetPoint(u16 x,u16 y)

{

LCD_ili9320_SetCursor(x,y);

return (LCD_ili9320_BGR2RGB(LCD_ili9320_ReadRegister(0x0022)));

}

/****************************************************************************

* 功 能:在指定座标画点

* 入口参数:x 行座标

* y 列座标

* point 点的颜色

****************************************************************************/

void LCD_ili9320_SetPoint(u16 x,u16 y,u16 point)

{

if ((x》240)||(y》320))

return;

LCD_ili9320_SetCursor(x,y);

Clr_Cs;

LCD_ili9320_WriteIndex(0x0022);

Set_Rs;

LCD_ili9320_WriteData(point);

Clr_nWr;Set_nWr;

Set_Cs;

}

/****************************************************************************

* 功 能:在指定座标范围显示一副图片

* 入口参数:StartX 行起始座标

* StartY 列起始座标

* EndX 行结束座标

* EndY 列结束座标

* pic 图片头指针

* 说 明:图片取模格式为水平扫描,16位颜色模式

****************************************************************************/

void LCD_ili9320_DrawPicture(u16 StartX,u16 StartY,u16 EndX,u16 EndY,u16 *pic)

{

u16 i;

LCD_ili9320_SetWindows(StartX,StartY,EndX,EndY);

LCD_ili9320_SetCursor(StartX,StartY);

Clr_Cs;

LCD_ili9320_WriteIndex(0x0022);

Set_Rs;

for (i=0;i《(EndX*EndY);i++)

{

LCD_ili9320_WriteData(*pic++);

Clr_nWr;Set_nWr;

}

Set_Cs;

}

/****************************************************************************

* 功 能:在指定座标显示一个8x16点阵的ascii字符

* 入口参数:x 行座标

* y 列座标

* charColor 字符的颜色

* bkColor 字符背景颜色

* 说 明:显示范围限定为可显示的ascii码

****************************************************************************/

void LCD_ili9320_PutChar(u16 x,u16 y,u8 c,u16 charColor,u16 bkColor)

{

u16 i=0;

u16 j=0;

u8 tmp_char=0;

for (i=0;i《16;i++)

{

if(c == ‘0’)

continue;

tmp_char=ascii_8x16[((c-0x20)*16)+i];

for (j=0;j《8;j++)

{

if ( (tmp_char 》》 7-j) & 0x01 == 0x01)

LCD_ili9320_SetPoint(x+j,y+i,charColor);// 字符颜色

else

LCD_ili9320_SetPoint(x+j,y+i,bkColor);// 背景颜色

}

}

}

/****************************************************************************

* 功 能:测试液晶屏

* 说 明:显示彩条,测试液晶屏是否正常工作

****************************************************************************/

void LCD_ili9320_Test()

{

u8 R_data,G_data,B_data,i,j;

LCD_ili9320_SetCursor(0x00, 0x0000);

LCD_ili9320_WriteRegister(0x0050,0x00);//水平 GRAM起始位置

LCD_ili9320_WriteRegister(0x0051,239); //水平GRAM终止位置

LCD_ili9320_WriteRegister(0x0052,0); //垂直GRAM起始位置

LCD_ili9320_WriteRegister(0x0053,319); //垂直GRAM终止位置

Clr_Cs;

LCD_ili9320_WriteIndex(0x0022);

Set_Rs;

R_data=0;G_data=0;B_data=0;

for(j=0;j《50;j++)//红色渐强条

{

for(i=0;i《240;i++)

{

R_data=i/8;

LCD_ili9320_WriteData(R_data《《11|G_data《《5|B_data);

Clr_nWr;Set_nWr;

}

}

R_data=0x1f;G_data=0x3f;B_data=0x1f;

for(j=0;j《50;j++)

{

for(i=0;i《240;i++)

{

G_data=0x3f-(i/4);

B_data=0x1f-(i/8);

LCD_ili9320_WriteData(R_data《《11|G_data《《5|B_data);

Clr_nWr;

Set_nWr;

}

}

//----------------------------------

R_data=0;G_data=0;B_data=0;

for(j=0;j《50;j++)//绿色渐强条

{

for(i=0;i《240;i++)

{

G_data=i/4;

LCD_ili9320_WriteData(R_data《《11|G_data《《5|B_data);

Clr_nWr;

Set_nWr;

}

}

R_data=0x1f;G_data=0x3f;B_data=0x1f;

for(j=0;j《50;j++)

{

for(i=0;i《240;i++)

{

R_data=0x1f-(i/8);

B_data=0x1f-(i/8);

LCD_ili9320_WriteData(R_data《《11|G_data《《5|B_data);

Clr_nWr;

Set_nWr;

}

}

//----------------------------------

R_data=0;G_data=0;B_data=0;

for(j=0;j《60;j++) //蓝色渐强条

{

for(i=0;i《240;i++)

{

B_data=i/8;

LCD_ili9320_WriteData(R_data《《11|G_data《《5|B_data);

Clr_nWr;

Set_nWr;

}

}

B_data=0;

R_data=0x1f;G_data=0x3f;B_data=0x1f;

for(j=0;j《60;j++)

{

for(i=0;i《240;i++)

{

G_data=0x3f-(i/4);

R_data=0x1f-(i/8);

LCD_ili9320_WriteData(R_data《《11|G_data《《5|B_data);

Clr_nWr;

Set_nWr;

}

}

Set_Cs;

}

/****************************************************************************

* 功 能:RRRRRGGGGGGBBBBB 改为 BBBBBGGGGGGRRRRR 格式

* 入口参数:c BRG 颜色值

* 出口参数:RGB 颜色值

****************************************************************************/

u16 LCD_ili9320_BGR2RGB(u16 c)

{

u16 r, g, b, rgb;

b = (c》》0) & 0x1f;

g = (c》》5) & 0x3f;

r = (c》》11) & 0x1f;

rgb = (b《《11) + (g《《5) + (r《《0);

return( rgb );

}

/****************************************************************************

* 功 能:写 ili9320 控制器寄存器地址

* 入口参数:idx 寄存器地址

****************************************************************************/

void LCD_ili9320_WriteIndex(u16 idx)

{

Clr_Rs;

Set_nRd;

LCD_ili9320_WriteData(idx);

Clr_nWr;

Set_nWr;

Set_Rs;

}

/****************************************************************************

* 功 能:写 ili9320 寄存器数据

* 入口参数:dat 寄存器数据

* 说 明:向控制器指定地址写入数据,调用前需先写寄存器地址,内部函数

****************************************************************************/

void LCD_ili9320_WriteData(u16 data)

{

GPIOB-》ODR = (GPIOB-》ODR & 0x00ff) | (((data 《《 8) 》》 8) 《《 8);// 低8位数据写入CPIOB高8位

GPIOC-》ODR = (GPIOC-》ODR & 0xff00) | (((data 》》 8) 《《 8) 》》 8);// 高8位数据写入CPIOC低8位

}

/****************************************************************************

* 功 能:读取控制器数据

* 出口参数:返回读取到的数据

****************************************************************************/

u16 LCD_ili9320_ReadData(void)

{

//========================================================================

// ** **

// ** nCS ----__________________________________________/------- **

// ** RS ------____________/----------------------------------- **

// ** nRD -------------------------_____/--------------------- **

// ** nWR --------_______/-------------------------------------- **

// ** DB[0:15] ---------[index]----------[data]----------------------- **

// ** **

//========================================================================

u32 tmp;

GPIO_InitTypeDef GPIO_InitStructure;

GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8 | GPIO_Pin_9 | GPIO_Pin_10 |GPIO_Pin_11 | GPIO_Pin_12 | GPIO_Pin_13 |GPIO_Pin_14 | GPIO_Pin_15;

GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;

GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU; //上拉输入模式

GPIO_Init(GPIOB, &GPIO_InitStructure);

GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0 | GPIO_Pin_1 | GPIO_Pin_2 | GPIO_Pin_3 | GPIO_Pin_4 | GPIO_Pin_5 |GPIO_Pin_6 | GPIO_Pin_7;

GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;

GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;

GPIO_Init(GPIOC, &GPIO_InitStructure);

tmp = ((GPIOB-》IDR & 0xff00) 》》 8); //PB的高8位为数据的低8位

tmp |= ((GPIOC-》IDR & 0x00ff) 《《 8);//PC的低8位为数据的高8位

//再次将GPIO恢复为输出模式

GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8 | GPIO_Pin_9 | GPIO_Pin_10 | GPIO_Pin_11 | GPIO_Pin_12 | GPIO_Pin_13 | GPIO_Pin_14 | GPIO_Pin_15;

GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;

GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;

GPIO_Init(GPIOB, &GPIO_InitStructure);

GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0 | GPIO_Pin_1 | GPIO_Pin_2 |GPIO_Pin_3 | GPIO_Pin_4 | GPIO_Pin_5 | GPIO_Pin_6 | GPIO_Pin_7;

GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;

GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;

GPIO_Init(GPIOC, &GPIO_InitStructure);

return tmp;

}

/****************************************************************************

* 功 能:读取指定地址寄存器的值

* 入口参数:index 寄存器地址

* 出口参数:寄存器值

****************************************************************************/

u16 LCD_ili9320_ReadRegister(u16 index)

{

Clr_Cs;

LCD_ili9320_WriteIndex(index);

Clr_nRd;

index = LCD_ili9320_ReadData();

Set_nRd;

Set_Cs;

return index;

}

/****************************************************************************

* 功 能:写指定地址寄存器的值

* 入口参数:index 寄存器地址

* :dat 寄存器值

****************************************************************************/

void LCD_ili9320_WriteRegister(u16 index,u16 dat)

{

/************************************************************************

** **

** nCS ----__________________________________________/------- **

** RS ------____________/----------------------------------- **

** nRD ------------------------------------------------------- **

** nWR --------_______/--------_____/----------------------- **

** DB[0:15] ---------[index]----------[data]----------------------- **

** **

************************************************************************/

Clr_Cs;

Clr_Rs;

Set_nRd;

LCD_ili9320_WriteData(index);//地址

Clr_nWr;

Set_nWr;

Set_Rs;

LCD_ili9320_WriteData(dat); //值

Clr_nWr;

Set_nWr;

Set_Cs;

}

/****************************************************************************

* 功 能:复位 ili9320 控制器

* 说 明:复位控制器,内部函数

****************************************************************************/

void LCD_ili9320_Reset()

{

}

/****************************************************************************

* 功 能:开、关液晶背光

* 入口参数:status 1:背光开 0:背光关

****************************************************************************/

void LCD_ili9320_BackLight(u8 status)

{

if ( status 》= 1 )

Clr_Light; //低电平开背光

else

技术专区

下载发烧友APP

打造属于您的人脉电子圈

关注澳门威尼斯人官网手机微信

有趣有料的资讯及技术干货

关注发烧友课堂

锁定最新课程活动及技术直播
收藏 人收藏
分享:

评论

相关推荐

STM32单片机的系统定时器初始化设置

#include“stm32f10x_lib.h” unsigned char sys_nub...

发表于 2018-11-12 16:10 67次阅读
STM32单片机的系统定时器初始化设置

STM32单片机的外部中断和中断控制器的特点解析

在M3中有两个优先级的概念-抢占优先级和响应优先级。每一个中断源都必须指定这两种优先级。这里的中断抢...

发表于 2018-11-12 15:40 55次阅读
STM32单片机的外部中断和中断控制器的特点解析

STM32实现对RTC闹钟唤醒的设计

工程中用到低功耗的控制,本来想使用待机模式,后来发现待机后所有IO口为高阻态,这样对于一些IO口控制...

发表于 2018-11-12 15:31 57次阅读
STM32实现对RTC闹钟唤醒的设计

STM32单片机的重映射与地址映射的使用方法及步...

打开重映射时钟和USART重映射后的I/O口引脚时钟, RCC_APB2PeriphClock...

发表于 2018-11-12 15:04 64次阅读
STM32单片机的重映射与地址映射的使用方法及步...

基于STM32的八种GPIO输入输出模式解析

推挽电路是两个参数相同的三极管或MOSFET,以推挽方式存在于电路中,各负责正负半周的波形放大任务,...

发表于 2018-11-09 16:32 122次阅读
基于STM32的八种GPIO输入输出模式解析

基于STM32单片机启动文件的作用和启动过程解析

bootloader 分为boot 和loader,更多的时候是针对于linux系统,windows...

发表于 2018-11-09 16:15 91次阅读
基于STM32单片机启动文件的作用和启动过程解析

STM32单片机UART发送配置的步骤及方法

字符发送的过程描述:在UART的发送过程中先将数据输入到发送数据寄存器中(TDR)此时(TXE)被硬...

发表于 2018-11-08 16:59 72次阅读
STM32单片机UART发送配置的步骤及方法

如何从STM32F030C8移植到GD32F13...

一、添加芯片类型判断程序: 在库中的启动代码前面加一段,读一下ID code,自动区分一下芯片...

发表于 2018-11-08 16:52 54次阅读
如何从STM32F030C8移植到GD32F13...

STM32F4发送和接收长度数据的判断

STM32F4 串口收发使用DMA还是很方便的。但是配置DMA时需要配置数据长度,这一点对于发送来说...

发表于 2018-11-08 16:25 71次阅读
STM32F4发送和接收长度数据的判断

基于STM32F4单片机USART寄存器控制的设...

USART又叫通用同步异步收发器,塔提供了一种灵活的方法与工业使用标准NRZ异步春航数据格式的外部设...

发表于 2018-11-07 16:30 72次阅读
基于STM32F4单片机USART寄存器控制的设...

STM32F103系列单片机中的定时器工作原理解...

STM32F103系列的单片机一共有11个定时器,其中: 2个高级定时器 4个普通定时器...

发表于 2018-11-07 16:30 94次阅读
STM32F103系列单片机中的定时器工作原理解...

如何用stm32使用LWIP网络协议栈实现DHC...

LWIP是一款开源的嵌入式网络协议栈,支持的功能很多,而且能在多任务环境下和单任务裸机环境下跑,今天...

发表于 2018-11-07 16:14 59次阅读
如何用stm32使用LWIP网络协议栈实现DHC...

STM32单片机的复用端口初始化的步骤及方法

STM32有好几个串口。比如说STM32F103ZET6有5个串口,串口1的引脚对应的IO为PA9,...

发表于 2018-11-07 16:06 60次阅读
STM32单片机的复用端口初始化的步骤及方法

STM32单片机如何进行中断调试

1、基本的GPIO配置,注意,因为需要用到普通IO口作为中断输入口,因此是用了IO口德复用功能,因此...

发表于 2018-11-05 16:05 112次阅读
STM32单片机如何进行中断调试

如何调整STM32单片机中flash与时钟速率之...

void Flash_Init(void) { // 调整flash与时钟速率之间的关系...

发表于 2018-11-05 16:05 83次阅读
如何调整STM32单片机中flash与时钟速率之...

基于STM32单片机的端口复用与端口重映射

对于双向复用功能,必须配置为复用功能输出模式(推挽或者开漏),此时输入驱动器配置为浮空输入模式。 ...

发表于 2018-11-05 15:54 74次阅读
基于STM32单片机的端口复用与端口重映射

单片机外部接上下拉电阻的好处是什么

1.不要太相信STM32内部的IO上下拉,必要的话,在外部接上下拉电阻。 2.当把JTAG的IO口当...

发表于 2018-11-02 16:27 152次阅读
单片机外部接上下拉电阻的好处是什么

基于STM32单片机对HCSR04超声波的控制

注意:定义GPIOB2为超声输出;GPIOB10为输入,定时器用tim2

发表于 2018-11-02 15:47 158次阅读
基于STM32单片机对HCSR04超声波的控制

基于STM32的IAP升级程序分享

STM8不像STM32那样有个一寄存器管理着中断向量的地址,所以STM32的中断可以任意设置(符合要...

发表于 2018-11-01 16:16 71次阅读
基于STM32的IAP升级程序分享

STM32单片机设计extern全局变量的定义解...

当你建立一个头文件库时,经常会遇到一个问题,就是在A文件中定义一个temple变量,想把它的值传递给...

发表于 2018-11-01 16:10 114次阅读
STM32单片机设计extern全局变量的定义解...

怎样用STM32单片机的GPIO控制LED显示状...

ODR寄存器可读可写:既能控制管脚为高电平,也能控制管脚为低电平。 管脚对于位写1 gpio ...

发表于 2018-11-01 15:45 111次阅读
怎样用STM32单片机的GPIO控制LED显示状...

基于STM32单片机高级控制定时器TIM1和TI...

STM32的通用定时器是一个通过可编程预分频器(PSC)驱动的16 位自动装载计数器(CNT)构成。...

发表于 2018-10-30 16:10 169次阅读
基于STM32单片机高级控制定时器TIM1和TI...

基于STM32单片机对跑马灯的控制

首先要知道普通的IO就两种功能一个为输入,一个为输出。然后再以输入和输出细分为以哪种模式输出、以哪种...

发表于 2018-10-30 16:02 109次阅读
基于STM32单片机对跑马灯的控制

如何选择STM32的启动代码

●小容量产品是指闪存存储器容量在16K 至32K 字节之间的STM32F101xx、STM32F10...

发表于 2018-10-30 16:00 77次阅读
如何选择STM32的启动代码

基于STM32单片机对流水灯的控制

1.跟着例程自己创建自己的工程时,出现了GPIO库文件里有undefined等等,在我们刚开始学习新...

发表于 2018-10-30 15:42 172次阅读
基于STM32单片机对流水灯的控制

基于STM32单片机秒中断源和闹钟中断源的解决方...

在计算机应用上,2038年问题可能会导致某些软件在2038年无法正常工作。所有使用UNIX时间表示时...

发表于 2018-10-30 14:58 77次阅读
基于STM32单片机秒中断源和闹钟中断源的解决方...

基于STM32单片机在手持设备中的应用设计

STM32作为现在最流行的单片机,广泛应用与各个领域。现在的手持设备也经常用STM32作为主控芯片。...

发表于 2018-10-29 15:53 121次阅读
基于STM32单片机在手持设备中的应用设计

基于STM32单片机流水灯控制中的GPIO_In...

学习STM32时,首先要熟悉流水灯例程,在这里就来分析流水灯中的GPIO_Init()函数 例...

发表于 2018-10-29 15:42 108次阅读
基于STM32单片机流水灯控制中的GPIO_In...

基于STM32单片机FSMC协议分析

FSMC对于类RAM存储器的读操作过程一般是:先发出片选信号、读写信号和地址信号,然后等待数据建立完...

发表于 2018-10-26 15:42 60次阅读
基于STM32单片机FSMC协议分析

基于ESP8266和STM32单片机的程序代码编...

ESP8266模块在STM32上做Server时,外部对其端口进行收发数据的程序,大部分代码都备注了...

发表于 2018-10-25 15:12 222次阅读
基于ESP8266和STM32单片机的程序代码编...

基于stm32单片机利用通用定时器输出PWM

第一步:开启时钟使能 RCC-》APB1ENR:1 位 //开启定时器3 时钟使能 第二...

发表于 2018-10-25 15:05 154次阅读
基于stm32单片机利用通用定时器输出PWM

ST推出了STLINK-V3下一代STM8和ST...

意法半导体推出了STLINK-V3下一代STM8 和STM32微控制器代码烧写及调试探针,进一步改进...

发表于 2018-10-25 14:48 147次阅读
ST推出了STLINK-V3下一代STM8和ST...

基于STM32单片机低功耗模式机制详细解析

本文主要解读STM32低功耗模式的机制,并不侧重STM32低功耗的程序实现,而且借助STM32固件库...

发表于 2018-10-24 16:16 153次阅读
基于STM32单片机低功耗模式机制详细解析

基于STM32单片机的串口使用解析

STM32串口功能比较强大,但仅仅使用串口来说,是很简单的

发表于 2018-10-24 16:11 119次阅读
基于STM32单片机的串口使用解析

基于STM32F103系列单片机的11个定时器解...

STM32F103系列的单片机一共有11个定时器,其中: 2个高级定时器 4个普通定时器...

发表于 2018-10-23 15:54 76次阅读
基于STM32F103系列单片机的11个定时器解...

基于STM32单片机ADC连续采集和DMA循环转...

描述:用ADC连续采集11路模拟信号,并由DMA传输到内存。ADC配置为扫描并且连续转换模式,ADC...

发表于 2018-10-22 15:28 152次阅读
基于STM32单片机ADC连续采集和DMA循环转...

基于STM32单片机通过使用宏assert_pa...

固件函数库通过检查库函书的输入来实现运行时间错误侦测。通过使用宏assert_param来实现运行时...

发表于 2018-10-22 15:12 97次阅读
基于STM32单片机通过使用宏assert_pa...

基于STM32时钟系统的开发及配置

研究过时钟来源,再来研究时钟的去向,MCU自身要能正常运作,即需要一个时钟,这个时钟既是系统时钟(S...

发表于 2018-10-19 15:55 182次阅读
基于STM32时钟系统的开发及配置

STM32单片机常见的工作异常现象分析及解决方案

工作异常现象:main函数中的系统运行指示灯不闪烁,但是初始化过程中点的一个灯是亮的!说明程序运行一...

发表于 2018-10-19 15:55 149次阅读
STM32单片机常见的工作异常现象分析及解决方案

基于stm32单片机,FLASh先擦后写的函数分...

void FLASH_WriteByte(u32 addr ,u16 flashdata1) ...

发表于 2018-10-18 15:30 239次阅读
基于stm32单片机,FLASh先擦后写的函数分...

基于STM32单片机利用ST库函数设置Systi...

对于STM32系列的微处理器中,执行一条指令只需要几十ns,进行for循环时,要实现N毫秒延时,那么...

发表于 2018-10-18 15:12 94次阅读
基于STM32单片机利用ST库函数设置Systi...

基于STM32单片机的功能及特点

STM32是32位的单片机却只要八位单片机的价格,速度也是八位的好几倍。 更重要的是它作为ARM入...

发表于 2018-10-17 16:51 210次阅读
基于STM32单片机的功能及特点

STM32单片机外部晶振配置时钟设置

由于STM32的库默认是外部晶振8M的情况下实现的,所以配置串口波特率的时候也是按8M,包括主频。 ...

发表于 2018-10-12 16:11 289次阅读
STM32单片机外部晶振配置时钟设置

基于通过寄存器和调用库函数的方式,对比测试STM...

通过在线调试的方式,可以看出1条C语句:GPIOA -> BSRR = 1<<3;//PA3输出高电...

发表于 2018-10-12 15:59 111次阅读
基于通过寄存器和调用库函数的方式,对比测试STM...

STM32单片机特性解析

其基于专为要求高性能、 低成本、低功耗的嵌入式应用专门设计的ARM Cortex-M内核,同时具有一...

发表于 2018-09-10 16:55 417次阅读
STM32单片机特性解析

单片机的简介51单片机和STM32单片机的区别及...

单片微型计算机简称单片机,简单来说就是集CPU(运算、控制)、RAM(数据存储-内存)、ROM(程序...

发表于 2018-07-06 15:57 1580次阅读
单片机的简介51单片机和STM32单片机的区别及...

在keil中仿真stm32单片机

发表于 2018-07-06 06:54 462次阅读
在keil中仿真stm32单片机

STM32串口SPI主从通信源程序

发表于 2018-07-06 03:08 417次阅读
STM32串口SPI主从通信源程序

10分钟教会你学会ILI9325液晶驱动

发表于 2018-07-03 05:12 202次阅读
10分钟教会你学会ILI9325液晶驱动

在keil中仿真stm32单片机

发表于 2018-07-02 01:20 155次阅读
在keil中仿真stm32单片机

STM32点亮ILI9325 LCD液晶屏教程

发表于 2018-07-02 00:28 468次阅读
STM32点亮ILI9325 LCD液晶屏教程

7个基于STM32单片机的精彩设计实例

STM32是ST公司推出的基于ARM-Cortex-M3内核的32位单片机。

发表于 2018-04-13 17:11 3229次阅读
7个基于STM32单片机的精彩设计实例

stm32单片机休眠模式后无法下载程序怎么办

利用stm32单片机的休眠模式,使单片机间歇的休眠从而实现低功耗的目的。往往会出现进入休眠后无法唤醒...

发表于 2018-03-23 14:40 586次阅读
stm32单片机休眠模式后无法下载程序怎么办

stm32单片机入门c语言解析

学习思路(仅供参考):步骤一,安装完STM32学习的软件,比如J-Link、Keil for ARM...

发表于 2017-12-23 15:26 9595次阅读
stm32单片机入门c语言解析

电流检测哪种方法好用?

发表于 2017-12-10 20:37 5482次阅读
电流检测哪种方法好用?

stm32单片机gpio工作原理是怎样的呢?看完...

黄色的高亮部分显示了数据传输通道,外部的电平信号通过左边编号1的I/O 端口进入STM32内部经过编...

发表于 2017-11-28 07:32 4489次阅读
stm32单片机gpio工作原理是怎样的呢?看完...

STM32单片机GPIO口的学习

STM32的每个IO端口都有7个寄存器来控制。他们分别是:配置模式的2个32位的端口配置寄存器CRL...

发表于 2017-11-25 09:52 713次阅读
STM32单片机GPIO口的学习

stm32单片机中使用GPIO口模拟PWM输出解...

STM32系列基于专为要求高性能、低成本、低功耗的嵌入式应用专门设计的ARM Cortex-M3内核...

发表于 2017-11-24 17:33 2156次阅读
stm32单片机中使用GPIO口模拟PWM输出解...

【NUCLEO-F412ZG试用体验】感受FSMC功能的强大

发表于 2017-07-17 23:06 924次阅读
【NUCLEO-F412ZG试用体验】感受FSMC功能的强大

单片机RS485通信接口、控制线、原理图及程序教...

RS232 标准是诞生于 RS485 之前的,但是 RS232 有几处不足的地方:接口的信号电平值较...

发表于 2017-04-24 14:12 9425次阅读
单片机RS485通信接口、控制线、原理图及程序教...

单片机STM32的引脚模式设置

单片机STM32的引脚有多种方式可以选择。 如果你是用直接写寄存器来配置的话,那么,看上手册,给配置...

发表于 2016-08-16 18:21 7077次阅读
单片机STM32的引脚模式设置

ILI9325_指令中文规格书.pdf

发表于 2014-06-24 13:49 2030次阅读
ILI9325_指令中文规格书.pdf

工厂自动化难题,用STM32-F2全方位解决方案...

工业环境正在对嵌入式控制系统开发人员构成日益严峻的挑战,究其主要原因,当前系统和通信协议栈变得越来越...

发表于 2013-06-13 11:33 4886次阅读
工厂自动化难题,用STM32-F2全方位解决方案...

工程师应该掌握的STM32单片机关键基础精华

从51开始,单片机玩了很长时间了,有51,PIC,AVR等等,早就想跟潮流玩玩ARM,但一直没有开始...

发表于 2013-04-15 11:45 19748次阅读
工程师应该掌握的STM32单片机关键基础精华

STM32学习手记(5):数据的保存与毁灭!

据说,32位单片机很可能会取代8位单片机或16位单片机,诸如51,PIC,AVR等。于是等到Cort...

发表于 2012-12-11 09:36 36593次阅读
STM32学习手记(5):数据的保存与毁灭!

工程师STM32单片机学习基础手记(4):用PW...

用PWM的方法实现荧火虫灯——上次提到要用Timer的PWM功能来实现荧火虫灯。当然还是找一个现成的...

发表于 2012-11-07 15:24 19133次阅读
工程师STM32单片机学习基础手记(4):用PW...

工程师STM32单片机学习手记(3):修修改改玩...

在第6篇笔记中,我用软件延时的方法实现了荧火虫,学了定时器,当然就要用一用定时器了,这里仍是用荧火虫...

发表于 2012-10-25 10:18 24227次阅读
工程师STM32单片机学习手记(3):修修改改玩...

工程师STM32单片机学习基础手记(2):从勉强...

将蓝色框内的GPIOC改为GPIOD。这个是最先写的,但实际上一开始根本没注意到这个地方,没有改成G...

发表于 2012-10-11 11:53 18810次阅读
工程师STM32单片机学习基础手记(2):从勉强...