久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開始

搜索
查看: 14090|回復(fù): 6
收起左側(cè)

純手工打造搖擺LED時(shí)鐘—原理圖+程序

[復(fù)制鏈接]
ID:140725 發(fā)表于 2016-10-11 21:27 | 顯示全部樓層 |閱讀模式
   看到市場(chǎng)上正在流行的時(shí)尚商品——搖擺LED 時(shí)鐘,感覺非常新穎獨(dú)特,正在玩單片機(jī)的我,激起了自己也想DIY 一個(gè)的沖動(dòng)。不就是一個(gè)流水燈嗎?有什么難的?! 于是,一個(gè)單片機(jī)項(xiàng)目就這樣開始了。然而動(dòng)手以后才知道問題并非想象那樣簡(jiǎn)單,因沒有任何現(xiàn)成的資料,機(jī)械的、電子的和編程的問題一大堆,一個(gè)一個(gè)需要自己來解決。經(jīng)歷二十多天的苦戰(zhàn)和無數(shù)次的修改與調(diào)試,作品終于完成,基本達(dá)到預(yù)先要求。
   現(xiàn)將制作資料整理出來,與廣大DIY 愛好者分享。
一. 整體方案
    本制作是根據(jù)視覺暫留原理, 讓一排8 只LED作往復(fù)運(yùn)動(dòng), 在空中呈現(xiàn)八個(gè)字符的顯示屏,可顯示數(shù)字或英文字符。開機(jī)后先顯示“Welcome!”歡迎字符(見圖1), 再進(jìn)入時(shí)鐘顯示狀態(tài)。顯示屏同時(shí)顯示“時(shí)” 、“分” 、“秒”信息,用“:”分隔(見圖2)。
   104547nr0injrlgg4rntje.jpg 10455691bbvtdb6xs5bjs9.jpg
圖1 開機(jī)畫面                                                                                     圖2 運(yùn)行狀態(tài)
    顯示分“正常運(yùn)行”、“調(diào)分”和“調(diào)時(shí)” 三種狀態(tài)。當(dāng)處于調(diào)整狀態(tài)時(shí),調(diào)整的項(xiàng)會(huì)閃現(xiàn),以便識(shí)別。為此,設(shè)置三個(gè)調(diào)整按鍵,一個(gè)為“狀態(tài)鍵”,一個(gè)為“加法鍵”,一個(gè)為“減法鍵”。(見圖3)
104556wqosoowccwshoziq.jpg 104556zfxcjuuqncw4vnvj.jpg
圖3 按鍵的設(shè)置                                                                              圖4 音圈電機(jī)組件
    搖棒的動(dòng)力部分采用從廢舊硬盤拆下的音圈電機(jī)(見圖4),驅(qū)動(dòng)采用直流電機(jī)驅(qū)動(dòng)方式。
    結(jié)構(gòu)方面,將音圈電機(jī)直接安裝在萬用板上,將萬用板的四周用四根螺柱與一透明有機(jī)板結(jié)合成一體,構(gòu)成支撐搖棒底座。(見圖5, 圖6)。
104556dmay7rb7jk54uumj.jpg 104556j7j7h8at2772m228.jpg
圖5 萬用板與有機(jī)板構(gòu)成底座                                                        圖6 底座側(cè)面
二. 實(shí)作要點(diǎn)
1. 主板的結(jié)構(gòu)布局見圖7。
104556agljuazw979kakbk.jpg 104556f5wn0nntdrxt00hk.jpg
圖7 主板布局                                                                                    圖8 搖棒上的LED
2.LED 的焊接,將LED 兩腳跨接在電路板兩端的方式進(jìn)行焊接。使LED 緊密排列在一起。
3.搖棒上的LED 與主板上的信號(hào)用柔性排線連接,音圈電機(jī)供電占2 位,LED 信號(hào)傳輸占9 位,所以至少要11 位的排線。(見圖9)
1045567qpex0vkd6jg01pr.jpg 104559oj1zjjcj7d71yj8n.jpg
圖9 排線與拉簧                                                                               圖10 拉簧
4.為保持搖棒的平衡, 在搖棒接近旋轉(zhuǎn)軸的兩端加裝兩只拉簧,這兩只拉簧的規(guī)格盡量保持一致,彈性強(qiáng)弱要適中,最好可多找?guī)追N規(guī)格的試試。(圖9,圖10)
5.采用驅(qū)動(dòng)直流電機(jī)正反轉(zhuǎn)的方式,驅(qū)動(dòng)音圈電機(jī)來回?cái)[動(dòng)。讓電機(jī)正、反轉(zhuǎn)的方法很多,最典型的是H 橋電路驅(qū)動(dòng),H 橋電路原理見圖11,常見的是用三級(jí)管代替圖中的開關(guān)。
104600qm2wm3cq6dw72n93.jpg
圖11 H 橋驅(qū)動(dòng)原理
    為了簡(jiǎn)化電路,最好采用H 橋功能的集成電路。這種IC 很多,比如象TA7257,TA8429H,L6203 等,這里用的是三菱公司的M54544AL(見圖12)。IC 各腳定義見圖13。
104600mjqe0j0zmzmb8j5k.jpg
圖12 電機(jī)驅(qū)動(dòng)IC
104600xs87p68gpcz1181f.jpg
圖13 M56544AL 各腳定義
6.電原理圖見圖14
104600h0hxu4c3ssd435hb.jpg.thumb.jpg
圖14 電原理圖
7.完成圖見圖15。
104600sgwp2zec2eh6we0e.jpg.thumb.jpg
圖15 完成圖
三. 軟件設(shè)計(jì)
1. 搖棒的啟動(dòng)
    為了使搖棒從靜止?fàn)顟B(tài)過度到正常運(yùn)行狀態(tài),在正式顯示前加一啟動(dòng)程序。其實(shí)質(zhì)就是逐漸加快驅(qū)動(dòng)的頻率,一直到搖棒正常擺動(dòng)為止。通過下面的代碼實(shí)現(xiàn)
do {
mm++;
Delay(120+mm);
put1=~put1; put2=~put2;
}while(mm<60);
Delay(20); //根據(jù)實(shí)際情況確定延時(shí)值
2. 秒閃現(xiàn)的實(shí)現(xiàn):數(shù)字或字符的閃現(xiàn)是通過變量Ms 和數(shù)組w[]實(shí)現(xiàn)的,如需要八位字符中的間的第4 位閃現(xiàn),則w[3]=1。這是通過全局變量Ms 在void timer0(void)函數(shù)中每隔一秒改變一次狀態(tài)(0 或1),打開或關(guān)閉顯示。
if(Ms*w[ii-3]==1) P2=0xff; else P2=~ASCIIDOC[v[ii]*6+jj]; //正向顯示
if(Ms*w[10-ii]==1) P2=0xff; else P2=~ASCIIDOC[v[13-ii]*6+5-jj]; //反向顯示
3. 調(diào)試中發(fā)現(xiàn),顯示屏上的字符并不是一樣寬的(見圖16),仔細(xì)分析是由于搖棒在運(yùn)動(dòng)中,一直受力,而且所受的力是隨時(shí)變化的。為方便精確調(diào)整顯示,特別作了一個(gè)顯示中斷表Tr[],改變顯示LED 的時(shí)間段,協(xié)調(diào)顯示效果。
1046048toikiv2z56ri1ir.jpg
圖16 調(diào)整前的顯示
4. 按鍵去抖程序
    按鍵的去抖采用軟件編程實(shí)現(xiàn),其方法是當(dāng)檢測(cè)到按鍵的接口出現(xiàn)低電平后,隔一段時(shí)間再檢測(cè),如還是低電平,則確認(rèn)為有效,否則無效。具體的程序是通過函數(shù)unsigned char ChKey(bit Key)完成的。
5. 顯示同步
    因沒有位置傳感器,顯示同步完全靠時(shí)鐘中斷來確定。這樣就有一個(gè)問題,音圈電機(jī)的驅(qū)動(dòng)信號(hào)在什么時(shí)刻改變,顯示才能保持在中間,并能保證正反顯示能很好地重合。經(jīng)實(shí)際觀察, 音圈電機(jī)的驅(qū)動(dòng)信號(hào)在顯示中部, 要根據(jù)具體情況細(xì)調(diào)。由程序中的變量Ta 調(diào)試確定。
6. 完整C51 程序代碼
請(qǐng)見附件
四.調(diào)試方法
雖說是個(gè)機(jī)電一體的制作,但調(diào)試過程并不復(fù)雜。
1. 機(jī)械部分的調(diào)整主要是兩只拉簧, 要盡量保證兩邊受力一致,讓搖棒靜態(tài)時(shí)保持在豎直狀態(tài)。
2. 軟件部分,先將void timer1(void)函數(shù)中的“Ti=-Tr[ii*6+jj];”這段程序刪除,試著讓Ti 取一常數(shù)值(大約-2000 左右)看顯示效果(搖棒擺動(dòng)的幅度),一直到滿意為止,這時(shí)正反顯示可能沒有重合,接著試Ta 的取值,范圍在42 到50 之間,使正反顯示重合為止。最后一步就是調(diào)整顯示的不均勻性,將“Ti=-Tr[ii*6+jj];”這段程序恢復(fù)回來,試著改變Tr[]表中數(shù)組元素的值,并保證表中的元素的平均值為開始Ti 取得的值,讓顯示的每個(gè)字符寬度一致為止。
五.結(jié)語
    本制作電路簡(jiǎn)單,其原理實(shí)質(zhì)就是LED 流水燈,而關(guān)鍵的音圈電機(jī)也很容易找到,很適合剛?cè)腴T的單片機(jī)愛好者制作。制作還有發(fā)揮的地方,
1. 添加時(shí)鐘IC,使顯時(shí)更精準(zhǔn),而且不怕掉電;
2. 加裝位置傳感器,增加顯示的穩(wěn)定性;
3. 增添搖控功能,使調(diào)整更方便。


程序:
純手工打造搖擺LED時(shí)鐘.rar (2.37 KB, 下載次數(shù): 43)

回復(fù)

使用道具 舉報(bào)

ID:142493 發(fā)表于 2016-10-12 20:25 | 顯示全部樓層
這個(gè)可以,新手膜拜中
回復(fù)

使用道具 舉報(bào)

ID:205161 發(fā)表于 2017-5-26 17:26 來自觸屏版 | 顯示全部樓層
也想做   贊
回復(fù)

使用道具 舉報(bào)

ID:196311 發(fā)表于 2017-5-28 23:25 | 顯示全部樓層
收藏備用,謝謝樓主
回復(fù)

使用道具 舉報(bào)

ID:798859 發(fā)表于 2020-7-7 09:39 | 顯示全部樓層
這個(gè)牛批,感謝分享
回復(fù)

使用道具 舉報(bào)

ID:798859 發(fā)表于 2020-7-7 09:50 | 顯示全部樓層
真心不錯(cuò) 感謝分享
回復(fù)

使用道具 舉報(bào)

ID:525478 發(fā)表于 2025-5-26 14:27 | 顯示全部樓層
POV 搖擺顯示LED 鐘C51 程序
周正華編
2008.3.19
*/
#include <reg52.h>
/*硬件端口定義*/
sbit set0=P0^1;
sbit set1=P0^0;
sbit set2=P0^2;
sbit put1=P3^6;
sbit put2=P3^7;
/*時(shí)鐘用數(shù)組*/
unsigned char BUFFER[]={0,0,0,0};
unsigned char maxnum[]={59,23};
/*顯示數(shù)組*/
unsigned int v[14];
unsigned int w[8];
/*顯示中斷表*/
int code Tr[]={
2000,2000,2000,2000,2000,2000,
2000,2000,2000,2000,2000,2000,
2000,2000,2000,2000,2000,2000,
2550,2500,2450,2400,2350,2300,
2250,2200,2150,2100,2050,2000,
1950,1900,1850,1800,1750,1700,
1650,1600,1550,1500,1450,1400,
1400,1450,1500,1550,1600,1650,
1700,1750,1800,1850,1900,1950,
2000,2050,2100,2150,2200,2250,
2300,2350,2400,2450,2500,2550,
2000,2000,2000,2000,2000,2000,
2000,2000,2000,2000,2000,2000,
2000,2000,2000,2000,2000,2000,
};
/*字符字模*/
unsigned char code ASCIIDOC[] = // ASCII
{
0x7C,0x8A,0x92,0xA2,0x7C,0x00, // -0-00
0x00,0x42,0xFE,0x02,0x00,0x00, // -1-01
0x46,0x8A,0x92,0x92,0x62,0x00, // -2-02
0x84,0x82,0x92,0xB2,0xCC,0x00, // -3-03
0x18,0x28,0x48,0xFE,0x08,0x00, // -4-04
0xE4,0xA2,0xA2,0xA2,0x9C,0x00, // -5-05
0x3C,0x52,0x92,0x92,0x8C,0x00, // -6-06
0x80,0x8E,0x90,0xA0,0xC0,0x00, // -7-07
0x6C,0x92,0x92,0x92,0x6C,0x00, // -8-08
0x62,0x92,0x92,0x94,0x78,0x00, // -9-09
0x00,0x00,0x00,0x00,0x00,0x00, // - -10
0x00,0x00,0xFA,0x00,0x00,0x00, // -!-11
0x04,0x08,0x10,0x20,0x40,0x00, // -/-12
0x00,0x6C,0x6C,0x00,0x00,0x00, // -:-13
0x3E,0x48,0x88,0x48,0x3E,0x00, // -A-14
0xFE,0x92,0x92,0x92,0x6C,0x00, // -B-15
0x7C,0x82,0x82,0x82,0x44,0x00, // -C-16
0xFE,0x82,0x82,0x82,0x7C,0x00, // -D-17
0xFE,0x92,0x92,0x92,0x82,0x00, // -E-18
0xFE,0x90,0x90,0x90,0x80,0x00, // -F-19
0x7C,0x82,0x8A,0x8A,0x4E,0x00, // -G-20
0xFE,0x10,0x10,0x10,0xFE,0x00, // -H-21
0x00,0x82,0xFE,0x82,0x00,0x00, // -I-22
0x04,0x02,0x82,0xFC,0x80,0x00, // -J-23
0xFE,0x10,0x28,0x44,0x82,0x00, // -K-24
0xFE,0x02,0x02,0x02,0x02,0x00, // -L-25
0xFE,0x40,0x30,0x40,0xFE,0x00, // -M-26
0xFE,0x20,0x10,0x08,0xFE,0x00, // -N-27
0x7C,0x82,0x82,0x82,0x7C,0x00, // -O-28
0xFE,0x90,0x90,0x90,0x60,0x00, // -P-29
0x7C,0x82,0x8A,0x84,0x7A,0x00, // -Q-30
0xFE,0x90,0x98,0x94,0x62,0x00, // -R-31
0x64,0x92,0x92,0x92,0x4C,0x00, // -S-32
0x80,0x80,0xFE,0x80,0x80,0x00, // -T-33
0xFC,0x02,0x02,0x02,0xFC,0x00, // -U-34
0xF8,0x04,0x02,0x04,0xF8,0x00, // -V-35
0xFE,0x04,0x18,0x04,0xFE,0x00, // -W-36
0xC6,0x28,0x10,0x28,0xC6,0x00, // -X-37
0xC0,0x20,0x1E,0x20,0xC0,0x00, // -Y-38
0x86,0x8A,0x92,0xA2,0xC2,0x00, // -Z-39
0x24,0x2A,0x2A,0x1C,0x02,0x00, // -a-40
0xFE,0x14,0x22,0x22,0x1C,0x00, // -b-41
0x1C,0x22,0x22,0x22,0x10,0x00, // -c-42
0x1C,0x22,0x22,0x14,0xFE,0x00, // -d-43
0x1C,0x2A,0x2A,0x2A,0x10,0x00, // -e-44
0x10,0x7E,0x90,0x90,0x40,0x00, // -f-45
0x19,0x25,0x25,0x25,0x1E,0x00, // -g-46
0xFE,0x10,0x20,0x20,0x1E,0x00, // -h-47
0x00,0x00,0x9E,0x00,0x00,0x00, // -i-48
0x00,0x01,0x11,0x9E,0x00,0x00, // -j-49
0xFE,0x08,0x14,0x22,0x02,0x00, // -k-50
0x00,0x82,0xFE,0x02,0x00,0x00, // -l-51
0x1E,0x20,0x1E,0x20,0x1E,0x00, // -m-52
0x20,0x1E,0x20,0x20,0x1E,0x00, // -n-53
0x1C,0x22,0x22,0x22,0x1C,0x00, // -o-54
0x3F,0x24,0x24,0x24,0x18,0x00, // -p-55
0x18,0x24,0x24,0x24,0x3F,0x00, // -q-56
0x20,0x1E,0x20,0x20,0x10,0x00, // -r-57
0x12,0x2A,0x2A,0x2A,0x24,0x00, // -s-58
0x20,0xFC,0x22,0x22,0x24,0x00, // -t-59
0x3C,0x02,0x02,0x3C,0x02,0x00, // -u-60
0x38,0x04,0x02,0x04,0x38,0x00, // -v-61
0x3C,0x02,0x3C,0x02,0x3C,0x00, // -w-62
0x22,0x14,0x08,0x14,0x22,0x00, // -x-63
0x39,0x05,0x05,0x09,0x3E,0x00, // -y-64
0x22,0x26,0x2A,0x32,0x22,0x00, // -z-65
};[!--empirenews.page--]
unsigned int Ti;
unsigned char ii,jj,mm, ff ,TZ ,Ms ,Ta;
/*延時(shí)程序*/
void Delay(unsigned int msec)
{
unsigned int x,y;
for(x=0; x<=msec;x++)
{
for(y=0;y<=110;y++);
}
}
/*鍵盤去抖處理函數(shù)*/
unsigned char ChKey(bit Key)
{
if(Key==0){
Delay(100);
if(Key==0) return(1);
}
}
/*定時(shí)中斷1 處理(時(shí)鐘)函數(shù)*/
void timer0(void) interrupt 1 using 1
{
TH0=-(50000/256);
TL0=-(50000%256);
TR0=1;
BUFFER[0]=BUFFER[0]+1;
}
/*定時(shí)中斷2 處理(LED 驅(qū)動(dòng)和音圈驅(qū)動(dòng))函數(shù)*/
void timer1(void) interrupt 3 using 1
{
TH1=Ti/256; TL1=Ti%256;
if((ii*6+jj)==Ta) {put1=~put1;put2=~put2;}; //音圈電機(jī)驅(qū)動(dòng)輸出
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; //正反顯一致性調(diào)整, 取值范圍在42~50 之間, 根據(jù)實(shí)際確定
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;
//十四個(gè)字符中前三個(gè)和后三個(gè)不顯(不用)
v[0]=10;
v[1]=10;
v[2]=10;
v[11]=10;
v[12]=10;
v[13]=10;
/*搖擺棒初始啟動(dòng)*/
do {
mm++;
Delay(120+mm);
put1=~put1; put2=~put2;
}while(mm<60);
Delay(20);
/*啟動(dòng)顯示*/
ii=0;jj=0;
EA=1;
/*正式運(yùn)行*/
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; //關(guān)閉顯示
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; //顯示時(shí)鐘初始狀
態(tài)
/*進(jìn)入時(shí)鐘狀態(tài)*/
while(1){
//時(shí)鐘處理
if (BUFFER[0]>21){ //進(jìn)位到秒
BUFFER[0]=0; BUFFER[1]=BUFFER[1]+1;
Ms=!Ms;
if (BUFFER[1]==60){ //進(jìn)位到分
BUFFER[1]=0;BUFFER[2]=BUFFER[2]+1;
if (BUFFER[2]==60){
BUFFER[2]=0;BUFFER[3]=BUFFER[3]+1; //進(jìn)位到時(shí)
if (BUFFER[3]==24) BUFFER[3]=0;
}
}
}
//將顯示內(nèi)容送顯示緩沖區(qū)
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; //三種狀態(tài)循環(huán)轉(zhuǎn)換
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; //秒閃關(guān)
};
Delay(80);
if(ChKey(set1)==1){ if(BUFFER[TZ+1]<maxnum[TZ-1]) BUFFER[TZ+1]++; else
BUFFER[TZ+1]=0;Delay(300);};
//鍵盤"+"
if(ChKey(set2)==1){ if(BUFFER[TZ+1]>0) BUFFER[TZ+1]--; else
BUFFER[TZ+1]=maxnum[TZ-1];Delay(300);};
//鍵盤"-"
Delay(80);
}
}
}
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 日韩欧美视频 | 日韩福利视频 | 久久国产精品偷 | 国产精品国产三级国产aⅴ无密码 | 草草草久久久 | 久久国产精品免费一区二区三区 | 成人久久一区 | 亚洲精品久久久久久久久久久久久 | 亚洲毛片在线观看 | 成人深夜福利网站 | 91亚洲精品在线观看 | 日本视频在线 | 福利社午夜影院 | 免费在线毛片 | 91精品国产综合久久福利软件 | 午夜综合 | 国产精品国产三级国产aⅴ浪潮 | 精品国产欧美在线 | 亚洲精品无 | 久久精品久久久久久 | 免费观看成人性生生活片 | 欧美精品99 | 国产在线精品一区二区三区 | 天天操夜夜艹 | 一区二区三区四区免费在线观看 | 亚洲一区二区日韩 | 久久成人精品视频 | 久久久久久免费毛片精品 | 91色视频在线观看 | 午夜精品久久久久久 | 久久久久久久综合色一本 | 毛片在线免费 | 欧美日韩国产中文字幕 | 日韩欧美国产精品 | 日韩中文字幕在线视频 | 国产精品久久久久久久一区探花 | 成人免费视频网站在线看 | 国产精品久久久久久网站 | 一级特黄网站 | 久久久久欧美 | 日韩中文字幕av |