欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136

標題: 單片機電子鐘,有沒有人可以提供下思路呀 [打印本頁]

作者: 651991190    時間: 2020-6-9 21:24
標題: 單片機電子鐘,有沒有人可以提供下思路呀
題目是要求電子鐘設置一個開機控制顯示按鍵、一個時/分切換按鍵、一個加 1 按鍵,每到整點蜂鳴器鳴響,用 6 位一體數碼管顯示時、分、秒,開機顯示 12:00:00。給定單片機頻率為 11.0592MHz。設計硬件電路圖并在 Protel 上繪制原理圖和 PCB 圖,在 Keil 中編寫代碼并在 Proteus 上做出仿真。
基礎很差,臨時學有點大海撈針的感覺,求好心人指導一下涉及了哪些知識點哇,我去康康,復習復習

作者: fatetl    時間: 2020-6-9 22:52

  1. #include <reg51.h>
  2. #include <intrins.h>

  3. unsigned char data dis_digit;
  4. unsigned char key_s, key_v;

  5. unsigned char code dis_code[11]={0x3f,0x06,0x5b,0x4f,
  6.                                 0x66,0x6d,0x7d,0x07,0x7f,0x6f, 0x00};
  7. unsigned char data dis_buf[6];
  8. unsigned char data dis_index;
  9. unsigned char hour,min,sec;
  10. unsigned char sec100;

  11. sbit        K1 = P1^4;
  12. sbit        K2 = P1^5;

  13. bit scan_key();
  14. void proc_key();
  15. void inc_sec();
  16. void inc_min();
  17. void inc_hour();
  18. void display();
  19. void delayms(unsigned char ms);

  20. void main(void)
  21. {
  22.         P0 = 0x00;
  23.         P2 = 0x00;
  24.         TMOD = 0x11;                // 定時器0, 1工作模式1, 16位定時方式
  25.         TH1 = 0xdc;
  26.         TL1 = 0;

  27.         TH0 = 0xFC;
  28.         TL0 = 0x17;
  29.        
  30.         hour = 12;
  31.         min = 00;

  32.         sec = 00;
  33.         sec100 = 0;
  34.        
  35.         dis_buf[0] = dis_code[hour / 10];                // 時十位
  36.         dis_buf[1] = dis_code[hour % 10];                // 時個位
  37.         dis_buf[2] = dis_code[min / 10];                // 分十位
  38.         dis_buf[3] = dis_code[min % 10];                // 分個位
  39.         dis_buf[4] = dis_code[sec / 10];                // 秒十位
  40.         dis_buf[5] = dis_code[sec % 10];                // 秒個位
  41.                        
  42.         dis_digit = 0xfe;
  43.         dis_index = 0;
  44.        
  45.         TCON = 0x01;
  46.         IE = 0x8a;                                // 使能timer0,1 中斷
  47.        
  48.         TR0 = 1;
  49.         TR1 = 1;

  50.         key_v = 0x03;

  51.         while(1)
  52.         {
  53.                 if(scan_key())
  54.                 {
  55.                         delayms(10);
  56.                         if(scan_key())
  57.                         {
  58.                                 key_v = key_s;
  59.                                 proc_key();
  60.                         }
  61.                 }
  62.                
  63.         }
  64. }

  65. bit scan_key()
  66. {
  67.         key_s = 0x00;
  68.         key_s |= K2;
  69.         key_s <<= 1;
  70.         key_s |= K1;
  71.         return(key_s ^ key_v);       

  72. }

  73. void proc_key()
  74. {
  75.         EA = 0;
  76.         if((key_v & 0x01) == 0)                // K1
  77.         {
  78.                 inc_hour();
  79.         }
  80.         else if((key_v & 0x02) == 0)        // K2
  81.         {
  82.                 min++;
  83.                 if(min > 59)
  84.                 {
  85.                         min = 0;
  86.                 }
  87.                 dis_buf[2] = dis_code[min / 10];                // 分十位
  88.                 dis_buf[3] = dis_code[min % 10];                // 分個位
  89.         }

  90.         EA = 1;
  91. }

  92. void timer0() interrupt 1
  93. // 定時器0中斷服務程序, 用于數碼管的動態掃描
  94. // dis_index --- 顯示索引, 用于標識當前顯示的數碼管和緩沖區的偏移量
  95. // dis_digit --- 位選通值, 傳送到P2口用于選通當前數碼管的數值, 如等于0xfe時,
  96. //                                選通P2.0口數碼管
  97. // dis_buf   --- 顯于緩沖區基地址       
  98. {
  99.         TH0 = 0xFC;
  100.         TL0 = 0x17;
  101.        

  102.         P0 = dis_buf[dis_index];                        // 顯示代碼傳送到P0口
  103.         P2 = dis_digit;                                                //

  104.         dis_digit = _crol_(dis_digit,1);        // 位選通值左移, 下次中斷時選通下一位數碼管
  105.         dis_index++;                                                //
  106.         if(dis_index == 0x06)                // 6個數碼管全部掃描完一遍之后,再回到第一個開始
  107.         {                           // 掃描
  108.                 dis_index = 0;


  109.                 dis_digit = 0xfe;
  110.         }
  111. }

  112. void timer1() interrupt 3
  113. {
  114.         TH1 = 0xdc;
  115.        
  116.         sec100++;
  117.        
  118.         if(sec100 >= 100)
  119.         {
  120.                 sec100 = 0;
  121.                 inc_sec();
  122.         }
  123. }

  124. void inc_sec()
  125. {
  126.         sec++;
  127.         if(sec > 59)
  128.         {
  129.                 sec = 0;
  130.                 inc_min();
  131.         }
  132.         dis_buf[4] = dis_code[sec / 10];                // 秒十位
  133.         dis_buf[5] = dis_code[sec % 10];                // 秒個位       
  134. }

  135. void inc_min()
  136. {
  137.         min++;
  138.         if(min > 59)
  139.         {
  140.                 min = 0;
  141.                 inc_hour();
  142.         }
  143.         dis_buf[2] = dis_code[min / 10];                // 分十位
  144.         dis_buf[3] = dis_code[min % 10];                // 分個位
  145. }

  146. void inc_hour()

  147. {
  148.         hour++;
  149.         if(hour > 23)
  150.         {
  151.                 hour = 0;
  152.         }
  153.         if(hour > 9)
  154.                 dis_buf[0] = dis_code[hour / 10];                // 時十位
  155.         else
  156.                                                                      
  157.                 dis_buf[0] = 0x00;                                        // 當小時的十位為0時不顯示
  158.         dis_buf[1] = dis_code[hour % 10];                // 時個位

  159. }


  160. void delayms(unsigned char ms)       
  161. // 延時子程序
  162. {                                               
  163.         unsigned char i;
  164.         while(ms--)
  165.         {
  166.                 for(i = 0; i < 120; i++);
  167.         }
  168. }
復制代碼

作者: fatetl    時間: 2020-6-9 22:52
我的簡易數字鐘的源代碼 希望能幫到你。

作者: hotpet    時間: 2020-6-10 05:58
看下這個,很像改改就可以了。 http://www.raoushi.com/bbs/dpj-186609-1.html
作者: man1234567    時間: 2020-6-10 08:04
不想動腦上淘寶呀
作者: 火星慧寶兒    時間: 2020-6-10 08:49
原來有人和我一樣無助
作者: 黑衣天王J    時間: 2020-6-10 10:45
可以在網上找找資料再配合B站視頻
作者: 651991190    時間: 2020-6-10 17:32
fatetl 發表于 2020-6-9 22:52
我的簡易數字鐘的源代碼 希望能幫到你。

好噠,謝謝我會參考噠
作者: 651991190    時間: 2020-6-10 17:34
黑衣天王J 發表于 2020-6-10 10:45
可以在網上找找資料再配合B站視頻

好噠,謝謝
作者: 加油ll    時間: 2020-6-17 18:24
時鐘的走時涉及定時器
作者: 魏海龍    時間: 2020-7-7 12:00
這是我的一個時鐘。 你可以拿去參考參考。

20172308魏海龍.zip

81.09 KB, 下載次數: 12


作者: 魏海龍    時間: 2020-7-7 12:02
我上傳了 信息 看到了木有

作者: 魏海龍    時間: 2020-7-7 12:02
內存太大了

20172308魏海龍.zip

81.09 KB, 下載次數: 5






歡迎光臨 (http://www.raoushi.com/bbs/) Powered by Discuz! X3.1