自己動手DIY做一個桌面時鐘
網(wǎng)站:bbs.21ic.com
做一個桌面時鐘
大家好,我是qbwww,今天我們來做一個桌面時鐘。淘寶買的套件。首先呢,我們先看一下原理圖,簡單的了解一下連線方式。
簡單的了解了一下連線的方式呢,我們再來看一下元件。首先來看電路板,電路板上的線看起來比較復(fù)雜。看起來不如原理圖方便,但是焊接的元件非常少。焊接難度不高。
下面我們來看一下8位數(shù)碼管。這個數(shù)碼管是紅色的。我們準(zhǔn)備了4個,分別顯示時間和分鐘。里面的引腳有10個。
用來給時鐘進(jìn)行供電的USB線。一頭為USB,另一頭是DC??礃幼邮荄C3.5mm左右。
這是一個3V的電子,還有一個電子座,用來把電子固定在線路板上。加電子的原因是為了防止斷電的時候再重新上電,還需要重新設(shè)置時間,有了它就不用擔(dān)心斷電了。
這個是光敏電阻,光照強度越高,它的阻值越低,光照強度越低,它的阻值越高。
這是三個10K的插件電阻。
這是我們要用到的stc單片機和單片機底座。
這是我們要用到的時鐘芯片TS1302和它的底座。
兩個點按開關(guān)。按下去就導(dǎo)通,松開它會自己彈上來,就斷開了。
這個是s9012,3極管。這個是P型三極管。所以它是負(fù)電導(dǎo)通,左邊是集電極,中間是控制極,右邊是發(fā)射極。
這個是DC插座,焊接在線路板上,用來連接USB線與線路板。
這個是熱敏電阻。主要用來測量溫度。這個是N型熱敏電阻。所以溫度越高它的阻值越低。溫度越低,它的阻值越高。
這是兩個陶瓷電容。
晶振。主要用來產(chǎn)生周期的振動頻率。
最后是螺絲和亞克力板的外殼。外殼是紫色的。是為了顯示的更清晰一點。
下面我們開始焊接,先拿出線路板。把所有的小元件都給插到線路板上。
插好之后呢,我們給它焊接。
焊接完成之后我們把長的管腳剪去。
最后我們把其他的大件都給它焊上。
至此呢,我們背面的元件都焊接完成,我們把4個數(shù)碼管給它焊上。
程序代碼:
#include "STC15F2K.h"
#include "intrins.h"
#include
#define uchar unsigned char
#define uint unsigned int
sfr ADC_LOW2? ? =? ?0xBE;? ?? ?? ???//ADC低2位結(jié)果
#define ADC_POWER? ?0x80? ?? ?? ?? ?//ADC電源控制位
#define ADC_FLAG? ? 0x10? ?? ?? ?? ?//ADC完成標(biāo)志
#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 DS1=P3^4;
sbit DS2=P3^5;
sbit DS3=P3^6;
sbit DS4=P3^7;
sbit set=P3^0;
sbit jia=P3^1;
sbit bell=P1^7;
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};//有小數(shù)點
uchar dat3[]={0x40,0x4F,0x24,0x06,0x0B,0x12,0x10,0x47,0X00,0X02,0xff};//有小數(shù)點
uchar dat4[]={0xC0,0xCF,0xA4,0x86,0x8B,0x92,0x90,0xC7,0X80,0X82,0xff};//
? ?
uchar table[4]={0};
unsigned int temp[2];
extern void init_ds1302_io();
extern void init_ds1302();
extern void read_time();
extern void write_time();
extern void read_nao();
extern int fen;
extern int shi;
extern int nfen;
extern int nshi;
void Delayms(uint t)
{
? ?? ?? ?uchar i;
? ?? ???while(t--)
? ?? ?? ???for(i=0;i<123;i );
}
??
char flag=1;
int ld;
void display()
{
? ?? ???DS1=0;
? ?? ???DS2=1;
? ?? ???DS3=1;
? ?? ???DS4=1;
? ?? ???P2=dat1[table[0]];
? ?? ???Delayms(1);
? ?? ???if(flag>0)
? ?? ???{
? ?? ?? ?? ?? ? DS1=1;
? ?? ?? ?? ?? ? DS2=0;
? ?? ?? ?? ?? ? DS3=1;
? ?? ?? ?? ?? ? DS4=1;
? ?? ?? ?? ?? ? P2=dat2[table[1]];
? ?? ?? ?? ?? ? Delayms(1);
? ?? ?? ?? ?? ? DS1=1;
? ?? ?? ?? ?? ? DS2=1;
? ?? ?? ?? ?? ? DS3=0;
? ?? ?? ?? ?? ? DS4=1;
? ?? ?? ?? ?? ? P2=dat3[table[2]];
? ?? ?? ?? ?? ? Delayms(1);? ?? ???
? ?? ???}
? ?? ???else
? ?? ???{
? ?? ?? ?? ?? ? DS1=1;
? ?? ?? ?? ?? ? DS2=0;
? ?? ?? ?? ?? ? DS3=1;
? ?? ?? ?? ?? ? DS4=1;
? ?? ?? ?? ?? ? P2=dat1[table[1]];
? ?? ?? ?? ?? ? Delayms(1);
? ?? ?? ?? ?? ? DS1=1;
? ?? ?? ?? ?? ? DS2=1;
? ?? ?? ?? ?? ? DS3=0;
? ?? ?? ?? ?? ? DS4=1;
? ?? ?? ?? ?? ? P2=dat4[table[2]];
? ?? ?? ?? ?? ? Delayms(1);? ?? ???
? ?? ???}
? ?? ???DS1=1;
? ?? ???DS2=1;
? ?? ???DS3=1;
? ?? ???DS4=0;
? ?? ???P2=dat1[table[3]];
? ?? ???Delayms(1);
? ?? ???DS1=1;
? ?? ???DS2=1;
? ?? ???DS3=1;
? ?? ???DS4=1;
}
void init()
{
? ? TMOD= 0x10;? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ???
? ? TL1 = (65536-50000)/256;? ?? ???//設(shè)置定時初值
? ? TH1 = (65536-50000)%256;? ?? ???//設(shè)置定時初值
? ? ET1 = 1;
? ? TR1 = 1;
? ? EA = 1;
}
char menu=0;
bit gk=0;//光控開標(biāo)志
bit nk=0;//鬧鐘開標(biāo)志:受設(shè)置影響
void key()
{
? ?? ???if(nk==1