欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136

標題: 51單片機六位顯示數碼管時鐘制作(帶鬧鐘設置,源碼,原理圖) [打印本頁]

作者: 879540191    時間: 2018-5-26 13:51
標題: 51單片機六位顯示數碼管時鐘制作(帶鬧鐘設置,源碼,原理圖)
時鐘可以顯示到秒位


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


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


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


初學單片機沒多久,歡迎大佬指導。

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

單片機源碼:
  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;   //設置小時位
  11. sbit K2=P1^1;   //設置分位
  12. sbit K3=P1^2;   //設置秒位
  13. sbit K4=P1^3;   //進入時間設置
  14. sbit K5=P1^4;   //進入鬧鐘設置
  15. sbit K6=P1^5;   //退出設置
  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;      //當前時間位,依次接P0口即可,即W1=P0^0,W2=P0^2.....以此類推
  24. uint WD1=0,WD2=0,WD3=0,WD4=0,WD5=0,WD6=0;  //鬧鐘時間位,用于儲存設置的鬧鐘時間,不接

  25. void delay(uint);  //軟延時
  26. //void delay1(uint);
  27. void js(void);  //時鐘進位定義
  28. void key(void); //按鍵
  29. void XS(uint,uint,uint,uint,uint,uint);  //動態掃描數碼管顯示
  30. void xhsz(uint,uint,uint,uint,uint,uint,uint);  //時鐘位設置函數

  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;  //定時器二(未啟用)
  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)   //鬧鐘定時判斷
  50.                         T=1;
  51.         }
  52. }

  53. void xhsz(uint Q1,uint Q2,uint Q3,uint Q4,uint Q5,uint Q6,uint Y) //輸入需要設置的位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)//秒調
  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)//分調
  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)//時調
  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) //設置時間
  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)  //設置鬧鐘
  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)  //關閉鬧鐘
  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  //定時器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)  //鬧鐘響鈴時間 計算方式是R*50ms,這里設置的是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.         }
復制代碼

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




作者: Lst_Melody    時間: 2018-11-18 14:16
      謝謝大佬,學習一下
作者: baby66666    時間: 2018-11-19 15:30
您好,這個電路的仿真圖和原件清單能夠發一下嗎?
作者: baby66666    時間: 2018-11-19 16:09
您好,我搭了一下仿真圖,仿真不出來啊

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

捕獲.PNG

作者: 2499508500    時間: 2018-11-24 12:46
baby66666 發表于 2018-11-19 16:09
您好,我搭了一下仿真圖,仿真不出來啊

你的問題解決了嗎?同學,我也試了一下,問題和你一樣

作者: 2499508500    時間: 2018-11-24 13:56
baby66666 發表于 2018-11-19 16:09
您好,我搭了一下仿真圖,仿真不出來啊

同學,你把那個數碼管換成共陰極的就可以,你現在這個是共陽極

作者: xuwei517    時間: 2018-12-11 17:37
謝謝分享 也想做一個
作者: rrqxx    時間: 2018-12-19 22:38
謝謝大佬,學習一下
作者: 264389    時間: 2018-12-27 15:26
樓主怎么顯示兩個數就有一個點
作者: white丶    時間: 2019-3-13 15:57
樓主,用六位顯示數碼管和你這個電路圖一樣嗎?

作者: slhslhhao    時間: 2019-3-13 23:30
下載沒做,等有空再做吧!
作者: venjo    時間: 2019-4-17 17:29
學習學習
作者: zsf333666    時間: 2019-4-20 23:01
樓主不厚道 明明用的共陽數碼組可非要說是共陰
作者: 18242057387    時間: 2019-4-30 13:49
感謝,學習了
作者: nmz888888    時間: 2019-5-28 10:52
大佬哦
作者: nmz888888    時間: 2019-5-28 10:52
厲害啊,大佬帶帶我
作者: 千年破曉    時間: 2019-6-3 11:28
正打算做這個,真的是強啊!
作者: 兒子很    時間: 2019-6-4 08:56
謝謝大佬
作者: chenyinhu    時間: 2019-6-21 09:03
非常好的資料
作者: object    時間: 2019-6-26 11:22
謝謝分享 也想做一個
作者: 核動力潛艇    時間: 2019-7-27 21:08
學習一下,零件集齊打算做一個~
作者: pp8923    時間: 2019-8-23 17:19
不錯,不知道顯示效果怎么樣
作者: a187185    時間: 2019-9-13 23:36

正打算做這個,真的是強!
作者: 越南超級人類    時間: 2019-10-20 21:58
Q1=M/10;Q2=M%10;Q3=F/10;Q4=F%10;Q5=S/10;Q6=S%10;這樣的程序都沒有,數碼管怎么顯示
作者: sonkouri    時間: 2019-10-25 13:59
感謝這個不錯的哦,電路簡單,使用也可以的
作者: 奶爸醬    時間: 2020-4-10 17:30
謝謝分享
作者: 米花卷    時間: 2020-4-15 07:57
也沒有防真出來,弄了一個晚上
作者: zxopenljx    時間: 2020-4-17 15:14
謝謝分享
作者: hyjxxy    時間: 2020-4-28 12:58
white丶 發表于 2019-3-13 15:57
樓主,用六位顯示數碼管和你這個電路圖一樣嗎?

就是六個數碼管啊,顯示時,分,秒。
作者: 我是小丸子    時間: 2020-5-28 10:25
大佬,鬧鐘怎么設置呀
作者: zxopenljx    時間: 2020-5-30 14:47
感謝樓主分享
作者: axiongzhang    時間: 2020-6-24 15:02
數碼管要消隱,有鬼影
作者: xiesonny    時間: 2020-7-7 08:43
玩得很六呀,老弟
作者: MrLiu20000310    時間: 2020-7-10 23:16
問一下為什么蜂鳴器沒反應?
作者: leezll    時間: 2020-7-22 07:06
這按鍵也賊多了點吧。。。
作者: 梁廷明    時間: 2020-7-23 18:05
baby66666 發表于 2018-11-19 16:09
您好,我搭了一下仿真圖,仿真不出來啊

數碼管類型沒選對
作者: 22@wl    時間: 2021-6-1 16:59
蜂鳴器可以響嗎?
作者: wkaikai    時間: 2021-10-10 10:22
很完美。贊
作者: wkaikai    時間: 2021-10-10 11:00
樓主:我用keil4打開程序怎么是錯誤的

作者: 新鄉家電維修    時間: 2021-10-12 12:18
xuwei517 發表于 2018-12-11 17:37
謝謝分享 也想做一個

沒用專用時鐘芯片,還是不要做了,斷電還要對時間,
作者: yangbulasi    時間: 2021-11-5 21:23
zsf333666 發表于 2019-4-20 23:01
樓主不厚道 明明用的共陽數碼組可非要說是共陰

的確,看他程序的斷碼也是共陽的數碼管
作者: dhbt2021    時間: 2021-12-23 19:02
留爪,慢慢學習!




歡迎光臨 (http://www.raoushi.com/bbs/) Powered by Discuz! X3.1