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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

單片機(jī)六位數(shù)碼管時(shí)鐘制作 源碼、軟件、電路原理圖、視頻

[復(fù)制鏈接]
ID:378402 發(fā)表于 2023-5-10 18:07 | 顯示全部樓層 |閱讀模式
時(shí)鐘顯示時(shí)、分、秒,程序和制作較簡單,誤差每天小于1秒。缺點(diǎn)是斷電后不能保存時(shí)間。

制作過程:利用現(xiàn)有的電子元器件,參數(shù)選擇上可能不是最優(yōu)的,程序和軟件來源于互聯(lián)網(wǎng),整理后上傳主要是為初學(xué)者了解單片機(jī)。
             在自學(xué)單片機(jī)C語言程序有問題時(shí),可以利用互聯(lián)網(wǎng)免費(fèi)的Chat GPT
             提問“你是單片機(jī)C語言專家,再提出編程或解釋程序等問題”。
      1、調(diào)整時(shí)間快慢時(shí),用手機(jī)時(shí)鐘比照,從大往小數(shù)值調(diào)整,調(diào)至個(gè)位數(shù)時(shí),增加數(shù)值1,單片機(jī)時(shí)鐘跑慢;
           減少數(shù)值減1,單片機(jī)時(shí)鐘跑快,這時(shí)誤差能控制在兩天差1秒左右。
      2、整機(jī)測試耗電5V,90ma左右,建議用5V充電頭供電。
      3、按鍵P1.3確認(rèn)鍵,沒利用,可用P1.0鍵代替。
電子元器件:
      1、一寸六個(gè)共陽數(shù)碼管LG10016BH。
      2、P0是8個(gè)段腳;P2是6個(gè)位腳。
      3、三個(gè)按鍵開關(guān)(P1.0調(diào)整時(shí)間;P1.1調(diào)整時(shí)間增;P1.2調(diào)整時(shí)間減)、六個(gè)1K電阻、六個(gè)S8550三極管和一片STC89C51RC。

附:1、加光敏電阻原理圖:利用原程序,加光敏電阻是解決晚上時(shí)鐘顯示太亮。加半可調(diào)電阻(因沒有現(xiàn)成大的半可調(diào)電阻,用5K的半可調(diào)電阻
            和10K電阻串聯(lián)代替)解決光線太暗時(shí),數(shù)碼管不會全滅,調(diào)整半可調(diào)電阻顯示最低亮度。

制作出來的實(shí)物圖如下:
IMG_20230510_083749.jpg IMG_20230510_083438.jpg 六數(shù)碼管時(shí)鐘原理圖_光敏.png

單片機(jī)源程序如下:
  1. //采用8位數(shù)碼管動態(tài)顯示程序
  2. //使用AT89C51單片機(jī),12MHz晶振,P0輸出字段碼,P2口輸出位選碼
  3. //用共陽極LED數(shù)碼管,key0為調(diào)時(shí)分位選擇鍵,key1為加1鍵,key2為減1鍵,key3為確定鍵


  4. #include  "reg51.h"
  5. //包含頭文件
  6. #define char unsigned char
  7. //定義無符號字符型
  8. //char code dis_7[12]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0xff};   //共陰極
  9. char code dis_7[12]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xbf};     //共陽極LED數(shù)碼管"0~9","-"的字段碼
  10. //char code scan_con[8]={0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80};
  11. char code scan_con[8] = {0xfe, 0xfd, 0xfb, 0xf7, 0xef, 0xdf, 0xbf, 0x7f}; // P2口
  12. //位選擇碼
  13. char data dis[8]={0x00,0x00,0x0a,0x00,0x00,0x0a,0x00,0x00};                //00-00-00
  14. //顯示緩沖區(qū),時(shí)、分、秒初始為0,0x0a為"-"的編碼
  15. char data timedata[3]={0x00,0x00,0x00};                //初始化
  16. //分別為秒、分和小時(shí)的值
  17. char data ms50=0x00,con=0x00,con1=0x00,con2=0x00;
  18. //定義四個(gè)按鍵
  19. sbit  dian=P0^7;
  20. sbit  key0=P1^0;
  21. sbit  key1=P1^1;
  22. sbit  key2=P1^2;
  23. sbit  key3=P1^3;

  24. //1ms延時(shí)函數(shù)
  25. delay1ms(int t)
  26. {
  27.         int i,j;
  28.         for (i=0;i<t;i++)
  29.         {
  30.                 for(j=0;j<120;j++);
  31.         }
  32. }

  33. keyscan()//按鍵處理函數(shù)
  34. {
  35.         EA=0; //關(guān)總中斷
  36.         if (key0==0)//判斷第一個(gè)按鍵是否按下
  37.         {                            //按鍵消抖
  38.                 delay1ms(10);
  39.                 while (key0==0);//再次判斷按鍵是否按下
  40.                   con++;
  41.                 TR0=0;
  42.                 ET0=0; //關(guān)定時(shí)/計(jì)數(shù)器,關(guān)T0中斷
  43.                 if (con>=3)  
  44.                 {
  45.                         con=0;
  46.                         TR0=1;
  47.                         ET0=1;
  48.                 }
  49.         }
  50.         if (con!=0)
  51.         {
  52.    if (key1==0)        //如果第二個(gè)按鍵按下
  53.                 {
  54.               delay1ms(10);
  55.               while (key1==0);
  56.               timedata[con]++;//加一功能
  57.               if (con==2)
  58.                 con1=24;
  59.                 else con1=60;                        
  60.                 if (timedata[con]>=con1)
  61.          {timedata[con]=0;}
  62.              }
  63.         }
  64.           if (con!=0)
  65.    {
  66.    if (key2==0)
  67.       //如果第三個(gè)按鍵按下
  68.                 {
  69.                         delay1ms(10);
  70.          while (key2==0);
  71.          timedata[con]--;
  72.          //減一功能
  73.          if (con==2)
  74.              con2=23;
  75.          else con2=59;                        
  76.             if (timedata[con]<=0)
  77.                {
  78.                                                 timedata[con]=con2;
  79.                }
  80.        }
  81.    }
  82.         if(key3==0)//如果第四個(gè)按鍵按下
  83.         {      
  84.                 delay1ms(10);
  85.            while(key3==0);
  86.            EA=1;
  87.            TR0=1;
  88.            ET0=1;        
  89.         }
  90.         EA=1;//開總中斷
  91. }

  92. //數(shù)碼管顯示函數(shù)

  93.         scan()
  94. {
  95.         char k;
  96.         dis[0]=timedata[0]%10;
  97.    dis[1]=timedata[0]/10;
  98.    dis[2]=timedata[1]%10;
  99.    dis[3]=timedata[1]/10;
  100.         dis[4]=timedata[2]%10;                //【1】顯示"分";【2】顯示"時(shí)";【0】顯示"秒"
  101.    dis[5]=timedata[2]/10;                //【1】顯示"分";【2】顯示"時(shí)";【0】顯示"秒"
  102.    for (k=0;k<8;k++)
  103.         {
  104.                 P0=dis_7[dis[k]];
  105.                 if (k==1|k==2|k==3|k==4)
  106.                 {
  107.                         dian=0;
  108.                 }
  109.                 else
  110.                 {
  111.                         dian=1;
  112.                 }
  113.                 P2=scan_con[k];
  114.                 delay1ms(1);
  115.                 P2=0x00;    //數(shù)碼管消隱
  116.                 P2=0xff;    //數(shù)碼管消隱
  117.         }
  118. }
  119.         
  120. //主函數(shù)
  121.         main()
  122. {
  123. //TH0=0x4c;
  124. //TL0=0xb0;
  125.         TH0=(65536-52615)/256;                //12M,52615數(shù)值越大,走時(shí)越慢;數(shù)值越小,走時(shí)越快。
  126.         TL0=(65536-52615)%256;                //12M,52615數(shù)值越大,走時(shí)越慢;數(shù)值越小,走時(shí)越快?
  127.         TMOD=0x01;
  128.         //選擇工作方式1
  129.         ET0=1;
  130.         TR0=1;
  131.         EA=1;
  132.    while (1)
  133.    {
  134.                 scan();
  135.         //調(diào)用數(shù)碼管顯示scan()子函數(shù)
  136.         keyscan();
  137.         //調(diào)用按鍵處理keyscan()子函數(shù)
  138.         }
  139. }

  140. //定時(shí)器/計(jì)數(shù)器T0中斷服務(wù)函數(shù)
  141. void time_intt0(void) interrupt 1
  142. {
  143.         ET0=0;
  144.         TR0=0;
  145.         //TH0=0x4c;         //12M 應(yīng)該是TH00=0x4c
  146.         //TL0=0xb0;        //11.0592M 應(yīng)該是TL00=0x00
  147.         TH0=(65536-52615)/256;                //12M,52615數(shù)值越大,走時(shí)越慢;數(shù)值越小,走時(shí)越快?
  148.         TL0=(65536-52615)%256;                //12M,52615數(shù)值越大,走時(shí)越慢;數(shù)值越小,走時(shí)越快?
  149.         TR0=1;
  150.         ms50++;
  151.         if (ms50==19)
  152.    {
  153.                 ms50=0x00;
  154.                 timedata[0]++;
  155.       if (timedata[0]==60)
  156.       {
  157.                         timedata[0]=0;
  158.                         timedata[1]++;
  159.                         if (timedata[1]==60)
  160.          {
  161.                                 timedata[1]=0;
  162.                                 timedata[2]++;
  163.             if (timedata[2]==24)
  164.             {
  165.                                         timedata[2]=0;
  166.             }
  167.          }
  168.             }
  169.    }
  170.     ET0=1;
  171.         //開T0中斷
  172. }
復(fù)制代碼

編程器連接.jpg
IMG_20230510_083610.jpg
IMG_20230510_083445.jpg
IMG_20230510_101320.jpg
線路板背面.jpg
線路板正面.jpg
六數(shù)碼管時(shí)鐘原理圖.png

視頻.7z

9.56 MB, 下載次數(shù): 12, 下載積分: 黑幣 -5

Keil程序.7z

16.83 KB, 下載次數(shù): 21, 下載積分: 黑幣 -5

評分

參與人數(shù) 1黑幣 +80 收起 理由
admin + 80

查看全部評分

回復(fù)

使用道具 舉報(bào)

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

本版積分規(guī)則

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

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

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 国产精品久久久久久久久久免费看 | h视频免费在线观看 | 国产精品久久久久久婷婷天堂 | 亚洲一区二区三区在线视频 | 欧美日韩视频在线第一区 | 欧美一级黄色片免费观看 | 国产精品国产三级国产aⅴ无密码 | 欧美日韩精品专区 | 成人av鲁丝片一区二区小说 | 亚洲高清在线免费观看 | 亚洲劲爆av | 亚洲视频一区在线观看 | 一区二区三区国产 | 日韩一区精品 | 日韩一级精品视频在线观看 | 欧美一区二区三区四区视频 | 视频三区| 69福利影院 | 天天视频一区二区三区 | 91精品国产日韩91久久久久久 | 午夜a√ | 极品粉嫩国产48尤物在线播放 | 九九在线精品视频 | 日本免费一区二区三区四区 | 人人艹人人 | 三级av在线| 久久久www成人免费精品 | 国产成人区 | 91色站| 成人免费毛片在线观看 | 国产大学生情侣呻吟视频 | 亚洲国产一区二区在线 | 午夜影院在线播放 | 91在线看网站 | 久久精品国产一区老色匹 | 91人人爽 | 99pao成人国产永久免费视频 | 久久国产一区二区三区 | 亚洲成人免费视频在线 | 免费在线观看h片 | 97色在线视频 |