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

QQ登錄

只需一步,快速開(kāi)始

搜索
查看: 33340|回復(fù): 41
打印 上一主題 下一主題
收起左側(cè)

51單片機(jī)六位顯示數(shù)碼管時(shí)鐘制作(帶鬧鐘設(shè)置,源碼,原理圖)

  [復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
時(shí)鐘可以顯示到秒位


從左到右的開(kāi)關(guān)控制分別為:秒設(shè)置、分設(shè)置、時(shí)設(shè)置、進(jìn)入時(shí)間設(shè)置(設(shè)置時(shí)間需要按一下這個(gè)再按前面3個(gè)按鍵設(shè)置)、鬧鐘設(shè)置(通過(guò)前面3個(gè)按鍵設(shè)置)、保存設(shè)置(設(shè)置完成后按下保存并退出)。


數(shù)碼管用的是共陰,共陽(yáng)的話加三極管閑麻煩,沒(méi)加。
數(shù)碼管a~g接的P0口,沒(méi)用10K排阻上拉,試了下覺(jué)得亮度太低了,就都換成了2K的作為上拉。


有興趣的可以給加上溫度傳感器,可以顯示溫度(我這里面就沒(méi)加了)


初學(xué)單片機(jī)沒(méi)多久,歡迎大佬指導(dǎo)。

材料如下:89C52*1
                 4位數(shù)碼管*1+2位數(shù)碼管*1(當(dāng)然如果有六位的也可以直接用,找不到其他數(shù)碼管了就這么混搭了
                  有源蜂鳴器*1(試過(guò)無(wú)源,但時(shí)間計(jì)算過(guò)于占用資源導(dǎo)致發(fā)聲不是很完美,大佬可以改一下)
                  輕觸開(kāi)關(guān)*7(1個(gè)用于復(fù)位,其余六個(gè)用于設(shè)置)  +     自鎖開(kāi)關(guān)*1
                  電池*1 + 5V穩(wěn)壓*1

單片機(jī)源碼:
  1. #include <reg52.h>
  2. #define uint  unsigned int
  3. #define uchar unsigned char

  4. sbit WE1=P2^5;
  5. sbit WE2=P2^4;
  6. sbit WE3=P2^3;
  7. sbit WE4=P2^2;
  8. sbit WE5=P2^1;
  9. sbit WE6=P2^0;

  10. sbit K1=P1^0;   //設(shè)置小時(shí)位
  11. sbit K2=P1^1;   //設(shè)置分位
  12. sbit K3=P1^2;   //設(shè)置秒位
  13. sbit K4=P1^3;   //進(jìn)入時(shí)間設(shè)置
  14. sbit K5=P1^4;   //進(jìn)入鬧鐘設(shè)置
  15. sbit K6=P1^5;   //退出設(shè)置
  16. sbit BZ=P1^6;  //蜂鳴器接口

  17. uchar code table[]={
  18. 0XC0,0XF9,0XA4,
  19. 0XB0,0X99,0X92,
  20. 0X82,0XF8,0X80,
  21. 0X90};

  22. uint tt=0,i=0,j=0,T=0,R=0,S;
  23. uint W1=0,W2=0,W3=0,W4=0,W5=0,W6=0;      //當(dāng)前時(shí)間位,依次接P0口即可,即W1=P0^0,W2=P0^2.....以此類推
  24. uint WD1=0,WD2=0,WD3=0,WD4=0,WD5=0,WD6=0;  //鬧鐘時(shí)間位,用于儲(chǔ)存設(shè)置的鬧鐘時(shí)間,不接

  25. void delay(uint);  //軟延時(shí)
  26. //void delay1(uint);
  27. void js(void);  //時(shí)鐘進(jìn)位定義
  28. void key(void); //按鍵
  29. void XS(uint,uint,uint,uint,uint,uint);  //動(dòng)態(tài)掃描數(shù)碼管顯示
  30. void xhsz(uint,uint,uint,uint,uint,uint,uint);  //時(shí)鐘位設(shè)置函數(shù)

  31. void main()
  32. {       
  33.         P1=0X0;
  34.         TMOD=0X01;
  35.         TH0=(65536-49971)/256;   
  36.         TL0=(65536-49971)%256;
  37.         //TH1=(65536-65535)/256;  //定時(shí)器二(未啟用)
  38.         //TL1=(65536-65535)%256;
  39.         EA=1;
  40.         ET0=1;
  41.         //ET1=1;
  42.         TR0=1;
  43.         //TR1=1;
  44.         while(1)
  45.         {
  46.                 key();
  47.                 XS(W1,W2,W3,W4,W5,W6);
  48.                 js();
  49.                 if(WD1==W1&&WD2==W2&&WD3==W3&&WD4==W4&&WD5==W5&&WD6==W6)   //鬧鐘定時(shí)判斷
  50.                         T=1;
  51.         }
  52. }

  53. void xhsz(uint Q1,uint Q2,uint Q3,uint Q4,uint Q5,uint Q6,uint Y) //輸入需要設(shè)置的位Q1~Q6,末尾輸入1則將值賦給W1~W6,輸入0則賦給WD1~WD6
  54. {
  55.         while(1)
  56.         {
  57.                 if(Y==1)
  58.                 {
  59.                         W1=Q1;W2=Q2;W3=Q3;W4=Q4;W5=Q5;W6=Q6;
  60.                 }
  61.                 if(Y==0)
  62.                 {
  63.                         WD1=Q1;WD2=Q2;WD3=Q3;WD4=Q4;WD5=Q5;WD6=Q6;
  64.                 }
  65.                 if(K1==1)//秒調(diào)
  66.                 {
  67.                         delay(10);
  68.                         if(K1==1)
  69.                         {
  70.                                 while(K1==1)
  71.                                 XS(Q1,Q2,Q3,Q4,Q5,Q6);
  72.                                 Q1++;
  73.                                 if(Q1>9)
  74.                                 {Q2++;Q1=0;}
  75.                                 if(Q2>5)
  76.                                 {Q2=0;Q3=0;}
  77.                         }       
  78.                 }
  79.                 if(K2==1)//分調(diào)
  80.                 {
  81.                         delay(10);
  82.                         if(K2==1)
  83.                         {
  84.                                 while(K2==1)
  85.                                 XS(Q1,Q2,Q3,Q4,Q5,Q6);
  86.                                 Q3++;
  87.                                 if(Q3>9)
  88.                                 {Q4++;Q3=0;}
  89.                                 if(Q4>5)
  90.                                 {Q4=0;Q3=0;}
  91.                         }       
  92.                 }
  93.                 if(K3==1)//時(shí)調(diào)
  94.                 {
  95.                         delay(10);
  96.                         if(K3==1)
  97.                         {
  98.                                 while(K3==1)
  99.                                 XS(Q1,Q2,Q3,Q4,Q5,Q6);
  100.                                 Q5++;
  101.                                 if(Q5>9)
  102.                                 {Q6++;Q5=0;}
  103.                                 if(Q5>3&&Q6>1)
  104.                                 {Q6=0;Q5=0;}
  105.                         }       
  106.                 }
  107.                 XS(Q1,Q2,Q3,Q4,Q5,Q6);
  108.                 if(K6==1)
  109.                         break;
  110.         }
  111. }

  112. void key()
  113. {
  114.                 if(K4==1) //設(shè)置時(shí)間
  115.                 {
  116.                         delay(10);
  117.                         if(K4==1)
  118.                         {
  119.                                 while(K4==1);
  120.                           TR0=0;
  121.                                 xhsz(W1,W2,W3,W4,W5,W6,1);
  122.                                 TR0=1;
  123.                         }
  124.                 }
  125.                
  126.                 if(K5==1)  //設(shè)置鬧鐘
  127.                 {
  128.                         delay(10);
  129.                         if(K5==1)
  130.                         {
  131.                                 while(K5==1);
  132.                                 xhsz(WD1,WD2,WD3,WD4,WD5,WD6,0);
  133.                         }
  134.                 }
  135.                 if(K6==1)  //關(guān)閉鬧鐘
  136.                 {
  137.                         delay(10);
  138.                         if(K6==1)
  139.                         {
  140.                                 while(K6==1);
  141.                                 T=0;
  142.                                 BZ=0;
  143.                         }
  144.                 }
  145. }


  146. void time() interrupt 1  //定時(shí)器1
  147. {
  148.         TH0=(65536-49971)/256;
  149.         TL0=(65536-49971)%256;
  150.         tt++;
  151.         js();
  152.         if(T==1)
  153.         {
  154.                 R++;
  155.                 if(R==1000)  //鬧鐘響鈴時(shí)間 計(jì)算方式是R*50ms,這里設(shè)置的是50S
  156.                 {T=0;R=0;}
  157.         }
  158. }

  159. /*void time1() interrupt 3
  160. {
  161.         TH1=(65536-65535)/256;
  162.         TL1=(65536-65535)%256;
  163.         S++;
  164. }*/

  165. void delay(uint t)
  166. {
  167.         for(i=t;i>0;i--)
  168.          {
  169.                  for(j=90;j>0;j--);
  170.          }
  171. }

  172. /*void delay1(uint S)
  173. {
  174.         for(i=S;i>0;i--)
  175.         {
  176.                 for(j=1;j>0;j--);
  177.         }
  178. }*/

  179. void js()
  180. {
  181.         if(tt==20)
  182.                 {
  183.                         tt=0;
  184.                         W1++;
  185.                 }
  186.                
  187.                 if(W1>9)
  188.                 {
  189.                   W2++;
  190.                   W1=0;
  191.                 }
  192.                        
  193.                 if(W2>5)
  194.                 {
  195.                         W3++;
  196.                         W2=0;
  197.                 }
  198.                                        
  199.                 if(W3>9)
  200.                 {
  201.                         W4++;
  202.                         W3=0;
  203.                 }
  204.                
  205.                 if(W4>5)
  206.                 {
  207.                         W5++;
  208.                         W4=0;
  209.                 }
  210.                
  211.                 if(W5>9)
  212.                 {
  213.                         W6++;
  214.                         W5=0;
  215.                 }
  216.                
  217.                 if(W5>3&&W6>1)
  218.                 {
  219.                         W1=0;
  220.                         W2=0;
  221.                         W3=0;
  222.                         W4=0;
  223.                         W5=0;
  224.                         W6=0;
  225.                 }
  226.         }


  227. void XS(uint Q1,uint Q2,uint Q3,uint Q4,uint Q5,uint Q6)
  228. {
  229.                 WE1=0;
  230.                 P0=~table[Q1];
  231.                 delay(3);
  232.                 WE1=1;
  233.                
  234.                 WE2=0;
  235.                 P0=~table[Q2];
  236.                 delay(3);
  237.                 WE2=1;
  238.                
  239.                 WE3=0;
  240.                 P0=~table[Q3];
  241.                 delay(3);
  242.                 WE3=1;
  243.                
  244.                 WE4=0;
  245.                 P0=~table[Q4];
  246.                 delay(3);
  247.                 WE4=1;
  248.                
  249.                 WE5=0;
  250.                 P0=~table[Q5];
  251.                 delay(3);
  252.                 WE5=1;
  253.                
  254.                 WE6=0;
  255.                 P0=~table[Q6];
  256.                 delay(3);
  257.                 WE6=1;
  258.                
  259.                 if(T==1)
  260.                         BZ=1;   //蜂鳴器響
  261.                 if(T==0)
  262.                         BZ=0;   //蜂鳴器停
  263.         }
復(fù)制代碼

附上電路+程序:
數(shù)碼管時(shí)鐘.rar (46.54 KB, 下載次數(shù): 377)
數(shù)碼管時(shí)鐘程序.rar (34.36 KB, 下載次數(shù): 287)
電路圖.PDF (72.14 KB, 下載次數(shù): 380)



評(píng)分

參與人數(shù) 4黑幣 +65 收起 理由
qjzyx + 3 贊一個(gè)!
stu + 3 共享資料的黑幣獎(jiǎng)勵(lì)!
baby66666 + 9 你好,可以發(fā)一下仿真和原件清單嗎?
admin + 50 共享資料的黑幣獎(jiǎng)勵(lì)!

查看全部評(píng)分

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏27 分享淘帖 頂11 踩

相關(guān)帖子

回復(fù)

使用道具 舉報(bào)

沙發(fā)
ID:427104 發(fā)表于 2018-11-18 14:16 | 只看該作者
      謝謝大佬,學(xué)習(xí)一下
回復(fù)

使用道具 舉報(bào)

板凳
ID:401914 發(fā)表于 2018-11-19 15:30 | 只看該作者
您好,這個(gè)電路的仿真圖和原件清單能夠發(fā)一下嗎?
回復(fù)

使用道具 舉報(bào)

地板
ID:401914 發(fā)表于 2018-11-19 16:09 | 只看該作者
您好,我搭了一下仿真圖,仿真不出來(lái)啊

捕獲.PNG (23.69 KB, 下載次數(shù): 153)

捕獲.PNG
回復(fù)

使用道具 舉報(bào)

5#
ID:432266 發(fā)表于 2018-11-24 12:46 | 只看該作者
baby66666 發(fā)表于 2018-11-19 16:09
您好,我搭了一下仿真圖,仿真不出來(lái)啊

你的問(wèn)題解決了嗎?同學(xué),我也試了一下,問(wèn)題和你一樣
回復(fù)

使用道具 舉報(bào)

6#
ID:432266 發(fā)表于 2018-11-24 13:56 | 只看該作者
baby66666 發(fā)表于 2018-11-19 16:09
您好,我搭了一下仿真圖,仿真不出來(lái)啊

同學(xué),你把那個(gè)數(shù)碼管換成共陰極的就可以,你現(xiàn)在這個(gè)是共陽(yáng)極
回復(fù)

使用道具 舉報(bào)

7#
ID:171111 發(fā)表于 2018-12-11 17:37 | 只看該作者
謝謝分享 也想做一個(gè)
回復(fù)

使用道具 舉報(bào)

8#
ID:32289 發(fā)表于 2018-12-19 22:38 | 只看該作者
謝謝大佬,學(xué)習(xí)一下
回復(fù)

使用道具 舉報(bào)

9#
ID:453827 發(fā)表于 2018-12-27 15:26 來(lái)自手機(jī) | 只看該作者
樓主怎么顯示兩個(gè)數(shù)就有一個(gè)點(diǎn)
回復(fù)

使用道具 舉報(bào)

10#
ID:487656 發(fā)表于 2019-3-13 15:57 | 只看該作者
樓主,用六位顯示數(shù)碼管和你這個(gè)電路圖一樣嗎?
回復(fù)

使用道具 舉報(bào)

11#
ID:488949 發(fā)表于 2019-3-13 23:30 | 只看該作者
下載沒(méi)做,等有空再做吧!
回復(fù)

使用道具 舉報(bào)

12#
ID:514795 發(fā)表于 2019-4-17 17:29 | 只看該作者
學(xué)習(xí)學(xué)習(xí)
回復(fù)

使用道具 舉報(bào)

13#
ID:476064 發(fā)表于 2019-4-20 23:01 來(lái)自手機(jī) | 只看該作者
樓主不厚道 明明用的共陽(yáng)數(shù)碼組可非要說(shuō)是共陰
回復(fù)

使用道具 舉報(bào)

14#
ID:523257 發(fā)表于 2019-4-30 13:49 | 只看該作者
感謝,學(xué)習(xí)了
回復(fù)

使用道具 舉報(bào)

15#
ID:549107 發(fā)表于 2019-5-28 10:52 | 只看該作者
大佬哦
回復(fù)

使用道具 舉報(bào)

16#
ID:549107 發(fā)表于 2019-5-28 10:52 | 只看該作者
厲害啊,大佬帶帶我
回復(fù)

使用道具 舉報(bào)

17#
ID:553573 發(fā)表于 2019-6-3 11:28 | 只看該作者
正打算做這個(gè),真的是強(qiáng)。
回復(fù)

使用道具 舉報(bào)

18#
ID:554320 發(fā)表于 2019-6-4 08:56 來(lái)自手機(jī) | 只看該作者
謝謝大佬
回復(fù)

使用道具 舉報(bào)

19#
ID:568565 發(fā)表于 2019-6-21 09:03 | 只看該作者
非常好的資料
回復(fù)

使用道具 舉報(bào)

20#
ID:572471 發(fā)表于 2019-6-26 11:22 | 只看該作者
謝謝分享 也想做一個(gè)
回復(fù)

使用道具 舉報(bào)

21#
ID:583232 發(fā)表于 2019-7-27 21:08 | 只看該作者
學(xué)習(xí)一下,零件集齊打算做一個(gè)~
回復(fù)

使用道具 舉報(bào)

22#
ID:602891 發(fā)表于 2019-8-23 17:19 | 只看該作者
不錯(cuò),不知道顯示效果怎么樣
回復(fù)

使用道具 舉報(bào)

23#
ID:611299 發(fā)表于 2019-9-13 23:36 | 只看該作者

正打算做這個(gè),真的是強(qiáng)!
回復(fù)

使用道具 舉報(bào)

24#
ID:577423 發(fā)表于 2019-10-20 21:58 | 只看該作者
Q1=M/10;Q2=M%10;Q3=F/10;Q4=F%10;Q5=S/10;Q6=S%10;這樣的程序都沒(méi)有,數(shù)碼管怎么顯示
回復(fù)

使用道具 舉報(bào)

25#
ID:125719 發(fā)表于 2019-10-25 13:59 | 只看該作者
感謝這個(gè)不錯(cuò)的哦,電路簡(jiǎn)單,使用也可以的
回復(fù)

使用道具 舉報(bào)

26#
ID:726399 發(fā)表于 2020-4-10 17:30 | 只看該作者
謝謝分享
回復(fù)

使用道具 舉報(bào)

27#
ID:600695 發(fā)表于 2020-4-15 07:57 | 只看該作者
也沒(méi)有防真出來(lái),弄了一個(gè)晚上
回復(fù)

使用道具 舉報(bào)

28#
ID:704585 發(fā)表于 2020-4-17 15:14 | 只看該作者
謝謝分享
回復(fù)

使用道具 舉報(bào)

29#
ID:66679 發(fā)表于 2020-4-28 12:58 | 只看該作者
white丶 發(fā)表于 2019-3-13 15:57
樓主,用六位顯示數(shù)碼管和你這個(gè)電路圖一樣嗎?

就是六個(gè)數(shù)碼管啊,顯示時(shí),分,秒。
回復(fù)

使用道具 舉報(bào)

30#
ID:654983 發(fā)表于 2020-5-28 10:25 | 只看該作者
大佬,鬧鐘怎么設(shè)置呀
回復(fù)

使用道具 舉報(bào)

31#
ID:704585 發(fā)表于 2020-5-30 14:47 | 只看該作者
感謝樓主分享
回復(fù)

使用道具 舉報(bào)

32#
ID:744744 發(fā)表于 2020-6-24 15:02 來(lái)自手機(jī) | 只看該作者
數(shù)碼管要消隱,有鬼影
回復(fù)

使用道具 舉報(bào)

33#
ID:233182 發(fā)表于 2020-7-7 08:43 | 只看該作者
玩得很六呀,老弟
回復(fù)

使用道具 舉報(bào)

34#
ID:798994 發(fā)表于 2020-7-10 23:16 | 只看該作者
問(wèn)一下為什么蜂鳴器沒(méi)反應(yīng)?
回復(fù)

使用道具 舉報(bào)

35#
ID:242298 發(fā)表于 2020-7-22 07:06 | 只看該作者
這按鍵也賊多了點(diǎn)吧。。。
回復(fù)

使用道具 舉報(bào)

36#
ID:235954 發(fā)表于 2020-7-23 18:05 | 只看該作者
baby66666 發(fā)表于 2018-11-19 16:09
您好,我搭了一下仿真圖,仿真不出來(lái)啊

數(shù)碼管類型沒(méi)選對(duì)
回復(fù)

使用道具 舉報(bào)

37#
ID:930784 發(fā)表于 2021-6-1 16:59 | 只看該作者
蜂鳴器可以響嗎?
回復(fù)

使用道具 舉報(bào)

38#
ID:970326 發(fā)表于 2021-10-10 10:22 | 只看該作者
很完美。贊
回復(fù)

使用道具 舉報(bào)

39#
ID:970326 發(fā)表于 2021-10-10 11:00 | 只看該作者
樓主:我用keil4打開(kāi)程序怎么是錯(cuò)誤的
回復(fù)

使用道具 舉報(bào)

40#
ID:72088 發(fā)表于 2021-10-12 12:18 | 只看該作者
xuwei517 發(fā)表于 2018-12-11 17:37
謝謝分享 也想做一個(gè)

沒(méi)用專用時(shí)鐘芯片,還是不要做了,斷電還要對(duì)時(shí)間,
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

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

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

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