为了正常的体验网站,请在浏览器设置里面开启Javascript功能!

霹雳游侠灯

2013-09-06 37页 pdf 661KB 30阅读

用户头像

is_803928

暂无简介

举报
霹雳游侠灯 晴天电子工作室 sunnyelestudio.taobao.com 霹雳游侠灯 v1 110827 霹雳游侠灯 v1 制作详解 ...
霹雳游侠灯
晴天电子工作室 sunnyelestudio.taobao.com 霹雳游侠灯 v1 110827 霹雳游侠灯 v1 制作详解 sunnyelestudio.taobao.com 1 目录 硬件部分 .................................................................................................................................................................................................. 3 硬件构造 .......................................................................................................................................................................................... 3 制作思路 .......................................................................................................................................................................................... 3 软件部分 .................................................................................................................................................................................................. 7 什么是 pwm? ..................................................................................................................................................................................... 7 它是如何控制的?........................................................................................................................................................................... 7 程序原理 .......................................................................................................................................................................................... 8 中断概念的引入 ............................................................................................................................................................................ 12 实例: .................................................................................................................................................................................................... 15 预处理 ............................................................................................................................................................................................ 15 全局变量设定 ................................................................................................................................................................................ 15 延时函数 ........................................................................................................................................................................................ 16 取绝对值函数 ................................................................................................................................................................................ 16 定时器设置函数 ............................................................................................................................................................................ 17 p0 口位处理函数 ........................................................................................................................................................................... 17 p2 口位处理函数 ........................................................................................................................................................................... 18 清屏函数 ........................................................................................................................................................................................ 19 呼吸灯函数 .................................................................................................................................................................................... 19 霹雳游侠灯 v1 制作详解 sunnyelestudio.taobao.com 2 动画区域 ........................................................................................................................................................................................ 20 主函数 ............................................................................................................................................................................................ 33 中断服务函数 ................................................................................................................................................................................ 35 霹雳游侠灯 v1 制作详解 sunnyelestudio.taobao.com 3 硬件部分 硬件构造 本制作包括 stc89c52单片机、电阻、电容、led发光二极管、晶振构成。 制作思路 所有 led由单片机引脚直接控制,由单片机性质,我们采用下图所示方式来控制。 霹雳游侠灯 v1 制作详解 sunnyelestudio.taobao.com 4 连上周围的元件,组成单片机最小系统,当然我们的电路不必死板教条,在连接的时候可以随意些,一些用 不到的部分可以去掉。 如图,这是单片机的复位电路,这个电路是不可缺少的,但是微动开关却不是必须的,所以在这里我们可以 省略。 开关我们是用不到的。 至此,我们的电路原理图就绘制完成了。 霹雳游侠灯 v1 制作详解 sunnyelestudio.taobao.com 5 霹雳游侠灯 v1 制作详解 sunnyelestudio.taobao.com 6 接下来我们还要安排怎么走线。 霹雳游侠灯 v1 制作详解 sunnyelestudio.taobao.com 7 我的想法是尽可能用方便的走线来实现我们的电路。在制作过程中我使用的洞洞板,大致走线跟途中一致, 但是晶振我焊在单片机下面。 软件部分 我们都知道,单片机的输出的只有两种电平,一个高电平和一个低电平那么我们如何实现让这样的一个引脚 老控制灯亮暗的变化呢,首先你要对 pwm有一定的了解。 什么是 pwm? PWM是英文“Pulse Width Modulation”的缩写,简称:脉冲宽度调制。简单的说,就是在一个输出周期里, 我们调整高电平和低电平所占的比例,从而来控制灯得亮度。 它是如何控制的? 我们知道我们平时所用的交流电,简单的说是正弦波,也就是说电压随着时间的变化在不停的变化,那么 220v这个值是怎么来的呢?当然不是平均值。如图所示 而在 pwm输出里,我们分别求出面积,再用相同方法。很容易的我们就知道相对应的亮度是多少。 这么解释 pwm也许并不是很,但是大概就是这个意思。但实际中的亮度并不像上述计算那么简单。上面 的话只是告诉大家它的原理是怎样。不可深究。 霹雳游侠灯 v1 制作详解 sunnyelestudio.taobao.com 8 既然我们知道了 pwm的工作原理了,那么我们就来写一个简单的程序来控制我们的一个灯得亮度吧。 程序原理 首先我们先来写一个程序。 要求:控制 P0.0口的灯的亮度 #include #define uchar unsigned char sbit led=P0^0; void main() { uchar i,n; n=1; while(1) { for (i=0;i<100;i++) { if (i
一个周期里一个循环的结束,进入下一次循环,也就是说, 计时器计数一百次,才完成一个周期。 我们知道,我们人眼看到连贯动作最小帧率是 15帧/秒,那么我们每一个周期就要控制在一帧里。打开计算 器,来计算,1/15/100所得的时间就是计时器所要设定的时间。 在根据公式我们很简单的求出 TH0,TL0 里需要设定的具体数值。启动中断,启动定时器,设定计时器,经过 霹雳游侠灯 v1 制作详解 sunnyelestudio.taobao.com 13 这几个过程,我们的中断就写完了,具体如下: void sinter() { IE=0x82; TCON=0x01; TH0=0xc0; TL0=0xFD; TR0=0x66; } 这是对应的中断服务程序: void print() interrupt 1 { static uchar i=1; P0=bitcountp0(i); if (i<100) i++; else i=1; TH0=0xFd; TL0=0x66; } 霹雳游侠灯 v1 制作详解 sunnyelestudio.taobao.com 14 由此我们介绍完了底层的驱动代码。 接下来你做的就是用程序来设定 dismem[]里面的值,来控制不同灯得亮度来实现动画的产生。而且不用考虑 其他任何因素,这也是用中断的优点,仿佛单片机在多任务同时处理一样,互不影响,互不干扰。 对于 bitcountp0()函数 uchar bitcountp0(uchar n) { uchar i,p=0; for (i=0;i<8;i++) { if (dismem[i] #define uchar unsigned char #define uint unsigned int 全局变量设定 uchar dismem[16]; uchar code tab[16]={0,1,2,3,4,5,6,7,8,9,11,13,16,22,35,50}; 霹雳游侠灯 v1 制作详解 sunnyelestudio.taobao.com 16 uchar code ann[]={1,1,1,1,1,1,1,1,2,3,6,10,14,20,35,50,35,20,14,10,6,3,2,1,1,1,1,1,1,1,1,1}; uchar code ann2[]={0,0,0,0,0,0,0,0,1,2,6,14,35,50,35,14,6,2,1,1,1,0,0,0,0,0,0,0,0}; 延时函数 void delay(uint i) { while(i--); } 取绝对值函数 char abs(char i) { if (i<0) i=-i; return i; } 霹雳游侠灯 v1 制作详解 sunnyelestudio.taobao.com 17 定时器设置函数 void sinter() { IE=0x82; TCON=0x01; TH0=0xc0; TL0=0xFD; TR0=0x66; } p0 口位处理函数 uchar bitcountp0(uchar n) { uchar i,p=0; for (i=0;i<8;i++) { if (dismem[i]>i); } return p; } 霹雳游侠灯 v1 制作详解 sunnyelestudio.taobao.com 19 清屏函数 void clean(uchar n) { uchar i; for (i=0;i<16;i++) { dismem[i]=n; } } 呼吸灯函数 其中被控制灯在第 a 个和第 b 个之间。speed 是呼吸速度。 void roll10(uchar a,uchar b,uint speed) { uchar i,j; for (i=1;i<50;i++) { for (j=a;j0;i--) { for (j=a;j0;i--) { for (j=0;j<16;j++) { dismem[j]=ann[i+j]; } delay(800+abs(i-8)*50); } delay(2500); 霹雳游侠灯 v1 制作详解 sunnyelestudio.taobao.com 23 } void flash_4() { uchar i,j,k; for (i=0;i<16;i++) { k=(i%2)*50; for (j=0;j<8;j++) { dismem[j]=k; } k=((i+1)%2)*50; for (j=8;j<16;j++) { dismem[j]=k; } delay(3000); } for (j=0;j<8;j++) { dismem[j]=50; 霹雳游侠灯 v1 制作详解 sunnyelestudio.taobao.com 24 } for (i=50;i>0;i--) { for (j=0;j<16;j++) { dismem[j]=i-1; } delay (300); } } void flash_5() { roll10(0,4,300); roll10(4,8,300); roll10(8,12,300); roll10(12,16,300); roll10(12,16,300); roll10(8,12,300); roll10(4,8,300); roll10(0,4,300); } 霹雳游侠灯 v1 制作详解 sunnyelestudio.taobao.com 25 void flash_6_1(uint speed) { uchar i,j; for (i=1;i<50;i++) { for (j=0;j<16;j+=2) { dismem[j]=i; } for (j=1;j<16;j+=2) { dismem[j]=49-i; } delay (speed); } for (i=49;i>0;i--) { for (j=0;j<16;j+=2) { dismem[j]=i; } 霹雳游侠灯 v1 制作详解 sunnyelestudio.taobao.com 26 for (j=1;j<16;j+=2) { dismem[j]=49-i; } delay (speed); } } void flash_6_2(uint speed) { uchar i,j; for (i=1;i<50;i++) { for (j=0;j<4;j++) { dismem[j]=i; dismem[j+8]=i; } for (j=4;j<8;j++) { dismem[j]=49-i; dismem[j+8]=49-i; 霹雳游侠灯 v1 制作详解 sunnyelestudio.taobao.com 27 } delay (speed); } for (i=49;i>0;i--) { for (j=0;j<4;j++) { dismem[j]=i; dismem[j+8]=i; } for (j=4;j<8;j++) { dismem[j]=49-i; dismem[j+8]=49-i; } delay (speed); } } void flash_6() { uchar i,j; 霹雳游侠灯 v1 制作详解 sunnyelestudio.taobao.com 28 for (i=1;i<50;i++) { for (j=1;j<16;j+=2) { dismem[j]=i; } delay (500); } flash_6_1(500); flash_6_1(500); flash_6_1(500); flash_6_1(500); for (i=49;i>0;i--) { for (j=1;j<16;j+=2) { dismem[j]=i; } delay (500); } for (i=1;i<50;i++) 霹雳游侠灯 v1 制作详解 sunnyelestudio.taobao.com 29 { for (j=4;j<8;j++) { dismem[j]=i; dismem[j+8]=i; } delay (500); } flash_6_2(500); flash_6_2(500); flash_6_2(500); for (i=49;i>0;i--) { for (j=4;j<8;j++) { dismem[j]=i; dismem[j+8]=i; } delay (500); } } 霹雳游侠灯 v1 制作详解 sunnyelestudio.taobao.com 30 void flash_7() { uchar i,j,k; for (i=0;i<15;i++) { k=(i%2)*50; for (j=0;j<8;j++) { dismem[j]=k; } delay(1500); } for (i=0;i<15;i++) { k=(i%2)*50; for (j=8;j<16;j++) { dismem[j]=k; } delay(1500); } 霹雳游侠灯 v1 制作详解 sunnyelestudio.taobao.com 31 } void flash_8() { uchar i,j; for (i=0;i<22;i++) { for (j=0;j<8;j++) { dismem[j]=ann2[i+j]; dismem[15-j]=ann2[i+j]; } delay(500); } } void flash_9_l() { uchar i,j; for (i=0;i<4;i++) dismem[i]=50; for (i=4;i<8;i++) dismem[i]=1; 霹雳游侠灯 v1 制作详解 sunnyelestudio.taobao.com 32 for (i=0;i<12;i++) { for (j=15;j>4;j--) dismem[j]=dismem[j-1]; dismem[4]=0; delay(1500); } } void flash_9_r() { uchar i,j; for (i=12;i<16;i++) dismem[i]=50; for (i=8;i<12;i++) dismem[i]=1; for (i=0;i<12;i++) { for (j=0;j<11;j++) dismem[j]=dismem[j+1]; dismem[11]=0; delay(1500); 霹雳游侠灯 v1 制作详解 sunnyelestudio.taobao.com 33 } } void flash_9() { flash_9_l(); flash_9_l(); flash_9_l(); flash_9_r(); flash_9_r(); flash_9_r(); } 主函数 主函数调用动画区域的函数,这里可以理解一个播放列表。 void main() { sinter(); clean(0); //play list; 霹雳游侠灯 v1 制作详解 sunnyelestudio.taobao.com 34 while(1) { flash_1(); flash_2(); flash_3(); flash_3(); flash_3(); flash_4(); flash_2(); flash_2(); flash_5(); flash_6(); flash_7(); flash_7(); flash_7(); flash_7(); flash_8(); flash_8(); flash_8(); flash_9(); flash_2(); 霹雳游侠灯 v1 制作详解 sunnyelestudio.taobao.com 35 } } 中断服务函数 void print() interrupt 1 { static uchar i=1; P0=bitcountp0(i); P2=bitcountp2(i); if (i<50) i++; else i=1; TH0=0xFd; TL0=0x66; } The End 您的点击和支持就是我前进的动力!
/
本文档为【霹雳游侠灯】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。 本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。 网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
热门搜索

历史搜索

    清空历史搜索