下载此文档

多位数码管动态显示.doc


文档分类:通信/电子 | 页数:约17页 举报非法文档有奖
1/17
下载提示
  • 1.该资料是网友上传的,本站提供全文预览,预览什么样,下载就什么样。
  • 2.下载该文档所得收入归上传者、原创者。
  • 3.下载的文档,不会出现我们的网址水印。
1/17 下载此文档
文档列表 文档介绍
【 006 】多位数码管动态显示[51] 点击数: 2102 发布日期: 2006-4-16 16:04:00 【收藏】【评论】【打印】【编程爱好者论坛】【关闭】实验目的:数码管动态显示多位数字。实验参考:笨笨工作室实验五、多位数码动态显示。( 查看原文) 实验板:FB51A (查看)。该实验用到实验板的资源电路图如下: 其中 P0口是段码,低电平有效。 P2口是位码,高电平有效。 口控制第 1 个数码管,一直到 口控制第 8个。该板的段码表如下: 各个数码管的段码都是 p0口的输出,即各个数码管输入的段码都是一样的,为了使其分别显示不同的数字,可采用动态显示的方式,即先只让最低位显示 0 (含点),经过一段延时,再只让次低位显示 1,如此类推。由视觉暂留,只要我们的延时时间足够短,就能够使得数码的显示看起来非常的稳定清楚。过程如下图。采用上述方法思路编写如下: org 0000h start: mov a,#08h ;0;段码 mov p0,a mov p2,#01h ;位码 lcall delay_1ms mov a,#0abh ;1 mov p0,a mov p2,#02h lcall delay_1ms mov a,#12h ;2 mov p0,a mov p2,#04h lcall delay_1ms mov a,#22h ;3 mov p0,a mov p2,#08h lcall delay_1ms mov a,#0a1h ;4 mov p0,a mov p2,#10h lcall delay_1ms mov a,#24h ;5 mov p0,a mov p2,#20h lcall delay_1ms mov a,#04h ;6 mov p0,a mov p2,#40h lcall delay_1ms ;mov a,#0aah ;7 ;mov p0,a mov p0,#0aah ;感觉用这句和上面两句实现一样, 可能这种****惯以后会有用吧 mov p2,#80h lcall delay_1ms ljmp start delay_1ms: mov r6,#2 temp: mov r5,#0ffh djnz r5,$ djnz r6,temp ret end 下载到板上得到测结果为从低到高八位分别显示 0到7(含点)。★上述方法逐次给 P0或者 P2赋值,一方面程序的复杂程度增加,另外一方面会使得程序的灵活性降低。如果要改变显示的数字,程序改动起来很麻烦。所以要用 51单片机中常用的一种方法:查表法。例如 P0口输出段码时,我们可以把要显示的段码放在一个表格中,然后每次从这个表格里面取数,送到 P0口即可。 P2口输出位码时,可以把要用的位码放在另一个表格里,每次从此表中取数, 送入 P2口。这样,如果要改变显示的数字,只需要改变表格里面的数。 org 0000h start: mov r7,#0ffh ;r7,r 6查表时送入变址寄存器a(因自加1 后为 0,所以预置 ffh) mov r6,#0ffh loop: lcall play1 ;调用显示段码子程序 lcall play2 ;调用显示位码子程序 lcall delay_1ms cjne a,#80h,loop ;判断是否到了最左边的数,即第 8个位码ajmp start play1: ;查表求段码子程序;mov a,r7 ;inc a;mov r7,a inc r7;这2句和上面三条语句实现功能相同 mov a,r7 ;a在这里做变址寄存器 mov dptr,#table1 ;表首址送 dptr ,dptr 做基址寄存器 movc a,***@a+dptr ;基址寄存器加变址寄存器寻址 mov p0,a ret play2: ;查表求位码子程序(原理同 play1) mov a,r6 inc amov r6,a mov dptr,#table2 movc a,***@a+dptr mov p2,a ret table1: db08h,0abh,12h,22h,0a1h,24h,04h,0aah ;段码表 table2: db01h,02h,04h,08h,10h,20h,40h,80h ;位码表 delay_1ms: mov r5,#02 h;延时 1ms 子程序 temp: mov r4,#0ffh djnz r4,$ djnz r5,temp ret end 下载到板上验证得到预想结果。 C51 实现如下(参考了 AS的例程): #include <> #include <> //包含了左移函数_crol_ ()void delayms(unsigned char ms); //延时子程序 unsigned cha

多位数码管动态显示 来自淘豆网www.taodocs.com转载请标明出处.

非法内容举报中心
文档信息
  • 页数17
  • 收藏数0 收藏
  • 顶次数0
  • 上传人zgs35866
  • 文件大小0 KB
  • 时间2016-03-14