纯手工打造摇摆LED 时钟
[09-11 23:01:23] 来源:http://www.88dzw.com 单片机学习 阅读:8464次
文章摘要:TL0=-(50000%256);TR0=1;BUFFER[0]=BUFFER[0]+1;}/*定时中断2 处理(LED 驱动和音圈驱动)函数*/void timer1(void) interrupt 3 using 1{TH1=Ti/256; TL1=Ti%256;if((ii*6+jj)==Ta) {put1=~put1;put2=~put2;}; //音圈电机驱动输出if(ff==1){if(Ms*w[ii-3]==1) P2=0xff; else P2=~ASCIIDOC[v[ii]*6+jj]; //正向显示}else {if(Ms*w[10-ii]==1) P2=0xff; els
纯手工打造摇摆LED 时钟,标签:单片机开发,单片机原理,单片机教程,http://www.88dzw.comTL0=-(50000%256);
TR0=1;
BUFFER[0]=BUFFER[0]+1;
}
/*定时中断2 处理(LED 驱动和音圈驱动)函数*/
void timer1(void) interrupt 3 using 1
{
TH1=Ti/256; TL1=Ti%256;
if((ii*6+jj)==Ta) {put1=~put1;put2=~put2;}; //音圈电机驱动输出
if(ff==1){
if(Ms*w[ii-3]==1) P2=0xff; else P2=~ASCIIDOC[v[ii]*6+jj]; //正向显示
}
else {
if(Ms*w[10-ii]==1) P2=0xff; else P2=~ASCIIDOC[v[13-ii]*6+5-jj]; //反向显示
}
jj++;
if(jj>5) {ii++; jj=0;}
if(ii>13) {ii=0;ff=!ff;}
Ti=-Tr[ii*6+jj]; //读显示中断表
}
/*主程序*/
void main(void)
{
//变量初始化
Ms=0;
ff=0;
Ta=46; //正反显一致性调整, 取值范围在42~50 之间, 根据实际确定
put1=0;put2=1;
//中断初始化
TMOD=0x11;
TH0=-5000/256; TL0=-5000%256;
TR0=1;ET0=1;
TH1=-2000/256; TL1=-2000%256;
TR1=1;ET1=1;
//十四个字符中前三个和后三个不显(不用)
v[0]=10;
v[1]=10;
v[2]=10;
v[11]=10;
v[12]=10;
v[13]=10;
/*摇摆棒初始启动*/
do {
mm++;
Delay(120+mm);
put1=~put1; put2=~put2;
}while(mm<60);
Delay(20);
/*启动显示*/
ii=0;jj=0;
EA=1;
/*正式运行*/
for(;;){
v[3]=36;v[4]=44;v[5]=51;v[6]=42;v[7]=54;v[8]=52;v[9]=44;v[10]=11; //显示欢迎
Delay(6000);
v[3]=10;v[4]=10;v[5]=10;v[6]=10;v[7]=10;v[8]=10;v[9]=10;v[10]=10; //关闭显示
Delay(600);
v[3]=0;v[4]=0;v[5]=13;v[6]=0;v[7]=0;v[8]=13;v[9]=0;v[10]=0; //显示时钟初始状
态
/*进入时钟状态*/
while(1){
//时钟处理
if (BUFFER[0]>21){ //进位到秒
BUFFER[0]=0; BUFFER[1]=BUFFER[1]+1;
Ms=!Ms;
if (BUFFER[1]==60){ //进位到分
BUFFER[1]=0;BUFFER[2]=BUFFER[2]+1;
if (BUFFER[2]==60){
BUFFER[2]=0;BUFFER[3]=BUFFER[3]+1; //进位到时
if (BUFFER[3]==24) BUFFER[3]=0;
}
}
}
//将显示内容送显示缓冲区
v[9]=BUFFER[1]/10;
v[10]=BUFFER[1]-v[9]*10;
v[6]=BUFFER[2]/10;
v[7]=BUFFER[2]-v[6]*10;
v[3]=BUFFER[3]/10;
v[4]=BUFFER[3]-v[3]*10;
//键盘处理
if(ChKey(set0)==1){ //模式键
Ms=1; //秒闪开
if(TZ<2) TZ++; else TZ=0; //三种状态循环转换
switch(TZ){
case 0:w[0]=0;w[1]=0;w[2]=0;w[3]=0;w[4]=0;w[5]=0;w[6]=0;w[7]=0;break;
case 1:w[0]=0;w[1]=0;w[2]=0;w[3]=1;w[4]=1;w[5]=0;w[6]=0;w[7]=0;break;
case 2:w[0]=1;w[1]=1;w[2]=0;w[3]=0;w[4]=0;w[5]=0;w[6]=0;w[7]=0;break;
}
Ms=0; //秒闪关
};
Delay(80);
if(ChKey(set1)==1){ if(BUFFER[TZ+1]
//键盘"+"
if(ChKey(set2)==1){ if(BUFFER[TZ+1]>0) BUFFER[TZ+1]--; else
BUFFER[TZ+1]=maxnum[TZ-1];Delay(300);};
//键盘"-"
Delay(80);
}
}
}
四.调试方法
虽说是个机电一体的制作,但调试过程并不复杂。
1. 机械部分的调整主要是两只拉簧, 要尽量保证两边受力一致,让摇棒静态时保持在竖直状态。
2. 软件部分,先将void timer1(void)函数中的“Ti=-Tr[ii*6+jj];”这段程序删除,试着让Ti 取一常数值(大约-2000 左右)看显示效果(摇棒摆动的幅度),一直到满意为止,这时正反显示可能没有重合,接着试Ta 的取值,范围在42 到50 之间,使正反显示重合为止。最后一步就是调整显示的不均匀性,将“Ti=-Tr[ii*6+jj];”这段程序恢复回来,试着改变Tr[]表中数组元素的值,并保证表中的元素的平均值为开始Ti 取得的值,让显示的每个字符宽度一致为止。
五.结语
本制作电路简单,其原理实质就是LED 流水灯,而关键的音圈电机也很容易找到,很适合刚入门的单片机爱好者制作。制作还有发挥的地方,
1. 添加时钟IC,使显时更精准,而且不怕掉电;
2. 加装位置传感器,增加显示的稳定性;
3. 增添摇控功能,使调整更方便。
Tag:单片机学习,单片机开发,单片机原理,单片机教程,单片机学习
- 上一篇:自制AT89C51编程器
《纯手工打造摇摆LED 时钟》相关文章
- › 纯手工打造摇摆LED 时钟
- 在百度中搜索相关文章:纯手工打造摇摆LED 时钟
- 在谷歌中搜索相关文章:纯手工打造摇摆LED 时钟
- 在soso中搜索相关文章:纯手工打造摇摆LED 时钟
- 在搜狗中搜索相关文章:纯手工打造摇摆LED 时钟
分类导航
最新更新