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

QQ登錄

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

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

制作一個(gè)單片機(jī)電子時(shí)鐘程序,每一位均可調(diào)節(jié),可加減,調(diào)節(jié)時(shí)時(shí)鐘會(huì)停止計(jì)時(shí)

[復(fù)制鏈接]
ID:781149 發(fā)表于 2020-6-17 13:26 | 顯示全部樓層 |閱讀模式
制作一個(gè)電子時(shí)鐘,每一位均可調(diào)節(jié),可加減,調(diào)節(jié)時(shí)時(shí)鐘會(huì)停止計(jì)時(shí)
6個(gè)按鈕  程序有注釋

仿真原理圖如下(proteus仿真工程文件可到本帖附件中下載)
QzpcVXNlcnNc5oiR5ZyoXEFwcERhdGFcUm9hbWluZ1xEaW5nVGFsa1wxNjA2MzAwMDU1X3YyXEltYWdl.png

單片機(jī)源程序如下:
  1. #include<reg52.h> //包含頭文件,一般情況不需要改動(dòng),頭文件包含特殊功能寄存器的定義
  2. #define DataPort P0 //定義數(shù)據(jù)端口 程序中遇到DataPort 則用P0 替換
  3. unsigned char k=0,h=0,m=0,s=0;
  4. sbit key1=P1^0;
  5. sbit key2=P1^1;
  6. sbit key3=P1^2;
  7. sbit key4=P1^3;
  8. sbit key5=P1^4;
  9. sbit key6=P1^5;
  10. unsigned char code duanma[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};
  11. unsigned char code weima[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};
  12. unsigned char TempData[8];
  13. sbit LATCH1=P2^2;//定義鎖存使能端口 段鎖存
  14. sbit LATCH2=P2^3;//                 位鎖存
  15. /*----------延時(shí)時(shí)間T=(2*t+5)us-------------------*/
  16. void DelayUs2x(unsigned char t)
  17.   {
  18.    while(--t);
  19.   }
  20. /*----------延時(shí)時(shí)間T=tms-------------------*/
  21. void DelayMs(unsigned char t)
  22.   {
  23.   while(t--)
  24.    {
  25.     DelayUs2x(245);
  26.     DelayUs2x(245);
  27.    }
  28.   }
  29. /*----------顯示子函數(shù)-------------------*/
  30. void Display(unsigned char FirstBit,unsigned char Num)
  31. {
  32.   unsigned char i;
  33.   for(i=0;i<Num;i++)
  34.   {
  35.    DataPort=0; //清空數(shù)據(jù),防止有交替重影
  36.    LATCH1=1; //段鎖存
  37.    LATCH1=0;
  38.    DataPort= weima[i+FirstBit]; //取位碼
  39.    LATCH2=1; //位鎖存
  40.    LATCH2=0;
  41.    DataPort=TempData[i]; //取顯示數(shù)據(jù),段碼
  42.    LATCH1=1; //段鎖存
  43.    LATCH1=0;
  44.    DelayMs(2); // 掃描間隙延時(shí),時(shí)間太長(zhǎng)會(huì)閃爍,太短會(huì)造成重影
  45.   }
  46. }
  47. /*-------------------------------------------------
  48.    定時(shí)器初始化子函數(shù)
  49. -------------------------------------------------*/
  50. void Init_Timer0(void)
  51. {
  52. TMOD|=0x01;
  53. TH0=(65536-20000)/256;
  54. TL0=(65536-20000)%256;
  55. EA=1;
  56. ET0=1;
  57. TR0=1;
  58. }


  59. /*------------------------------------------------
  60.                     主函數(shù)
  61. ------------------------------------------------*/
  62. main()
  63. {
  64. Init_Timer0();
  65. while(1)
  66. {
  67.   if(!key1)                                       
  68.     {
  69.    DelayMs(10);
  70.    if(!key1)
  71.       {
  72.      while(!key1)Display(0,8);
  73.      TR0=~TR0;
  74.          s++;
  75.      }
  76.    }
  77.   if(!key2)
  78.     {
  79.    DelayMs(10);
  80.    if(!key2)
  81.       {
  82.      while(!key2)Display(0,8);
  83.       TR0=~TR0;
  84.            m++;
  85.      }
  86.    }
  87.      if(!key3)
  88.     {
  89.    DelayMs(10);
  90.    if(!key3)
  91.       {
  92.      while(!key3)Display(0,8);
  93.       TR0=~TR0;
  94.            h++;
  95.      }
  96.    }
  97.    if(!key4)
  98.     {
  99.    DelayMs(10);
  100.    if(!key4)
  101.       {
  102.      while(!key4)Display(0,8);
  103.       TR0=~TR0;
  104.            s--;
  105.                     if(s==255)
  106.            {
  107.            s=59;
  108.            }

  109.           }
  110.    }
  111.       if(!key5)
  112.     {
  113.    DelayMs(10);
  114.    if(!key5)
  115.       {
  116.      while(!key5)Display(0,8);
  117.       TR0=~TR0;
  118.            m--;
  119.                    if(m==255)
  120.            {
  121.            m=59;
  122.            }

  123.           }
  124.    }
  125.       if(!key6)
  126.     {
  127.    DelayMs(10);
  128.    if(!key6)
  129.       {
  130.      while(!key6)Display(0,8);
  131.       TR0=~TR0;
  132.            h--;
  133.            if(h==255)
  134.            {
  135.              h=23;
  136.            }
  137.           }
  138.    }
  139.   if(k>=50)
  140.        {k=0;s++;}
  141.   if(s==60)
  142.      {s=0;m++;}
  143.   if(m==60)
  144.      {m=0;h++;}
  145.   if(h==24)
  146.      h=0;
  147.   TempData[0]=duanma[h/10];
  148.   TempData[1]=duanma[h%10];
  149.   TempData[2]=0x40;
  150.   TempData[3]=duanma[m/10];
  151.   TempData[4]=duanma[m%10];
  152.   TempData[5]=0x40;
  153.   TempData[6]=duanma[s/10];
  154.   TempData[7]=duanma[s%10];
  155.   Display(0,8);
  156.   }
  157.   
  158. }

  159. /*------------------------------------------------
  160. 定時(shí)器中斷子程序
  161. ------------------------------------------------*/
  162. void Timer0_isr(void) interrupt 1
  163. {
  164. TH0=(65536-20000)/256;
  165. TL0=(65536-20000)%256;
  166. k++;
  167. }
復(fù)制代碼
51hei.png
所有資料51hei提供下載:
電子時(shí)鐘.zip (16.42 KB, 下載次數(shù): 36)


評(píng)分

參與人數(shù) 1黑幣 +50 收起 理由
admin + 50 共享資料的黑幣獎(jiǎng)勵(lì)!

查看全部評(píng)分

回復(fù)

使用道具 舉報(bào)

ID:758875 發(fā)表于 2020-6-21 10:10 | 顯示全部樓層
有原理圖和pcb嗎?
回復(fù)

使用道具 舉報(bào)

ID:787144 發(fā)表于 2020-6-22 21:56 | 顯示全部樓層
請(qǐng)問(wèn)涉及AD數(shù)模轉(zhuǎn)換嗎
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

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

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

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