原创 第二十六课 点阵之二 玩流水灯

2009-6-3 17:50 4491 5 6 分类: MCU/ 嵌入式

第二十六课 点阵之二  玩流水灯
这是一个有趣的实验


程序讲解
/*--------------------------------------------------------------*/
//LED8*8滚动显示


#include <reg52.h>
#include "74HC595.H"
#include "Beep.H"


/*--------------------------------------------------------------*/
//延时200ms 函数定义
void delay(void)
{
    unsigned char i,j,k;
    for(i=201;i>0;i--)
    for(j=32;j>0;j--)
    for(k=14;k>0;k--);
}



/*--------------------------------------------------------------*/
//定点显示,一次只显示一个点
void gotoxy(unsigned char x, unsigned char y)
{
 Ser_IN(0x01 << x);              //列选
 Ser_IN(~(0x01 << y));         //行数据
 Par_OUT();                            //上升沿锁存输出
}



/*--------------------------------------------------------------*/
//主函数
void main (void)

 char i, j;
 for(j = 0; j < 5; j++)        //逆时针方向转动 j用于控制移动的点数
 {
  for(i = j ; i < 8-j; i++) 
  {
   gotoxy(j, i);  //此时 j 对应x,i 对应y,x不变 y增大,即垂直下移
   speaker();    //移一次,响一次
   delay();        //延时,让垂直移动速度慢
  }
  for(i = j+1 ; i < 8-j; i++)
  {
   gotoxy(i, 7-j);  //此时 i 对应x,7- j 对应y,x增大 y 不变,即水平右移
   speaker();        //移一次,响一次
   //delay();          //取消延时,水平速度快
  }
  for(i = j+1 ; i < 8-j; i++)
  {
   gotoxy(7-j, 7-i);  //此时 7- j 对应x,7- i 对应y,x不变y减小 ,即垂直上移
   speaker();            //移一次,响一次
   delay();                //延时,让垂直移动速度慢
  }
  for(i = j+1 ; i < 7-j; i++)  
  {
   gotoxy(7-i, j);   //此时7- i 对应x,j 对应y,x减小 y不变,即水平左移
   speaker();        //移一次,响一次
   //delay();          //取消延时,水平速度快
  }
 }


 for(j = 4; j >= 0; j--)       //顺时针方向转动  j用于控制移动的点数(是上次的逆向)
 {
  for(i = 6-j ; i >= j+1; i--)  
  {
   gotoxy(7-i, j);    //此时7- i 对应x,j 对应y,x增大 y 不变,即水平右移
   speaker();         //移一次,响一次
   //delay();           //取消延时,水平速度快
  }
  for(i = 7-j ; i >= j+1; i--) 
  {
   gotoxy(7-j, 7-i);  //此时 7- j 对应x,7- i 对应y,x不变 y增大,即垂直下移
   speaker();           //移一次,响一次
   //delay();             //取消延时,垂直速度快
  }
  for(i = 7-j ; i >= j+1; i--)
  {
   gotoxy(i, 7-j);    //此时 i 对应x,7- j 对应y,x减小 y不变,即水平左移
   speaker();         //移一次,响一次
   //delay();           //取消延时,水平速度快
  }
  for(i = 7-j ; i >= j; i--)
  {
   gotoxy(j, i);      //此时 j 对应x,i 对应y,x不变y减小 ,即垂直上移
   speaker();        //移一次,响一次
   //delay();          //取消延时,水平速度快
  }  
 }
}


本节重点:


1、x、y坐标的改变方式(for循环的嵌套使用),希望大家能把程序运行产生的点的轨迹在纸上画出来,这样有助于理解程序。


另:点移动其实就四句话:x增大 y 不变,点水平右移;x减小 y不变,点水平左移;x不变 y增大,点垂直下移;x不变y减小 ,点垂直上移。花样就看你用什么样的方式改变x、y了


演示视屏:


http://v.youku.com/v_show/id_XOTIzNjU2MTY=.html


相关程序:https://static.assets-stash.eet-china.com/album/old-resources/2009/6/3/ef7bf4be-fcc7-478a-a9ff-6ffea41183de.rar


 


 


 



 

PARTNER CONTENT

文章评论1条评论)

登录后参与讨论

用户1576445 2011-3-15 15:02

有用
相关推荐阅读
用户222124 2010-12-08 22:18
台达PLC监控
台达PLC监控网上有很多例子,自己也照着弄了个,挺方便的,分享下串口数据格式:COM1,9600,8,N,1  ...
用户222124 2010-06-27 16:36
基于NIOS II和FPGA无线小车控制系统的设计
   主控制台以Cyclone II系列的EP2C8Q208C8为核心,通过nRF24L01进行无线通讯,来控制以ATmega8为微处理器的两轮小车,可以实现小车按控制平台发送的控制信息来准确运动。所...
用户222124 2009-11-13 15:58
51开发板已经销售完了,谢谢大家的支持!
51开发板已经销售完了,谢谢大家的支持!...
用户222124 2009-09-28 16:13
51开发板十一大放送!!!赶快行动吧!!!
  51开发板十一大放送!  赶快行动吧!!!   开发板硬件介绍: http://group.ednchina.com/2031/24972.aspx  开发板实物图片总汇: http://grou...
用户222124 2009-09-13 19:02
nios II 实验五 数码管显示数字钟(定时器实现 外部中断调节)
#include "system.h"                      //包含基本的硬件描述信息#include "altera_avalon_timer_regs.h"    //定义内...
用户222124 2009-09-13 18:57
nios II 实验四 PIO外部中断
#include "system.h"                      //包含基本的硬件描述信息#include "altera_avalon_timer_regs.h"    //定义内...
我要评论
1
5
关闭 站长推荐上一条 /3 下一条