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

標(biāo)題: 單片機(jī)秒表電路+仿真+原理圖+PCB+源代碼 顯示亂碼求幫助 [打印本頁(yè)]

作者: 安靜低谷    時(shí)間: 2017-9-7 16:15
標(biāo)題: 單片機(jī)秒表電路+仿真+原理圖+PCB+源代碼 顯示亂碼求幫助
分享一個(gè)51單片機(jī)做的秒表,有錯(cuò)誤 如圖:

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


Altium Designer畫(huà)的原理圖和PCB圖如下:(51hei附件中可下載工程文件)




單片機(jī)源程序如下:
  1. #include        "reg51.h"
  2. //******************************************
  3. //開(kāi)始定義各個(gè)數(shù)字的字模
  4. char        code        cDISP_NumMod[16]        =        
  5. {
  6.         0x3F,0x06,0x5B,0x4F,        0x66,0x6D,0x7D,0x07,
  7.         0x7F,0x6F,0x77,0x40,        0x39,0x00,0x79,0x71
  8. };
  9. //定義各個(gè)數(shù)字位的位控制模型
  10. char        code        cDISP_BitMode[4]        =        
  11. {0xEF,0xDF,0xBF,0x7F};
  12. //開(kāi)始定義全局變量
  13. char        vDISP_Index ;                        //當(dāng)前在顯示哪一位?在中斷服務(wù)中改變和使用
  14. char        vDISP_SegValue[4];                //當(dāng)前顯示數(shù)字對(duì)應(yīng)的字模,該變量在BitNum,Integer,Low,High等函數(shù)中進(jìn)行設(shè)置 ,在中斷服務(wù)程序中進(jìn)行使用
  15. //char        vDISP_Blink[4];                         //控制哪些位需要閃爍。1:閃爍 0:正常顯示。 是在SetBlink函數(shù)中進(jìn)行設(shè)置,在中斷服務(wù)中使用。
  16. //unsigned char        vDISP_BlinkCount;                //閃爍所需要的計(jì)數(shù),0~255。<128時(shí)隱藏,>128時(shí)顯示。是在中斷服務(wù)程序中改變,每次中斷+1。

  17. //******************************************



  18. //*******************************************
  19. //初始化函數(shù),初始化全局變量
  20. //*******************************************

  21. void        DISP_Init(void)
  22. {
  23.         TH0        =        0x3C;
  24.         TL0        =        0xBA;

  25.         ET0                =        1;
  26.         EA                =        1;
  27.         TR0                =        1;
  28.         vDISP_Index        =        0;
  29.         vDISP_SegValue[0]        =        cDISP_NumMod[0];
  30.         vDISP_SegValue[1]        =        cDISP_NumMod[0];        
  31.         vDISP_SegValue[2]        =        cDISP_NumMod[0];
  32.         vDISP_SegValue[3]        =        cDISP_NumMod[0];
  33.         //初始化定時(shí)器T0,中斷頻率位200Hz,初始化相關(guān)寄存器
  34.         //初始化全局變量
  35. }

  36. //*******************************************
  37. //設(shè)置四位數(shù)碼管上分別需要顯示什么數(shù)字
  38. //D0 數(shù)碼0上需要顯示的數(shù)字,取值范圍0~F
  39. //D1 數(shù)碼0上需要顯示的數(shù)字,取值范圍0~F
  40. //D2 數(shù)碼0上需要顯示的數(shù)字,取值范圍0~F
  41. //D3 數(shù)碼0上需要顯示的數(shù)字,取值范圍0~F
  42. //*******************************************
  43. void        DISP_BitNum(char D3,char D2,char D1,char D0,char dp)  //分別改變四位
  44. {
  45.         //根據(jù)入口參數(shù)D0的值,設(shè)定全局變量vDISP_SegValue[3]的值
  46.         //如果D0>0x0F,則不改變當(dāng)前顯示的數(shù)字
  47.         //否則使用D0去訪問(wèn)cDISP_NumMod常量,送入vDISP_SegValue[3]         D0-> vDISP_SegValue[3]
  48.   if(D0>0x0F)
  49.    {}
  50.    else           
  51.      vDISP_SegValue[3]        =        cDISP_NumMod[D0];
  52.         //根據(jù)入口參數(shù)D1的值,設(shè)定全局變量vDISP_SegValue[2]的值                 D1-> vDISP_SegValue[2]
  53.     if(D1>0x0F)
  54.    {}
  55.    else         
  56.      vDISP_SegValue[2]        =        cDISP_NumMod[D1];
  57.         //根據(jù)入口參數(shù)D2的值,設(shè)定全局變量vDISP_SegValue[1]的值                 D2-> vDISP_SegValue[1]
  58.    if(D2>0x0F)
  59.    {}
  60.    else         
  61.      vDISP_SegValue[1]        =        cDISP_NumMod[D2];
  62.         //根據(jù)入口參數(shù)D3的值,設(shè)定全局變量vDISP_SegValue[0]的值                 D3-> vDISP_SegValue[0]
  63.    if(D3>0x0F)
  64.    {}
  65.    else         
  66.      vDISP_SegValue[0]        =        cDISP_NumMod[D3];
  67.         switch        (dp)
  68.         {
  69.                 case 0:        break;
  70.                 case 1:        vDISP_SegValue[2]        =        vDISP_SegValue[2]|0x80;break;
  71.                 case 2:        vDISP_SegValue[1]        =        vDISP_SegValue[1]|0x80;break;
  72.                 case 3:        vDISP_SegValue[0]        =        vDISP_SegValue[0]|0x80;break;

  73.         }
  74. }

  75. //*******************************************
  76. //設(shè)置4位數(shù)碼管上需要顯示的整數(shù),同時(shí)設(shè)置4位
  77. //value        需要顯示的整數(shù)數(shù)值,取值范圍0~9999
  78. //*******************************************
  79. void        DISP_Integer(long Value,char dp)                                   // 同時(shí)改變四位
  80. {
  81.         //如果Value<0,就讓其等于0。
  82.         //提取Value的千位存入局部變量D0,提取Value的百位存入D1,提取Value的十位存入D2,提取Value的個(gè)位存入D3
  83.         //調(diào)用BitNum函數(shù)。
  84.         char        D3, D2, D1, D0;
  85.         if        (Value        <        0)
  86.                 Value        =        0;
  87.         if        (Value        >        9999)
  88.         {
  89.                 D0        =        Value        /        1000000;
  90.                 Value        %=        1000000;
  91.                 D1        =        Value        /        10000;
  92.                 Value        %=        10000;
  93.                 D2        =        Value        /        100;
  94.                 D3        =        Value        %        100;        
  95.         }
  96.         else
  97.         {
  98.                 D0        =        Value        /        1000;
  99.                 Value        %=        1000;
  100.                 D1        =        Value        /        100;
  101.                 Value        %=        100;
  102.                 D2        =        Value        /        10;
  103.                 D3        =        Value        %        10;
  104.         }

  105.         DISP_BitNum(D0, D1, D2, D3,dp);

  106. }



  107. //*******************************************
  108. //定時(shí)器
  109. //*******************************************
  110. void        DISP_T0_ISR(void)        interrupt        1
  111. {
  112.         //給T0重新載入計(jì)數(shù)初值
  113.         TH0        = 0x3C;
  114.         TL0        = 0xBA;
  115.         //設(shè)置段的控制端口
  116.         P3        =        cDISP_BitMode[vDISP_Index];
  117.          //輸出位的控制端口
  118.         P2        =        vDISP_SegValue[vDISP_Index];   //對(duì)這句話改變一下就可以實(shí)現(xiàn)閃爍


  119.         //改變Index的值,并使其在0~3之間變化。

  120.         vDISP_Index++;
  121.         vDISP_Index        &=        3;

  122.                
  123. }

復(fù)制代碼

錯(cuò)誤程序:
秒表.7z (14.29 MB, 下載次數(shù): 398)

我這個(gè)有錯(cuò)誤,大家可以參考:http://www.zg4o1577.cn/bbs/dpj-187643-1.html



作者: miaobiao122    時(shí)間: 2018-1-8 15:16
匯編的代碼

演示代碼.rar

14.19 MB, 下載次數(shù): 47, 下載積分: 黑幣 -5


作者: 897566846    時(shí)間: 2018-1-9 13:21
謝謝分享,很有用
作者: 軟糯咯    時(shí)間: 2018-4-7 13:24
很有用,謝謝
作者: 飯卡總是找不到    時(shí)間: 2018-4-22 01:43
請(qǐng)問(wèn)在顯示中有問(wèn)題,不能正常顯示秒表
作者: Condit    時(shí)間: 2018-4-25 09:28
你這顯示不了阿
作者: SB6170LPG    時(shí)間: 2018-11-15 10:28
很有用,謝謝
作者: 綠綠綠綠綠    時(shí)間: 2018-12-29 10:06
為什么下載不了
作者: 風(fēng)之墨羽    時(shí)間: 2019-1-1 20:40
為什么顯示不出來(lái)?
作者: 風(fēng)之墨羽    時(shí)間: 2019-1-1 20:47
顯示出來(lái)的數(shù)字不對(duì)呀,是亂碼的。。。
作者: lindeijun1    時(shí)間: 2019-12-27 08:44
謝謝樓主分享!!!
作者: 2606618775    時(shí)間: 2021-6-5 00:04
你這個(gè)東西連顯示的數(shù)字都不全




歡迎光臨 (http://www.zg4o1577.cn/bbs/) Powered by Discuz! X3.1
主站蜘蛛池模板: 在线国产小视频 | 九九久久精品 | 久久久精品 | 午夜精品一区二区三区三上悠亚 | 国内精品久久久久久久 | 成人小视频在线观看 | 亚洲一区二区三区免费在线 | 日韩中文一区二区三区 | 久久一区二区免费视频 | 国产精品九九 | 欧美高清免费 | 国产美女福利在线观看 | 99久久成人| 精品中文在线 | aaa在线| 亚洲国产一区二区三区 | 国产午夜av片 | 在线观看免费av网 | 91精品国产一区二区三区 | 免费在线观看成年人视频 | 久久久久99| 亚洲高清视频在线观看 | 国产精品美女久久久久久免费 | 久久久久久久久蜜桃 | 精品国产成人 | 成人av一区二区三区 | 亚洲精品粉嫩美女一区 | 黄色一级大片在线免费看产 | 婷婷综合激情 | 国产亚洲精品91 | 午夜电影网| 亚洲精品一级 | 国产一区二区 | 99免费在线观看 | 久久综合色综合 | 中文字幕国产在线 | 亚洲免费视频在线观看 | 麻豆精品国产免费 | 欧美全黄 | 久久久久国产 | 久久精品一区二区 |