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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 1865|回復: 0
收起左側

藍橋杯單片機定時器進階-數字鐘PROTEUS仿真程序

[復制鏈接]
ID:294858 發表于 2023-6-14 10:26 | 顯示全部樓層 |閱讀模式
■在藍橋杯單片機綜合訓練平臺上,利用定時器T0、數碼管模塊和2個獨立按鍵(J5的2-3短接),設計一個秒表,具有清零、暫停、啟動功能。
1.顯示格式為:分-秒.0.05秒(即50ms)08-26-18表示: 8分26秒900毫秒
2.獨立按鍵S4為:暫停/啟動
獨立按鍵S5為:清零
按鍵均為按下有效。

已完成仿真與調試。

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

單片機源程序如下:
  1. #include "reg52.h"  

  2. sbit HC138_A = P2^5;        
  3. sbit HC138_B = P2^6;        
  4. sbit HC138_C = P2^7;        

  5.       
  6. sbit S5 = P3^2;        
  7. sbit S4 = P3^3;        


  8. //共陽4位數碼管的段碼數組
  9. unsigned char code SMG_NoDot[18] =
  10.     {0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,
  11.      0x80,0x90,0x88,0x80,0xc6,0xc0,0x86,0x8e,
  12.      0xbf,0x7f};

  13.                  

  14. char minute=0;
  15. char second=0;        
  16. char ms=0;                 
  17. void DisplaySMG_Dynamic();     
  18. void Delay(unsigned int time);         

  19. void DelaySMG(unsigned int time)
  20. {
  21.     while(time--);
  22. }

  23. void Delay(unsigned int time)
  24. {
  25.     while(time--);
  26. }

  27. void Init74HC138(unsigned char n)
  28. {
  29.     switch(n)
  30.     {
  31.         case 4:
  32.             HC138_A = 0;
  33.             HC138_B = 0;
  34.             HC138_C = 1;
  35.             break;
  36.         case 5:
  37.             HC138_A = 1;
  38.             HC138_B = 0;
  39.             HC138_C = 1;
  40.             break;
  41.         case 6:
  42.             HC138_A = 0;
  43.             HC138_B = 1;
  44.             HC138_C = 1;
  45.             break;
  46.         case 7:
  47.             HC138_A = 1;
  48.             HC138_B = 1;
  49.             HC138_C = 1;
  50.             break;
  51.         case 8:
  52.             HC138_A = 0;
  53.             HC138_B = 0;
  54.             HC138_C = 0;
  55.             break;
  56.     }
  57. }

  58. void DispaySMG_Bit(unsigned char value, unsigned char pos)
  59. {
  60.           Init74HC138(7);
  61.     P0 = 0xff;
  62.     Init74HC138(6);
  63.     P0 = (0x01 << pos);
  64.     Init74HC138(7);
  65.     P0 = value;
  66. }

  67. void DisplaySMG_Dynamic()
  68. {
  69.     DispaySMG_Bit(SMG_NoDot[minute/10],0);
  70.     DelaySMG(30);
  71.     DispaySMG_Bit(SMG_NoDot[minute%10],1);
  72.     DelaySMG(30);
  73.     DispaySMG_Bit(SMG_NoDot[16],2);
  74.     DelaySMG(30);
  75.     DispaySMG_Bit(SMG_NoDot[second/10],3);
  76.     DelaySMG(30);
  77.     DispaySMG_Bit(SMG_NoDot[second%10],4);
  78.     DelaySMG(30);
  79.     DispaySMG_Bit(SMG_NoDot[16],5);
  80.     DelaySMG(30);
  81.    
  82.     DispaySMG_Bit(SMG_NoDot[ms/10],6);
  83.     DelaySMG(30);
  84.     DispaySMG_Bit(SMG_NoDot[ms%10],7);
  85.     DelaySMG(30);
  86. }
  87. void InitTimer0()
  88. {
  89.         TMOD = 0X01;
  90.         TH0=(65535-50000)/256;
  91.         TL0=(65535-50000)%256;

  92.         ET0=1;
  93.         EA=1;
  94.         TR0=1;           
  95. }


  96. void ServiceTimer0() interrupt 1
  97. {
  98.     TH0=(65535-50000)/256;
  99.           TL0=(65535-50000)%256;
  100.           ms++;
  101.          if(ms ==20)
  102.          {
  103.                  second++;
  104.                  ms=0;
  105.              if(second==60)
  106.                  {
  107.                    minute++;
  108.                    second=0;
  109.                  }
  110.                  if(minute==60)
  111.                  {
  112.                    minute=0;
  113.                  }
  114.          
  115.          }
  116.          
  117. }

  118. void ScanKeys()
  119. {
  120.       
  121.         if(S5 == 0)
  122.         {
  123.                 Delay(100);
  124.                 if(S5 == 0)
  125.                 {
  126.                   minute=0;
  127.                                                 second=0;
  128.                                                 ms=0;
  129.                        while(S5 ==0)
  130.                                            {
  131.                                                      DisplaySMG_Dynamic();
  132.                                            }
  133.                 }
  134.         }
  135.         if(S4 == 0)
  136.         {
  137.                 Delay(100);
  138.                 if(S4 == 0)
  139.                 {
  140.                        TR0=~TR0;
  141.                                            while(S4 ==0)
  142.                                            {
  143.                                                      DisplaySMG_Dynamic();
  144.                                            }
  145.                         
  146.                 }
  147.         }
  148. }
  149.                           
  150. main()
  151. {
  152.           InitTimer0();
  153.     while(1)
  154.     {
  155.         DisplaySMG_Dynamic();
  156.        ScanKeys();
  157.     }
  158. }
復制代碼
51hei.png
Keil代碼與Proteus7.5版本的仿真dsn文件下載(其他版本打開會出錯):
11 定時器進階-數字鐘(更新后).7z (320.89 KB, 下載次數: 13)

評分

參與人數 1黑幣 +40 收起 理由
admin + 40 共享資料的黑幣獎勵!

查看全部評分

回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 久久综合婷婷 | 爱爱视频日本 | 国产精品免费大片 | 午夜精品久久久久久久久久久久 | 免费的日批视频 | 成人精品在线观看 | 91在线精品秘密一区二区 | 欧美三级在线 | 野狼在线社区2017入口 | 99国产精品99久久久久久 | 欧美专区在线 | a级大毛片| 欧美成人精品 | 91精品国产一区二区三区 | 国产一级片一区二区 | 欧美一二区 | 韩日三级| 亚洲欧美日韩精品久久亚洲区 | 国产高清精品一区二区三区 | 久久亚洲一区二区三区四区 | 国产特级毛片aaaaaa | 欧美黑人国产人伦爽爽爽 | 国产精品一区在线观看 | 日日综合| 国产成人精品一区二区三区视频 | 嫩草网| 国产在线中文字幕 | 桃色五月| 精品中文在线 | 成人一区二区三区在线观看 | 亚洲精品久久久久久久久久久 | a天堂在线 | 久久天天躁狠狠躁夜夜躁2014 | 二区av| 成人免费视频网站在线看 | 欧美一区二区三区视频 | 国产网站在线免费观看 | 日本一区二区三区四区 | 91在线视频播放 | 99reav| 成人不卡 |