/*---------------------------------------------------------------------*/

/* --- STC MCU International Limited ----------------------------------*/

/* --- STC 1T Series MCU Demo Programme -------------------------------*/

/* 如果要在程序中使用此代码,请在程序中注明使用了宏晶科技的资料及程序   */

/*---------------------------------------------------------------------*/

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

读ADC和测温度.

用STC的MCU的IO方式控制74HC595驱动8位数码管。

用户可以修改宏来选择时钟频率.

用户可以在"用户定义宏"中选择共阴或共阳. 推荐尽量使用共阴数码管.

使用Timer0的16位自动重装来产生1ms节拍,程序运行于这个节拍下, 用户

修改MCU主时钟频率时,自动定时于1ms.

左边4位数码管显示ADC2接的电压基准TL431的读数, 右边4位数码管显示温度值, 分辨率0.1度.

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

测温度时, 为了通用, 使用12位的ADC值, 使用对分查找表格来计算, 小数点后

一位数是用线性插补来计算的.

所以, 测温度的ADC3进行4次ADC连续采样, 变成12位的ADC来计算温度.

******************************************/

#include        "config.H"

#include        "adc.h"

/****************************** 用户定义宏 ***********************************/

#define                LED_TYPE        0x00                //定义LED类型, 0x00--共阴, 0xff--共阳

#define        Timer0_Reload        (65536UL -(MAIN_Fosc / 1000))                //Timer 0 中断频率, 1000次/秒

/*****************************************************************************/

/*************        本地常量声明        **************/

u8 code t_display[]={                                                //标准字库

//         0    1    2    3    4    5    6    7    8    9    A    B    C    D    E    F

0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F,0x77,0x7C,0x39,0x5E,0x79,0x71,

//black         -     H    J         K          L           N        o   P         U     t    G    Q    r   M    y

0x00,0x40,0x76,0x1E,0x70,0x38,0x37,0x5C,0x73,0x3E,0x78,0x3d,0x67,0x50,0x37,0x6e,

0xBF,0x86,0xDB,0xCF,0xE6,0xED,0xFD,0x87,0xFF,0xEF,0x46};        //0. 1. 2. 3. 4. 5. 6. 7. 8. 9. -1

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

/*************        IO口定义        **************/

sbit        P_HC595_SER   = P4^0;        //pin 14        SER                data input

sbit        P_HC595_RCLK  = P5^4;        //pin 12        RCLk        store (latch) clock

sbit        P_HC595_SRCLK = P4^3;        //pin 11        SRCLK        Shift data clock

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

u8         LED8[8];                //显示缓冲

u8        display_index;        //显示位索引

bit        B_1ms;                        //1ms标志

u16        msecond;

/*************        本地函数声明        **************/

u16        get_temperature(u16 adc);

/****************  外部函数声明和外部变量声明 *****************/

/********************** ADC配置函数 ************************/

void ADC_config(void)

{

ADC_InitTypeDef                ADC_InitStructure;                                //结构定义

ADC_InitStructure.ADC_Px        = ADC_P12 | ADC_P13;//设置要做ADC的IO,        ADC_P10 ~ ADC_P17(或操作),ADC_P1_All

ADC_InitStructure.ADC_Speed     = ADC_90T;                        //ADC速度                        ADC_90T,ADC_180T,ADC_360T,ADC_540T

ADC_InitStructure.ADC_Power     = ENABLE;                        //ADC功率允许/关闭        ENABLE,DISABLE

ADC_InitStructure.ADC_AdjResult = ADC_RES_H8L2;                //ADC结果调整,        ADC_RES_H2L8,ADC_RES_H8L2

ADC_InitStructure.ADC_Polity    = PolityLow;                //优先级设置        PolityHigh,PolityLow

ADC_InitStructure.ADC_Interrupt = DISABLE;                        //中断允许                ENABLE,DISABLE

ADC_Inilize(&ADC_InitStructure);                                        //初始化

ADC_PowerControl(ENABLE);                                                        //单独的ADC电源操作函数, ENABLE或DISABLE

}

/**********************************************/

void main(void)

{

u8        i;

u16        j;

display_index = 0;

ADC_config();

Timer0_1T();

Timer0_AsTimer();

Timer0_16bitAutoReload();

Timer0_Load(Timer0_Reload);

Timer0_InterruptEnable();

Timer0_Run();

EA = 1;                                                //打开总中断

for(i=0; i<8; i++)        LED8[i] = 0x10;        //上电消隐

while(1)

{

if(B_1ms)        //1ms到

{

B_1ms = 0;

if(++msecond >= 300)        //300ms到

{

msecond = 0;

j = Get_ADC10bitResult(2);        //参数0~7,查询方式做一次ADC, 返回值就是结果, == 1024 为错误

if(j < 1024)

{

LED8[0] = j / 1000;                //显示ADC值

LED8[1] = (j % 1000) / 100;

LED8[2] = (j % 100) / 10;

LED8[3] = j % 10;

if(LED8[0] == 0)        LED8[0] = DIS_BLACK;

}

else        //错误

{

for(i=0; i<4; i++)        LED8[i] = DIS_;

}

j = Get_ADC10bitResult(3);        //参数0~7,查询方式做一次ADC, 返回值就是结果, == 1024 为错误

j += Get_ADC10bitResult(3);

j += Get_ADC10bitResult(3);

j += Get_ADC10bitResult(3);

if(j < 1024*4)

{

/*

LED8[0] = j / 1000;                //显示ADC值

LED8[1] = (j % 1000) / 100;

LED8[2] = (j % 100) / 10;

LED8[3] = j % 10;

if(LED8[0] == 0)        LED8[0] = DIS_BLACK;

*/

j =        get_temperature(j);        //计算温度值

if(j >= 400)        F0 = 0,        j -= 400;                //温度 >= 0度

else                        F0 = 1,        j  = 400 - j;        //温度

LED8[4] = j / 1000;                //显示温度值

LED8[5] = (j % 1000) / 100;

LED8[6] = (j % 100) / 10 + DIS_DOT;

LED8[7] = j % 10;

if(LED8[4] == 0)        LED8[4] = DIS_BLACK;

if(F0)        LED8[4] = DIS_;                //显示-

}

else        //错误

{

for(i=0; i<8; i++)        LED8[i] = DIS_;

}

}

}

}

}

/**********************************************/

//        MF52E 10K at 25, B = 3950, ADC = 12 bits

u16 code temp_table[]={

140,        //;-40        0

149,        //;-39        1

159,        //;-38        2

168,        //;-37        3

178,        //;-36        4

188,        //;-35        5

199,        //;-34        6

210,        //;-33        7

222,        //;-32        8

233,        //;-31        9

246,        //;-30        10

259,        //;-29        11

272,        //;-28        12

286,        //;-27        13

301,        //;-26        14

317,        //;-25        15

333,        //;-24        16

349,        //;-23        17

367,        //;-22        18

385,        //;-21        19

403,        //;-20        20

423,        //;-19        21

443,        //;-18        22

464,        //;-17        23

486,        //;-16        24

509,        //;-15        25

533,        //;-14        26

558,        //;-13        27

583,        //;-12        28

610,        //;-11        29

638,        //;-10        30

667,        //;-9        31

696,        //;-8        32

727,        //;-7        33

758,        //;-6        34

791,        //;-5        35

824,        //;-4        36

858,        //;-3        37

893,        //;-2        38

929,        //;-1        39

965,        //;0        40

1003,        //;1        41

1041,        //;2        42

1080,        //;3        43

1119,        //;4        44

1160,        //;5        45

1201,        //;6        46

1243,        //;7        47

1285,        //;8        48

1328,        //;9        49

1371,        //;10        50

1414,        //;11        51

1459,        //;12        52

1503,        //;13        53

1548,        //;14        54

1593,        //;15        55

1638,        //;16        56

1684,        //;17        57

1730,        //;18        58

1775,        //;19        59

1821,        //;20        60

1867,        //;21        61

1912,        //;22        62

1958,        //;23        63

2003,        //;24        64

2048,        //;25        65

2093,        //;26        66

2137,        //;27        67

2182,        //;28        68

2225,        //;29        69

2269,        //;30        70

2312,        //;31        71

2354,        //;32        72

2397,        //;33        73

2438,        //;34        74

2479,        //;35        75

2519,        //;36        76

2559,        //;37        77

2598,        //;38        78

2637,        //;39        79

2675,        //;40        80

2712,        //;41        81

2748,        //;42        82

2784,        //;43        83

2819,        //;44        84

2853,        //;45        85

2887,        //;46        86

2920,        //;47        87

2952,        //;48        88

2984,        //;49        89

3014,        //;50        90

3044,        //;51        91

3073,        //;52        92

3102,        //;53        93

3130,        //;54        94

3157,        //;55        95

3183,        //;56        96

3209,        //;57        97

3234,        //;58        98

3259,        //;59        99

3283,        //;60        100

3306,        //;61        101

3328,        //;62        102

3351,        //;63        103

3372,        //;64        104

3393,        //;65        105

3413,        //;66        106

3432,        //;67        107

3452,        //;68        108

3470,        //;69        109

3488,        //;70        110

3506,        //;71        111

3523,        //;72        112

3539,        //;73        113

3555,        //;74        114

3571,        //;75        115

3586,        //;76        116

3601,        //;77        117

3615,        //;78        118

3628,        //;79        119

3642,        //;80        120

3655,        //;81        121

3667,        //;82        122

3679,        //;83        123

3691,        //;84        124

3702,        //;85        125

3714,        //;86        126

3724,        //;87        127

3735,        //;88        128

3745,        //;89        129

3754,        //;90        130

3764,        //;91        131

3773,        //;92        132

3782,        //;93        133

3791,        //;94        134

3799,        //;95        135

3807,        //;96        136

3815,        //;97        137

3822,        //;98        138

3830,        //;99        139

3837,        //;100        140

3844,        //;101        141

3850,        //;102        142

3857,        //;103        143

3863,        //;104        144

3869,        //;105        145

3875,        //;106        146

3881,        //;107        147

3887,        //;108        148

3892,        //;109        149

3897,        //;110        150

3902,        //;111        151

3907,        //;112        152

3912,        //;113        153

3917,        //;114        154

3921,        //;115        155

3926,        //;116        156

3930,        //;117        157

3934,        //;118        158

3938,        //;119        159

3942        //;120        160

};

/********************  计算温度 ***********************************************/

// 计算结果: 0对应-40.0度, 400对应0度, 625对应25.0度, 最大1600对应120.0度.

// 为了通用, ADC输入为12bit的ADC值.

// 电路和软件算法设计: Coody

/**********************************************/

#define                D_SCALE                10                //结果放大倍数, 放大10倍就是保留一位小数

u16        get_temperature(u16 adc)

{

u16        code *p;

u16        i;

u8        j,k,min,max;

adc = 4096 - adc;        //Rt接地

p = temp_table;

if(adc < p[0])                return (0xfffe);

if(adc > p[160])        return (0xffff);

min = 0;                //-40度

max = 160;                //120度

for(j=0; j<5; j++)        //对分查表

{

k = min / 2 + max / 2;

if(adc <= p[k])        max = k;

else                        min = k;

}

if(adc == p[min])        i = min * D_SCALE;

else if(adc == p[max])        i = max * D_SCALE;

else        // min < temp < max

{

while(min <= max)

{

min++;

if(adc == p[min])        {i = min * D_SCALE;        break;}

else if(adc < p[min])

{

min--;

i = p[min];        //min

……………………

…………限于本文篇幅 余下代码请从51黑下载附件…………

c语言ntc程序,NTC热敏电阻测温度 单片机C和汇编源程序相关推荐

  1. 单片机热敏电阻测温度c语言,51单片机热敏电阻测温程序.doc

    //本程序是通过热敏电阻测温度(30c-50c #include #include #include #define uchar unsigned char #define uint unsigned ...

  2. c语言ntc程序,NTC热敏电阻温度计算以及C语言实现

    一:硬件设计 这里使用的是MF52-103热敏电阻,其中B为3950,它与10K电阻串联,由于热敏电阻随着温度的升高,电阻值降低,所以10K电阻两端的电压将上升. 二:NTC热敏电阻的计算 NTC 热 ...

  3. 用热敏电阻测温度STM32

    adcx=Get_Adc_Average(ADC_Channel_3,20);//»ñȡͨµÀ5µÄת»»Öµ£¬20´Îȡƽ¾ùadcx_f=adcx*(3.3/4096);//adc²É ...

  4. 单片机数码管显示热敏电阻实测温度,

    51单片机开发板,功能模块独立性高,能够实现各种各样的功能.本文中,主要使用热敏电阻和数码管完成了对环境实时温度的显示. (实验所用的51单片机开发板) 在实现功能时,我们需要了解热敏电阻测温度的原理 ...

  5. NTC热敏电阻检测温度

    1.NTC热敏电阻.PTC热敏电阻 下图是NTC热敏电阻和PTC热敏电阻随温度变化,电阻值的变化曲线,可以看到: NTC随温度变化阻值的变化比较明显,对温度变化比较灵敏. 但是,NTC阻值随温度变化并 ...

  6. NTC热敏电阻采集温度

      NTC温度传感器:   是一种热敏电阻.探头,其原理为:电阻值随着温度上升而迅速下降.其通常由2或3种金属氧化物组成, 混合在类似流体的粘土中,并在高温炉内锻烧成致密的烧结陶瓷.实际尺寸十分灵活, ...

  7. STC单片机测8路NTC测温度

    1.    单片机型号:STC15F2K32S2,NTC电阻,内部自带ADC检测ADC, 2.    怎么样把ADC值转为温度是最容易让大家不知从何下手,有查表等思路,但是我自己分析的不是查表,查表速 ...

  8. NTC热敏电阻计算温度之C代码

    NTC热敏电阻计算温度之C代码 代码已经验证 温度误差可以接受 验证 代码已经验证 温度误差可以接受 下面展示部分 代码. ///< ADC 单次采集 Ntc uint32_t Adc_Read ...

  9. 51 Proteus仿真NTC热敏电阻温度测量温度控制系统-0016

    51 Proteus仿真NTC热敏电阻温度测量温度控制系统-0016 Proteus仿真小实验: 51 Proteus仿真NTC热敏电阻温度测量温度控制系统-0016 功能: 硬件组成:51单片机 + ...

最新文章

  1. Ctrl+C提示是否终止shell脚本
  2. 中学计算机老师 当领导可能性,求分享,当中学计算机老师带信息学奥赛是怎样的感受 - 信息科学技术学院(EECS)版 - 北大未名BBS...
  3. Linux上调整sshd进程的优先级
  4. Python---已知Person类,继承Person类生成Teacher类(增加参数:科目)和Student类(增加参数:专业)。
  5. JSON与JAVA数据的相互转换(基本应用)
  6. 部署nodejs项目到服务器的一些总结
  7. 切换activity的动画效果
  8. python将文本中的数据处理成图像(matplotlib)
  9. linux无限刷屏代码,linux下如何实现简单刷屏
  10. Ethercat解析(九)之过程数据
  11. 开源资产管理系统_部署开源夜莺运维监控平台V3版本
  12. C#核编之格式化编程
  13. vue实现打印功能的两种方法/web打印控件
  14. ACM中一些细节问题
  15. 【我的电赛日记(二)】ADF4351锁相环模块
  16. Springcloud电子商城系统 java B2B2C-服务消费者(rest+ribbon)
  17. vue+echarts+springboot实现云词图
  18. 英语对程序员有多重要?
  19. Python Web简介
  20. 数据结构 day07 基础知识学习 (二叉树 的 前中后遍历 ,插入节点,删除叶子节点, 二叉树的节点个数 )

热门文章

  1. [SoapUI] 在SoapUI中通过Groovy脚本执行window命令杀掉进程
  2. 关于PHPExcel 导出下载表格,调试器响应乱码
  3. Spring mvc项目导出jar包无法识别正常映射问题
  4. Nginx Parsing HTTP Package、header/post/files/args Sourcecode Analysis
  5. 输入一颗二元树,从上向下按层打印树的每个节点,同一层中,按照从左到右的顺序打印。...
  6. 带属性的字符串(NSMutableAttributedString)的使用
  7. Flutter SliverAnimatedOpacity 透明渐变动画效果
  8. Dart语言基础Map、List、Set操作合辑
  9. Kubernetes理论02
  10. 后台管理,有无限可能