登录注册
华北水利水电大学 > 活动专区 > 浏览当前帖子 手机版 - 认证发帖 - 隐藏左侧栏
好看又实用!《光立方活动》
返回本版】  【发表帖子】  【回复帖子 浏览量  461      回帖数 0
茁茁    等级  瓶子

楼主 发表于  2017/11/28 16:43:42    编 辑   


活动时间:2018 年 5月 19日
活动地点:5206
参加人员: 自协成员
活动内容: 光立方原理教学及制作
光立方程序(部分):
#include<reg51.h> //包含头文件,一般情况不需要改动,头文件包含特殊功能寄存器的定义

#define DataPort P0 //定义数据端口 程序中遇到DataPort 则用P0 替换
sbit line_LATCH=P1^0;//定义锁存使能端口 行扫描的锁存端口
sbit LATCH1=P2^0;//定义锁存使能端口 第一灯板的字节锁存
sbit LATCH2=P2^1;// 
sbit LATCH3=P2^2;//
sbit LATCH4=P2^3;
sbit LATCH5=P2^4;
sbit LATCH6=P2^5;
sbit LATCH7=P2^6;
sbit LATCH8=P2^7;

void Delay(unsigned int t)
{
 while(--t);
}
unsigned char line[8]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};// 显示行值01234567 
void display(unsigned char *Data)//显示子程序,指针数组作为形参,直接指向传过来的实参数组的地址 ,这样就可直接操纵数组传过来的数组了
{
unsigned char i;
 for(i=0;i<8;i++)
 {
 DataPort=line[i]; //先给行(灯板的公共端)输入数据
line_LATCH=1; //打开锁存,把数据line[i]放进去
line_LATCH=0; //关闭锁存,阻止外部数据进来

DataPort=Data[i]; //把数组Data[0~7]里的值依次传给第一灯板的573锁存器中
LATCH1=1;LATCH1=0;

 DataPort=Data[8+i]; //把数组Data[8~15]里的值依次传给第二灯板的573锁存器中 
LATCH2=1;LATCH2=0; 

 DataPort=Data[16+i]; //把数组Data[16~23]里的值依次传给第三灯板的573锁存器中
LATCH3=1;LATCH3=0; 

 DataPort=Data[24+i];
 LATCH4=1;LATCH4=0;

 DataPort=Data[32+i];
 LATCH5=1;LATCH5=0; 

 DataPort=Data[40+i];
 LATCH6=1;LATCH6=0; 

 DataPort=Data[48+i];
 LATCH7=1;LATCH7=0; 

 DataPort=Data[56+i];
 LATCH8=1;LATCH8=0;

 Delay(200); //扫描间隙延时,时间太长会闪烁,太短会造成重影

DataPort=0xff; // 清空行锁存器里数据,防止出现乱码
line_LATCH=1; //
 line_LATCH=0;
 } /*如此一趟循环下来,每次都是8块灯板的同一行一起点亮,
 如此组成一个灯板,8次循环下来,就全部灯都点亮了*/
}

void liang() //点亮所有的灯
{
unsigned int i;
 for(i=0;i<5000;i++)
 {
 DataPort=0x00; //先给行(灯板的公共端)输入数据
line_LATCH=1; //打开锁存,把数据0x00放进去
line_LATCH=0; //关闭锁存,阻止外部数据进来

DataPort=0xff; //把0xff送进锁存器1~8中,使它们的输出引脚都输出高电平,与行锁存器的0x00相对,点亮所有的灯
LATCH1=1;LATCH1=0;
 LATCH2=1;LATCH2=0; 
 LATCH3=1;LATCH3=0; 
 LATCH4=1;LATCH4=0;
 LATCH5=1;LATCH5=0;
 LATCH6=1;LATCH6=0;
 LATCH7=1;LATCH7=0;
 LATCH8=1;LATCH8=0;
 } 
}
void mie() //熄灭所有的灯
{
unsigned int i;
 for(i=0;i<5000;i++)
 {
 DataPort=0x00; //先给行(灯板的公共端)输入数据
line_LATCH=1; //打开锁存,把数据0x00放进去
line_LATCH=0; //关闭锁存,阻止外部数据进来

DataPort=0x00; //把0x00送进锁存器1~8中,使它们的输出引脚都输出高电平,与行锁存器的0x00相对,熄灭所有的灯
LATCH1=1;LATCH1=0;
 LATCH2=1;LATCH2=0; 
 LATCH3=1;LATCH3=0; 
 LATCH4=1;LATCH4=0;
 LATCH5=1;LATCH5=0;
 LATCH6=1;LATCH6=0;
 LATCH7=1;LATCH7=0;
 LATCH8=1;LATCH8=0;
 }

void Laihui() //来回灯板显示效果
{
unsigned char i;
 unsigned char code laihui0[]={0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,//定义空间为64的数组并赋值,用以传递给显示子程序
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff
 };
 unsigned char code laihui1[]={0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
 }; 

PS:由于科技文化节即将到临,协会将与其他协会举办一场大型比赛,本次活动将会详细讲解比赛规则及相关事宜,有意向的同学请快来参加活动吧!

@华水社联


1
表情
所有内容均为会员自愿发表,并不代表本站立场.
©ncwu.unvst.com  Processed in 0.48