|
登录注册 |
☦ 华北水利水电大学 > 活动专区 > 浏览当前帖子 | 手机版 - 认证发帖 - 隐藏左侧栏 |
好看又实用!《光立方活动》 | |
【返回本版】 【发表帖子】 【回复帖子】 | 浏览量 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 |