《STM32单片机开发应用教程(HAL库版)—基于国信长天嵌入式竞赛实训平台(CT117E-M4)》第四章4.4 LCD显示实验

写在前面——
《STM32单片机开发应用教程(HAL库版)—基于国信长天嵌入式竞赛实训平台(CT117E-M4)》第四章4.4 LCD显示实验,实现在不同要求下进行LCD显示字符。
官方例程下载:https://pan.baidu.com/s/1QC5BnDgY1m1me6-ihQ_OUQ?pwd=nqb1
提取码:nqb1

4.4 LCD显示实验

4.4.1. 实验任务

  1. 字符显示:参看官方例程HAL_06_LCD, LCD初始化配置,实现字符显示。
  2. 拓展功能:改变背景、字体颜色、格式(sprintf)等。

4.4.2. 硬件连接

在这里插入图片描述
LCD的使用,官方提供例程,直接使用即可,无需配置;需要注意的是,他的接口和LED有重叠 。

4.4.3. 初始化配置(STM32CubeMX)

  对于LCD,直接使用官方提供的初始化驱动程序,只需要移植过来就行了。
  根据当前任务需求,若需要配置LED、按键等GPIO,请按照前述各实验操作进行。
  这里,按照前述方法,选择目标器件stm32G431RBT6,配置RCC、SYS,设置时钟为80MHz,填写工程名称(如lcd)、路径,即可完成工程初始化配置。
  通常,不用在STM32CubeMX中配置LCD。
在这里插入图片描述

4.4.4. 应用程序设计(KEIL5)

1. 在项目工程中配置LCD

1)复制初始化例程到工程文件夹中
  将官方提供的资源包中的fonts.h和lcd.h文件复制到自己所建的工程文件夹对应的Inc文件夹下,将资源包中的lcd.c文件复制到自己所建的工程文件夹对应的Src文件夹下,随后打开工程文件。(在例程6(HAL_06_LCD)中Inc和Src文件夹中也有这些文件)在这里插入图片描述
2)将led.c文件添加进项目工程当中
在这里插入图片描述
  头文件fonts.h和lcd.h在Inc文件夹下,已在库文件搜索路径中,无需再操作了。若放在其他文件夹下,则自行添加其路径。
在这里插入图片描述
3)LCD初始化
  main.c中添加相关语句,并初始化LCD
首先引用lcd.h,不需要引用font.h(已在lcd.c中引用了,重复引用会报错)
在这里插入图片描述
再进行LCD初始化。

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
感谢您的反馈!您提到的国信长天开发可能使用的是不同的芯片,因此需要使用不同的代码来实现相同的功能。以下是基于STC芯片的51单片机实现测量声音频率并输出的代码,供您参考: ``` #include <reg51.h> #include <intrins.h> // 定义数码管段码 unsigned char code segCode[] = { 0x3f, 0x06, 0x5b, 0x4f, 0x66, 0x6d, 0x7d, 0x07, 0x7f, 0x6f, 0x77, 0x7c, 0x39, 0x5e, 0x79, 0x71 }; // 定义计数器初值 unsigned int counter = 65535; // 延时函数 void Delay10us() { _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); } // 读取AD值 unsigned char GetADCResult() { unsigned char result; ADC_CONTR = 0x88; // 开始ADC转换 while (!(ADC_CONTR & 0x10)); // 等待ADC转换完成 result = ADC_RES; // 读取ADC值 return result; } // 主函数 void main() { unsigned char adValue, lastAdValue = 0; unsigned int frequency = 0; TMOD = 0x01; // 设置定时器模式 TH0 = 0xfc; // 设置定时器初值 TL0 = 0xfc; ET0 = 1; // 开启定时器中断 EA = 1; // 开启总中断 P0 = 0xff; // 数码管初始值 while (1) { adValue = GetADCResult(); // 获取AD值 if (adValue < 0xff && lastAdValue == 0xff) { // 检测到声音信号 TR0 = 1; // 开启定时器 } if (adValue == 0xff && lastAdValue < 0xff) { // 检测到声音信号结束 TR0 = 0; // 关闭定时器 frequency = 11059200 / counter; // 计算频率 counter = 65535; // 复位计数器 } lastAdValue = adValue; // 保存上一个AD值 // 将频率显示在数码管上 P0 = segCode[frequency / 1000]; Delay10us(); P0 = segCode[frequency % 1000 / 100] | 0x80; Delay10us(); P0 = segCode[frequency % 100 / 10]; Delay10us(); P0 = segCode[frequency % 10]; Delay10us(); } } // 定时器中断函数 void Timer0Interrupt() interrupt 1 { counter--; } ``` 这份代码使用了STC芯片的ADC模块和定时器,通过检测声音信号的上升沿和下降沿来计算声音的频率,并将频率显示在数码管上。需要注意的是,由于STC芯片的ADC模块和定时器与51单片机的实现略有不同,因此这份代码可能无法直接在其他芯片上使用。如果您仍然遇到问题,请提供更多的信息和反馈,我会尽力帮助您。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

我是春老师

你的鼓励将是我创作的最大动力

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

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

打赏作者

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

抵扣说明:

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

余额充值