原理图
元件清单
制作过程与成品
原理图绘制PCB
一、必须先焊接背面元件(焊接好图片如下)
第一步、焊接电阻、电容C1/C2和晶振
第二步、焊接纽扣电池座、U1和U2芯片座,注意芯片的方向
第三步、焊接电源接口,三极管,光敏和热敏电阻
注意焊接单片机、时钟芯片、三极管的方向,如下图:
第四步、焊接两个按键
二、焊接完背面元件,再焊接正面元件:正面元件包含数码管和LED
第一步、焊接数码管,注意方向
第二步、焊接LED,其中1,2,3,4,5,6,7,8,9,10,11,12焊接红色led,其余焊接蓝色。(长脚为正极,对应灯丝印上“+”)
第一步、焊接电阻、电容C1/C2和晶振
第二步、焊接纽扣电池座、U1和U2芯片座,注意芯片的方向
第三步、焊接电源接口,三极管,光敏和热敏电阻
注意焊接单片机、时钟芯片、三极管的方向,如下图:
第四步、焊接两个按键
二、焊接完背面元件,再焊接正面元件:正面元件包含数码管和LED
第一步、焊接数码管,注意方向
第二步、焊接LED,其中1,2,3,4,5,6,7,8,9,10,11,12焊接红色led,其余焊接蓝色。(长脚为正极,对应灯丝印上“+”)
一、花样选择(在时间显示界面下):
按一下①号按键,切换下一个led旋转样式;
二、调节设置(在时间显示界面下):
1、按一下②号按键,进入设置时间分,这个时候2号显示区闪烁,表示可以设置时间的分,这个时候,按①号按键可进行时间分的设置;
2、再按一下②号按键,进入设置时间时,这个时候1号显示区闪烁,表示可以设置时间的时,这个时候,按①号按键可进行时间分的设置;
3、再按一下②号按键,进入设置闹钟分,这个时候2号显示区闪烁,表示可以设置闹钟的分,这个时候,按①号按键可进行闹钟分的设置;
4、再按一下②号按键,进入设置闹钟时,这个时候1号显示区闪烁,表示可以设置闹钟的时,这个时候,按①号按键可进行闹钟时的设置;
5、再按一下②号按键,进入设置闹钟开启关闭设置,这个时候1、2号显示区显示1或者0,这个时候,按①号按键可进行闹钟的开启或者关闭,1是开启,0是关闭;
6、再按一下②号按键,进入设置光控开启关闭设置,这个时候1、2号显示区显示1或者0,这个时候,按①号按键可进行光控的开启或者关闭,1是开启,0是关闭;
单片机源程序#include "STC15F2K.h"#include "intrins.h" #include <math.h> #define uchar unsigned char #define uint unsigned int sfr ADC_LOW2 = 0xBE; //ADC低2位结果 #define ADC_POWER 0x80 //ADC电源控制位 #define ADC_FLAG 0x10 //ADC完成标志 #define ADC_START 0x08 //ADC起始控制位 #define ADC_SPEEDLL 0x00 //540个时钟 #define ADC_SPEEDL 0x20 //360个时钟 #define ADC_SPEEDH 0x40 //180个时钟 #define ADC_SPEEDHH 0x60 //90个时钟 sbit S1=P3^3; sbit S2=P3^4; sbit S3=P3^5; sbit S4=P3^6; sbit S5=P3^7; sbit S6=P1^2; sbit S7=P1^3; sbit S8=P1^4; sbit S9=P1^5; sbit S10=P1^6; sbit S11=P1^7; sbit S12=P5^4; sbit bell=P3^0; sbit set=P1^0; sbit jia=P1^1; uchar dat1[]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xf8,0X80,0X90,0xff,0xc6}; uchar dat2[]={0x40,0x79,0x24,0x30,0x19,0x12,0x02,0x78,0X00,0X10,0xff};//有小数点 uchar dat3[9]={0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF};// uchar dat4[9]={0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF};// uchar t_led0[8]={0}; uchar t_led1[8]={0}; uchar table[4]={1,2,3,4}; uchar xg=0; char t=0; int t1; char ps=0; char flag=1; int sudu1=0,sudu2=0; unsigned int temp[2]; int ld; extern void init_ds1302_io(); extern void init_ds1302(); extern void read_time(); extern void write_time(); extern void read_nao(); extern uchar miao; extern uchar fen; extern uchar shi; extern uchar nfen; extern uchar nshi; void Delayms(uint t) { uchar i; while(t--) for(i=0;i<100;i++); } void display() { S12=0;S1=1; P2=dat1[table[0]]; Delayms(2); S1=0;S2=1; if(flag==0)P2=dat2[table[1]]; if(flag==1)P2=dat1[table[1]]; Delayms(2); S2=0;S3=1; P2=dat1[table[2]]; Delayms(2); S3=0;S4=1; P2=dat1[table[3]]; Delayms(2); ////////////////////////////////////////////////////// P2=0xff; S4=0;S5=1; P2=dat3[t_led0[0]]&dat4[t_led1[0]]; Delayms(2); P2=0xff; S5=0;S6=1; P2=dat3[t_led0[1]]&dat4[t_led1[1]]; Delayms(2); P2=0xff; S6=0;S7=1; P2=dat3[t_led0[2]]&dat4[t_led1[2]]; Delayms(2); P2=0xff; S7=0;S8=1; P2=dat3[t_led0[3]]&dat4[t_led1[3]]; Delayms(2); P2=0xff; S8=0;S9=1; P2=dat3[t_led0[4]]&dat4[t_led1[4]]; Delayms(2); P2=0xff; S9=0;S10=1; P2=dat3[t_led0[5]]&dat4[t_led1[5]]; Delayms(2); P2=0xff; S10=0;S11=1; P2=dat3[t_led0[6]]&dat4[t_led1[6]]; Delayms(2); P2=0xff; S11=0;S12=1; P2=dat3[t_led0[7]]&dat4[t_led1[7]]; Delayms(2); S1=S2=S3=S4=S5=S6=S7=S8=S9=S10=S11=S12=1; P2=0xff; S1=S2=S3=S4=S5=S6=S7=S8=S9=S10=S11=S12=0; Delayms(2); } void init() { TMOD= 0x01; TL0 = (65536-20000)/256; //设置定时初值 TH0 = (65536-20000)%256; //设置定时初值 ET0 = 1; TR0 = 1; EA = 1; } char menu=0; bit nf=0; bit gk=0; void key() { uchar i; if(jia==0 && menu==0) { while(jia==0); xg++; nf=0; if(xg==2){dat4[0]=0XFF;dat4[1]=0XFF;dat4[2]=0XFF;dat4[3]=0XFF;dat4[4]=0XFF;dat4[5]=0XFF;dat4[6]=0XFF;dat4[7]=0XFF;dat4[8]=0XFF;} if(xg==3){dat3[0]=0xFE;dat3[1]=0xFC;dat3[2]=0xF8;dat3[3]=0xF0;dat3[4]=0xE0;dat3[5]=0xC0;dat3[6]=0x80;dat3[7]=0x00;dat3[8]=0xFF;} if(xg==5) { sudu1=0;sudu2=0; for(i=0;i<9;i++) { //dat3[i]=0XFF; dat4[i]=0XFE; } dat3[0]=0X01;dat3[1]=0X03;dat3[2]=0X07;dat3[3]=0X0F;dat3[4]=0X1F;dat3[5]=0X3F;dat3[6]=0X7F;dat3[7]=0XFF;dat3[8]=0x00; } if(xg==6) { sudu1=0;sudu2=0; for(i=0;i<9;i++) { dat3[i]=0XFF; dat4[i]=0XFC; } for(i=0;i<8;i++){t_led0[i]=8;} for(i=0;i<8;i++){t_led1[i]=0;} } if(xg==7) { sudu1=0;sudu2=0; for(i=0;i<9;i++) { dat3[i]=0XFF; dat4[i]=0XFF; } for(i=0;i<8;i++){t_led0[i]=i;} for(i=0;i<8;i++){t_led1[i]=i;} } if(xg==8) { sudu1=0;sudu2=0; for(i=0;i<9;i++) { dat3[i]=0XFF; dat4[i]=0XFF; } } if(xg==9) { sudu1=0;sudu2=0; for(i=0;i<9;i++) { dat3[i]=0XFF; dat4[i]=0XFF; } } if(xg==10){xg=0;for(i=0;i<9;i++)dat4[i]=0XFF;} } if(set==0) { bell=0; menu++; if(menu==3){read_nao();} if(menu==7){menu=0;ET1 = 1;write_time();} while(set==0); bell=1; } if(menu==1) { if(jia==0) { bell=0; if(fen >= 0x60) fen = 0; fen=fen+0x01; if((fen & 0x0f) >= 0x0a) fen = (fen & 0xf0) + 0x10; while(jia==0); bell=1; } } if(menu==2) { if(jia==0) { bell=0; shi+=0x01; if((shi & 0x0f) >= 0x0a) shi = (shi & 0xf0) + 0x10; if(shi >= 0x24) shi = 0; while(jia==0); bell=1; } } if(menu==3) //闹钟 { if(jia==0) { bell=0; if(nfen >= 0x60) nfen = 0; nfen=nfen+0x01; if((nfen & 0x0f) >= 0x0a) nfen = (nfen & 0xf0) + 0x10; while(jia==0); bell=1; } } if(menu==4) { if(jia==0) { bell=0; nshi+=0x01; if((nshi & 0x0f) >= 0x0a) nshi = (nshi & 0xf0) + 0x10; if(nshi >= 0x24) nshi = 0; while(jia==0); bell=1; } } if(menu==5) { if(jia==0) { while(jia==0); nf=!nf; } } if(menu==6) { if(jia==0) { while(jia==0); gk=!gk; } } } void InitADC() { P1ASF = 0x03; //Open channels ADC function 0100 0000 p1.6使用AD功能 ADC_RES = 0; //Clear previous result ADC_LOW2 = 0; ADC_CONTR = ADC_POWER | ADC_SPEEDLL; } void GetADCResult(unsigned char ch,unsigned int *value) { ADC_CONTR = ADC_POWER | ADC_SPEEDLL | ch | ADC_START; _nop_(); //Must wait before inquiry _nop_(); _nop_(); _nop_(); ……………………
复制代码