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

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

QQ登錄

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

搜索
查看: 2679|回復(fù): 12
打印 上一主題 下一主題
收起左側(cè)

單片機(jī)電子鐘,有沒(méi)有人可以提供下思路呀

[復(fù)制鏈接]
回帖獎(jiǎng)勵(lì) 16 黑幣 回復(fù)本帖可獲得 2 黑幣獎(jiǎng)勵(lì)! 每人限 2 次
跳轉(zhuǎn)到指定樓層
樓主
ID:565961 發(fā)表于 2020-6-9 21:24 | 只看該作者 回帖獎(jiǎng)勵(lì) |倒序?yàn)g覽 |閱讀模式
題目是要求電子鐘設(shè)置一個(gè)開(kāi)機(jī)控制顯示按鍵、一個(gè)時(shí)/分切換按鍵、一個(gè)加 1 按鍵,每到整點(diǎn)蜂鳴器鳴響,用 6 位一體數(shù)碼管顯示時(shí)、分、秒,開(kāi)機(jī)顯示 12:00:00。給定單片機(jī)頻率為 11.0592MHz。設(shè)計(jì)硬件電路圖并在 Protel 上繪制原理圖和 PCB 圖,在 Keil 中編寫代碼并在 Proteus 上做出仿真。
基礎(chǔ)很差,臨時(shí)學(xué)有點(diǎn)大海撈針的感覺(jué),求好心人指導(dǎo)一下涉及了哪些知識(shí)點(diǎn)哇,我去康康,復(fù)習(xí)復(fù)習(xí)
分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復(fù)

使用道具 舉報(bào)

沙發(fā)
ID:774455 發(fā)表于 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;                // 定時(shí)器0, 1工作模式1, 16位定時(shí)方式
  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];                // 時(shí)十位
  36.         dis_buf[1] = dis_code[hour % 10];                // 時(shí)個(gè)位
  37.         dis_buf[2] = dis_code[min / 10];                // 分十位
  38.         dis_buf[3] = dis_code[min % 10];                // 分個(gè)位
  39.         dis_buf[4] = dis_code[sec / 10];                // 秒十位
  40.         dis_buf[5] = dis_code[sec % 10];                // 秒個(gè)位
  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];                // 分個(gè)位
  89.         }

  90.         EA = 1;
  91. }

  92. void timer0() interrupt 1
  93. // 定時(shí)器0中斷服務(wù)程序, 用于數(shù)碼管的動(dòng)態(tài)掃描
  94. // dis_index --- 顯示索引, 用于標(biāo)識(shí)當(dāng)前顯示的數(shù)碼管和緩沖區(qū)的偏移量
  95. // dis_digit --- 位選通值, 傳送到P2口用于選通當(dāng)前數(shù)碼管的數(shù)值, 如等于0xfe時(shí),
  96. //                                選通P2.0口數(shù)碼管
  97. // dis_buf   --- 顯于緩沖區(qū)基地址       
  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);        // 位選通值左移, 下次中斷時(shí)選通下一位數(shù)碼管
  105.         dis_index++;                                                //
  106.         if(dis_index == 0x06)                // 6個(gè)數(shù)碼管全部掃描完一遍之后,再回到第一個(gè)開(kāi)始
  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];                // 秒個(gè)位       
  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];                // 分個(gè)位
  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];                // 時(shí)十位
  155.         else
  156.                                                                      
  157.                 dis_buf[0] = 0x00;                                        // 當(dāng)小時(shí)的十位為0時(shí)不顯示
  158.         dis_buf[1] = dis_code[hour % 10];                // 時(shí)個(gè)位

  159. }


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

使用道具 舉報(bào)

板凳
ID:774455 發(fā)表于 2020-6-9 22:52 | 只看該作者
我的簡(jiǎn)易數(shù)字鐘的源代碼 希望能幫到你。
回復(fù)

使用道具 舉報(bào)

地板
ID:732506 發(fā)表于 2020-6-10 05:58 | 只看該作者
看下這個(gè),很像改改就可以了。 http://www.raoushi.com/bbs/dpj-186609-1.html
回復(fù)

使用道具 舉報(bào)

5#
ID:584814 發(fā)表于 2020-6-10 08:04 | 只看該作者
不想動(dòng)腦上淘寶呀
回復(fù)

使用道具 舉報(bào)

6#
ID:774629 發(fā)表于 2020-6-10 08:49 | 只看該作者
原來(lái)有人和我一樣無(wú)助
回復(fù)

使用道具 舉報(bào)

7#
ID:774709 發(fā)表于 2020-6-10 10:45 | 只看該作者
可以在網(wǎng)上找找資料再配合B站視頻
回復(fù)

使用道具 舉報(bào)

8#
ID:565961 發(fā)表于 2020-6-10 17:32 | 只看該作者
fatetl 發(fā)表于 2020-6-9 22:52
我的簡(jiǎn)易數(shù)字鐘的源代碼 希望能幫到你。

好噠,謝謝我會(huì)參考噠
回復(fù)

使用道具 舉報(bào)

9#
ID:565961 發(fā)表于 2020-6-10 17:34 | 只看該作者
黑衣天王J 發(fā)表于 2020-6-10 10:45
可以在網(wǎng)上找找資料再配合B站視頻

好噠,謝謝
回復(fù)

使用道具 舉報(bào)

10#
ID:782358 發(fā)表于 2020-6-17 18:24 | 只看該作者
時(shí)鐘的走時(shí)涉及定時(shí)器
回復(fù)

使用道具 舉報(bào)

11#
ID:633896 發(fā)表于 2020-7-7 12:00 | 只看該作者
這是我的一個(gè)時(shí)鐘。 你可以拿去參考參考。

20172308魏海龍.zip

81.09 KB, 下載次數(shù): 12

回復(fù)

使用道具 舉報(bào)

12#
ID:633896 發(fā)表于 2020-7-7 12:02 | 只看該作者
我上傳了 信息 看到了木有
回復(fù)

使用道具 舉報(bào)

13#
ID:633896 發(fā)表于 2020-7-7 12:02 | 只看該作者
內(nèi)存太大了

20172308魏海龍.zip

81.09 KB, 下載次數(shù): 5

回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

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

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

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