本文包含原理图、PCB、源代码、封装库、中英文PDF等资源
您需要 登录 才可以下载或查看,没有账号?注册会员
×
由于看着第一届单片机电子设计大赛的题目,所以最近构思了此程序的思路 。我想单片机初学者几乎都做的一个实验就是流水灯实验,因为大家都做,所以就觉得很简单,很多人对这个实验几乎不屑。其实要彻底的玩转这个实验也是很不简单的事情,不信看看你能不能应付我下面的实验题:
硬件前提:用单片机的I/O口控制8个LED,1 点亮,0 熄灭(不限单片机类型,51,
AVR,PIC,430等等都可以,只要做出来效果就行)
(1)第1,3,5,7个灯半亮,其余的全亮。
(2)第1个亮1/8,第2个亮2/8,第3个亮3/8,第4个亮4/8,第5个亮5/8,第6个亮6/8,第7个亮7/8,第8个全亮。
(3)来点小难的,所有的灯逐渐从暗到全亮,再由全亮到暗。
(4)最难的:8个灯从第一个开始依次渐亮,直到最后一个。再从最后一个起渐暗,直到第一个。如此循环往复。这才是真正的流水灯。
所以我想各位如果是看了下面程序 我想大家应该很好地去解决上面这个问题到底该怎样去写了吧!!
#include "reg51.h"
#include <intrins.h>
unsigned int cd,dd;
unsigned char cc,ee;
void led_int() interrupt 1 using 0
{
TH0=0xf1;
TL0=0xf1;
TR0=1;
dd++;
if(dd==8)
{
if((cc==0x50)&&(ee==0)){cd=0;}
if((cc==0)&&(ee==0x50)){cd=1;}
if(cd){cc++;ee--;}
else {cc--;ee++;}
dd=0;
}
}
void delay(unsigned int i)
{
unsigned int j;
while(i--)
{
for(j=0;j<0x20;j++);
}
}
void main()
{
cc=0;
ee=0x50;
TMOD=0x01;
TH0=0xf0;
TL0=0xf0 ;
EA=1;
ET0=1;
TR0=1;
while(1)
{
P1=0x00;
delay(ee);
P1=0xff;
delay(cc);
}
}
可惜我还不知道怎么传送视频,贴个地址方便大家链接看看显示的效果:
http://u.youku.com/user_show/uid_%e5%86%b0%e5%b1%b1%e9%9b%aa%e8%8e%b2ying |
|