登录
|
立即注册
|
使用QQ帐号登录
论坛
>
51单片机
发帖
|
热敏&光敏 热敏电阻测温数码管显示程序
看3404
|
回1
|
收藏
楼主
ID:207979
只看他
2017-6-5 12:22
代码:
/***************************************************************************************************
工程名称: NTC_SMG
功能描述: 实现NTC热敏电阻测温,数码管低三位显示结果,其中显示的最高位为符号位(测温范围-10-50)。
硬件连接: 用8位杜邦线将J8与J12连接,2位杜邦线分别将J11_0与J15_DS1、J11_1与J15_DS2连接,
1位杜邦线将J19_AIN0与J15_RT连接,2位杜邦线分别将J11_7与J17_SDA、J11_6与J17_SCL连接。
维护记录: 8-22
***************************************************************************************************/
#include "reg51.h" //包含头文件
#define uchar unsigned char
#define uint unsigned int
sbit LE1=P2^0; //位选573锁存器使能
sbit LE2=P2^1; //段选573锁存器使能
extern uchar Read_AD(uchar chn);
extern show();
uchar flag; //正负符号位
uchar code dis[16]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,
// 0 1 2 3 4 5 6 7
0x7F,0x6F,0x77,0x7C,0x39,0x5E,0x79,0x71};//0~F的段码
// 8 9 A B C D E F
code unsigned int vt_table[]= //电压与实际温度对照表
{
4132,4098,4063,4026,3988,3949,3908,3866,3823,3779, //-9-0
3733,3686,3639,3590,3540,3489,3437,3385,3331,3277, //1-10
3222,3166,3110,3054,2997,2940,2882,2824,2767,2709, //11-20
2651,2593,2536,2478,2421,2365,2309,2253,2198,2143, //21-30
2089,2036,1984,1932,1881,1831,1782,1734,1686,1640, //31-40
1594,1550,1506,1464,1422,1381,1341,1303,1265,1228, //41-50
};
//**************************************************************************************************
//延时函数
//**************************************************************************************************
delay(uint time) //int型数据为16位,所以最大值为65535
{
uint i,j; //定义变量i,j,用于循环语句
for(i=0;i<time;i++) //for循环,循环50*time次
for(j=0;j<100;j++); //for循环,循环50次
}
//**************************************************************************************************
//数码管显示函数
//**************************************************************************************************
smg_show(uchar n)
{
//显示符号位
P1=0xdf; //0xbf=1101 1111,即选通个位
LE1=1; //锁存位
LE1=0; //断开锁存,位选573的Q7~Q0仍保持
if(flag){P1=0x40;flag=0;}//为负,显示"-"号
else P1=0x00; //为正,不显示
LE2=1; //锁存段码
LE2=0; //断开锁存,段选573的Q7~Q0仍保持
delay(10); //延时保持一下,延时过大会闪动,延时过小会有重影
P1=0x00;LE2=1;LE2=0; //清除P1口数据,以免造重影
//显示十位
P1=0xbf; //0xbf=1011 1111,即选通个位
LE1=1; //锁存位
LE1=0; //断开锁存,位选573的Q7~Q0仍保持
P1=dis[n/10]; //dis[n/10]为0~9的编码
LE2=1; //锁存段码
LE2=0; //断开锁存,段选573的Q7~Q0仍保持
delay(10); //延时保持一下,延时过大会闪动,延时过小会有重影
P1=0x00;LE2=1;LE2=0; //清除P1口数据,以免造重影
//显示个位
P1=0x7f; //0xbf=0111 1111,即选通十分位
LE1=1; //锁存位
LE1=0; //断开锁存,位选573的Q7~Q0仍保持
P1=dis[n%10]; //0~9的编码
LE2=1; //锁存段码
LE2=0; //断开锁存,段选573的Q7~Q0仍保持
delay(10); //延时保持一下,延时过大会闪动,延时过小会有重影
P1=0x00;LE2=1;LE2=0; //清除P1口数据,以免造重影
}
//**************************************************************************************************
//主函数
//**************************************************************************************************
void main()
{
uchar i,value;
uint temp;
while(1) //死循环
{
temp=Read_AD(0); //采集0通道模拟电压值
temp=19*temp; //乘以电阻特性参数
for(i=0;(vt_table[i]>temp)&&(i<60);i++);//查表得到温度对应参数
if(i<10) {value=10-i;flag=1;}//如果是负温度,符号标志置1,表示为负
else value=i-10; //如果为正,去掉10个负数
smg_show(value); //显示温度值
}
}
沙发
ID:684248
只看他
2020-2-26 15:57
函数不完整啊,ADC采集读写函数呢,另外问下楼主这是单片机直接驱动数码管和热敏电阻吗
51黑电子论坛
Powered by
Discuz!
X3.1
首页
|
标准版
|
触屏版
|
电脑版