文章搜索

8X8 LED点矩阵垂直移动实验

发表时间:2015-4-29  作者:admin  浏览次数:1060  
字体大小: 【小】 【中】 【大】
/* 8X8 LED点矩阵垂直移动实验(ch12-5-5.c) */
#include  <reg51.h>
#define ROWP P2 // 输出列接至P2 
#define COLP P1 // 扫瞄行接至P1
#define repeat  30 // 扫瞄30周,约2m*8*30 =0.48秒 
#define counts 3 // 旋转3次 
sbit PB0 = P3^6; // 声明上移按钮 
sbit PB1 = P3^7; // 声明下移按钮 
//============== 字  型 ====================
unsigned char code d[2][8]={ 
 { 0x10, 0x18, 0xfc, 0xfe, 0xfc, 0x18, 0x10, 0x00},  //  上 
 { 0x00, 0x08, 0x18, 0x3f, 0x7f, 0x3f, 0x18, 0x08}}; //  下  
unsigned char scan;    // 声明行扫瞄变量 
void RO_UD(bit);    // 声明上/下转函数(0:上/1:下)  
void delay1ms(int);    // 声明延迟函数 */
//============== 主 程 式 ==================
main()       // 主程序开始 
{ PB0=PB1=1;     // 设定输入埠 
 while (1)     // 无穷尽循环 
 { if (PB0==0) RO_UD(0); // 按下PB0, 上转3圈 
  if (PB1==0) RO_UD(1); // 按下PB1, 下转3圈 
  COLP=0xff;    // 关闭LED 
 }       // while结束 
}        // 主程序结束 
//============== 上/下转函数 ==================
void RO_UD(bit UD)    // UD:控制上下(0:上/1:下)
{ int  i,j,k,l;    // 声明变量 
 for (l=0;l<counts;l++)  // 转counts次 
  for (j=0;j<8;j++)  // 移动上下j列 
   for (k=0;k<repeat;k++) // 扫瞄repeat周 
   { scan=0x01;  // 初始扫瞄信号 
    for (i=0;i<8;i++)// 扫瞄第i行 
    { ROWP=0x00; // 关闭LED(防残影)
     COLP=~scan; // 输出扫瞄信号 
     if(UD==0) // 按下PB0上转 
      ROWP =  d[1][i]>>j | d[1][i]<<(8-j);
     else  // 按下PB1下转 
      ROWP = d[0][i]<<j | d[0][i]>>(8-j);
     delay1ms(2);// 延迟2ms 
     scan<<=1; // 下个扫瞄信号 
    }    // 行扫瞄(变量i)结束 
   }     // 扫瞄repeat次 
}        // 结束左/右转函数 
//============== 延迟函数 ==================
void delay1ms(int x)
{ int i,j;     // 声明变量 
 for (i=0;i<x;i++)   // 外循环,延迟xms
   for (j=0;j<120;j++);// 内循环,延迟1ms
}        // 延迟函数结束 

本站已经获得中华人民共和国工信部、通信管理局审批通过 国家ICP备案序号: 赣ICP备13006653号-2

电工电子技术QQ群(1):66585281电工电子技术QQ群(2):197874883电工电子技术QQ群(3):29019650 

版权归刘昆山所有©2013-2020转载须经本人同意,否则后果自负!  《我的电子制作经验》www.dgdz.net All Rights Reserved.

管 理