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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 33226|回復: 41
收起左側

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

  [復制鏈接]
ID:236597 發表于 2018-5-26 13:51 | 顯示全部樓層 |閱讀模式
時鐘可以顯示到秒位
P80526-130416.jpg P80526-130429.jpg P80526-130435.jpg

從左到右的開關控制分別為:秒設置、分設置、時設置、進入時間設置(設置時間需要按一下這個再按前面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)

評分

參與人數 4黑幣 +65 收起 理由
qjzyx + 3 贊一個!
stu + 3 共享資料的黑幣獎勵!
baby66666 + 9 你好,可以發一下仿真和原件清單嗎?
admin + 50 共享資料的黑幣獎勵!

查看全部評分

回復

使用道具 舉報

ID:427104 發表于 2018-11-18 14:16 | 顯示全部樓層
      謝謝大佬,學習一下
回復

使用道具 舉報

ID:401914 發表于 2018-11-19 15:30 | 顯示全部樓層
您好,這個電路的仿真圖和原件清單能夠發一下嗎?
回復

使用道具 舉報

ID:401914 發表于 2018-11-19 16:09 | 顯示全部樓層
您好,我搭了一下仿真圖,仿真不出來啊
捕獲.PNG
回復

使用道具 舉報

ID:432266 發表于 2018-11-24 12:46 | 顯示全部樓層
baby66666 發表于 2018-11-19 16:09
您好,我搭了一下仿真圖,仿真不出來啊

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

使用道具 舉報

ID:432266 發表于 2018-11-24 13:56 | 顯示全部樓層
baby66666 發表于 2018-11-19 16:09
您好,我搭了一下仿真圖,仿真不出來啊

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

使用道具 舉報

ID:171111 發表于 2018-12-11 17:37 | 顯示全部樓層
謝謝分享 也想做一個
回復

使用道具 舉報

ID:32289 發表于 2018-12-19 22:38 | 顯示全部樓層
謝謝大佬,學習一下
回復

使用道具 舉報

ID:453827 發表于 2018-12-27 15:26 來自手機 | 顯示全部樓層
樓主怎么顯示兩個數就有一個點
回復

使用道具 舉報

ID:487656 發表于 2019-3-13 15:57 | 顯示全部樓層
樓主,用六位顯示數碼管和你這個電路圖一樣嗎?
回復

使用道具 舉報

ID:488949 發表于 2019-3-13 23:30 | 顯示全部樓層
下載沒做,等有空再做吧!
回復

使用道具 舉報

ID:514795 發表于 2019-4-17 17:29 | 顯示全部樓層
學習學習
回復

使用道具 舉報

ID:476064 發表于 2019-4-20 23:01 來自手機 | 顯示全部樓層
樓主不厚道 明明用的共陽數碼組可非要說是共陰
回復

使用道具 舉報

ID:523257 發表于 2019-4-30 13:49 | 顯示全部樓層
感謝,學習了
回復

使用道具 舉報

ID:549107 發表于 2019-5-28 10:52 | 顯示全部樓層
大佬哦
回復

使用道具 舉報

ID:549107 發表于 2019-5-28 10:52 | 顯示全部樓層
厲害啊,大佬帶帶我
回復

使用道具 舉報

ID:553573 發表于 2019-6-3 11:28 | 顯示全部樓層
正打算做這個,真的是強啊!
回復

使用道具 舉報

ID:554320 發表于 2019-6-4 08:56 來自手機 | 顯示全部樓層
謝謝大佬
回復

使用道具 舉報

ID:568565 發表于 2019-6-21 09:03 | 顯示全部樓層
非常好的資料
回復

使用道具 舉報

ID:572471 發表于 2019-6-26 11:22 | 顯示全部樓層
謝謝分享 也想做一個
回復

使用道具 舉報

ID:583232 發表于 2019-7-27 21:08 | 顯示全部樓層
學習一下,零件集齊打算做一個~
回復

使用道具 舉報

ID:602891 發表于 2019-8-23 17:19 | 顯示全部樓層
不錯,不知道顯示效果怎么樣
回復

使用道具 舉報

ID:611299 發表于 2019-9-13 23:36 | 顯示全部樓層

正打算做這個,真的是強啊!
回復

使用道具 舉報

ID:577423 發表于 2019-10-20 21:58 | 顯示全部樓層
Q1=M/10;Q2=M%10;Q3=F/10;Q4=F%10;Q5=S/10;Q6=S%10;這樣的程序都沒有,數碼管怎么顯示
回復

使用道具 舉報

ID:125719 發表于 2019-10-25 13:59 | 顯示全部樓層
感謝這個不錯的哦,電路簡單,使用也可以的
回復

使用道具 舉報

ID:726399 發表于 2020-4-10 17:30 | 顯示全部樓層
謝謝分享
回復

使用道具 舉報

ID:600695 發表于 2020-4-15 07:57 | 顯示全部樓層
也沒有防真出來,弄了一個晚上
回復

使用道具 舉報

ID:704585 發表于 2020-4-17 15:14 | 顯示全部樓層
謝謝分享
回復

使用道具 舉報

ID:66679 發表于 2020-4-28 12:58 | 顯示全部樓層
white丶 發表于 2019-3-13 15:57
樓主,用六位顯示數碼管和你這個電路圖一樣嗎?

就是六個數碼管啊,顯示時,分,秒。
回復

使用道具 舉報

ID:654983 發表于 2020-5-28 10:25 | 顯示全部樓層
大佬,鬧鐘怎么設置呀
回復

使用道具 舉報

ID:704585 發表于 2020-5-30 14:47 | 顯示全部樓層
感謝樓主分享
回復

使用道具 舉報

ID:744744 發表于 2020-6-24 15:02 來自手機 | 顯示全部樓層
數碼管要消隱,有鬼影
回復

使用道具 舉報

ID:233182 發表于 2020-7-7 08:43 | 顯示全部樓層
玩得很六呀,老弟
回復

使用道具 舉報

ID:798994 發表于 2020-7-10 23:16 | 顯示全部樓層
問一下為什么蜂鳴器沒反應?
回復

使用道具 舉報

ID:242298 發表于 2020-7-22 07:06 | 顯示全部樓層
這按鍵也賊多了點吧。。。
回復

使用道具 舉報

ID:235954 發表于 2020-7-23 18:05 | 顯示全部樓層
baby66666 發表于 2018-11-19 16:09
您好,我搭了一下仿真圖,仿真不出來啊

數碼管類型沒選對
回復

使用道具 舉報

ID:930784 發表于 2021-6-1 16:59 | 顯示全部樓層
蜂鳴器可以響嗎?
回復

使用道具 舉報

ID:970326 發表于 2021-10-10 10:22 | 顯示全部樓層
很完美。贊
回復

使用道具 舉報

ID:970326 發表于 2021-10-10 11:00 | 顯示全部樓層

我用keil4打開程序怎么是錯誤的

我用keil4打開程序怎么是錯誤的
樓主:我用keil4打開程序怎么是錯誤的
回復

使用道具 舉報

ID:72088 發表于 2021-10-12 12:18 | 顯示全部樓層
xuwei517 發表于 2018-12-11 17:37
謝謝分享 也想做一個

沒用專用時鐘芯片,還是不要做了,斷電還要對時間,
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 羞羞视频网站免费看 | 国产黄色一级电影 | 亚洲激情一区二区 | 亚洲欧洲一区二区 | 中文字幕一区二区三区精彩视频 | 日韩精品一区二区三区在线 | 亚洲三级在线观看 | 亚洲成人精品影院 | caoporn视频 | 久久久国产一区二区三区四区小说 | 欧美一区视频 | 99久久视频| 欧美一区二区在线免费观看 | 亚洲精品久久区二区三区蜜桃臀 | 涩涩片影院 | 欧美黑人巨大videos精品 | 福利一区在线观看 | www.97国产 | 免费一级淫片aaa片毛片a级 | 久久久久国产精品一区二区 | 久久国产婷婷国产香蕉 | 久久久精品久久 | 日韩三级在线观看 | 国产一区二区精品在线观看 | 久久精品成人 | 在线观看亚洲专区 | 亚洲欧美一区二区三区视频 | 久久精品无码一区二区三区 | 精品一区国产 | 日日夜夜91| 欧美精品久久久久 | 欧美日韩免费 | 亚洲电影一区二区三区 | 欧美精品在线免费观看 | 日韩av一区二区在线观看 | 欧美 日韩 国产 在线 | 最新中文字幕一区 | 亚洲一区久久 | 欧美一区二区黄 | 91国产视频在线 | 亚洲国产欧美一区二区三区久久 |