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

QQ登錄

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

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

單片機(jī)秒表計(jì)時(shí)器Proteus仿真+程序 已成功

[復(fù)制鏈接]
ID:316613 發(fā)表于 2021-7-2 21:14 | 顯示全部樓層 |閱讀模式
秒表計(jì)時(shí)器,仿真+程序已成功
仿真原理圖如下(proteus仿真工程文件可到本帖附件中下載)
51hei.gif

單片機(jī)源程序如下:
  1. #include<reg52.h>
  2. #define uchar unsigned char        //無(wú)符號(hào)字符型宏定義
  3. #define   MS   2000
  4. uchar code led1[10]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f}; //不帶小數(shù)點(diǎn)數(shù)碼管段碼
  5. uchar code led2[10]={0xbf,0x86,0xdb,0xcf,0xe6,0xed,0xfd,0x87,0xff,0xef};//帶小數(shù)點(diǎn)數(shù)碼管段碼
  6. uchar n=0,m=0,j=0,k=0;//四位要顯示數(shù)據(jù)
  7. uchar keyln=0; //按鍵值
  8. sbit key=P3^3; //按鍵接口
  9. sbit key2=P3^2;
  10. sbit key1=P3^1;
  11. sbit key4=P3^4;
  12. uchar bit_;
  13. uchar num;
  14. uchar z,x,c,v;
  15. uchar h;
  16. uchar flag=0;
  17. uchar val[5][5];
  18. char val_index;
  19. uchar bc[4];
  20. uchar bc2[4];
  21. void Display2(void)        ;
  22. void Display3(void)        ;          //顯示函數(shù);
  23. void Delay_ms(uchar s);//延時(shí)函數(shù)聲明
  24. void Display(void);         //顯示函數(shù)聲明

  25. void disp_1();
  26. void disp_2();
  27. void disp_3();
  28. void disp_4();
  29. void main(void)        // 主函數(shù)
  30. {
  31.           TMOD=0X01;          //定時(shí)器0方式1
  32.         TH0=(65536-8000)/256;  //預(yù)設(shè)初值高位
  33.         TL0=(65536-8000)%256;  //預(yù)設(shè)初值低位
  34.         ET0=1;         //開(kāi)定時(shí)器0中斷
  35.         EA=1;          //開(kāi)總中斷
  36.         TR0=0;          //定時(shí)器關(guān)
  37.         z=x=c=v=0;
  38.         while(1)   //主函數(shù)循環(huán)
  39.         {               

  40.                
  41. if(key==0)          //判斷按鍵是否按下
  42.         {
  43.                 Delay_ms(50);  //延時(shí),軟件消抖
  44.                 if(key==0)          //再次判斷按鍵是否一直被按下
  45.                 {
  46.                                 TR0=!TR0;
  47.                         while(!key); //等待按鍵彈起
  48.                 }
  49.         }
  50. if(key4==0)          //判斷按鍵是否按下
  51.         {
  52.                 Delay_ms(50);  //延時(shí),軟件消抖
  53.                 if(key4==0)          //再次判斷按鍵是否一直被按下
  54.                 {
  55.                                 n=m=j=k=0;
  56.                         while(!key4); //等待按鍵彈起
  57.                 }
  58.         }


  59.         Display();//正常模式下數(shù)據(jù)

  60. }
  61. }

  62. void timer0(void) interrupt 1           //定時(shí)器0中斷服務(wù)子程序
  63. {
  64.           TH0=(65536-8000)/256;                   //重賦初值高位
  65.         TL0=(65536-8000)%256;                   //重賦初值低位
  66.         //num++;
  67.        
  68.         n++;                                                   //秒表最低位+1
  69.         if(n==10)                                           //如果最低位=10
  70.         {
  71.           n=0;                                                   //則最低位清0
  72.           m++;                                                   //前一位+1
  73.           if(m==10)                                          //以下如此推理
  74.           {
  75.             m=0;
  76.                   j++;
  77.                 if(j==10)
  78.                 {
  79.                     j=0;
  80.                     k++;
  81.                if(k==6)                           //當(dāng)最高位為10時(shí),全部清零
  82.                   {
  83.                         n=0;
  84.                         m=0;
  85.                         j=0;
  86.                         k=0;
  87.                   }
  88.                 }
  89.           }
  90.         }
  91. }
  92. void Delay_ms(uchar s)          //延時(shí)函數(shù)
  93. {
  94.     uchar i;
  95.         for(i=0;i<s;i++);
  96. }




  97. void Display(void)                  //顯示函數(shù)
  98. {

  99.           P2=0XF7;                          //最低位
  100.           P1=led1[n];
  101.           Delay_ms(MS);
  102.           P2=0XFF;

  103.           P2=0XFB;                         //第三位
  104.           P1=led1[m];
  105.           Delay_ms(MS);
  106.           P2=0XFF;

  107.           P2=0XFD;                        //第二位
  108.           P1=led2[j];
  109.           Delay_ms(MS);
  110.           P2=0XFF;
  111.        
  112.           P2=0XFE;                         //第一位
  113.           P1=led1[k];
  114.           Delay_ms(MS);
  115.           P2=0XFF;               
  116. }                       



  117. void Display2(void)                  //顯示函數(shù)
  118. {
  119.                   P2=0XF7;                          //最低位
  120.                   P1=led1[bc[0]];
  121.                   Delay_ms(MS);
  122.                   P2=0XFF;

  123.                   P2=0XFB;                         //第三位
  124.                   P1=led1[bc[1]];
  125.                   Delay_ms(MS);
  126.                   P2=0XFF;

  127.                   P2=0XFD;                        //第二位
  128.                   P1=led2[bc[2]];
  129.                   Delay_ms(MS);
  130.                   P2=0XFF;

  131.                
  132.                   P2=0XFE;                         //第一位
  133.                   P1=led1[bc[3]];
  134.                   Delay_ms(MS);
  135.                   P2=0XFF;       
  136. }       

  137. void Display3(void)                  //顯示函數(shù)
  138. {
  139.               P2=0XF7;                          //最低位
  140.                   P1=led1[bc2[0]];
  141.                   Delay_ms(MS);
  142.                   P2=0XFF;

  143.                   P2=0XFB;                         //第三位
  144.                   P1=led1[bc2[1]];
  145.                   Delay_ms(MS);
  146.                   P2=0XFF;

  147.                   P2=0XFD;                        //第二位
  148.                   P1=led2[bc2[2]];
  149.                   Delay_ms(MS);
  150.                   P2=0XFF;

  151.                
  152.                   P2=0XFE;                         //第一位
  153.                   P1=led1[bc2[3]];
  154.                   Delay_ms(MS);
  155.                   P2=0XFF;       
  156.        
  157. }       
復(fù)制代碼
51hei.png
所有資料51hei提供下載(Proteus是7.5版本的工程,不要用高版本打開(kāi)):
秒表基礎(chǔ)版.rar (73.07 KB, 下載次數(shù): 130)

評(píng)分

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

查看全部評(píng)分

回復(fù)

使用道具 舉報(bào)

ID:885725 發(fā)表于 2021-7-6 09:35 | 顯示全部樓層
謝謝樓主。請(qǐng)問(wèn)仿真軟件是Proteus,制圖用什么軟件呢?
回復(fù)

使用道具 舉報(bào)

ID:1056233 發(fā)表于 2022-12-19 14:20 | 顯示全部樓層
能問(wèn)問(wèn)怎么把量程設(shè)置成99.99嗎
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

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

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

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