资源简介
内含数字温度计 单片机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单片机的只能台灯
- 51单片机 LCD12864程序显示文字或者图片
- 51单片机mpu6050读取六轴原始数据并L
- DS2782 美信电量计芯片 IIC STM32/STM8/5
- 基于C51单片机的8×8-LED点阵屏汉字显示
- 音乐频谱显示参考源代码.rar
- 红外温度测温成功mxl90614
- 基于51单片机电子音乐门铃设计
- 51单片机读写SD卡+播放视频
- AT89C51单片机实现的强大交通灯控制汇
- 基于51单片机的无线病床呼叫系统设计
- 基于51单片机的花样流水灯(汇编程序
- 51单片机串口通讯
- 51单片机控制LED PWM调光程序
- 基于C51单片机的MP3播放器设计
- 基于89C51单片机的节拍器设计
- 51单片机驱动74hc595芯片的程序
- 51单片机串口修改DS1302时间
- 51单片机的简易计算器仿真及源码
- 51单片机通过6050——DMP获取姿态角例
- 基于51单片机的智能导航小车
- 基于51单片机 的智能交通灯设计 带
- stc15两轮自平衡小车
- 51单片机读写SD卡程序,使用FAT文件系
- 51单片机与触摸屏通信
- AT89c51单片机流水灯
- 51单片机中用PWM控制LED亮度调节
- DS18B20 51单片机,包括电路
- 28BYJ-48步进电机(51单片机)
评论
共有 条评论