找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 3171|回复: 18
收起左侧

为啥我的ntc检测温度ad值不对应

  [复制链接]
ID:745093 发表于 2022-4-19 11:43 | 显示全部楼层 |阅读模式
用的12位ADC检测温度,ad值如下表
b57cacb1c09fadaa6993731db1a2b9eb.png
下面是获取温度值后,处理ad值与实际环境温度值之间的误差,我这里误差有点大,比如0度时应该是2201,但实际检测到的ad值却是3299,硬件方面也没啥问题,不知道为啥会差别这么大,难道是计算ad值得问题吗,哪个大神给个标准的ntc检测温度标准处理方法看看
564b10f38cd9b42769558d5df6829d4d.png
回复

使用道具 举报

ID:554500 发表于 2022-4-19 13:07 | 显示全部楼层
看下ADC的电压基准
回复

使用道具 举报

ID:123289 发表于 2022-4-19 14:40 | 显示全部楼层
1、这个与硬件相关,你必须保证:NTC的温度对照表是正确的。
2、通常NTC的对照表是电阻与温度的关系
3、电阻与AD值之间的关系是可以通过硬件图准确计算出来的。
4、再用计算出来的表来对应温度值,误差就不大了。
回复

使用道具 举报

ID:213173 发表于 2022-4-19 15:13 | 显示全部楼层
这个表要根据所采用的NTC厂家提供的温度/阻值数据和硬件电路中NTC与分压电阻关系自己做。随便抄撞大运十之八九玩不转。
回复

使用道具 举报

ID:82570 发表于 2022-4-19 18:47 来自手机 | 显示全部楼层
可以使用18b20同步采集ntc对应的ad值来自己查表
回复

使用道具 举报

ID:956872 发表于 2022-4-20 08:45 来自手机 | 显示全部楼层
我用B3950的读出来差五六度,实际测阻值跟对照表比较也差三四度。
回复

使用道具 举报

ID:401564 发表于 2022-4-20 10:03 | 显示全部楼层
PEB188 发表于 2022-4-20 08:45
我用B3950的读出来差五六度,实际测阻值跟对照表比较也差三四度。

B3950有很多厂商的,买的时候要有温度对照表才买才行
ADC至少要用12位的,用10位的误差就比较大,8位的话,几乎没有精度可言
我用的12位精度,查表显示计算,跟标准温度计也就是0.5-1之间的误差
回复

使用道具 举报

ID:491577 发表于 2022-4-20 16:26 | 显示全部楼层
ADC是单片机的难点,初学者不容易学好,从你的分度表判断,大概你用的是10K NTC,分压电阻大概是36K。需要控制0到-15°,对应NTC电阻为:31.77K到66.92K。很明显NTC电阻和分压电阻选错了,ADC芯片管脚是有uA级别电流的。这个电流是会影响检测精度的,流过NTC的电流越小,误差就越大,所以选择NTC阻值时要保证电流在1mA左右,要测量0到-15°的温度应该选1K NTC,分压电阻选2K左右。你选10K NTC误差会大10倍。还有电源必须是线性稳压电源,开关电源误差太大。第二是程序,前面几次ADC值是不准确的,需要丢弃,正常是连续检测10次adc,前面2次不要,后面8次取平均,这样比较准确。
回复

使用道具 举报

ID:337139 发表于 2023-2-25 09:53 | 显示全部楼层
wulin 发表于 2022-4-19 15:13
这个表要根据所采用的NTC厂家提供的温度/阻值数据和硬件电路中NTC与分压电阻关系自己做。随便抄撞大运十之 ...

行家一出手,便知有没有!
回复

使用道具 举报

ID:337139 发表于 2023-2-25 09:55 | 显示全部楼层
hhh402 发表于 2022-4-20 16:26
ADC是单片机的难点,初学者不容易学好,从你的分度表判断,大概你用的是10K NTC,分压电阻大概是36K。需要 ...

高手!
回复

使用道具 举报

ID:434018 发表于 2023-2-25 12:23 | 显示全部楼层
提供参考
1) 注意一下MCU ADC REF voltage 是否稳定
2)有些MCU ADC可设定采样的平均
回复

使用道具 举报

ID:1034262 发表于 2023-2-25 21:02 | 显示全部楼层
估计是NTC 10K-B3950。我用的,0~50度跟18B20比较误差大约0.5度。
NTC测温简单有效,我一般是从ADC的REF接10K参考电阻(0.5%精度),NTC接地,10K与NTC接电串1K电阻到ADC,对地一个100nF电容。这是比例测量,REF不需要准确,纹波小即可。用EXCEL计算一个新的表格,由ADC值直接二分法查表至1度,0.1度用差值。如果读数有抖动,则加点数字滤波,稳如狗!
回复

使用道具 举报

ID:420836 发表于 2023-2-27 00:08 | 显示全部楼层
首先,确保温度表正确,其次,确保参考电压正确且稳定。 第三,确定ADC处理的程序是否正确。
回复

使用道具 举报

ID:883242 发表于 2023-2-27 03:15 | 显示全部楼层
TTQ001 发表于 2023-2-27 00:08
首先,确保温度表正确,其次,确保参考电压正确且稳定。 第三,确定ADC处理的程序是否正确。

其次,错了。不需要参考电压很稳定,不乱变就行,但是需要一个很稳定的参考电阻,因为ADC的值是NTC和参考电阻的比值,跟参考电压基本无关。
回复

使用道具 举报

ID:596109 发表于 2023-2-27 08:19 | 显示全部楼层
先看整个电路供电电压对不对,然后再看AD输入信号电压对不对,最后再看时序
回复

使用道具 举报

ID:1064603 发表于 2023-2-28 13:30 | 显示全部楼层
有可能受到干扰了,电路需要滤波
回复

使用道具 举报

ID:72649 发表于 2023-12-30 06:01 来自手机 | 显示全部楼层
coody_sz 发表于 2023-2-25 21:02
估计是NTC 10K-B3950。我用的,0~50度跟18B20比较误差大约0.5度。
NTC测温简单有效,我一般是从ADC的REF接 ...

NTC的温度数据对照表怎样做?
回复

使用道具 举报

ID:857072 发表于 2024-5-26 09:31 来自手机 | 显示全部楼层
hjx5548 发表于 2023-12-30 06:01
NTC的温度数据对照表怎样做?

http://www.51hei.com/bbs/dpj-156080-1.html
回复

使用道具 举报

ID:961114 发表于 2024-5-29 15:39 | 显示全部楼层
  1. /*---------------------------------------------------------------------*/
  2. /* --- STC MCU Limited ------------------------------------------------*/
  3. /* --- STC 1T Series MCU Demo Programme -------------------------------*/
  4. /* 如果要在程序中使用此代码,请在程序中注明使用了STC的资料及程序        */
  5. /*---------------------------------------------------------------------*/


  6. /*************  本程序功能说明  **************

  7. 本例程基于STC8H8K64U为主控芯片的实验箱9进行编写测试,STC8G、STC8H系列芯片可通用参考.

  8. 读ADC和测温度.

  9. 用STC的MCU的IO方式驱动8位数码管。

  10. 使用Timer0的16位自动重装来产生1ms节拍,程序运行于这个节拍下,用户修改MCU主时钟频率时,自动定时于1ms.

  11. 右边4位数码管显示温度值, 分辨率0.1度.

  12. NTC使用1%精度的MF52 10K@25度.

  13. 测温度时, 使用12位的ADC值, 使用对分查找表格来计算, 小数点后一位数是用线性插补来计算的.

  14. 下载时, 选择时钟 24MHZ (用户可自行修改频率).

  15. ******************************************/

  16. #include    "reg51.h"       //包含此头文件后,里面声明的寄存器不需要再手动输入,避免重复定义
  17. #include    "intrins.h"

  18. #define     MAIN_Fosc       24000000L   //定义主时钟

  19. typedef     unsigned char   u8;
  20. typedef     unsigned int    u16;
  21. typedef     unsigned long   u32;

  22. //手动输入声明"reg51.h"头文件里面没有定义的寄存器
  23. sfr TH2  = 0xD6;
  24. sfr TL2  = 0xD7;
  25. sfr IE2   = 0xAF;
  26. sfr INT_CLKO = 0x8F;
  27. sfr AUXR = 0x8E;
  28. sfr AUXR1 = 0xA2;
  29. sfr P_SW1 = 0xA2;
  30. sfr P_SW2 = 0xBA;
  31. sfr S2CON = 0x9A;
  32. sfr S2BUF = 0x9B;

  33. sfr ADC_CONTR = 0xBC;   //带AD系列
  34. sfr ADC_RES   = 0xBD;   //带AD系列
  35. sfr ADC_RESL  = 0xBE;   //带AD系列
  36. sfr ADCCFG = 0xde;

  37. sfr P4   = 0xC0;
  38. sfr P5   = 0xC8;
  39. sfr P6   = 0xE8;
  40. sfr P7   = 0xF8;
  41. sfr P1M1 = 0x91;    //PxM1.n,PxM0.n     =00--->Standard,    01--->push-pull
  42. sfr P1M0 = 0x92;    //                  =10--->pure input,  11--->open drain
  43. sfr P0M1 = 0x93;
  44. sfr P0M0 = 0x94;
  45. sfr P2M1 = 0x95;
  46. sfr P2M0 = 0x96;
  47. sfr P3M1 = 0xB1;
  48. sfr P3M0 = 0xB2;
  49. sfr P4M1 = 0xB3;
  50. sfr P4M0 = 0xB4;
  51. sfr P5M1 = 0xC9;
  52. sfr P5M0 = 0xCA;
  53. sfr P6M1 = 0xCB;
  54. sfr P6M0 = 0xCC;
  55. sfr P7M1 = 0xE1;
  56. sfr P7M0 = 0xE2;

  57. sbit P00 = P0^0;
  58. sbit P01 = P0^1;
  59. sbit P02 = P0^2;
  60. sbit P03 = P0^3;
  61. sbit P04 = P0^4;
  62. sbit P05 = P0^5;
  63. sbit P06 = P0^6;
  64. sbit P07 = P0^7;
  65. sbit P10 = P1^0;
  66. sbit P11 = P1^1;
  67. sbit P12 = P1^2;
  68. sbit P13 = P1^3;
  69. sbit P14 = P1^4;
  70. sbit P15 = P1^5;
  71. sbit P16 = P1^6;
  72. sbit P17 = P1^7;
  73. sbit P20 = P2^0;
  74. sbit P21 = P2^1;
  75. sbit P22 = P2^2;
  76. sbit P23 = P2^3;
  77. sbit P24 = P2^4;
  78. sbit P25 = P2^5;
  79. sbit P26 = P2^6;
  80. sbit P27 = P2^7;
  81. sbit P30 = P3^0;
  82. sbit P31 = P3^1;
  83. sbit P32 = P3^2;
  84. sbit P33 = P3^3;
  85. sbit P34 = P3^4;
  86. sbit P35 = P3^5;
  87. sbit P36 = P3^6;
  88. sbit P37 = P3^7;
  89. sbit P40 = P4^0;
  90. sbit P41 = P4^1;
  91. sbit P42 = P4^2;
  92. sbit P43 = P4^3;
  93. sbit P44 = P4^4;
  94. sbit P45 = P4^5;
  95. sbit P46 = P4^6;
  96. sbit P47 = P4^7;
  97. sbit P50 = P5^0;
  98. sbit P51 = P5^1;
  99. sbit P52 = P5^2;
  100. sbit P53 = P5^3;
  101. sbit P54 = P5^4;
  102. sbit P55 = P5^5;
  103. sbit P56 = P5^6;
  104. sbit P57 = P5^7;


  105. /****************************** 用户定义宏 ***********************************/

  106. #define ADCTIM (*(unsigned char volatile xdata *)0xfea8)
  107. #define Timer0_Reload   (65536UL -(MAIN_Fosc / 1000))       //Timer 0 中断频率, 1000次/秒

  108. /*****************************************************************************/


  109. #define DIS_DOT     0x20
  110. #define DIS_BLACK   0x10
  111. #define DIS_        0x11


  112. /*************  本地常量声明    **************/
  113. u8 code t_display[]={                       //标准字库
  114. //   0    1    2    3    4    5    6    7    8    9    A    B    C    D    E    F
  115.     0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F,0x77,0x7C,0x39,0x5E,0x79,0x71,
  116. //black  -     H    J    K    L    N    o   P    U     t    G    Q    r   M    y
  117.     0x00,0x40,0x76,0x1E,0x70,0x38,0x37,0x5C,0x73,0x3E,0x78,0x3d,0x67,0x50,0x37,0x6e,
  118.     0xBF,0x86,0xDB,0xCF,0xE6,0xED,0xFD,0x87,0xFF,0xEF,0x46};    //0. 1. 2. 3. 4. 5. 6. 7. 8. 9. -1

  119. u8 code T_COM[]={0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80};      //位码


  120. /*************  本地变量声明    **************/

  121. u8  LED8[8];        //显示缓冲
  122. u8  display_index;  //显示位索引
  123. bit B_1ms;          //1ms标志

  124. u16 msecond;

  125. /*************  本地函数声明    **************/
  126. u16 get_temperature(u16 adc);
  127. u16 Get_ADC12bitResult(u8 channel); //channel = 0~15

  128. /**********************************************/
  129. void main(void)
  130. {
  131.     u8  i;
  132.     u16 j;
  133.    
  134.     P0M1 = 0x00;   P0M0 = 0x00;   //设置为准双向口
  135.     P2M1 = 0x00;   P2M0 = 0x00;   //设置为准双向口
  136.     P3M1 = 0x00;   P3M0 = 0x00;   //设置为准双向口
  137.     P4M1 = 0x00;   P4M0 = 0x00;   //设置为准双向口
  138.     P5M1 = 0x00;   P5M0 = 0x00;   //设置为准双向口
  139.     P6M1 = 0x00;   P6M0 = 0x00;   //设置为准双向口
  140.     P7M1 = 0x00;   P7M0 = 0x00;   //设置为准双向口
  141.     P1M1 = 0x08;   P1M0 = 0x00;   //设置 P1.3 为 ADC 输入口

  142.     display_index = 0;
  143.                 P_SW2 |= 0x80;
  144.                 ADCTIM = 0x3f;                //设置 ADC 内部时序,ADC采样时间建议设最大值
  145.                 P_SW2 &= 0x7f;
  146.                 ADCCFG = 0x2f;                //设置 ADC 时钟为系统时钟/2/16/16
  147.                 ADC_CONTR = 0x80; //使能 ADC 模块

  148.     AUXR = 0x80;    //Timer0 set as 1T, 16 bits timer auto-reload,
  149.     TH0 = (u8)(Timer0_Reload / 256);
  150.     TL0 = (u8)(Timer0_Reload % 256);
  151.     ET0 = 1;    //Timer0 interrupt enable
  152.     TR0 = 1;    //Tiner0 run
  153.     EA = 1;     //打开总中断
  154.    
  155.     for(i=0; i<8; i++)  LED8[i] = 0x10; //上电消隐
  156.    
  157.     while(1)
  158.     {
  159.         if(B_1ms)   //1ms到
  160.         {
  161.             B_1ms = 0;
  162.             if(++msecond >= 300)    //300ms到
  163.             {
  164.                 msecond = 0;
  165.                
  166.                 j = Get_ADC12bitResult(3);  //参数0~15,查询方式做一次ADC, 返回值就是结果, == 4096 为错误

  167.                 if(j < 4096)
  168.                 {
  169.                 /*
  170.                     LED8[0] = j / 1000;     //显示ADC值
  171.                     LED8[1] = (j % 1000) / 100;
  172.                     LED8[2] = (j % 100) / 10;
  173.                     LED8[3] = j % 10;
  174.                     if(LED8[0] == 0)    LED8[0] = DIS_BLACK;
  175.                 */
  176.                     j = get_temperature(j); //计算温度值

  177.                     if(j >= 400)    F0 = 0, j -= 400;       //温度 >= 0度
  178.                     else            F0 = 1, j  = 400 - j;   //温度 <  0度
  179.                     LED8[4] = j / 1000;     //显示温度值
  180.                     LED8[5] = (j % 1000) / 100;
  181.                     LED8[6] = (j % 100) / 10 + DIS_DOT;
  182.                     LED8[7] = j % 10;
  183.                     if(LED8[4] == 0)    LED8[4] = DIS_BLACK;
  184.                     if(F0)  LED8[4] = DIS_;     //显示-
  185.                 }
  186.                 else    //错误
  187.                 {
  188.                     for(i=0; i<8; i++)  LED8[i] = DIS_;
  189.                 }
  190.             }
  191.         }
  192.     }
  193. }
  194. /**********************************************/

  195. //========================================================================
  196. // 函数: u16 Get_ADC12bitResult(u8 channel)
  197. // 描述: 查询法读一次ADC结果.
  198. // 参数: channel: 选择要转换的ADC.
  199. // 返回: 12位ADC结果.
  200. // 版本: V1.0, 2012-10-22
  201. //========================================================================
  202. u16 Get_ADC12bitResult(u8 channel)  //channel = 0~15
  203. {
  204.     ADC_RES = 0;
  205.     ADC_RESL = 0;

  206.     ADC_CONTR = (ADC_CONTR & 0xF0) | 0x40 | channel;    //启动 AD 转换
  207.     _nop_();
  208.     _nop_();
  209.     _nop_();
  210.     _nop_();

  211.     while((ADC_CONTR & 0x20) == 0)  ;   //wait for ADC finish
  212.     ADC_CONTR &= ~0x20;     //清除ADC结束标志
  213.     return  (((u16)ADC_RES << 8) | ADC_RESL);
  214. }


  215. //  MF52E 10K at 25, B = 3950, ADC = 12 bits
  216. u16 code temp_table[]={
  217.         140,    //;-40  0
  218.         149,    //;-39  1
  219.         159,    //;-38  2
  220.         168,    //;-37  3
  221.         178,    //;-36  4
  222.         188,    //;-35  5
  223.         199,    //;-34  6
  224.         210,    //;-33  7
  225.         222,    //;-32  8
  226.         233,    //;-31  9
  227.         246,    //;-30  10
  228.         259,    //;-29  11
  229.         272,    //;-28  12
  230.         286,    //;-27  13
  231.         301,    //;-26  14
  232.         317,    //;-25  15
  233.         333,    //;-24  16
  234.         349,    //;-23  17
  235.         367,    //;-22  18
  236.         385,    //;-21  19
  237.         403,    //;-20  20
  238.         423,    //;-19  21
  239.         443,    //;-18  22
  240.         464,    //;-17  23
  241.         486,    //;-16  24
  242.         509,    //;-15  25
  243.         533,    //;-14  26
  244.         558,    //;-13  27
  245.         583,    //;-12  28
  246.         610,    //;-11  29
  247.         638,    //;-10  30
  248.         667,    //;-9   31
  249.         696,    //;-8   32
  250.         727,    //;-7   33
  251.         758,    //;-6   34
  252.         791,    //;-5   35
  253.         824,    //;-4   36
  254.         858,    //;-3   37
  255.         893,    //;-2   38
  256.         929,    //;-1   39
  257.         965,    //;0    40
  258.         1003,   //;1    41
  259.         1041,   //;2    42
  260.         1080,   //;3    43
  261.         1119,   //;4    44
  262.         1160,   //;5    45
  263.         1201,   //;6    46
  264.         1243,   //;7    47
  265.         1285,   //;8    48
  266.         1328,   //;9    49
  267.         1371,   //;10   50
  268.         1414,   //;11   51
  269.         1459,   //;12   52
  270.         1503,   //;13   53
  271.         1548,   //;14   54
  272.         1593,   //;15   55
  273.         1638,   //;16   56
  274.         1684,   //;17   57
  275.         1730,   //;18   58
  276.         1775,   //;19   59
  277.         1821,   //;20   60
  278.         1867,   //;21   61
  279.         1912,   //;22   62
  280.         1958,   //;23   63
  281.         2003,   //;24   64
  282.         2048,   //;25   65
  283.         2093,   //;26   66
  284.         2137,   //;27   67
  285.         2182,   //;28   68
  286.         2225,   //;29   69
  287.         2269,   //;30   70
  288.         2312,   //;31   71
  289.         2354,   //;32   72
  290.         2397,   //;33   73
  291.         2438,   //;34   74
  292.         2479,   //;35   75
  293.         2519,   //;36   76
  294.         2559,   //;37   77
  295.         2598,   //;38   78
  296.         2637,   //;39   79
  297.         2675,   //;40   80
  298.         2712,   //;41   81
  299.         2748,   //;42   82
  300.         2784,   //;43   83
  301.         2819,   //;44   84
  302.         2853,   //;45   85
  303.         2887,   //;46   86
  304.         2920,   //;47   87
  305.         2952,   //;48   88
  306.         2984,   //;49   89
  307.         3014,   //;50   90
  308.         3044,   //;51   91
  309.         3073,   //;52   92
  310.         3102,   //;53   93
  311.         3130,   //;54   94
  312.         3157,   //;55   95
  313.         3183,   //;56   96
  314.         3209,   //;57   97
  315.         3234,   //;58   98
  316.         3259,   //;59   99
  317.         3283,   //;60   100
  318.         3306,   //;61   101
  319.         3328,   //;62   102
  320.         3351,   //;63   103
  321.         3372,   //;64   104
  322.         3393,   //;65   105
  323.         3413,   //;66   106
  324.         3432,   //;67   107
  325.         3452,   //;68   108
  326.         3470,   //;69   109
  327.         3488,   //;70   110
  328.         3506,   //;71   111
  329.         3523,   //;72   112
  330.         3539,   //;73   113
  331.         3555,   //;74   114
  332.         3571,   //;75   115
  333.         3586,   //;76   116
  334.         3601,   //;77   117
  335.         3615,   //;78   118
  336.         3628,   //;79   119
  337.         3642,   //;80   120
  338.         3655,   //;81   121
  339.         3667,   //;82   122
  340.         3679,   //;83   123
  341.         3691,   //;84   124
  342.         3702,   //;85   125
  343.         3714,   //;86   126
  344.         3724,   //;87   127
  345.         3735,   //;88   128
  346.         3745,   //;89   129
  347.         3754,   //;90   130
  348.         3764,   //;91   131
  349.         3773,   //;92   132
  350.         3782,   //;93   133
  351.         3791,   //;94   134
  352.         3799,   //;95   135
  353.         3807,   //;96   136
  354.         3815,   //;97   137
  355.         3822,   //;98   138
  356.         3830,   //;99   139
  357.         3837,   //;100  140
  358.         3844,   //;101  141
  359.         3850,   //;102  142
  360.         3857,   //;103  143
  361.         3863,   //;104  144
  362.         3869,   //;105  145
  363.         3875,   //;106  146
  364.         3881,   //;107  147
  365.         3887,   //;108  148
  366.         3892,   //;109  149
  367.         3897,   //;110  150
  368.         3902,   //;111  151
  369.         3907,   //;112  152
  370.         3912,   //;113  153
  371.         3917,   //;114  154
  372.         3921,   //;115  155
  373.         3926,   //;116  156
  374.         3930,   //;117  157
  375.         3934,   //;118  158
  376.         3938,   //;119  159
  377.         3942    //;120  160
  378. };

  379. /********************  计算温度 ***********************************************/
  380. // 计算结果: 0对应-40.0度, 400对应0度, 625对应25.0度, 最大1600对应120.0度.
  381. // 为了通用, ADC输入为12bit的ADC值.
  382. // 电路和软件算法设计: Coody
  383. /**********************************************/

  384. #define     D_SCALE     10      //结果放大倍数, 放大10倍就是保留一位小数
  385. u16 get_temperature(u16 adc)
  386. {
  387.     u16 code *p;
  388.     u16 i;
  389.     u8  j,k,min,max;
  390.    
  391.     adc = 4096 - adc;   //Rt接地
  392.     p = temp_table;
  393.     if(adc < p[0])      return (0xfffe);
  394.     if(adc > p[160])    return (0xffff);
  395.    
  396.     min = 0;        //-40度
  397.     max = 160;      //120度

  398.     for(j=0; j<5; j++)  //对分查表
  399.     {
  400.         k = min / 2 + max / 2;
  401.         if(adc <= p[k]) max = k;
  402.         else            min = k;
  403.     }
  404.          if(adc == p[min])  i = min * D_SCALE;
  405.     else if(adc == p[max])  i = max * D_SCALE;
  406.     else    // min < temp < max
  407.     {
  408.         while(min <= max)
  409.         {
  410.             min++;
  411.             if(adc == p[min])   {i = min * D_SCALE; break;}
  412.             else if(adc < p[min])
  413.             {
  414.                 min--;
  415.                 i = p[min]; //min
  416.                 j = (adc - i) * D_SCALE / (p[min+1] - i);
  417.                 i = min;
  418.                 i *= D_SCALE;
  419.                 i += j;
  420.                 break;
  421.             }
  422.         }
  423.     }
  424.     return i;
  425. }

  426. /********************** 显示扫描函数 ************************/
  427. void DisplayScan(void)
  428. {   
  429.                 P7 = ~T_COM[7-display_index];
  430.                 P6 = ~t_display[LED8[display_index]];
  431.     if(++display_index >= 8)    display_index = 0;  //8位结束回0
  432. }


  433. /********************** Timer0 1ms中断函数 ************************/
  434. void timer0 (void) interrupt 1
  435. {
  436.     DisplayScan();  //1ms扫描显示一位
  437.     B_1ms = 1;      //1ms标志
  438. }
复制代码

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表