1.设计仿真电路及编程的方框图
•PT100测温得到电压信号---•运算放大器----•AD数模转换----•单片机控制数码管的显示
制作出来的实物图如下:
2.仿真电路方案及元器件选择。
系统以单片机为核心,通过A/D转化芯片对放大之后的信号进行采样。然后传送给单片机,单片机控制数码管的显示。
51系列单片机一块、四位数码管一个、AD0808芯片一块,运放一块
四、仿真电路原理设计
(1)测量桥路设计、元器件及工作电源参数;运算放大器电路、元器件参数;
(2) 单片机与AD转换器、LED接口电路,选择元器件参数;
(3) C51编程。
仿真原理图如下(proteus仿真工程文件可到本帖附件中下载)
单片机源程序如下:
- #include <reg51.h> //头文件
- #include<math.h>
- #define uchar unsigned char //宏定义
- #define uint unsigned int
- sbit STAR=P2^4;
- sbit EOC=P2^6;
- sbit CLOCK=P2^5;
- sbit OE=P2^7;
- sbit P20=P2^0;
- sbit P21=P2^1;
- sbit P22=P2^2;
- sbit P23=P2^3;
- uchar getdata;
- double change;
- long int temp;
- uchar code table1[]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,
- 0x6F,0x40};//0-9,-,无小数点
- uchar code table2[]={0xbF,0x86,0xdB,0xcF,0xe6,0xeD,0xfD,0x87,0x7fF,
- 0xeF};//0-9,小数点
- uchar dispbuf[6];
- /****************************************************************************************/
- //延时函数:带有入口参数m,代表ms毫秒
- //
- /****************************************************************************************/
- void delay_ms(uchar m)
- {
- unsigned int i,j;
- for(i=0;i<m;i++)
- {
- for(j=0;j<123;j++)
- {;}
- }
- }
- /****************************************************************************************/
- //
- //数码管显示程序
- /****************************************************************************************/
- void display()
- {
- P0=table1[dispbuf[3]];//显示百位
- P20=0;
- P21=1;
- P22=1;
- P23=1;
- delay_ms(8);
- P0=0X00;
- P0=table1[dispbuf[2]];//显示十位
- P20=1;
- P21=0;
- P22=1;
- P23=1;
- delay_ms(8);
- P0=0X00;
- P0=table2[dispbuf[1]];//显示个位
- P20=1;
- P21=1;
- P22=0;
- P23=1;
- delay_ms(8);
- P0=0X00;
- P0=table1[dispbuf[0]];//显示小数位
- P20=1;
- P21=1;
- P22=1;
- P23=0;
- delay_ms(8);
- P0=0X00;
- }
- /****************************************************************************************/
- //
- //计算温度
- /****************************************************************************************/
- void PT100()
- {
- double deal,U;//
- U=5.0/255.0*getdata;
- deal=U*20*10;
- temp=(long int)deal;
- if(U<5.2&&U>0)
- {
- dispbuf[0]=temp%10;
- dispbuf[1]=temp/10%10;
- dispbuf[2]=temp/100%10;
- dispbuf[3]=temp/1000;
- }
- else
- {
- dispbuf[0]=0;
- dispbuf[1]=0;
- dispbuf[2]=0;
- dispbuf[3]=0;
-
- }
-
- display();
- }
- /****************************************************************************************/
- //
- //
- /****************************************************************************************/
- main()
- {
- TMOD = 0x10; //定时器0,工作在定时器方式
- TH1 = (65536-200)/256; //0x3c
- TL1 = (65536-200)%256; //0xb0
- EA = 1; //开总中断
- ET1 = 1; //打开(允许)定时器1中断
- TR1 =1; //开始(启动)定时
- while(1)
- {
- STAR=0;
- OE=0;
- STAR=1;
- STAR=0;
- while(EOC==0)
- {
- OE=1;
- ……………………
- …………限于本文篇幅 余下代码请从51黑下载附件…………
复制代码
所有资料51hei提供下载:
热电阻测温.zip
(2.06 MB, 下载次数: 852)
|