嵌入式设计与开发项目-LCD应用程序设计

一、实现的功能

  • ①LCD每隔1秒更新一次数据,并把数据显示到屏幕的特定位置;
  • ②通过LED1 ~ LED8显示0 ~ 255的数据,每隔1s增加1;
  • ③把LED表示的数据实时显示到LCD显示屏上;

二、根据功能实现代码

1、主文件main.c

#include"key.h"
#include"led.h"
#include"lcd.h"
#include"stdio.h"

unsigned char ucSec;
unsigned char pucStr[21];
unsigned long ulTick_ms;

void LCD_Proc(void);

int main(void)
{
	SysTick_Config(72000);	//定时1ms(HCLK = 72MHz)
	KEY_Init();
	LED_Init();
	
	STM3210B_LCD_Init();		//初始化LCD屏
	LCD_Clear(Blue);
	LCD_SetBackColor(Blue);
	LCD_SetTextColor(White);
	while(1)
	{
		LED_Disp(ucSec);
		LCD_Proc();
	}
}
	void LCD_Proc(void)
	{
		LCD_DisplayChar(Line3,176,ucSec/10+0x30);		//0x30表示ASCLL码表中的0
		LCD_SetBackColor(Red);
		LCD_DisplayChar(Line3,160,ucSec%10+0x30);		//取模换算让显示的数字保持在0~9范围内
		LCD_SetBackColor(Blue);
		
		pucStr[9] = ucSec/10+0x30;
		pucStr[10] = ucSec%10+0x30;		//把显示的数据保存到pucStr缓冲区中
		
		LCD_DisplayStringLine(Line5,pucStr);
		
		sprintf((char *)pucStr,"		%02u		",ucSec);		//02 表示不足两位,前面补0输出;如果超过两位,则实际输出
		LCD_SetBackColor(Red);
		LCD_DisplayStringLine(Line7,pucStr);
		LCD_SetBackColor(Blue);
	}
	
//SysTick 中断处理程序
	void SysTick_Handler(void)
	{
		ulTick_ms++;
		if(ulTick_ms % 1000 ==0)		//每隔1s加1
		ucSec++;
	}
	
	

主函数分析:❤️ ❤️ ❤️

  1. 使用LCD屏幕前需要①初始化LCD屏幕驱动–>②把LCD屏幕的格式化为特定的颜色–>③设置文件的背景色和字体颜色–>④进行相对应的字符和字符串显示
  2. 通过除于10取得数据的十位数,通过对10取模可以得到数据的个位数
  3. 熟练使用lcd.h所声明的高层库函数,根据函数名的定义,一般能够知道高层库函数的作用
  4. 常用的实时显示数据的方法:使用sprintf()函数把数据按要求封装到pucStr数据中(02u 表示不足两位,前面补0输出;如果超过两位,则实际输出无符号的十进制数值);
  5. 通过SysTick_Handler(void)函数获取精确的时间;

2、240*320 TFT LCD 的lcd.h头文件

/* Define to prevent recursive inclusion -------------------------------------*/
#ifndef __LCD_H
#define __LCD_H

/* Includes ------------------------------------------------------------------*/
#include "stm32f10x.h"

/* Exported macro ------------------------------------------------------------*/
/* Exported functions ------------------------------------------------------- */
/*----- High layer function -----*/
void STM3210B_LCD_Init(void);
void LCD_SetTextColor(vu16 Color);
void LCD_SetBackColor(vu16 Color);
void LCD_ClearLine(u8 Line);
void LCD_Clear(u16 Color);
void LCD_SetCursor(u8 Xpos, u16 Ypos);
void LCD_DrawChar(u8 Xpos, u16 Ypos, uc16 *c);
void LCD_DisplayChar(u8 Line, u16 Column, u8 Ascii);
void LCD_DisplayStringLine(u8 Line, u8 *ptr);
void LCD_SetDisplayWindow(u8 Xpos, u16 Ypos, u8 Height, u16 Width);
void LCD_WindowModeDisable(void);
void LCD_DrawLine(u8 Xpos, u16 Ypos, u16 Length, u8 Direction);
void LCD_DrawRect(u8 Xpos, u16 Ypos, u8 Height, u16 Width);
void LCD_DrawCircle(u8 Xpos, u16 Ypos, u16 Radius);
void LCD_DrawMonoPict(uc32 *Pict);
void LCD_WriteBMP(u32 BmpAddress);
void LCD_DrawBMP(u32 BmpAddress);
void LCD_DrawPicture(const u8* picture);

/*----- Medium layer function -----*/
void LCD_WriteReg(u8 LCD_Reg, u16 LCD_RegValue);
u16 LCD_ReadReg(u8 LCD_Reg);
void LCD_WriteRAM_Prepare(void);
void LCD_WriteRAM(u16 RGB_Code);
u16 LCD_ReadRAM(void);
void LCD_PowerOn(void);
void LCD_DisplayOn(void);
void LCD_DisplayOff(void);

/*----- Low layer function -----*/
void LCD_CtrlLinesConfig(void);

void LCD_BusIn(void);
void LCD_BusOut(void);


#endif /* __LCD_H */


简要分析:❤️ ❤️

  1. 在底层库函数中,LCD_CtrlLinesConfig()把TFT LCD与STM32连接的PB9-CS#(片选)PB8-RS(寄存器选择)PB5-WR#(写选通)PB10-RD#(读选通)设置为推挽输出,最后将PB9-CS#(片选)、PB5-WR#(写选通)、PB10-RD#(读选通)设置为高电平;LCD_BusIn()把PC0 ~ PC15(LCD_PD)配置为上拉输入,LCD_BusOut()把PC0 ~ PC15(LCD_PD)配置为通用推挽输出
  2. 中层库函数主要用于LCD控制器中寄存器和显示缓冲的读写,需要根据TFT LCD的数据手册要求进行配置,也称为LCD驱动;而高层库函数直接可以调用;

三、实现功能过程的注意与学习点

1、注意点

  1. 使用各个外设前,需要调用其外设所对应的初始化函数,否则无法正常使用;

2、学习的知识点

1.通过sprintf函数按特定的格式实时更新LCD屏幕上的数据;
2. 通过(“/”、“%”)运算,获得数据各个位的单独数字;
3. 底层的驱动是设置特定的GPIO引脚的高低电平进行通讯的,即操作外设控制器中的寄存器的一些缓冲的读写;
❤️ ❤️ ❤️ ❤️ ❤️ ❤️

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

程序小鹿

博主不差钱,点个赞就行哈哈

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值