基于单片机的LED流水灯(着力解决加速减速bug问题)
2017-12-10 20:29
531 查看
设计花样流水灯,通过点亮组合发光二极管,显示十六个灯不同的花样,设置有开始、停止按键,并且可以通过相关按键来控制各花样运行的速度。在加速和减速按键上花了较多时间,看起来简单的东西自己写出来越困难。还有很多可以改进的地方。
#include<reg51.h> #include<intrins.h> unsigned char led_P0[]={0X01,0X02,0X04,0X08,0X10,0X20,0X40,0X80}; //从上往下循环点亮 unsigned char led_P2[]={0X01,0X02,0X04,0X08,0X10,0X20,0X40,0X80}; unsigned char led_P3[]={0X80,0X40,0X20,0X10,0X08,0X04,0X02,0X01}; //从下往上循环点亮 sbit P1_0=P1^0; sbit P1_1=P1^1; sbit P1_2=P1^2; sbit P1_3=P1^3; sbit P1_4=P1^4; sbit P1_5=P1^5; sbit P1_6=P1^6; sbit P3_6=P3^6; sbit P3_7=P3^7; char i,k,t,zanting, moshi1, moshi2, moshi3, moshi4, moshi5, moshi6,jiasu,jiansu; int a ,ms ; /*测试延时1017.80us,约1ms*/ void delay(unsigned int z) { unsigned int x,y; for(x = z; x > 0; x--) for(y = 114; y > 0 ; y--); } /* void delay (unsigned char time) { unsigned int j=15000; for(;time>0;time--) for(;j>0;j--); } */ /*判断按键*/ void jiance() { switch(P1&0XFF) { case 0xfe: zanting=1;moshi1=0;moshi3=0;moshi2=0;moshi4=0;moshi5=0;moshi6=0;jiasu=0;jiansu=0; break; case 0xfd:moshi1=1;zanting=0;moshi3=0;moshi2=0;moshi4=0;moshi5=0;moshi6=0;jiasu=0;jiansu=0;break; case 0xfb:moshi2=1;zanting=0;moshi3=0;moshi1=0;moshi4=0;moshi5=0;moshi6=0;jiasu=0;jiansu=0;break; case 0xf7:moshi3=1;zanting=0;moshi1=0;moshi2=0;moshi4=0;moshi5=0;moshi6=0;jiasu=0;jiansu=0;break; case 0xef:moshi4=1;zanting=0;moshi3=0;moshi2=0;moshi1=0;moshi5=0;moshi6=0;jiasu=0;jiansu=0;break; case 0xdf:moshi5=1;zanting=0;moshi3=0;moshi2=0;moshi4=0;moshi1=0;moshi6=0;jiasu=0;jiansu=0;break; case 0xbf:moshi6=1;zanting=0;moshi3=0;moshi2=0;moshi4=0;moshi5=0;moshi1=0;jiasu=0;jiansu=0;break; } } void jiance2() { switch(P3) { case 0xbf:jiasu=1; break; case 0x7f:jiansu=1;break; } } void init_timer0() { TMOD = 0x01; TH0 = (65536 - 15000) / 256; TL0 = (65536 - 15000) % 256; ET0 = 1; EA = 1; TR0 = 1; } void timer0_intr() interrupt 1 { TH0 = (65536 - 15000) / 256; TL0 = (65536 - 15000) % 256; jiance2(); jiance(); } void key() { if(jiansu) //速度减 { jiansu = 0; if(ms<1000) ms += 100; } if(jiasu) //速度加 { jiasu = 0; if(ms>1) ms -= 100; } } void main() { init_timer0(); //函数声明 ms = 500; a=0x01; while(1) { if(zanting) { P0=0; P2=0; } else{ if(moshi1) //从上往下,循环点亮 { for(i=0;i<16;i++) { key(); if(i<8) { P2=0x00; P0=a; } else { P0=0x00; P2=a; } a = _crol_(a,1); delay(ms); } /* for(i=0;i<8;i++) { P0=led_P0[i]; for(k=0;k<8;k++) { if(moshi1==0) { break; } P2=led_P2[k]; delay(200); } } */ } if(moshi2) //从下往上,循环点亮 { a=0x80; for(i=0;i<16;i++) { if(i<8) { P0=0x00; P2=a; a=_cror_(a,1); delay(200); } if(i>7) { P2=0x00; P0=a; a=_cror_(a,1); delay(200); } } /*for(i=7;i>=0;i--) { P2=led_P2[i]; for(k=7;k>=0;k--) { if(moshi2==0) { break; } P0=led_P0[k]; delay(200); } } */ } if(moshi3) //从上往下,隔一个循环点亮 { a=0x01; for(i=0;i<16;i+=2) { if(i<8) { P2=0x00; P0=a; a=_crol_(a,2); delay(400); } if(i>7) { P0=0x00; P2=a; a=_crol_(a,2); delay(400); } } } /*for(i=0;i<8;i+=2) { P0=led_P0[i]; for(k=0;k<8;k+=2) { if(moshi3==0) { break; } P2=led_P2[k]; delay(200); } } */ if(moshi4) //全亮,闪动 { P2=P0=0XFF; delay(200); P2=P0=0X00; delay(200); } if(moshi5) //中间向两边循环点亮 for(i=0;i<8;i++) { P0=led_P3[i]; P2=led_P2[i]; delay(200); } } if(moshi6) //中间向两边循环点亮 for(i=0;i<8;i++) { P0=led_P0[i]; P2=led_P3[i]; delay(200); } } }
相关文章推荐
- bug-解决-springMVC框架 启动tomcat时 (at org.springframework.asm.ClassReader.<init>(Unknown Source))问题
- 浮动bug的解决方法(续)——浮动间距问题
- Mantis Bug Tracker附件丢失和无法上传问题解决方法
- 基于VC++2012图形化解决皇后问题
- [转]解决IE/Mozilla/Webkit/Opera兼容问题的葵花宝典:CSS Bug Table
- Phase 2:解决HHVBF没法和基于握手的mac协议联用的问题
- 基于JChardet自动检测文件编码,批量转换文件编码,解决乱码问题
- 解决Form中ExternalInterface的Bug问题
- 程序猿基于解决复杂问题设计的一个APP
- 迷宫问题解决方法:分别基于深度搜索和广度搜索的思想来实现
- 怎样解决基于 Eclipse 的应用程序测试自动化脚本的回放问题
- 工作问题或者程序bug产生,解决思路
- Percona 开始尝试基于Ceph做上层感知的分布式 MySQL 集群,使用 Ceph 提供的快照,备份和 HA 功能来解决分布式数据库的底层存储问题
- 基于proteus的51单片机仿真实例十七、用不同的数据类型控制LED灯的闪烁频率
- 基于WinXP sp2配置biztalk2004遇到的问题及解决
- .解决带迅盘的机器WIN7关机速度慢的问题(去掉 ReadyBoost),怎样用询盘加速程序运行(装turbo momery dashboard)
- Xcode无法安装基于ruby的插件问题的解决
- 用贪心算法解决金钱兑换问题(基于JAVA)
- 基于STM32CT117E竞赛板(STM32f103RB)按键控制LED流水灯
- 基于Spring解决jsp传值乱码问题 get post