内容正文:
利用单片机P0口控制四位数码管模块,将编写好的源程序下载到单片机中,实现数码管动态显示。控制逻辑要求利用四维供氧级数码管动态显示1921数码管高亮无屏闪无残影。2、任务目的,一理解数码管动态显示原理。二会进行数码管动态显示,消除残影。三会调优数码管动态刷新频率,三任务分析。由前面的课程可知,单片机的P0口控制数码管的段选电瓶,单片机P1.0至P1.4引脚控制数码管的未选电瓶车开发版中使用的数码管是共阳极数码管,所以DSG1、DSG2、DSG3、DSG4电平哪个为高,则相应的数码管就被未选共阳极数码管字形码的编码值是这样的,在while循环中利用switch case语句完成数码管的位选切换,在分支语句中完成数码管段选。例如将9的字形码0乘90赋值给P0口,选中的数码管将显示数字9。每位数码管显示前需要全部熄灭来保证无残影出现,每位数码管显示还需要延时来保证亮度。这个显示时间不能太长,也不能太短,太长了数码管会出现屏闪,太短了数码管亮度会不足。经验值一般是保证刷新频率在100赫兹左右,这样周期约为10毫秒。对于四位数码管,每位数码管的显示时间约为2.5毫秒。这里取整让每个数码管显示时间约为2毫秒,这样刷新频率约为125赫兹,满足设计要求。下面开始任务实践。首先打开仿真开发板电路原理图,四位数码管位选信号是由译码器输出引脚Y0至Y4来进行控制,断弦信号是由单片机P0口进行控制。例如数码管要显示1921,可以首先将第一位数码管位选信号DSGE拉高,然后给数码管段选引脚配置dp段送数字一的字形码,降低一位数码管将显示数字一,然后将dsg 2拉高,给段选引脚送九的字形码,第二位数码管将显示9,同样的操作方法,第三位数码管显示2,第四位数码管显示一,只要控制好数码管的刷新频率,就可以实现显示1921的效果。下面来看数码管动态刷新的Q工程。首先找到工程的主函数main,这是main函数的函数体。第27行定义了一个数码管位选变量,初始值为零。第28行是完成一码器使能CICD以及后面出现的A0至A3,它们是通过speed定义的未变量,它们分别是将单片机的P1.0至P1.4引脚进行了未定义。在主循环当中,第31行至34行是条件编译,它是通过宏SR来进行控制。第33行代码是否参与工程编译,其中S2这个宏是定义在第19行S2为0时是关闭消隐功能。一是开启消隐功能,它的控制逻辑与前面学习的if条件语句是相似的。例如当SR值为一时,参与编译的条件为真,第33行代码参与编译,反之不参与编译。第35行至42行代码是一个多分支switch case语句,变量I初始值为零。所以执行case零这条分支语句,它的功能是首先会选第一位数码管,并将一的字形码复制给皮领口,完成断线,实现显示自行0。然后未选变量自增1,最后break跳出switch catch语句。第43行到50行是另一个条件,编译语句。它是通过宏sd选择哪条语句去参与编译。例如宏sd取值可以是0120,表示为选切换延时,关闭一表示未选切换延时10毫秒,二表示未选切换延时2毫秒。当前stage为零,那么条件编译的第一个分支是成立的,此时未选切换后是无延时的。那么每个。数码管点亮时间将是极短的。未选切换延时语句执行结束后,循环会重新执行这个switch case语句。此时的爱已经变成了一,它会选择K41这个分支语句,它的功能是完成未选。第二位数码管显示自行9。按照这样的控制过程。第三位。数码管显示字形2,第四位数码管显示字形一,特别的第四位数码管完成未选和断选后,需要将未选变量改为零,方便开始下一轮刷新,这样就可以实现四位数码管动态显示。1921两个软件延时函数分别定义在这里和这里。下面我们来编译工程,工程编译结束以后,发现这里有两个警告。出现警告的原因是这两个函数未参与编译,也就是未被调用。所以他报这两个函数未被。调用的警告。这是因为此时的sd. 是取零的,它只。执行第一个分支,那么这两个分支将不会参与编译。打开烧录软件,打开程序文件,打开hacks文件,点击下载编程。程序下载成功后。我们会发现四位。数码管显示的字符与预想的有点不一样。其中一盒酒还能清晰可见。后面的两位。数码管已经快看不出来显示几了。那么出现这种现象的原因是什么呢?我们一起来分析一下。Case 0和kiss一两个分支切换时会出现这样一个短暂错误状态。A3、A2、A一的值不变,A0由0变为一后,他就会立马位选第二位数码管,但此时的断码依然是一的字形码,这样就会出现一个短暂的错误显示瞬间,即第二位数码管会先显示一的字形,但是时间很短,然后再显示九的字形。同理,以此类推,第三位数码管会先显示九的字形,时间很短,然后再显示二的字形。第四位数码管会先显示二的字形,时间很短,然后再显示一的字形,这样就可以解释我们刚才看到的实验现象了。请看第二位数码管会短暂显示本该送给第一位数码管的一的断码。由于九的字形形码覆盖了一的字形码,所以不会出现显示错乱。第三位数码管会短暂。显示本该送给第二位数码管的酒的断码,本来这里应该显示2,但是因为它又会短暂错误的显示9,造成这两个位置也被点亮了,所以最终它显示的是一个数字8,这些位置亮度其实是要暗一点的。第四位数码管会短暂显示本该送给第三位数码管的二的断码。第四位数码管本应该仅显示字形一,但是要短暂错误显示2,所以造成了多点亮几个数码管段,最终显示的效果就变成我们看到的这个样子了。那么如何消除这种现象呢?这里就要进行消隐处理,消隐就是消除数码管。现实餐饮所谓残影就是本不应该被点亮的段被点亮了。例如对于第三位数码管来说,这一段和这一段是不应该被点亮的,它的亮度也是弱一点的。我们只需要在数码管位选切换之前,将所有的数码管熄灭就可以了。熄灭所有的数码管只需给P0口赋值0XFF就可以实现。那么我们只要开启。这个条件。编译就行了。将sr修改为一编译工程。现在重新下载程序,点击下载程序观察实验现象。我们可以看到现在数码管能准确地显示1921,现在本不应该被点亮的位置都没有被点亮消影成功。但是现在又出现了另一个问题,你会发现数码管亮度明显不足,这又是为什么呢?先来看这里,未选切换的时候需要给予适当的延时,如果没有延时,数码管点亮的时间将会极短,造成它的亮度。会变弱。Sd为零时。是没有延时的,现在将sd改为一开启延时。它会让每个数码管点亮,持续10毫秒。四个数码管一轮扫描下来就要40毫秒,它扫描周期就是40毫秒,刷新频率就是25赫兹,仅为刷新频率惊艳值100赫兹的4分之1。再编译一下当前工程。下载程序程序下载成功后,我们来观察实验现象,可以看到四位数码管出现了频闪现象。如果直接看实物开发板的话,这个现象会更明显,原因是这里的延时时间太长了。现在将sd修改为2。也就是每个数码管显示时间是2毫秒,一轮扫描周期是8毫秒,频率是125赫兹,是高于100赫兹的。再次编译工程,点击下载程序给开发板上电。再次来。观察实验现象。此时四位数码管能够高亮、无频闪、无残影的显示。1921了,通过摄像头观看还有一点点闪动。如果你直接用肉眼观察实物开发板,那么它是不存在频闪现象的。现在看一下仿真开发板的实验现象,给单片机加载hex文件。开始运行仿真开发版。仿真开发。版也能很好地显示1921。我们能够看到它的位选信号在快速的切换,红色小方块代表该位数码管被选中。它的断选信号也在快速的进行变换,红色小方块代表熄灭该段,蓝色小方块代表点亮该段。以上就是关于数码管动态显示的全部内容。
由于学科网是一个信息分享及获取的平台,不确保部分用户上传资料的 来源及知识产权归属。如您发现相关资料侵犯您的合法权益,请联系学科网,我们核实后将及时进行处理。