管理员
- 积分
- 165352
- 金钱
- 165352
- 注册时间
- 2010-12-1
- 在线时间
- 2108 小时
|
我们例程,原来是:
[mw_shl_code=c,true]//LCD地址结构体
typedef struct
{
vu16 LCD_REG;
vu16 LCD_RAM;
} LCD_TypeDef;
//使用NOR/SRAM的 Bank1.sector4,地址位HADDR[27,26]=11 A10作为数据命令区分线
//注意设置时STM32内部会右移一位对其!
#define LCD_BASE ((u32)(0x6C000000 | 0x000007FE))
#define LCD ((LCD_TypeDef *) LCD_BASE)[/mw_shl_code]
发现大家比较难理解,改为直接访问地址方式:
[mw_shl_code=cpp,true]#define TFT_REG * (vu16*)(0X6C000000|(0<<11))
#define TFT_RAM * (vu16*)(0X6C000000|(1<<11))[/mw_shl_code]
改成这种方式后,就比较直白了,方便初学者掌握。
代码可以写成:
[mw_shl_code=c,true]//写寄存器函数
//regval:寄存器值
void LCD_WR_REG(u16 regval)
{
TFT_REG=regval;//写入要写的寄存器序号
}
//写LCD数据
//data:要写入的值
void LCD_WR_DATA(u16 data)
{
TFT_RAM=data;
}
//读LCD数据
//返回值:读到的值
u16 LCD_RD_DATA(void)
{
vu16 ram; //防止被优化
ram=TFT_RAM;
return ram;
}
//写寄存器
//LCD_Reg:寄存器地址
//LCD_RegValue:要写入的数据
void LCD_WriteReg(u16 LCD_Reg,u16 LCD_RegValue)
{
TFT_REG = LCD_Reg; //写入要写的寄存器序号
TFT_RAM = LCD_RegValue;//写入数据
}
//读寄存器
//LCD_Reg:寄存器地址
//返回值:读到的数据
u16 LCD_ReadReg(u16 LCD_Reg)
{
LCD_WR_REG(LCD_Reg); //写入要读的寄存器序号
delay_us(5);
return LCD_RD_DATA(); //返回读到的值
}
//开始写GRAM
void LCD_WriteRAM_Prepare(void)
{
LCD->LCD_REG=lcddev.wramcmd;
}
//LCD写GRAM
//RGB_Code:颜色值
void LCD_WriteRAM(u16 RGB_Code)
{
LCD->LCD_RAM = RGB_Code;//写十六位GRAM
}[/mw_shl_code]
实验13 TFTLCD显示实验.rar
(326.94 KB, 下载次数: 240)
|
|