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

QQ登錄

只需一步,快速開始

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

簡單的四位數(shù)碼管單片機(jī)時(shí)鐘

  [復(fù)制鏈接]
ID:76127 發(fā)表于 2015-4-8 22:09 | 顯示全部樓層 |閱讀模式
     
其實(shí)早有想寫一寫這方面的東西了,要不是雜事情多,應(yīng)該早出來報(bào)告了。
言歸正傳吧,不知道是什么原因使我喜歡上了單片機(jī),以前的時(shí)候,覺得單片機(jī)是那么神秘,但是實(shí)踐證明:只要有興趣就沒有學(xué)不會(huì)的東西,當(dāng)然學(xué)會(huì)容易,學(xué)好就要下一番功夫了。
       話說那是2012年末臨近放寒假的時(shí)候,某一日在網(wǎng)上溜達(dá)看到了單片機(jī),于是乎就買了個(gè)單片機(jī)的開發(fā)板全散件(那時(shí)候只知道是單片機(jī)散件,不大明白為啥叫開發(fā)板)。幾天的時(shí)間就回來了,晚上就把它給焊接好了,憑借多年的焊接經(jīng)驗(yàn),一次成功,跟成品板看不出區(qū)別(你是看不出來的,你不能跟我比啊!呵呵,不要臉一下)。平時(shí)沒有時(shí)間去研究,一晃就到了假期,所以就天天查資料學(xué)習(xí),您還別說,一旦進(jìn)去就陷進(jìn)去了,里面真是別有洞天啊。不客氣的說,假期的十多天時(shí)間,比我當(dāng)學(xué)生的時(shí)候?qū)W的都踏實(shí)和牢固深刻。
           下面是我用單片機(jī)做的簡單的時(shí)鐘,最初是用單片機(jī)本身的定時(shí)功能進(jìn)行計(jì)時(shí)的,軟件調(diào)整誤差,精度可以做的很高,但是斷電需要再調(diào)整,用計(jì)時(shí)芯片的話可以斷電記憶,但是要保證計(jì)時(shí)精準(zhǔn)就要高精度的晶振,這也是個(gè)矛盾。我先沒有用時(shí)鐘芯片,對(duì)于初學(xué)者還是合適的,能夠很快入門,了解單片機(jī)的結(jié)構(gòu),定時(shí)器的編寫,數(shù)碼管的顯示原理,等等。我用的是c語言,以前有點(diǎn)基礎(chǔ),加之其可移植性好,上手容易等優(yōu)點(diǎn),所以就沒有去學(xué)難啃的匯編語言。后面我又加了個(gè)時(shí)鐘芯片(DS1302),這個(gè)芯片精度不高,家用還湊合,以后換成887高精度的芯片就相當(dāng)實(shí)用了。這些對(duì)于程序的編寫也有提高。

         結(jié)構(gòu):
      上下兩塊洞洞板,兩邊有排陣接插的,同時(shí)兼顧傳導(dǎo)信號(hào),上板是數(shù)碼管,下板是單片機(jī)。板子是10x16cm的,一位數(shù)碼管3x4.4cm,共陽極的。單片機(jī)stc89c52,12M的晶振,數(shù)碼管是7位的,所以其小數(shù)點(diǎn)不亮,我外接了兩個(gè)led做秒閃爍用,一秒一眨眼的。如果采用8段數(shù)碼管,可以用數(shù)碼管的點(diǎn)做秒閃爍,即小時(shí)的個(gè)位點(diǎn)和分鐘的十位點(diǎn)(數(shù)碼管倒置安排形成8.8:8.8樣式)同時(shí)閃爍,效果會(huì)更好,這個(gè)我在開發(fā)板上已經(jīng)修改成功,以后用8段數(shù)碼管就采用這種方式。板子的5v供電用USB接口。3位按鍵調(diào)節(jié)時(shí)間,其一為時(shí)分選擇,其二加,其三為減。

       總結(jié):
       最滿意的是洞洞板的背面布線,完全手工,很滿意,也很漂亮的。其實(shí)一開始也是有點(diǎn)彎路,后來發(fā)現(xiàn)了一個(gè)小軟件:Sprint-Layout 6.0 這個(gè)軟件對(duì)我等初學(xué)者真是個(gè)福音啊,完全可以安著洞洞板的界面來設(shè)計(jì)電路(直接在設(shè)計(jì)界面上設(shè)置洞洞板的孔間距 2.54mm),對(duì)照原理圖直接安放元件,連線即可,雖然有些原理圖的樣子,但是直接對(duì)照即可進(jìn)行實(shí)物連線。對(duì)于連線我用細(xì)銅線,就是包皮的粗電線里的一根細(xì)的,點(diǎn)焊,不要全部拖錫,這樣的好處是美觀,不易粘連。
     其次就是單片機(jī)的c語言,有位老鳥說的真好:其實(shí)就是if來if去的!不過進(jìn)來以后還真能發(fā)現(xiàn),就這么if來if去的,也充滿了邏輯性,充滿了美感,有興趣的童鞋們也進(jìn)來發(fā)掘一下體驗(yàn)一下其內(nèi)在的美吧。

         我借鑒的 代碼:(沒有驅(qū)動(dòng)時(shí)鐘芯片DS1302的),其實(shí)我找了很多,覺得此程序很精煉,真的不錯(cuò),里面有我改動(dòng)的地方,因?yàn)樽畛跏且浦驳轿业拈_發(fā)板上的。說到開發(fā)板,其實(shí)就是燒寫程序方便,做實(shí)驗(yàn)方便的板子,一旦成功可以在另外的板子上單獨(dú)焊接專用的元件,開發(fā)出成品。比如我就用了洞洞板,當(dāng)然也可以用覆銅板加工,會(huì)更美觀。


/**** 本程序中,晶振為12MHz,           ****/
/**** 時(shí)間控制采用定時(shí)中斷控制方式。  ****/
/**** 模式和時(shí)間調(diào)整采用查詢方式。    ****/
#include<reg52.h>
sbit P13=P1^3; //分個(gè)位控制端
sbit P12=P1^2; //分十位控制端
sbit P11=P1^1; //時(shí)個(gè)位控制端
sbit P10=P1^0; //時(shí)十位控制端
sbit led=P2^7; //秒閃爍 led
sbit key0=P3^7; //模式設(shè)置
sbit key1=P3^6; //加
sbit key2=P3^5; //減
unsigned char hour,min,sec,T50ms;
unsigned char modstate; //模式狀態(tài)
unsigned char code table[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xff};//段碼 (0--9、黑屏)
//unsigned char code tablemin[]={0xc0,0xcf,0xa4,0x86,0x8b,0x92,0x90,0xc7,0x80,0x82};//秒十位倒置編碼
void init();                                        //初始化子程序聲明 /
void delay500us(unsigned char X); //延時(shí)子程序聲明
void display();                                 //顯示子程序聲明
void display001();                           //顯示“時(shí)”子程序聲明
void display002();                           //顯示“分”子程序聲明
void keyscan();                               //按鍵識(shí)別子程序聲明
void main()
{  
init();
while(1)
{
  keyscan();
}
}
void init() //初始化子程序
{
TMOD=0x01;
TH0=(65536-49990)/256;
TL0=(65536-49990)%256;
ET0=1;
EA=1;
TR0=1;
}
void delay500us(unsigned char X)
{
unsigned char i,j;
for(i=X;i>0;i--)
for(j=248;j>0;j--);
}
void timer0() interrupt 1 //timer0中斷服務(wù)子程序,定時(shí)時(shí)間為50ms,本程序加了10us的時(shí)間修正量
{
TMOD=0x01;
TH0=(65536-49990)/256;
TL0=(65536-49990)%256;
T50ms++;
if(T50ms>=20)
{
  T50ms=0;
  sec++;
  if(sec>=60)
  {
   sec=0;
   min++;
   if(min>=60)
   {
    min=0;
    hour++;
    if(hour>=24)hour=0;
   }
  }
}
}
        
void display()
{
P1=0xff;
P0=table[hour/10];
P10=0;
delay500us(5);
P1=0xff;
    P0=table[hour%10];
P11=0;
delay500us(5);
P1=0xff;
P0=table[min/10];
P12=0;
delay500us(5);
P1=0xff;
P0=table[min%10];
P13=0;
delay500us(5);
if(T50ms<=10)led=0;
if(T50ms>10)led=1;
}
void display001()
{
     P1=0xff;
P0=table[hour/10];
P10=0;
delay500us(10);

  P1=0xff;
P0=table[hour%10];
P11=0;
delay500us(10);
}
void display002()
{
  P1=0xff;
P0=table[min/10];
P12=0;
delay500us(10);
  P1=0xff;
P0=table[min%10];
P13=0;
delay500us(10);
}
void keyscan()  //按鍵識(shí)別鐘程序
{
while(modstate==0)
{
  display();
  if(key0==0)
  {
   display();
   if(key0==0)modstate++;  //這兩句加在一起為延時(shí)10ms軟件防抖設(shè)計(jì)。
   while(key0==0)display001(); //等待按鍵釋放。
  }
}
//****************************************************************************//
while(modstate==1)
{
  display001();
  if(key0==0)
  {
   display001();
   if(key0==0)modstate++;  //這兩句加在一起為延時(shí)10ms軟件防抖設(shè)計(jì)。
   while(key0==0)display002(); //等待按鍵釋放。
  }
  if(key1==0)
  {
   display001();
   if(key1==0)
   {
    hour++;
    if(hour>=24)hour=0;
    while(key1==0)display001();
   }
  }
  if(key2==0)
  {
   display001();
   if(key2==0)
   {
    hour--;
    if(hour>=24)hour=0;
    while(key2==0)display001();
   }
  }
}
//****************************************************************************//
while(modstate==2)
{
  display002();
  if(key0==0)
  {
   display002();
   if(key0==0)modstate=0;  //這兩句加在一起為延時(shí)10ms軟件防抖設(shè)計(jì)。
   while(key0==0)display(); //等待按鍵釋放。
  }
  if(key1==0)
  {
   display002();
   if(key1==0)
   {
    min++;
    if(min>=60)min=0;
    while(key1==0)display002();
   }
  }
  if(key2==0)
  {
   display002();
   if(key2==0)
   {
    min--;
    if(min>=60)min=0;
    while(key2==0)display002();
   }
  }
}
}

好了,先看實(shí)物圖吧:


































相關(guān)帖子

回復(fù)

使用道具 舉報(bào)

ID:76625 發(fā)表于 2015-4-10 21:44 | 顯示全部樓層
我是新手,也想試試,請(qǐng)問有沒有原理圖
51黑有你更精彩…………
回復(fù)

使用道具 舉報(bào)

ID:76625 發(fā)表于 2015-4-10 21:46 | 顯示全部樓層
有沒有proteus仿真圖看看
回復(fù)

使用道具 舉報(bào)

ID:76625 發(fā)表于 2015-4-10 22:40 | 顯示全部樓層
貼主在不在啊。。。QAQ
回復(fù)

使用道具 舉報(bào)

ID:70614 發(fā)表于 2015-4-20 21:01 | 顯示全部樓層
謝謝分享我也想制作一個(gè)
回復(fù)

使用道具 舉報(bào)

ID:78768 發(fā)表于 2015-5-3 20:23 | 顯示全部樓層
想要電路圖
回復(fù)

使用道具 舉報(bào)

ID:86126 發(fā)表于 2015-7-19 11:40 | 顯示全部樓層
看起來很不錯(cuò)哦
回復(fù)

使用道具 舉報(bào)

ID:85702 發(fā)表于 2015-7-20 17:10 | 顯示全部樓層
焊接不錯(cuò)?粗婷烙^
回復(fù)

使用道具 舉報(bào)

ID:61876 發(fā)表于 2015-7-20 19:23 | 顯示全部樓層
我天天用洞洞板做東西,焊工比起樓主來,差的太遠(yuǎn)了。佩服!。。!
回復(fù)

使用道具 舉報(bào)

ID:19947 發(fā)表于 2015-8-6 23:00 | 顯示全部樓層
贊!樓主能不能原理圖發(fā)下
回復(fù)

使用道具 舉報(bào)

ID:97771 發(fā)表于 2015-12-1 21:24 | 顯示全部樓層
大神有沒有電路圖
回復(fù)

使用道具 舉報(bào)

ID:98638 發(fā)表于 2015-12-8 18:01 | 顯示全部樓層
做的真漂亮
回復(fù)

使用道具 舉報(bào)

ID:94489 發(fā)表于 2015-12-19 14:06 | 顯示全部樓層
一直想做一個(gè),非常感謝樓主
回復(fù)

使用道具 舉報(bào)

ID:95809 發(fā)表于 2016-1-5 07:12 來自觸屏版 | 顯示全部樓層
他用的是共陽的數(shù)碼管,Io口程序里寫得很明白了,完全可以自己畫出原理圖。
回復(fù)

使用道具 舉報(bào)

ID:19947 發(fā)表于 2016-1-12 15:58 | 顯示全部樓層
加1302程序多好呀!
回復(fù)

使用道具 舉報(bào)

ID:109896 發(fā)表于 2016-3-20 22:32 | 顯示全部樓層
看一看,瞄一瞄,
回復(fù)

使用道具 舉報(bào)

ID:108508 發(fā)表于 2016-3-21 16:40 | 顯示全部樓層
怎么視頻一閃而過
回復(fù)

使用道具 舉報(bào)

ID:99341 發(fā)表于 2016-5-11 21:17 | 顯示全部樓層
樓主電路圖發(fā)一個(gè)
回復(fù)

使用道具 舉報(bào)

ID:99341 發(fā)表于 2016-5-11 21:20 | 顯示全部樓層
樓主給一個(gè)2051+1302電子鐘謝謝,,,,qq1984524872
回復(fù)

使用道具 舉報(bào)

ID:120206 發(fā)表于 2016-5-12 08:21 | 顯示全部樓層
不錯(cuò) ,挺好的
回復(fù)

使用道具 舉報(bào)

ID:99341 發(fā)表于 2016-5-13 13:30 來自觸屏版 | 顯示全部樓層
樓主發(fā)個(gè)電路圖
回復(fù)

使用道具 舉報(bào)

ID:118644 發(fā)表于 2016-5-13 18:04 | 顯示全部樓層
焊接不錯(cuò)?粗婷烙^
回復(fù)

使用道具 舉報(bào)

ID:127457 發(fā)表于 2016-6-21 00:03 來自觸屏版 | 顯示全部樓層
樓主   可以發(fā)下原理圖嗎?
回復(fù)

使用道具 舉報(bào)

ID:127457 發(fā)表于 2016-6-22 15:14 來自觸屏版 | 顯示全部樓層
樓主發(fā)一下電路圖就更好了
回復(fù)

使用道具 舉報(bào)

ID:127798 發(fā)表于 2016-6-23 12:59 | 顯示全部樓層
ok的。。
回復(fù)

使用道具 舉報(bào)

ID:116662 發(fā)表于 2016-7-2 03:39 來自觸屏版 | 顯示全部樓層
簡單的制作,豐富的經(jīng)驗(yàn),制作過程積累經(jīng)驗(yàn)。
回復(fù)

使用道具 舉報(bào)

ID:116662 發(fā)表于 2016-8-5 11:47 來自觸屏版 | 顯示全部樓層
夠厲害,謝謝分享
回復(fù)

使用道具 舉報(bào)

ID:167551 發(fā)表于 2017-3-12 17:44 | 顯示全部樓層
想問樓主一個(gè)問題,頂層數(shù)碼管洞洞板上的插針怎么弄上去的,還有能給個(gè)近照么,用細(xì)銅絲怎么焊接的,我老沾不上錫
回復(fù)

使用道具 舉報(bào)

ID:170147 發(fā)表于 2017-3-12 22:06 | 顯示全部樓層
樓主電路圖發(fā)一個(gè),謝謝啦
回復(fù)

使用道具 舉報(bào)

ID:119290 發(fā)表于 2017-4-18 09:39 | 顯示全部樓層
手工不錯(cuò)!值得借鑒!
回復(fù)

使用道具 舉報(bào)

ID:171111 發(fā)表于 2017-5-1 18:37 | 顯示全部樓層
真棒 想做一個(gè) 沒看到電路圖呢
回復(fù)

使用道具 舉報(bào)

ID:146089 發(fā)表于 2017-5-1 23:25 | 顯示全部樓層
本帖最后由 ysh711 于 2017-5-1 23:35 編輯

樓主轉(zhuǎn)我QQ空間的原創(chuàng)也不注明,很不實(shí)誠!我在數(shù)碼之家論壇也有過發(fā)布。
把電路圖發(fā)上來的,手繪的不美觀,湊合看。有問題可以共同探討一下,我的QQ:65632752

108_811154_0606e03267941ba.jpg

回復(fù)

使用道具 舉報(bào)

ID:187675 發(fā)表于 2017-5-15 17:29 | 顯示全部樓層
ysh711 發(fā)表于 2017-5-1 23:25
樓主轉(zhuǎn)我QQ空間的原創(chuàng)也不注明,很不實(shí)誠!我在數(shù)碼之家論壇也有過發(fā)布。
把電路圖發(fā)上來的,手繪的不美觀 ...

不錯(cuò)

謝謝分享
回復(fù)

使用道具 舉報(bào)

ID:200820 發(fā)表于 2017-5-17 09:42 | 顯示全部樓層
不錯(cuò),謝謝分享
回復(fù)

使用道具 舉報(bào)

ID:207654 發(fā)表于 2017-6-6 15:19 來自觸屏版 | 顯示全部樓層
實(shí)物三極管是npn還是pnp 我也做了一個(gè) 就是實(shí)物出了問題
回復(fù)

使用道具 舉報(bào)

ID:99341 發(fā)表于 2017-6-13 22:03 | 顯示全部樓層
希望求HEX燒寫文件,發(fā)上來,或我的郵箱1984524872@QQ.com  謝謝
回復(fù)

使用道具 舉報(bào)

ID:74784 發(fā)表于 2017-6-14 21:10 | 顯示全部樓層
我做的 ~~~~~~~~~~~~

xszb2051cc.jpg xszb2051電路.jpg
回復(fù)

使用道具 舉報(bào)

ID:334693 發(fā)表于 2018-5-21 12:26 | 顯示全部樓層

這個(gè)可以做串口時(shí)間同步嗎?
回復(fù)

使用道具 舉報(bào)

ID:249455 發(fā)表于 2018-11-8 22:44 | 顯示全部樓層
ysh711 發(fā)表于 2017-5-1 23:25
樓主轉(zhuǎn)我QQ空間的原創(chuàng)也不注明,很不實(shí)誠!我在數(shù)碼之家論壇也有過發(fā)布。
把電路圖發(fā)上來的,手繪的不美觀 ...

有沒有程序分享下啊,一個(gè)單片機(jī)的初學(xué)者,做個(gè)自己玩玩。
回復(fù)

使用道具 舉報(bào)

40#
無效樓層,該帖已經(jīng)被刪除

本版積分規(guī)則

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

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

快速回復(fù) 返回頂部 返回列表