资源简介
内含数字温度计 单片机keil代码 和proteus电路原理仿真 以及设计论文 一条龙服务,超值~

代码片段和文件信息
#include
#include
#define uchar unsigned char
#define uint unsigned int
#define ad0_7 P1 //AD数据口
sbit cs=P2^4; //片选信号,低电平有效,控制芯片的启动和结果读取
sbit rd=P2^7; //读数据控制,低电平有效
sbit wr=P2^6; //AD启动控制,上升沿有效
sbit intr=P2^5; //AD转换完成输出低电平
uchar i;
uchar led[11]={ 0x3F //“0“
0x06 //“1“
0x5B //“2“
0x4F //“3“
0x66 //“4“
0x6D //“5“
0x7D //“6“
0x07 //“7“
0x7F //“8“
0x6F //“9“
0x40 //“-“
};
uchar dat_AD[4]={0};
//启动AD转换子程序//////////////////
void start_ad(void)
{ cs=0; //允许AD
wr=0;
_nop_();
wr=1; //WR由低变高时启动AD转换
while(intr); //等待转换完成,低电平有效
cs=1; //停止AD转换
}////////////////////
read_ad()
{ uint ad_data;
ad0_7=0xff;
cs=0; //允许读
rd=0; //读取转换数据结果
_nop_();
ad_data=ad0_7; //把数据存到AD——data中
rd=1;cs=1; //停止读取AD
return(ad_data);
}
// 数据处理函数
//实际测量当0度时,AD数据为133,所以数据处理时判断AD数据和133的大小来识别正负温度。
//由于ADC芯片精度不够,所以测量时有误差,8位AD的分辨率为19.5mV,约为20mV,
//放大电路输出的电压,温度每变化一度,电压变化只有10mV左右,所以测量有误差,
//以下温度和AD数据的计算公式为实测数据后线性拟合得到的,实际线性拟合得到公式为:y=0.503x+133.63.
//因为AD数据为0-255的整数,所以公式简化为以下计算方式
void data_shout(uint ad_data)
{
float temp;
uint T;
if(ad_data<79)
{
temp=614.422-7.811*ad_data;
T=(uint)temp;
dat_AD[0]=10;
} //负温度 dat_AD[0]中为温度符号数据
else if(ad_data<=204)
{
temp=7.990*ad_data-628.491;
T=(uint)temp;
dat_AD[0]=T/1000;
} //正温度
else if(ad_data>204)
{
temp=8.124*ad_data-655.742;
T=(uint)temp;
dat_AD[0]=T/1000;
} //ad_data=T;
dat_AD[1]=T%1000/100; //温度值的十位
dat_AD[2]=T%100/10; //2温度值的个位
dat_AD[3]=T%10; //温度值的小数位
}
//显示函数
void disp(){
switch(i){
case 0: P0=0xfe;P3=led[dat_AD[0]];i++;break; //显示符号位
case 1: P0=0xfd;P3=led[dat_AD[1]];i++;break;
case 2: P0=0xfb;P3=led[dat_AD[2]]|0x80;i++;break;
case 3: P0=0xf7;P3=led[dat_AD[3]];i=0;break;
}
}
//定时器初始化
//用作数码管显示的刷新
void t0init(){
TMOD=0x01;
TH0=(65535-2000)/256; //定时20ms时间
TL0=(65535-2000)%256;
EA=1;
ET0=1;
TR0=1;
}
//定时器中断函数,在中断中刷新数码管显示
void Time0( ) interrupt 1{
TH0=(65535-2000)/256;
TL0=(65535-2000)%256;
disp();
}
//主函数
void main(void){
t0init(); //初始化
while(1){
start_ad(); //开始AD
data_shout(read_ad());
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
目录 0 2019-06-05 23:38 keil\
文件 118751 2014-06-09 15:10 keil\Last Loaded shuziwenduji.DBK
文件 3411 2014-06-09 15:05 keil\main.c
文件 6280 2019-06-05 23:35 keil\main.LST
文件 6648 2019-06-05 23:35 keil\main.OBJ
文件 7423 2019-06-05 23:35 keil\pt100
文件 1054 2019-06-05 23:35 keil\pt100.build_log.htm
文件 3992 2019-06-05 23:35 keil\pt100.hex
文件 42 2019-06-05 23:35 keil\pt100.lnp
文件 10256 2019-06-05 23:35 keil\pt100.M51
文件 605 2014-06-09 15:08 keil\pt100.plg
文件 90247 2019-06-05 23:38 keil\pt100.uvgui.20292
文件 5741 2019-06-05 23:34 keil\pt100.uvopt
文件 14027 2019-06-05 23:34 keil\pt100.uvproj
文件 0 2014-06-09 15:07 keil\pt100_Uv2.Bak
文件 6376 2005-03-22 15:22 keil\STARTUP.A51
文件 14069 2019-06-05 23:35 keil\STARTUP.LST
文件 749 2019-06-05 23:35 keil\STARTUP.OBJ
目录 0 2019-06-05 23:37 proteus 仿真\
文件 6885662 2014-06-09 15:48 proteus 仿真\shuziwenduji.BMP
文件 118752 2014-06-09 18:10 proteus 仿真\shuziwenduji.DSN
文件 21561 2019-06-05 23:37 proteus 仿真\shuziwenduji.pdsprj
文件 873 2019-06-05 23:37 proteus 仿真\shuziwenduji.pdsprj.DESKTOP-7CGG286.20292.workspace
文件 742 2014-06-09 18:10 proteus 仿真\shuziwenduji.PWI
目录 0 2019-06-05 23:37 设计报告\
文件 39424 2015-01-03 11:20 设计报告\基于热敏电阻的数字温度计的设计任务书.doc
文件 605228 2015-01-03 11:19 设计报告\设计.doc
相关资源
- 51单片机通信采样proteus仿真方波转化
- 基于MCS_51单片机的工业屏柜散热方案
- MCS_51单片机与8255A的接口设计
- 51单片机PWM程序,占空比、周期可调整
- 51单片机多功能自行车测速仪
- 00
- 用51单片机实现G代码翻译
- 简易的电阻电容测量电路
- 51单片机基于protues的几个仿真实例
- 51单片机PCB设计图
- PC -- 单片机的串口数据传输系统设计
- 51单片机控制舵机程序
- 51单片机读取温度数据存储到SD卡中并
- 【单片机】51单片机数码管显示万年历
- C51单片机汇编指令查询、学习工具集
- 基于8051单片机的红外接收程序
- 51单片机频率计(很简单)
- 基于51单片机的智能温控器
- 基于51单片机的16*16点阵动态显示
- 基于51单片机的模数转换与数模转换
- 51单片机中使用ucos ii的优缺点转
- 51单片机中使用ucos ii的优缺点
- 8051单片机教程第二十七课:单片机几
- 8051单片机教程第二十六课:矩阵式键
- 适用于STC单片机和51单片机的SX1262驱动
- 基于51单片机的计算器(C51编写,有
- 51单片机大量源码
- 基于51单片机的交通信号灯程序
- GSM监控系统51单片机设计
- 51单片机定时器/计数器的结构和原理
评论
共有 条评论