最新文章专题视频专题问答1问答10问答100问答1000问答2000关键字专题1关键字专题50关键字专题500关键字专题1500TAG最新视频文章推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37视频文章20视频文章30视频文章40视频文章50视频文章60 视频文章70视频文章80视频文章90视频文章100视频文章120视频文章140 视频2关键字专题关键字专题tag2tag3文章专题文章专题2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章专题3
当前位置: 首页 - 正文

STM32实验报告

来源:动视网 责编:小OO 时间:2025-09-27 08:05:52
文档

STM32实验报告

嵌入式系统课程设计实验报告题目基于STM32的LCD数字钟显示姓名刘意学号****************___专业年级12电科指导教师卢仕2015年6月30日1.实验名称:基于STM32的LCD数字钟显示2.实验目的与要求:(1)掌握嵌入式程序设计流程。熟悉并掌握软件的开发,如GPIO的端口配置,FSMC的编程,RA8875初始化等等。(2)学习LCD与STM32的LCD的控制器的接口原理,掌握内置LCD控制器驱动编写方法。(3)编写程序实现电子时钟功能,通过实验系统的LCD将时间显示出来。
推荐度:
导读嵌入式系统课程设计实验报告题目基于STM32的LCD数字钟显示姓名刘意学号****************___专业年级12电科指导教师卢仕2015年6月30日1.实验名称:基于STM32的LCD数字钟显示2.实验目的与要求:(1)掌握嵌入式程序设计流程。熟悉并掌握软件的开发,如GPIO的端口配置,FSMC的编程,RA8875初始化等等。(2)学习LCD与STM32的LCD的控制器的接口原理,掌握内置LCD控制器驱动编写方法。(3)编写程序实现电子时钟功能,通过实验系统的LCD将时间显示出来。
嵌入式系统课程设计实验报告

题    目基于STM32的LCD数字钟显示

姓    名        刘意          

学    号  **************** ___

专业年级      12电科          

指导教师       卢仕            

2015年 6 月 30日

1.实验名称:

基于STM32的LCD数字钟显示

2.实验目的与要求:

(1)掌握嵌入式程序设计流程。熟悉并掌握软件的开发,如GPIO的端口配置,FSMC的编程,RA8875初始化等等。

(2)学习LCD与STM32的LCD的控制器的接口原理,掌握内置LCD控制器驱动编写方法。

(3)编写程序实现电子时钟功能,通过实验系统的LCD将时间显示出来。

3.实验设备及原理:

硬件:PC机            一台

      STM32开发板     一套

软件:keil4

原理:LCD显示器是通过给不同的液晶单元供电,控制其光线的通过与否,从而达到显示的目的。因此,LCD的驱动控制归于对每个液晶单元通断电的控制,每个液晶单元都对应着一个电极,对其通电,便可使用光线通过。本次实验使用RA8875驱动LCD,采用FSMC模式向RA8875发送指令,读取状态和数据。通过程序代码实现对TFTLCD的控制器RA8875驱动要求,从而达到TFT LCD 数字钟的显示。

4.实验步骤及内容:

1.新建工程文件夹szz,并建立4个子文件夹,并复制粘贴库文件和驱动文件。

2.打开keil4,新建工程。工程名为szz.芯片选取STM3210F103VC。

3.完成基础设置

4. 添加LCD.H和LCD.C两个文件,并加入工程中,编写LCD.H文件.

LCD.H:

#ifndef __GLCD_H 

#define __GLCD_H

#include "stm32f10x.h"

/* LCD color */颜色定义

#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

#define HZ_LIB         1

#define ASCII_LIB      1

#define RGB565CONVERT(red, green, blue) (int) (((red >> 3) << 11) | ((green >> 2) << 5) | (blue >> 3))

/* Private function prototypes -----------------------------------------------*/

void LCD_Initializtion(void);

void LCD_Clear(uint16_t Color);    

uint16_t LCD_GetPoint(uint16_t Xpos,uint16_t Ypos);

void LCD_SetPoint(uint16_t Xpos,uint16_t Ypos,uint16_t point);

void LCD_DrawLine(int x1, int y1, int x2, int y2,uint16_t bkColor);

void LCD_SetWindows(uint16_t xStart,uint16_t yStart,uint16_t xLong,uint16_t yLong);

void LCD_DrawPicture(uint16_t StartX,uint16_t StartY,uint16_t EndX,uint16_t EndY);

void GUI_Text(uint16_t Xpos, uint16_t Ypos, uint8_t *str,uint16_t Color, uint16_t bkColor);

void PutChar(unsigned short Xpos,unsigned short Ypos,unsigned char c,unsigned short charColor,unsigned short bkColor);

void PutChinese(uint16_t Xpos,uint16_t Ypos,uint8_t *str,uint16_t Color,uint16_t bkColor);

void GUI_Chinese(uint16_t Xpos, uint16_t Ypos, uint8_t *str,uint16_t Color, uint16_t bkColor);

#endif 

LCD.C:

1.void delay_us (int n)

{

    int i=0,j=0;

for(i=0;i for(j=0;j<36;j++)

     ;

}

void delay_ms (int n)

{

    int i=0;

for(i=0;i<1000;i++)

      delay_us(n);

}// 延迟

2.字符插入static unsigned char const AsciiLib[95][16] = {

{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},/*" ",0*/

。。。。。。。

void GetASCIICode(unsigned char* pBuffer,unsigned char ASCII)

{  

   memcpy(pBuffer,AsciiLib[(ASCII - 32)] ,16);

}

3.STM32端口设置

static void LCD_CtrlLinesConfig(void)

{

  GPIO_InitTypeDef GPIO_InitStructure;

  /* Enable FSMC, GPIOD, GPIOE and AFIO clocks */

  RCC_AHBPeriphClockCmd(RCC_AHBPeriph_FSMC, ENABLE);

  RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_GPIOD | RCC_APB2Periph_GPIOE | RCC_APB2Periph_AFIO, ENABLE);

                        

  /* PE.06, PE.07(D4), PE.08(D5), PE.09(D6), PE.10(D7), PE.11(D8), PE.12(D9),

     PE.13(D10), PE.14(D11), PE.15(D12) */

  GPIO_InitStructure.GPIO_Pin =  GPIO_Pin_6 | GPIO_Pin_7 | 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_AF_PP;

  GPIO_Init(GPIOE, &GPIO_InitStructure);

  /* PD.00(D2), PD.01(D3), PD.04(RD), PD.5(WR), PD.7(CS), PD.8(D13), PD.9(D14),

     PD.10(D15) PD.14(D0) PD.15(D1) */

  GPIO_InitStructure.GPIO_Pin =  GPIO_Pin_0 | GPIO_Pin_1 | GPIO_Pin_4 | GPIO_Pin_5 | GPIO_Pin_7 | 

                                 GPIO_Pin_8 | GPIO_Pin_9 | GPIO_Pin_10 | 

                                 GPIO_Pin_14 | GPIO_Pin_15;

  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;

  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;

  GPIO_Init(GPIOD, &GPIO_InitStructure);

  

  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_13;

  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;

  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;

  GPIO_Init(GPIOD, &GPIO_InitStructure);

  

  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8;

  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;

  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;

  GPIO_Init(GPIOA, &GPIO_InitStructure);

  

  GPIO_SetBits(GPIOA,GPIO_Pin_8);

  delay_us(10);

}

4.FSMC设置

5.LCD,LMD各项功能设置

5.主程序

1.显示设置

char buffer[50]={0};

    LCD_Initializtion();

   button_init();

   exti_config();

    SysTick_Config(FCLK/OSFREQ);

    

    LCD_Clear(RGB565CONVERT(0xff, 0xff, 0xff));

    GUI_Text(20, 200, "WuHan Different Everyday", RGB565CONVERT(0xfa,0x80,0x72),RGB565CONVERT(0x00,0xff,0xff));

    GUI_Text(20, 100, "ly 2012221105200045", RGB565CONVERT(0xfa,0x80,0x72),RGB565CONVERT(0x00,0xff,0xff));

2.时钟设置

    ms++;

    

if(ms>=99)

    {

        ms=0;

        sec++;

     if(sec>=59)

        {

            sec=0;

            min++;

                 if(min>=59)

        {

            min=0;

            hour++;

                 if(hour>=23)

                        hour=0;

            

            

                    }

        }

    }

    secg=sec%10;

    secs=sec/10;

    ming=min%10;

    mins=min/10;

    hourg=hour%10;

    hours=hour/10;

}

3.调时设置

void EXTI15_10_IRQHandler(void)

{

if((EXTI_GetITStatus(EXTI_Line13)!=RESET)||(EXTI_GetITStatus(EXTI_Line15)!=RESET))

   {

   

    if(GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_13)==0)

    {

         if(min<59)

                min++;

            else

            {min=0;

            hour++;}

      }

   if(GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_15)==0)

      {

             if(hour<23)

                    hour++;

                else

                hour=0;

      }

      EXTI_ClearITPendingBit(EXTI_Line13);

      EXTI_ClearITPendingBit(EXTI_Line15);

    }

   

}

4.整点图像

    while (1)

    {

        if(min==0)

        {

        if(min==0)

        {

            switch(sec)

            {

                  case 0:

                    case 1:

                    case 2:LCD_DrawLine(50, 240, 200, 240,RGB565CONVERT(0x00, 0x00, 0xff));

                       LCD_DrawLine(50, 240, 50, 380,RGB565CONVERT(0x00, 0x00, 0xff));

                       LCD_DrawLine(50, 380, 200, 380,RGB565CONVERT(0x00, 0x00, 0xff));

                       LCD_DrawLine(200, 240, 200, 380,RGB565CONVERT(0x00, 0x00, 0xff));

                       LCD_DrawLine(80,280, 100, 280,RGB565CONVERT(0x00, 0x00, 0xff));

                       LCD_DrawLine(150, 280, 170, 280,RGB565CONVERT(0x00, 0x00, 0xff));

                       LCD_DrawLine(110, 350, 140, 350,RGB565CONVERT(0x00, 0x00, 0xff));break;

            

                

                    case 3:    LCD_DrawLine(50, 240, 200, 240,RGB565CONVERT(0xff, 0xff, 0xff));

                        LCD_DrawLine(50, 240, 50, 380,RGB565CONVERT(0xff, 0xff, 0xff));

                        LCD_DrawLine(50, 380, 200,380,RGB565CONVERT(0xff, 0xff, 0xff));

                        LCD_DrawLine(200, 240, 200, 380,RGB565CONVERT(0xff, 0xff, 0xff));

                        LCD_DrawLine(80,280, 100, 280,RGB565CONVERT(0xff, 0xff, 0xff));

                        LCD_DrawLine(150, 280, 170, 280,RGB565CONVERT(0xff, 0xff, 0xff));

                        LCD_DrawLine(110, 350, 140, 350,RGB565CONVERT(0xff, 0xff, 0xff));break;

5.实验总结

   LCD显示的应用是多功能且设置简单的,根据LCD.C中的各种定义与功能,主程序中能实现多种操作,如划线,设置窗口,颜色,英文字符,调整位置,插于按键控制,串口设置等等。这次课程设计已经结束,但学习收获还是很大的,从不懂STM32到逐步加深对嵌入式理论知识的理解和应用,而且提高了创新和编译程序的能力。这次课程设计证明懂得了理论与实际相结合是很重要的,只有书本上理论的程序知识是远远不够的,只有把所学的理论知识与实践相结合起来,从理论中得出结论,才是真正的知识,才能真正提高自己的思考能力与程序编写能力。在设计的过程有许许多的不足,改正的过程也是一种学习,深知熟练掌握还差许多。

文档

STM32实验报告

嵌入式系统课程设计实验报告题目基于STM32的LCD数字钟显示姓名刘意学号****************___专业年级12电科指导教师卢仕2015年6月30日1.实验名称:基于STM32的LCD数字钟显示2.实验目的与要求:(1)掌握嵌入式程序设计流程。熟悉并掌握软件的开发,如GPIO的端口配置,FSMC的编程,RA8875初始化等等。(2)学习LCD与STM32的LCD的控制器的接口原理,掌握内置LCD控制器驱动编写方法。(3)编写程序实现电子时钟功能,通过实验系统的LCD将时间显示出来。
推荐度:
  • 热门焦点

最新推荐

猜你喜欢

热门推荐

专题
Top