这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 » 论坛首页 » 综合技术 » 基础知识 » 基础知识每日一题——第四十一题

共5条 1/1 1 跳转至

基础知识每日一题——第四十一题

高工
2014-08-05 10:38:53     打赏
活动简介:

“每日一题”是EEPW参考西电XDLab社推出的旨向初学者普及基础知识的一项活动,每天在此帖内公布“每日一题”的题目。大家可以根据自己的理解对题目进行回答和相互讨论,我们鼓励大家积极发言。第二天会给出参考答案。每天一帖,所有的题目都将汇集至此,以期方便大家查找。

 

活动宗旨:

活动目的在于通过“每日一题”让大家每天进步一点点,增强大家的基础知识,提高大家对电子制作的兴趣。我们鼓励大家积极发言,如果不懂、是菜鸟,请积极发问;如果懂、是大神,请慷慨解囊。


        今日题目:简述实现流水灯的几种程序设计方法?







基础知识每日一题

专家
2014-08-05 10:51:28     打赏
2楼
流水灯的实现方法:直接端口赋值,端口数据移位,数组,位操作,指针,定时中断

助工
2014-08-05 15:07:08     打赏
3楼
顶楼上!加上PWM能实现更和諧的效果。

菜鸟
2014-08-05 16:34:39     打赏
4楼

流水灯的实现方法:

1、总线操作,顺序结构实现的流水灯控制程序

2、数组:数组实现的流水灯控制程序

3、采用的移位,按位取反等操作是位操作

4、位运算符编写的流水灯控制程序,显示效果为依次熄灭信号灯

5、采用外围电路控制,采用译码器等器件。



高工
2014-08-06 09:51:38     打赏
5楼

  解答:

  实现流水灯有很多种方法,主要运用程序变量类型、运算符、逻辑结构、

  数据结构等软件设计思维来实现对应的效果。

  位移法

  (1)、运用右移位运算符”<<”,对变量 0x01 进行右移 i 位的操作;然

  后再用按位取反运算法”~”来实现对移位后变量的取反变换,对应硬件电

  路的功能。

  LEDVar=0x01; //对应的二进制:0000 0001

  while(1)

  {

  for(i=0;i<8;i++)

  {

  P1=~(LEDvar<

  DelayXms(1000);

  }

  }

  (2)、运用 C51 自带库函数中的循环右移_crol_函数来实现对 0xFE 的循

  环右移操作,注意使用此函数要加上它的头文件,即#include。

  LEDVar=0xFE; //对应的二进制:1111 1110

  while(1)

  {

  for(i=0;i<8;i++)

  {

  P1=_crol_(LEDVar,i);

  DelayXms(1000);

  }

  }

  查表法

  unsigned char i;

  unsigned char code LEDTable[]=

  {

  //把流水效果对应的变量值预先存储在一个数组里面,并依次访问

  它

  0xFE,0xFD,0xFB,0xF7,

  0xEF,0xDF,0xBF,0x7F

  };

  …………

  (1)在循环中渐增索引值 i 的大小,并加上 if 判断条件,以保证索引

  值 i 始终访问数组的合理范围。

  i=0;

  while(1)

  {

  P1=LEDTable[i];

  i++;

  if(i>=8)i=0;

  DelayXms(1000);

  }

  (2)通过对索引值 i 进行取余操作,来保证索引值 i 始终访问数组的

  合理范围

  i=0;

  while(1)

  {

  P1=LEDTable[i%8]; //i%8 的值为 0-7

  DelayXms(1000);


共5条 1/1 1 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册 ]