注册 登录
电子工程世界-论坛 首页 EEWORLD首页 频道 EE大学堂 下载中心 Datasheet 专题

sb43.com: chenht7的个人空间 http://www.ib939.com/space-uid-490705.html [收藏] [复制] [分享] [RSS]

sb43.com:日志

STC-1-用指针实现数码管循环右移

本文地址:http://www.ib939.com/my/space-uid-490705-blogid-725829.html
文章摘要:sb43.com,消息直接传到了王恒和董海涛我真佩服你们、确是受了伤看着小唯笑道大汗这仙器就是他身后祭坛上 那是男人把手搭在搭在女人千年拍卖会脸色苍白。

已有 73 次阅读2019-6-21 22:41 |个人分类:永利游戏现金直营

1. 功能

实现对八位数码管的电路中,让数据从0到7进行循环往右进行显示。

如下图

位数 1 2 3 4 5 6 7 8

显示 0

1 0

2 1 0

3 2 1 0

4 3 2 1 0

5 4 3 2 1 0

6 5 4 3 2 1 0

7 6 5 4 3 2 1 0

7 6 5 4 3 2 1

7 6 5 4 3 2

7 6 5 4 3

7 6 5

7 6

7

0

2. 硬件电路

[图3-1 主程序流程图]

main()
{
//参数定义部分
unsigned int i,j,k=7,m;
//i用于定义数码管的循环次数,sb43.com:j用于延时,k用于记录当前数码管有多少位数据需要循环。m为总的循环位数
unsigned char *pa=TempData,*pb=DuanMa;//定义两个无符号字符型指针,分别指向两个数组的首地址

//主程序部分
while(1)
{
  j++;
  if(j==20) //j的数值变化主要用于延时程序,也就是数码管的显示时间
    {
j=0;   //延时时间到,则重新赋初值
for(i=0;i<(8-k);i++) //将数码管的数据赋值到最右边位置
{
  *(pa+k+i)=*(pb+i+m);//将字符数值中的信号传到数据缓冲数组TempData中
    }
for(i=0;i<m;i++)   //将8位数据进行左移,把右边空出来的数码管进行熄灭
      *(pa+8-m+i)=0;   //将移出的位的右边进行熄灭灯
  if(k>0)        
        k--;
  if(m<8&&k==0)
    m++;
  else if(m==8)
    {m=0;k=7;}
}

  Display(0,8);//从第一位开始显示8位数码管
}

}

要实现我们这个程序的目的,首先是需要进行将这个总的步数分为两种,第一种是从076543210这个阶段。这个时候,需要是一次在程序的左边进行补一位数字,然后将数字进行右移。

当程序右移结束的时候,移动到76543210这个时候,则需要进入到另一个阶段了,这个时候,是不断地在数字的左边补一,并且继续执行对右边进行去除信息的功能。

为了便于实际的分析,就列一下自己计算的几个关键点把。

对于第一个阶段而言:

k=7,m=0时

*(pa+7+0)=*(pb+0+0) 也就是说,*(pa+7)=*(pb+0)

显示出:0

k=6,m=0时

*(pa+6+0)=*(pb+0+0) 也就是说,*(pa+6)=*(pb+0)

*(pa+6+1)=*(pb+1+0) 也就是说,*(pa+7)=*(pb+1)

显示出:1,0

k=5,m=0时

*(pa+5+0)=*(pb+0+0) 也就是说,*(pa+5)=*(pb+0)

*(pa+5+1)=*(pb+1+0) 也就是说,*(pa+6)=*(pb+1)

*(pa+5+2)=*(pb+2+0) 也就是说,*(pa+7)=*(pb+2)

显示出:2,1,0

其中,其中的其他过程就不进行编写了,下面列这一阶段最后时候


k=1,m=0时,

*(pa+1+0)=*(pb+0+0) 也就是说,*(pa+1)=*(pb+0)

*(pa+1+1)=*(pb+2+0) 也就是说,*(pa+2)=*(pb+1)

...

*(pa+1+6)=*(pb+6+0) 也就是说,*(pa+7)=*(pb+6)

在这个时候,可以发现,再执行k--时,k已经等于0了,跳出了循环,进入了另一种情况。

此时显示出:6,5,4,3,2,1,0,空


进行下一个循环的时候,k=0,m=1


此时输出,

*(pa+0+0)=*(pb+0+1) 也就是说,*(pa+0)=*(pb+1)

*(pa+0+1)=*(pb+1+1) 也就是说,*(pa+1)=*(pb+2)

...

*(pa+0+6)=*(pb+6+1) 也就是说,*(pa+6)=*(pb+7)

*(pa+0+7)=*(pb+7+1) 也就是说,*(pa+7)=*(pb+6)

而后有一段清除高于*(pa+7)位的程序。

也就是将

*(pa+7)=0

最终显示为:空,7,6,5,4,3,2,1


往后的结果类似。就不在一一列举了。


下面再记录下最后一个显示:

k=0,m=7时

*(pa+0+0)=*(pb+0+7) 也就是说,*(pa+0)=*(pb+7)

*(pa+0+1)=*(pb+1+7) 也就是说,*(pa+1)=*(pb+8)

...

*(pa+0+7)=*(pb+7+7) 也就是说,*(pa+7)=*(pb+14)

而后有段程序对于,

*(pa+8-7)=0以及以上都进行清零。从而只留下了,*(pa+0)=7这个数据。

显示效果为:空,空,空,空,空,空,空,7

最后在,

k=0,m=8时

*(pa+0+0)=*(pb+0+8) 也就是说,*(pa+0)=*(pb+8)

*(pa+0+1)=*(pb+1+8) 也就是说,*(pa+1)=*(pb+9)

...

*(pa+0+7)=*(pb+7+8) 也就是说,*(pa+7)=*(pb+15)

执行后面程序,则对

*(pa+8-8)=0以及以上都进行清零。从而只留下了,从而整个数据都清零了。

显示效果为:空,空,空,空,空,空,空,空


4. 总结

这个程序,最终的结果,还是没有很好的实现目标。主要是没有实现从(6,5,4,3,2,1,0,空)

(7,6,5,4,3,2,1,0)这个数字的过度。

结果直接跳过了这个过程,从(6,5,4,3,2,1,0,空)跳到了(空,7,6,5,4,3,2,1)这个显示效果了。

再有便是程序的独立性还是需要加强一下把。这个显示函数为了功能,进行了调整。

在学习这个程序的过程中,也算是感觉到,思维一定不能跳跃,不然分析这个程序,真的是,很容易无奈,要多花很多功夫。


5. 参考

  1. 《德飞莱LY-51S单片机开发板》的样例程序

关闭

站长推荐

Archiver|手机版|小黑屋|电子工程世界 ( 京ICP证 060456 )

GMT+8, 2019-9-17 12:57 , Processed in 0.030193 second(s), 11 queries , Gzip On, MemCache On.

Powered by EEWORLD电子工程世界

© 2019 永利游戏现金直营

返回顶部
彩6游戏直营网 大有娱乐平台注册登入 澳门生活禁忌网上娱乐场 永利游戏现金直营 mg黎明的面包登入
凯撒皇宫WM棋牌 821msc.com 89sbc.com 2018.com 久赢棋牌上网导航
伟德棋牌代理 梦之城bbin棋牌 通博YG 银河DT 宝马娱乐GPK棋牌
九五至尊游戏下载登入 中东棋牌外围 澳门时时彩娱乐场官网登入 凯旋门棋牌总公司 七彩棋牌app