找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 3084|回复: 1
收起左侧

热敏&光敏 热敏电阻测温数码管显示程序

[复制链接]
ID:207979 发表于 2017-6-5 12:22 | 显示全部楼层 |阅读模式
  1. /***************************************************************************************************   
  2. 工程名称: NTC_SMG
  3. 功能描述:  实现NTC热敏电阻测温,数码管低三位显示结果,其中显示的最高位为符号位(测温范围-10-50)。
  4. 硬件连接:  用8位杜邦线将J8与J12连接,2位杜邦线分别将J11_0与J15_DS1、J11_1与J15_DS2连接,
  5.             1位杜邦线将J19_AIN0与J15_RT连接,2位杜邦线分别将J11_7与J17_SDA、J11_6与J17_SCL连接。
  6. 维护记录:  8-22
  7. ***************************************************************************************************/
  8. #include "reg51.h"          //包含头文件
  9. #define uchar unsigned char
  10. #define uint  unsigned int
  11. sbit LE1=P2^0;           //位选573锁存器使能
  12. sbit LE2=P2^1;           //段选573锁存器使能
  13. extern uchar Read_AD(uchar chn);
  14. extern show();

  15. uchar flag;        //正负符号位

  16. uchar code dis[16]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,
  17.                    //  0    1    2    3    4    5    6    7   
  18.                      0x7F,0x6F,0x77,0x7C,0x39,0x5E,0x79,0x71};//0~F的段码
  19.                    //  8    9    A    B    C    D    E    F  
  20. code unsigned int  vt_table[]= //电压与实际温度对照表
  21. {
  22.   4132,4098,4063,4026,3988,3949,3908,3866,3823,3779, //-9-0
  23.   3733,3686,3639,3590,3540,3489,3437,3385,3331,3277, //1-10
  24.   3222,3166,3110,3054,2997,2940,2882,2824,2767,2709, //11-20
  25.   2651,2593,2536,2478,2421,2365,2309,2253,2198,2143, //21-30
  26.   2089,2036,1984,1932,1881,1831,1782,1734,1686,1640, //31-40
  27.   1594,1550,1506,1464,1422,1381,1341,1303,1265,1228, //41-50
  28. };
  29. //**************************************************************************************************
  30. //延时函数
  31. //**************************************************************************************************
  32. delay(uint time)         //int型数据为16位,所以最大值为65535            
  33. {
  34.   uint  i,j;             //定义变量i,j,用于循环语句
  35.   for(i=0;i<time;i++)    //for循环,循环50*time次
  36.      for(j=0;j<100;j++); //for循环,循环50次
  37. }
  38. //**************************************************************************************************
  39. //数码管显示函数
  40. //**************************************************************************************************
  41. smg_show(uchar n)
  42. {
  43.       //显示符号位
  44.      P1=0xdf;                 //0xbf=1101 1111,即选通个位
  45.      LE1=1;                   //锁存位
  46.      LE1=0;                   //断开锁存,位选573的Q7~Q0仍保持
  47.      if(flag){P1=0x40;flag=0;}//为负,显示"-"号
  48.        else  P1=0x00;         //为正,不显示
  49.      LE2=1;                   //锁存段码
  50.      LE2=0;                   //断开锁存,段选573的Q7~Q0仍保持
  51.      delay(10);               //延时保持一下,延时过大会闪动,延时过小会有重影   
  52.      P1=0x00;LE2=1;LE2=0;     //清除P1口数据,以免造重影
  53.       //显示十位
  54.      P1=0xbf;                 //0xbf=1011 1111,即选通个位
  55.      LE1=1;                   //锁存位
  56.      LE1=0;                   //断开锁存,位选573的Q7~Q0仍保持
  57.      P1=dis[n/10];            //dis[n/10]为0~9的编码
  58.      LE2=1;                   //锁存段码
  59.      LE2=0;                   //断开锁存,段选573的Q7~Q0仍保持
  60.      delay(10);               //延时保持一下,延时过大会闪动,延时过小会有重影   
  61.      P1=0x00;LE2=1;LE2=0;     //清除P1口数据,以免造重影
  62.      //显示个位
  63.      P1=0x7f;                 //0xbf=0111 1111,即选通十分位
  64.      LE1=1;                   //锁存位
  65.      LE1=0;                   //断开锁存,位选573的Q7~Q0仍保持
  66.      P1=dis[n%10];            //0~9的编码
  67.      LE2=1;                   //锁存段码
  68.      LE2=0;                   //断开锁存,段选573的Q7~Q0仍保持
  69.      delay(10);               //延时保持一下,延时过大会闪动,延时过小会有重影  
  70.      P1=0x00;LE2=1;LE2=0;     //清除P1口数据,以免造重影   
  71.          
  72. }
  73. //**************************************************************************************************
  74. //主函数
  75. //**************************************************************************************************
  76. void main()
  77. {
  78.    uchar i,value;
  79.    uint temp;
  80.    while(1)                         //死循环
  81.     {
  82.        temp=Read_AD(0);             //采集0通道模拟电压值
  83.        temp=19*temp;                //乘以电阻特性参数
  84.        for(i=0;(vt_table[i]>temp)&&(i<60);i++);//查表得到温度对应参数
  85.        if(i<10) {value=10-i;flag=1;}//如果是负温度,符号标志置1,表示为负
  86.             else value=i-10;        //如果为正,去掉10个负数
  87.        smg_show(value);             //显示温度值
  88. }
  89. }
复制代码
回复

使用道具 举报

ID:684248 发表于 2020-2-26 15:57 | 显示全部楼层
函数不完整啊,ADC采集读写函数呢,另外问下楼主这是单片机直接驱动数码管和热敏电阻吗
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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