找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 4619|回复: 3
打印 上一主题 下一主题
收起左侧

LCD1602显示屏STM32用法

[复制链接]
跳转到指定楼层
楼主
ID:412827 发表于 2019-2-13 16:30 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
单片机源程序如下:
  1. /* 头文件    ------------------------------------------------------------------*/

  2. #include "stm32f10x_lib.h"
  3. #include "stdio.h"
  4. #include "lcd1602.h"

  5. /* 自定义同义关键字    --------------------------------------------------------*/

  6. /* 自定义参数宏        --------------------------------------------------------*/

  7. /* 自定义函数宏        --------------------------------------------------------*/

  8. /* 自定义全局变量      --------------------------------------------------------*/
  9.    
  10. /* 自定义函数声明      --------------------------------------------------------*/

  11. void RCC_Configuration(void);
  12. void GPIO_Configuration(void);
  13. void USART_Configuration(void);
  14. void ADC_Configuration(void);
  15. void ADC_Configuration1(void);



  16. /*******************************************************************************
  17. * 函数名                  : main
  18. * 函数描述            : 主函数
  19. * 输入参数      : 无
  20. * 输出结果             : 无
  21. * 返回值        : 无
  22. *******************************************************************************/

  23. int main(void)
  24. {
  25.        

  26.           /* 设置系统时钟 */
  27.           RCC_Configuration();

  28.           /* 设置 GPIO 端口 */
  29.   //        GPIO_Configuration();
  30.     Lcd_GPIO_init();
  31.    
  32.            /* 设置 USART */
  33. //        USART_Configuration();

  34.         /* 设置 ADC */

  35.   //        printf("\r\n The AD_value is:-------------------------- \r\n");

  36.         Lcd_Init();                 
  37.         delay_us(200);
  38.            Lcd_Puts(0,0,"My Designer!    ");
  39.                 while(1)
  40.                 {
  41.                 GPIO_SetBits(GPIOC, GPIO_Pin_13)  ;
  42.         Lcd_Puts(0,0,"My Designer!    ");
  43.                 delay_us(20000);       
  44.                 GPIO_ResetBits(GPIOC, GPIO_Pin_13) ;
  45.              delay_us(20000);       
  46.              }

  47. }

  48. /*******************************************************************************
  49. * 函数名        : RCC_Configuration
  50. * 函数描述  : 设置系统各部分时钟
  51. * 输入参数  : 无
  52. * 输出结果  : 无
  53. * 返回值    : 无
  54. *******************************************************************************/

  55. void RCC_Configuration(void)
  56. {
  57.         /* 定义枚举类型变量 HSEStartUpStatus */
  58.         ErrorStatus HSEStartUpStatus;

  59.           /* 复位系统时钟设置 */
  60.           RCC_DeInit();
  61.           /* 开启 HSE */
  62.           RCC_HSEConfig(RCC_HSE_ON);
  63.           /* 等待 HSE 起振并稳定 */
  64.           HSEStartUpStatus = RCC_WaitForHSEStartUp();
  65.         /* 判断 HSE 起是否振成功,是则进入if()内部 */
  66.           if(HSEStartUpStatus == SUCCESS)
  67.           {
  68.             /* 选择 HCLK(AHB)时钟源为SYSCLK 1分频 */
  69.             RCC_HCLKConfig(RCC_SYSCLK_Div1);
  70.             /* 选择 PCLK2 时钟源为 HCLK(AHB)1分频 */
  71.             RCC_PCLK2Config(RCC_HCLK_Div1);
  72.             /* 选择 PCLK1 时钟源为 HCLK(AHB)2分频 */
  73.             RCC_PCLK1Config(RCC_HCLK_Div2);
  74.             /* 设置 FLASH 延时周期数为2 */
  75.             FLASH_SetLatency(FLASH_Latency_2);
  76.             /* 使能 FLASH 预取缓存 */
  77.             FLASH_PrefetchBufferCmd(FLASH_PrefetchBuffer_Enable);
  78.             /* 选择锁相环(PLL)时钟源为 HSE 1分频,倍频数为9,则PLL输出频率为 8MHz * 9 = 72MHz */
  79.             RCC_PLLConfig(RCC_PLLSource_HSE_Div1, RCC_PLLMul_9);
  80.             /* 使能 PLL */
  81.             RCC_PLLCmd(ENABLE);
  82.             /* 等待 PLL 输出稳定 */
  83.             while(RCC_GetFlagStatus(RCC_FLAG_PLLRDY) == RESET);
  84.             /* 选择 SYSCLK 时钟源为 PLL */
  85.             RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK);
  86.             /* 等待 PLL 成为 SYSCLK 时钟源 */
  87.             while(RCC_GetSYSCLKSource() != 0x08);
  88.           }

  89.           /* 使能各个用到的外设时钟 */
  90.           RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1 | RCC_APB2Periph_GPIOC |
  91.                                                   RCC_APB2Periph_GPIOB, ENABLE);
  92. }



  93. /*******************************************************************************
  94. * 函数名                  : GPIO_Configuration
  95. * 函数描述            : 设置各GPIO端口功能
  96. * 输入参数      : 无
  97. * 输出结果      : 无
  98. * 返回值        : 无
  99. *******************************************************************************/

  100. void GPIO_Configuration(void)
  101. {
  102.         /* 定义 GPIO 初始化结构体 GPIO_InitStructure */
  103.           GPIO_InitTypeDef GPIO_InitStructure;

  104.         /* 设置 USART1 的Tx脚(PA.9)为第二功能推挽输出功能 */
  105.           GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9;
  106.           GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
  107.           GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  108.           GPIO_Init(GPIOA , &GPIO_InitStructure);
  109.    
  110.           /* 设置 USART1 的Rx脚(PA.10)为浮空输入脚 */
  111.           GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10;
  112.           GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;
  113.           GPIO_Init(GPIOA , &GPIO_InitStructure);

  114.           /* 将 PB.0 设置为模拟输入脚 */
  115.           GPIO_InitStructure.GPIO_Pin = GPIO_Pin_1;
  116.           GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AIN;
  117.           GPIO_Init(GPIOB , &GPIO_InitStructure);

  118.         GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0;
  119.           GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AIN;
  120.           GPIO_Init(GPIOB , &GPIO_InitStructure);
  121. }



  122. /*******************************************************************************
  123. * 函数名                  : ADC_Configuration
  124. * 函数描述            : 初始化并启动ADC转换
  125. * 输入参数      : 无
  126. * 输出结果      : 无
  127. * 返回值        : 无
  128. *******************************************************************************/
  129. void ADC_Configuration(void)
  130. {
  131.         /* 定义 ADC 初始化结构体 ADC_InitStructure */
  132.         ADC_InitTypeDef ADC_InitStructure;
  133.        
  134.         /* 配置ADC时钟分频 */
  135.         RCC_ADCCLKConfig(RCC_PCLK2_Div4);

  136.         /*       
  137.         *        独立工作模式;
  138.         *        多通道扫描模式;
  139.         *        连续模数转换模式;
  140.         *        转换触发方式:转换由软件触发启动;
  141.         *        ADC 数据右对齐 ;
  142.         *        进行规则转换的 ADC 通道的数目为1;
  143.         */
  144.         ADC_InitStructure.ADC_Mode = ADC_Mode_Independent;
  145.         ADC_InitStructure.ADC_ScanConvMode = ENABLE;
  146.         ADC_InitStructure.ADC_ContinuousConvMode = ENABLE;
  147.         ADC_InitStructure.ADC_ExternalTrigConv = ADC_ExternalTrigConv_None;
  148.         ADC_InitStructure.ADC_DataAlign = ADC_DataAlign_Right;
  149.         ADC_InitStructure.ADC_NbrOfChannel = 1;
  150.         ADC_Init(ADC1, &ADC_InitStructure);
  151.        
  152.         /* 设置 ADC1 使用8转换通道,转换顺序1,采样时间为 55.5 周期 */
  153.         ADC_RegularChannelConfig(ADC1, ADC_Channel_9, 1, ADC_SampleTime_71Cycles5);
  154.         /* 使能 ADC1 */
  155.         ADC_Cmd(ADC1, ENABLE);
  156.         /* 复位 ADC1 的校准寄存器 */   
  157.         ADC_ResetCalibration(ADC1);
  158.         /* 等待 ADC1 校准寄存器复位完成 */
  159.         while(ADC_GetResetCalibrationStatus(ADC1));
  160.         /* 开始 ADC1 校准 */
  161.         ADC_StartCalibration(ADC1);
  162.         /* 等待 ADC1 校准完成 */
  163.         while(ADC_GetCalibrationStatus(ADC1));
  164.         /* 启动 ADC1 转换 */
  165.         ADC_SoftwareStartConvCmd(ADC1, ENABLE);       
  166. }

  167. void ADC_Configuration1(void)
  168. {
  169.         /* 定义 ADC 初始化结构体 ADC_InitStructure */
  170.         ADC_InitTypeDef ADC_InitStructure;
  171.        
  172.         /* 配置ADC时钟分频 */
  173.         RCC_ADCCLKConfig(RCC_PCLK2_Div4);

  174.         /*       
  175.         *        独立工作模式;
  176.         *        多通道扫描模式;
  177.         *        连续模数转换模式;
  178.         *        转换触发方式:转换由软件触发启动;
  179.         *        ADC 数据右对齐 ;
  180.         *        进行规则转换的 ADC 通道的数目为1;
  181.         */
  182.         ADC_InitStructure.ADC_Mode = ADC_Mode_Independent;
  183.         ADC_InitStructure.ADC_ScanConvMode = ENABLE;
  184.         ADC_InitStructure.ADC_ContinuousConvMode = ENABLE;
  185.         ADC_InitStructure.ADC_ExternalTrigConv = ADC_ExternalTrigConv_None;
  186.         ADC_InitStructure.ADC_DataAlign = ADC_DataAlign_Right;
  187.         ADC_InitStructure.ADC_NbrOfChannel = 1;
  188.         ADC_Init(ADC1, &ADC_InitStructure);
  189.        
  190.         /* 设置 ADC1 使用8转换通道,转换顺序1,采样时间为 55.5 周期 */
  191.         ADC_RegularChannelConfig(ADC1, ADC_Channel_8, 1, ADC_SampleTime_55Cycles5);
  192.         /* 使能 ADC1 */
  193.         ADC_Cmd(ADC1, ENABLE);
  194.         /* 复位 ADC1 的校准寄存器 */   
  195.         ADC_ResetCalibration(ADC1);
  196.         /* 等待 ADC1 校准寄存器复位完成 */
  197.         while(ADC_GetResetCalibrationStatus(ADC1));
  198.         /* 开始 ADC1 校准 */
  199.         ADC_StartCalibration(ADC1);
  200.         /* 等待 ADC1 校准完成 */
  201.         while(ADC_GetCalibrationStatus(ADC1));
  202.         /* 启动 ADC1 转换 */
  203.         ADC_SoftwareStartConvCmd(ADC1, ENABLE);       
  204. }



  205. /*******************************************************************************
  206. * 函数名                  : USART_Configuration
  207. * 函数描述            : 设置USART1
  208. * 输入参数      : 无
  209. * 输出结果      : 无
  210. * 返回值        : 无
  211. *******************************************************************************/

  212. void USART_Configuration(void)
  213. {
  214.         /* 定义 USART 初始化结构体 USART_InitStructure */
  215.           USART_InitTypeDef USART_InitStructure;

  216.         /*        波特率为115200bps;
  217.         *        8位数据长度;
  218.         *        1个停止位,无校验;
  219.         *        禁用硬件流控制;
  220.         *        禁止USART时钟;
  221.         *        时钟极性低;
  222.         *        在第2个边沿捕获数据
  223.         *        最后一位数据的时钟脉冲不从 SCLK 输出;
  224.         */

  225.         USART_InitStructure.USART_BaudRate = 115200;
  226.         USART_InitStructure.USART_WordLength = USART_WordLength_8b;
  227.         USART_InitStructure.USART_StopBits = USART_StopBits_1;
  228.         USART_InitStructure.USART_Parity = USART_Parity_No ;
  229.         USART_InitStructure.USART_HardwareFlowControl =  USART_HardwareFlowControl_None;
  230.         USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx;
  231.         USART_Init(USART1 , &USART_InitStructure);
  232.    
  233.           /* 使能 USART1 */
  234.           USART_Cmd(USART1 , ENABLE);
  235. }



  236. /*******************************************************************************
  237. * 函数名                  : fputc
  238. * 函数描述            : 将printf函数重定位到USATR1
  239. * 输入参数            : 无
  240. * 输出结果            : 无
  241. * 返回值                : 无
  242. *******************************************************************************/

  243. int fputc(int ch, FILE *f)
  244. {
  245.         USART_SendData(USART1, (u8) ch);
  246.         while(USART_GetFlagStatus(USART1, USART_FLAG_TC) == RESET);
  247.         return ch;
  248. }
复制代码

所有资料51hei提供下载:
Stm32驱动LCD1602.rar (208.75 KB, 下载次数: 69)


评分

参与人数 1黑币 +50 收起 理由
admin + 50 共享资料的黑币奖励!

查看全部评分

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏2 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:518110 发表于 2019-4-28 10:35 | 只看该作者
亲,你好,可以加一下QQ吗,有些问题还是不懂,只是亮了,但是不显示东西啊
回复

使用道具 举报

板凳
ID:489605 发表于 2019-4-28 12:42 | 只看该作者
最近就在弄这个 没弄出来
回复

使用道具 举报

地板
ID:523823 发表于 2019-4-28 17:28 | 只看该作者
不错!!!!
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表