您的位置 首页 知识

零根底学FPGA(十七)新人必进,1602动态电子可调时钟规划,练一下代码风格吧

之所以取这个标题名呢~感觉这个实验还是蛮重要的,当初我在学单片机的时候也是通过这个实验来巩固了一下自己的代码风格,当然这个实验涉及的东西还是挺多的,如果是新手,想要自己设计出来还是有点难度的,当然

  之所以取这个标落款呢~感觉这个试验仍是蛮重要的,最初我在学单片机的时分也是经过这个试验来稳固了一下自己的代码风格,当然这个试验触及的东西仍是挺多的,假如是新手,想要自己规划出来仍是有点难度的,当然这个规划现在对我来说不算难了应该,写这篇文章的意图呢便是想稳固一下自己的代码风格,由于曾经学习大多是先看懂他人的代码之后,然后依据自己的了解再敲上一遍,这次不同,这次的代码是小墨同学没有参阅任何其他教程的情况下,用自己脑子里的东西写的,自我感觉条理还算清楚,估量新手看起来应该仍是比较简单上手的,不过由于小墨同学资格尚浅,关于资源,速度的问题考虑的过少,没有对这个规划进行优化,可是想想,以一种直白的办法交给刚入门的同学,避免了优化代码带来的一些利诱,这便是这篇文章的意图了。这篇文章只介绍电子时钟规划部分,至于1602的其他用法期望各位自行学习~

  现在现已进入了12月,也便是考试月了,关于我这么一个大三的学生来说,专业课漫山遍野能够说,再说咱们通讯专业也不是什么好学的科目,估量未来一个月文章会更新的慢一点。期望咱们多多支撑~下面咱们开端是今日的教育

  这次咱们要做的是一个电子时钟,动态可调并在1602上显现,那咱们就先来了解一下1602.其实液晶这部分感觉都差不多,咱们要是会了1602,那么上手12864也不成问题了

  1、操作时序

  

360桌面截图20141206185349.jpg

 

  1602要用到的管脚也便是4个,即

  1、rs数据指令挑选端

  2、wr读写操控端

  3、lcden使能信号

  4、8位的数据端口

  并且1602的读功用咱们用不到,所以wr一向置0即可,要操控的便是rs端,数据端和lcden端

  2、写时序

  由于读操作咱们用不到,直接来看写操作好了

  

360桌面截图20141206190308.jpg

 

  由上图得,咱们假如要写指令的话,就要在rs为低电平的时分给数据端送8位指令数据,然后等一段时刻后有一个lcden的高脉冲即可使数据有用,留意这个lcden的高脉冲要粉饰一点时刻

  3、初始化设置

  

360桌面截图20141206190711.jpg

 

  这儿咱们要显现一个2行,16位的液晶,5×7点阵,8位数据接口,不显现光标

  故初始化的时分咱们要进行的操作是送1602这两个指令,好下面咱们开端写程序

  4、程序规划

  有些人会问,1602的时序图上的延时怎样操作?这个问题现已有好几位网友问过我了,这儿,咱们需求用到状态机。由于咱们的时钟是50Mhz,一个周期为20ns,关于1602来说这个频率太高了,因而咱们需求分频。再看看1602的datasheet里的延时参数,这儿咱们设置供1602的时钟

  

360桌面截图20141206191512.jpg

 

  做好了时钟咱们就能够来写状态机了,首要咱们需求把RS拉低,由于咱们要对1602进行初始化,然后给1602送初始化数据,即0x38,延时一个时钟周期之后将使能端拉高。留意这儿的一个时钟周期是咱们之前的分频后的时钟,大约1ms,然后再等候一个时钟周期后将lcden拉低,并送光标显现数据0x3c

  

360桌面截图20141206192538.jpg

 

  接着,依照上述办法设置1603写一个字符后地址指针加1和显现清零指令,即0x06和0x01

  

360桌面截图20141206192819.jpg

 

  然后咱们需求确认咱们的时钟的时刻显现地址

  

360桌面截图20141206193110.jpg

 

  例如,我想把时钟的小时的十位写在04的方位上,这样咱们就需求写指令给1602,告知它咱们要写的地址为 0x80 +4 = 0x84,故要给1602送0x84

  

360桌面截图20141206193328.jpg

 

  这样咱们的初始化就完毕了,初始化完毕之后,咱们需求写数据了。与写指令不同的是,这儿仅需将RS拉高,其他时序不变,下面咱们来写时刻,我的思路是先将时分秒写进去,再利用状态机循环改写

  

360桌面截图20141206195248.jpg

 

  分钟和秒钟的书写规矩和小时相同,写完后要回到刚开端写的地址处进行循环,即0x84

  

360桌面截图20141206195443.jpg

 

  静态时钟写完了,这个时分假如把程序下到板子里,液晶屏上应该显现“00:00:00”,下面咱们让这个时钟动起来,这就需求咱们令敞开一个进程,专门用来进行时钟计数,这儿要用到分频电路,这非必须分频1秒钟

  

360桌面截图20141206195912.jpg

 

  计数完结之后咱们需求将时分秒进行处理,由于咱们往1602里写数据一次只能写1位,故,咱们需求把时分秒的十位和各位分开来再送到1602,这儿就用到了求模求余算法了

  

360桌面截图20141206200146.jpg

 

  这样的话咱们的时钟应该就能够动起来了,这儿再说一下求模求余算法,例如分钟是45分,45对10求模即4,送到相应的10位上去,45对10求余,即5,送到相应的个位上去即可。

  除了让时钟动起来之外,咱们还能够再加一个功用,完成可调,这就需求用到按键,功用如下:

  1、键1按下时,时钟中止计时

  2、键2、3、4按下时,别离对时分秒进行调整

  3、键1再次按下时,时钟开端计时

  提到按键,就要用到按键消抖了,这便是前面的常识了,这儿不做重复,具体见源代码,这儿供给部分代码

  

360桌面截图20141206200743.jpg

 

  接着对相应位进行操作即可

  

360桌面截图20141206200847.jpg

 

  

360桌面截图20141206200856.jpg

 

  这样咱们的时钟算是规划完结了,至于其他功用,咱们能够另行拓宽,在这儿小墨同学就给咱们安置一项作业吧,完成多功用电子时钟规划,功用如下:

  1、 完成年月日显现,并依照平年闰年,大月小月计数

  2、完成守时报警功用,即闹钟

  3、让显现的时刻上电的时分从右面渐渐滑进来

  下面是试验成果测验图片

  

360桌面截图20141206202036.jpg

声明:本文内容来自网络转载或用户投稿,文章版权归原作者和原出处所有。文中观点,不代表本站立场。若有侵权请联系本站删除(kf@86ic.com)https://www.86ic.net/zhishi/116747.html

为您推荐

联系我们

联系我们

在线咨询: QQ交谈

邮箱: kf@86ic.com

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

返回顶部