STM32
直播中

王超

7年用户 1318经验值
私信 关注
[问答]

怎样去设计一款基于单片机液晶显示的数字时钟显示系统

基于单片机液晶显示的数字时钟显示系统是由哪些部分组成的?
怎样去设计一款基于单片机液晶显示的数字时钟显示系统?

回帖(2)

杨会

2021-11-15 11:10:40
  1、本课程设计的背景、目的和要求
  1.1本课程设计的背景
  随着中国物联网产业的持续快速发展,智能化程度越来越高,进而它带给人们很多方面的便利。近几年以来,随着现代通信技术和计算机事业的迅速发展,以及电子技术和微电子技术自动化,智能化程度的不断的提高,时间显示的智能化技术也在不断进步,在数字时钟的信息处理方面有了更进一步的发展和应用。正是由于无线通讯技术的进步和不断普及,时间处理技术已无处不在,而且应用成本已经降到很低,所以现在可以逐渐普及数字时钟显示的应用领域上。
  当前的数字时钟显示系统的现状是刚刚起步,主要在于针对时间信息的采集方面,但随着对这种市场需求和认识的加深,市场一定会进入到一个发展的高速期。
  以前大多时间显示都是电子表等等,不适用于大型建筑,显示的涉及空间范围的能见度也比较低,而且其使用成本,因而具有很大的局限性。所以更加智能的时间显示系统成为新的需要,其中就是以液晶数字时钟的显示技术为核心技术。
  针对目前的现状,设计了一款基于单片机液晶显示的数字时钟显示系统,本设计是以STM32F103单片机为核心,并与时间信息采集技术为核心进行控制液晶显示模块进行大型的时间显示,显示时间准确,可见范围广。
  1.2本课程设计目的
  1)掌握STM32F103单片机GPIO的使用方法和扩展;掌握定时器和外中断的使用方法;掌握LCD显示屏的驱动原理;
  2)掌握STM32F103单片机GPIO的使用方法和扩展;掌握LCD显示屏驱动原理。
  3)掌握MDK5编程环境与STM32F103库函数开发技能,并能灵活运用于解决实际问题。
  4)针对设计任务的要求,学会查阅手册和文献资料,培养学生独立分析和解决实际问题的能力。
  1.3本课程设计的功能要求
  1)采用STM32F103单片机和2.8寸液晶屏显示;
  2)能显示当前的年、月、日、时、分、秒,24小时制;
  3)月、日、时、分、秒均可以单独设置,设置时有提示;
  4)外接3个按键,一个用于选择需要设置的项目,一个增加、一个减少;
  2、本课题研究的主要内容
  本系统设计包括:信息采集部分和信息处理部分以及信息显示部分。信息采集部分包含:单片机最小系统,时间信息采集电路;信息处理部分包含:单片机最小系统,信息采集部分包括:LED液晶显示电路。
  为了实现达到人们所需要的要求,进行软件编程实现功能和硬件搭建LED液晶数字时钟系统。此液晶主子时钟系统主要有以下几个功能:信息采集部分进行采集时间信息;信息处理部分进行时间信息的获取,实现时间信息的运算和规划;信息显示部分进行将信息处理部分的时间信息进行通过控制驱动器进行LED液晶显示出来。
  3、本课程设计的方案分析和选择
  通过对本设计系统的功能需要确定实现方案,下面分别叙述各模块方案的选择原因和选择方案备选的优缺点。
  3.1单片机芯片选择方案
  在核心主控方案的选择方面,正确合理的选取适合本设计系统的方案是本设计的重中之重,它涉及到成本和研究所需的时间精力。正确的主控芯片在把成本上花费更少,在需要花费的时间精力上更是优化到最佳。下面就是针对本设计系统的需求和一些其他因素相比较进行方案的选择。
  方案一:采用以嵌入式为核心的ARM系列的单片机,比较经典的一款芯片STM32单片机,该款单片机是ST公司生产制作的,在现实生活中有着广泛的应用。对于这款单片机,由于其功能强大,程序运行速度也是很快的,一般能达到人们正常所需,再加上相对应的嵌入式系统就可以实现人机交互方便,处理速度快速便捷的系统;另一方面在芯片价格上来讲,符合人们的需要,与平时多用的51单片机价格相差不大,只是价格高了那么一两成;本芯片虽然功能齐全,运转速度较快,但是在编程方面对比51单片机而言,就麻烦一些,对于引脚的设定和要求更高一些。对于本设计系统对于处理速度的要求和成本的考察,本方案也是在考虑范围之内的。
  方案2 :采用STC89C52这款单片机作为本设计的主要控制系统。本款单片机是属于前面所述的51单片机的一类,其功能相对而言稍显不足,内部存储不高;但是在功耗和成本方面比较低,开发相比较嵌入式芯片的ARM系列单片机更加的简单方便。对于本设计系统,在要求程序运行速度方面是完全可以胜任的,再斟酌开放的难易程度方面,考虑研发周期和开发精力问题,该款单片机比较符合本设计系统的。
  两种方案从单片机芯片主要性能角度出发,通过比较相关的便捷性、兼容性,误差性,还有节约成本等方面,本数字电子钟单片机芯片选择设计采用方案一,选择开发更简单,成本更低廉的51系列单片机STC89C52单片机芯片。
  3.2定时器方案选择
  方案1 RTC时钟:STM32自带RTC模块 ,实时时钟是一个独立的定时器。RTC模块拥有一组连续计数的计数器,在相应软件配置下,可提供时钟日历的功能。修改计数器的值可以重新设置系统当前的时间和日期RTC模块和时钟配置系统(RCC_BDCR寄存器)处于后备区域,即在系统复位或从待机模式唤醒后,RTC的设置和时间维持不变。系统复位后,对后备寄存器和RTC的访问被禁止,这是为了防止对后备区域(BKP)的意外写操作。在RTC预分频器余数寄存器(RTC_DIVH / RTC_DIVL)赋值可改变时间。
  方案2 定时器:定时器计时其实是通过计数来实现的。定时器内部有一个计数器,这个计数器根据一个时钟(这个时钟源来自于ARM的APB总线,然后经过时钟模块内部的分频器来分频得到)来工作。每隔一个时钟周期,计数器就计数一次,定时器的时间就是计数器计数值×时钟周期。定时器内部有1个寄存器TCNT,计时开始时我们会把一个总的计数值(譬如说300)放入TCNT寄存器中,然后每隔一个时钟周期(假设为1ms)TCNT中的值会自动减1(硬件自动完成,不需要CPU软件去干预),直到TCNT中减为0的时候,TCNT就会触发定时器中断。
  定时器关注的是时间段,定时器计时从开启定时器的那一刻开始,到定的时间段结束为止产生中断; RTC中工作用的是时间点。RTC和定时器的区别,就相当于是钟表和闹钟的区别。综上所述,本数字电子钟数码管显示选择设计采用方案2定时器计时。
  4、系统硬件及电路设计
  整体框架已经建立,下面进行各个模块的说明及电路设计的介绍。下面介绍有:系统硬件、单片机最小系统电路。
  4.1 系统硬件
  4.1.1 液晶显示器STM32开发板的驱动原理
  LCD液晶显示器是Liquid Crystal Display的简称,液晶是一种规则性排列的有机化合物,它是一种介于固体和液体之间的物质,这种材料可以在电信号的驱动下液晶分子进行旋转,旋转时会影响透光性,因此我们可以在整个液晶面板后面用白光照(称为背光),可以通过不同电信号让液晶分子进行选择性的透光,此时在液晶面板前面看到的就是各种各样不同的颜色,这就是LCD显示。
  液晶的物理特性是:当通电时导通,排列变的有秩序,使光线容易通过;不通电时排列混乱,阻止光线通过。让液晶如闸门般地阻隔或让光线穿透。从技术上简单地说,液晶面板包含了两片相当精致的无钠玻璃素材,称为Substrates,中间夹著一层液晶。当光束通过这层液晶时,液晶本身会排排站立或扭转呈不规则状,因而阻隔或使光束顺利通过。
  LCD技术是把液晶灌入两个列有细槽的平面之间。这两个平面上的槽互相垂直(相交成90度)。也就是说,若一个平面上的分子南北向排列,则另一平面上的分子东西向排列,而位于两个平面之间的分子被强迫进入一种90度扭转的状态。由于光线顺着分子的排列方向传播,所以光线经过液晶时也被扭转90度。但当液晶上加一个电压时,分子便会重新垂直排列,使光线能直射出去,而不发生任何扭转。
  LCD是依赖极化滤光器(片)和光线本身。自然光线是朝四面八方随机发散的。极化滤光器实际是一系列越来越细的平行线。这些线形成一张网,阻断不与这些线平行的所有光线。极化滤光器的线正好与第一个垂直,所以能完全阻断那些已经极化的光线。只有两个滤光器的线完全平行,或者光线本身已扭转到与第二个极化滤光器相匹配,光线才得以穿透。
  液晶模块显示原理图如图1所示:
  图1 液晶模块显示原理图
  4.1.2 MCU
  本课程设计选择的是STM32F 103RET6作为MCU,STM32F系列属于中低端的32位ARM微控制器,该系列芯片是意法半导体(ST)公司出品,其内核是Cortex-M3。该系列芯片按片内Flash的大小可分为三大类:小容量(16K和32K)、中容量(64K和128K)、大容量(256K、384K和512K)。STM32F 103的型号众多,其价格低,作为一款低端开发板,选择STM32F 103RBT6是最佳的选择。MCU部分原理图如图2所示:
  图2 MCU部分原理图
  4.1.3 按键介绍
  本数字电子时钟设计所需按键用于进行显示时间的调整与设置扩展的小键盘。单片机芯片4个I/O口可与按键直接相连,通过编程,单片机芯片即可控制按键接口电平的高低,即按键的开与关,以达到用按键进行显示时间的调整与设置扩展的小键盘的设计要求。KEY0和KEY1用作普通按键输入,分别连接在PC5和PA15上,KEY2是复位键,连接PA0;
  按键原理图如图3所示:
  图3 按键原理图
  4.2 单片机最小系统电路
  4.2.1时钟电路
  我们知道,对于时序电路来说,除了电源外,还需要有稳定的时钟信号才能正常工作。作为数字系统,微控制器是一种复杂的时序逻辑电路,需要专门的时钟源为其提供脉冲信号。
  STM32F103微控制器也不例外。对于STM32F103来说,尽管它内置了内部RC振荡器,可以为内部锁相环(Phase Locked Loop, PLL)提供时钟,这样STM32F103依靠内部振荡器就可以在72MHz的满速状态下运行。但是,内部RC振荡器相比外部晶振来说不够准确也不够稳定,因此在条件允许的情况下,尽量使用外部主时钟源。
  外部主时钟源主要作为CortexM3内核和STM32外设的驱动时钟,一般称为高速外部时钟信号(HSE)。高速外部时钟信号可以由以下两种时钟源产生。
  (1)外部晶体/陶瓷谐振器
  在这种模式下,时钟电路由外部晶振和负载电容组成,如图7所示。负载电容的值需根据选定的晶振进行调节,而且位置要尽可能近地靠近晶振的引脚,以减小输出失真和启动稳定时间。外部晶振的频率可以是4~16MHz,例如,STM32F103通常选用8MHz的外部晶振。由于这种模式能产生非常精确而稳定的主时钟,因此它是STM32F103微控制器时钟电路的首选。其原理图如图4所示:
  图4外部晶振和负载电容图
  (2)用户提供的外部时钟信号
  在这种模式下,必须提供一个外部时钟源。它的频率可高达25MHz。用户提供的外部时钟信号(可以是占空比为50%的方波、正弦波或三角波)必须连到STM32F103的OSC32_ IN引脚,同时保证STM32F103的OSC32_ OUT引脚悬空,其原理图如图5所示。
  图5外部时钟信号图
  4.2.2震荡电路
  振荡电路也就是晶振电路是由固定频率的晶振电路的核心来源,相当于是一个机器的心脏跳动的,促进身体机理的运转。本电路就是这样的类似作用。一般这个频率是和单片机相匹配的,该频率本设计系统采用的是12MHZ。该晶振的引脚两端分别接两个固定容量的充电电容,一般是瓷片电容,用于振荡电路的晶振的充放电和滤波;瓷片电容的另一端相连接地,也就是与单片机的20号引脚相连。
  4.2.3复位电路
  复位电路是通过硬件电路进行控制单片机的RESET引脚的高低电平来控制单片机内部运行程序的。复位的方式有上电复位和手动复位两种。复位电路由一个10uF的电解电容的负极端与单片机的RESET引脚相连,正极端接电源的正极,也相当于和单片机的40号引脚相连,在其两端有一个自弹的独立按键;当需要复位的时候,按下复位按键,电解电容短路,单片机的复位引脚接到了高电平,单片机被复位。
  
举报

龙慧

2021-11-15 11:10:51
5、系统软件设计
  5.1系统主程序
  在本设计系统中,从系统主程序开始,进入各模块的系统初始化,该初始化包括:串口初始化设置串口频率和波特率、定时器的初值设置、中断函数的进入条件、和端口的初始化点评状态;初始化完成后进入主函数的循环部分,读取时钟芯片的时间信息,并处理;将处理好的时间信息传递给显示模块进行显示;最后进行循环扫描显示时间信息。
  系统程序结构属中断方式,在进行时间信息的读取中,就是采用的终端服务函数子函数的程序中完成,将读取的信息存到一个全局变量的数组中,当显示服务子函数需要时,进行直接调用显示,显示函数为定时器服务子函数的程序中完成。经过多次调试,模块化编程。一步步的实现本设计系统的功能,在克服了定时器中断和外部中断的冲突后,本设计系统趋于完成。
  5.2按键控制
  本次课程设计要求外接3个按键,按键2WK_UP是选择需要设置的项目,按键KEY1增加、按键KEY0减少,用按键来控制日期的增减。按键控制使用外部中断来实现,将PA0、PA15和PC5设置为三个按键的输入通道,响应优先级:KEY0》KEY1》WK_UP。按键初始化函数中定义WK_UP为下拉输入即按键按下为高电平,KEY1和KEY0为上拉输入即按键按下为低电平。
  外部中断处理函数中设置变量flage来判断按键2WK_UP选择的是日期结构体中的成员变量,if判断语句实现对年、月、日、时、分、秒的单独设置。其流程图如图6所示:
  图6按键执行流程图
  5.3定时器中断控制计时
  该实验用到了TIM3定时器,通过设置时钟预分频值psc,自动重装载值arr,arr设值为9999,psc设值为7199,时钟频率为72M。
  初始化定时器,初始化时基单元(TIM_TimeBaseStructure)和定时器嵌套向量中断控制器(NVIC_InitStructure)。每溢出一次代表1s发生一次定时器中断,再在中断函数 TIM3_IRQHandler()中编写实现的中断。
  在.h文件里预定义一个日期结构体来存放一些关于时间的成员变量结构体
  void TIM3_Int_Init(u16 arr,u16 psc);
  typedef struct
  {
  vu16 year;
  vu8 month;
  vu8 day;
  vu8 hour;
  vu8 minute;
  vu8 second;
  }_calendar_obj;
  extern _calendar_obj calendar;
  在该结构体定义了六个成员变量,分别为year、month、day、hour、minute、second
  在定时器中断处理函数中判断定时器中断触发请求发生与否。发生请求,秒数增加,当秒钟计时到60,分钟+1,秒钟返回0。分钟同上,以此类推,时针计时到24,日期+1。
  当显示的年份为闰年时:若当前月份为二月,日期计时到29,月份+1,日期更新为1。
  当前年份为非闰年时:若当前月份为二月,日期计时到30,月份+1,而日期更新为1。4、6、9、11月这四个月的日期增加到31时月份+1,日期更新为1。其它月份日期增加到32时+1,日期变为1。当月份计时到13,年份+1。相关流程图如图所示:
  N
  Y
  N
  Y
  N
  Y
  N
  Y
  N
  Y N
  N
  Y Y
  N N
  Y Y N
  5.4 LCD相关函数分析
  5.4.1 画圆函数
  使用用画圆函数LCD_Draw_Circle()画表盘,在圆上画刻度,将3、6、9、12对应的刻度加粗。画圆函数有三个参数,分别为(u16 x0,u16 y0,u8 r),对应圆心坐标(x0,y0)和半径r。Bresenham算法通过圆心判断下一个点位置坐标,定义画点颜色为灰棕蓝色,调用LCD_DrawPoint(uRow,uCol)画点函数找到八个点位置,从3、6、9、12的位置开始循环画点,每一次循环计算都会在原来八个点附近再出现八个点,所有点连接起来画出圆。
  Bresenham算法的主要思想是:以坐标原点(0,0)为圆心的圆可以通过0度到45°的弧计算得到,即x从0增加到半径,然后利用对称性计算余下的七段圆弧。当x从0增加到时,y从R递减。
  主函数中显示圆圈的代码:
  LCD_Draw_Circle(120,120,98); //显示表盘最大的圈
  LCD_Draw_Circle(120,120,95); //显示表盘第二大的圈
  LCD_Draw_Circle(120,120,2) ; //显示表盘中间外面的圈
  LCD_Draw_Circle(120,120,4); //显示表盘中间里面的圈
  画圆部分相关的代码为:
  void LCD_Draw_Circle(u16 x0,u16 y0,u8 r)
  {
  int a,b;
  int di;
  a=0;b=r;
  di=3-(r《《1); //判断下个点的位置
  while(a《=b)
  {
  POINT_COLOR=LBBLUE;//表盘圆颜色为灰棕蓝色
  LCD_DrawPoint(x0-b,y0-a); //从刻度为9的位置开始
  LCD_DrawPoint(x0+b,y0-a); //从刻度为3的位置开始
  LCD_DrawPoint(x0-a,y0+b);//从刻度为12的位置开始
  LCD_DrawPoint(x0-a,y0-b);//从刻度为6的位置开始
  LCD_DrawPoint(x0+b,y0+a); //3
  LCD_DrawPoint(x0+a,y0-b); //6
  LCD_DrawPoint(x0+a,y0+b); //12
  LCD_DrawPoint(x0-b,y0+a); //9
  a++;
  // 利用Bresenham算法来画圆
  if(di《0)di +=4*a+6;
  else
  {
  di+=10+4*(a-b);
  b--;
  }
  }
  }
  5.4.2 画线函数
  调用void DrawLine()画线函数来画时、分、秒指针,此函数有五个参数,分别是(u16 x1, u16 y1, u16 x2, u16 y2,u16 COLOR),对应的是起始坐标(x1,y1),终止坐标(x2,y2)。首先计算坐标增量并且设置单步方向,通过设定起点坐标(x1,y1)和终点坐标(x2,y2)计算斜率,根据斜率在该条线上的每个点坐标,使用LCD_Fast_DrawPoint()函数把每个点都画出来,从而画出指针。
  画指针部分的相关代码为:
  void DrawLine(u16 x1, u16 y1, u16 x2, u16 y2,u16 COLOR)
  {
  u16 t;
  int xerr=0,yerr=0,delta_x,delta_y,distance;
  int incx,incy,uRow,uCol;
  delta_x=x2-x1; //计算坐标增量
  delta_y=y2-y1;
  uRow=x1;
  uCol=y1;
  if(delta_x》0)incx=1; //设置单步方向
  else if(delta_x0)incx=0;//垂直线
  else {incx=-1;delta_x=-delta_x;}
  if(delta_y》0)incy=1;
  else if(delta_y0)incy=0;//水平线
  else{incy=-1;delta_y=-delta_y;}
  if( delta_x》delta_y)distance=delta_x; //选取基本增量坐标轴
  else distance=delta_y;
  for(t=0;t《=distance+1;t++ )//画线输出
  {
  LCD_Fast_DrawPoint(uRow,uCol,COLOR);
  xerr+=delta_x ;
  yerr+=delta_y ;
  if(xerr》distance)
  {
  xerr-=distance;
  uRow+=incx;
  }
  if(yerr》distance)
  {
  yerr-=distance;
  uCol+=incy;
  }
  }
  }
  通过调用画线函数在圆上画刻度,将3、6、9、12对应的刻度加粗,函数中有POINT_COLOR,在主函数中定义为灰蓝色。
  画刻度部分的相关代码为
  LCD_DrawLine(120,25,120,35);
  LCD_DrawLine(119,25,119,35);
  LCD_DrawLine(121,25,121,35);//12
  LCD_DrawLine(25,120,35,120); LCD_DrawLine(25,119,35,119); LCD_DrawLine(25,121,35,121);//9 LCD_DrawLine(120,205,120,215); LCD_DrawLine(119,205,119,215); LCD_DrawLine(121,205,121,215);//6 LCD_DrawLine(205,120,215,120); LCD_DrawLine(205,119,215,119); LCD_DrawLine(205,121,215,121);//3 LCD_DrawLine(168,38,164,45);//1 LCD_DrawLine(202,72,195,76);//2 LCD_DrawLine(202,168,195,164);//4 LCD_DrawLine(168,202,164,195);//5 LCD_DrawLine(72,202,76,195);//7 LCD_DrawLine(38,168,45,164);//8 LCD_DrawLine(38,72,45,76);//10 LCD_DrawLine(72,38,76,45);// 5.4.3 显示数字函数
  此函数有五个参数,分别是(u16 x,u16 y,u32 num,u8 len,u8 size),x、y对应的是起始坐标,显示数值num,数字的位数len,字体大小size,颜色可通过POINT_COLOR设定。
  void LCD_ShowNum(u16 x,u16 y,u32 num,u8 len,u8 size)
  {
  u8 t,temp;
  for(t=0;t《len;t++)
  {
  POINT_COLOR=GRAYBLUE;
  temp=(num/LCD_Pow(10,len-t-1))%10; //求余来提取每一位数字
  LCD_ShowChar(x+(size/2)*t,y,temp+‘0’,size,0); //显示这一位的数字
  }
  }
  5.4.4 显示字符函数
  在 LCD_ShowChar 函数里面采用快速画点函数 LCD_Fast_DrawPoint 来画点显示字符,该函数同 LCD_DrawPoint 一样,只是带了颜色参数,且减少了函数调用的时间。x、y是起始坐标,width、 height是字符显示区域的宽和高,*str是指向字符串的指针,size是字体大小, mode是模式(0为非叠加方式,1为叠加方式)。显示数字和字符,判断位置和是否换行(实现自动换行)。
  void Show_Str(u16 x,u16 y,u16 width,u16 height,u8*str,u8 size,u8 mode)
  {
  u16 x0=x;
  u16 y0=y;
  u8 bHz=0; // 字符或中文
  5.4.5 画点函数
  //x,y:坐标
  void LCD_DrawPoint(u16 x,u16 y)
  {
  LCD_SetCursor(x,y); //设置光标位置
  LCD_WriteRAM_Prepare(); //开始写入GRAM
  LCD_WR_DATA(POINT_COLOR); //POINT_COLOR:此点的颜色
  }
  此函数实现比较简单,先设置坐标,再往坐标写颜色。其中 POINT_COLOR 定义的一个全局变量,存放画笔颜色,BACK_COLOR代表 LCD 的背景色。
  6、软件调试与测试结果
  6.1编程工具
  本设计的软件都是在Keil μVision 4上进行编写、编译、调试以及运行操作并生成Hex文件。
  软件编程步骤:
  (1)打开Keil μ Vision 4软件;
  (2)新建工程,并把工程存放在自己方便的地方;
  (3)新建C文件,并C 文件添加到新建的工程中;
  (4)设置选项,勾选生成HEX文件选项;
  (5)编写代码,实现功能,语法正确,并编译通过,生成HEX文件。
  6.2 PROTEUS的应用
  Proteus软件的使用步骤如下:
  (1)打开Proteus软件。
  (2)选择菜单栏的元器件选项,点击P标识,找到所需的元器件,根据自己的需要,选择菜单栏下方的旋转按钮,将元器件旋转到方便的角度,然乎在一定区域内部上对其进行放置,放置完成后,进行设置元器件的值和标号。全部器件摆放设置完成后,鼠标移动到元器件的引脚端,进行点击开始引线到需要连接的地方,然后双击确定,以此类推,将全部器件之间进行连接,并保存。
  保存后点击PLAY 按钮,是左下方的三角符号,确认无误后解除仿真,即左下角的正方块图形。
  (4)下载hex文件到单片机中:双击51单片机,在对话框中找到保存好的程序生成文件hex文件打开,再单击确定,再次保存。
  (5)点击左下角的三角符合按钮,进行电路运行仿真与调试,观察仿真结果进行相应的改动,直到出现正确的结果。
  6.3 软件调试过程
  经过系统的了解程序编写软件和实物仿真软件这两部分,两者相互结合进行本课题系统功能的仿真与调试,确定其方案的是否可行?了解系统方案的工程量和主要原理应用。
  在通过编写程序,解决语法错误之后,生成一个hex文件,放在仿真文件夹中,以方便仿真文件的调用;进行软件系统搭建硬件平台,采用PROTUSE软件把,系统方案中选择的各部分,找到对应的元器件,进行硬件电路的模拟搭建,检查电气连接的准确性,确保完成后,双击进入主控芯片的配置中,找到软件程序生成的HEX文件,选择,进行硬件型软件模拟调试,出现的问题,及时找到问题根源,并改正后再次进行软件仿真,直到正确的结果和功能的完全实现。
  6.4测试结果
  初始默认时间是2019年6月13日21时07分10秒
  显示结果:表盘显示清晰,指针位置与时间相吻合,能观察到秒针在转动。
  按键后的显示结果:选择按键按下,相应被选择项会闪烁,按下加减键能正确改变时间,表盘随时间的设置正确变化。
  7、结论
  此次课程设计完成了STM32F103单片机和2.8寸液晶屏显示,显示当前的年、月、日、时、分、秒。其中遇到了许多知识面的困难,如画圆函数、画线函数,将数学知识转化为计算机语言,最后得以解决。这次综合设计使我受益匪浅,所涉及的东西都是我们专业相关的。起初学习单片机和嵌入式全部是理论知识,没有过多的实践。导致在课程设计开始的时候无从下手。为了完成设计,我们小组成员去图书馆、网上查找相关资料,学习了嵌入式和C语言,虽然以前学过嵌入式,但是感觉自己都不太懂这方面的知识,纯粹是为了应付考试,所以导致这回编写代码实现过程比较懵懂,需要花费的时间也比较长,但最后也完成了课程设计。
举报

更多回帖

发帖
×
20
完善资料,
赚取积分