📄 temperature_ad.c
字号:
//-----------------------------------------------------------------------------
// JDCS.c
//-----------------------------------------------------------------------------
//
//-----------------------------------------------------------------------------
//-----------------------------------------------------------------------------
// Includes
//-----------------------------------------------------------------------------
#include <REG52.h> // SFR declarations
#include "I2C.h"
#include "ZLG7290.h"
#include <intrins.h>
#include <absacc.h>
#include <stdio.h>
#include <math.h>
#define uchar unsigned char
#define uint unsigned int
sbit IOclk = P1^0; //AD时钟信号
sbit Dout = P1^1; //AD数据信号
sbit ADcs = P1^2; //AD片选信号
//-----------------------------------------------------------------------------
//全局变量定义
//-----------------------------------------------------------------------------
//-----------------------------------------------------------------------------
// 函数原型定义
//-----------------------------------------------------------------------------
void INT0_Init(void); //外部中断初始化,该中断用于ZKG7290的键盘中断
//ZLG7290显示与键盘测试例程
void INT0_SVC();
void Delay1(unsigned int);
void Delay(uint);
void ZLG7290_Init();
void Display_Temperature(float );
uchar sample(void);
unsigned int SystemCount=0;
unsigned long FreqOne=0;
unsigned long FreqCountOne=0;
//-----------------------------------------------------------
//函数:Delay1()
//------------------------------------------------------------
void Delay1(unsigned int t)
{
int i, j;
for(i=1;i<t;i++)
{
for (j=1;j<100;j++) ;
}
}
/*********************************
BASE DRIVE
**********************************/
void DELAY(uint t)
{
while(t!=0)
t--;
}
/************************************
AD DRIVE
*************************************/
uchar sample(void)
{
uchar i;
uint temp=0;
IOclk=0;
ADcs=0;
DELAY(4);
for(i=0;i<10;i++)
{
IOclk=1;
temp=temp<<1;
CY=Dout;
if(CY) //必须含有 "INTRINS.H"文件
{
temp|=0x01;
}
DELAY(2);
IOclk=0;
DELAY(2);
}
ADcs=1;
temp=temp>>2;
return temp;
}
//在数码管上显示电压
void Display_Temperature(float tem1)
{
unsigned char d ;
unsigned int flag; //为0显示正,为1显示负
float tem;
if (tem1 >= 0) flag = 0;
else
flag = 1;
tem = abs(tem1);
if (tem >= 100)
{
if (flag == 1) ZLG7290_WriteReg(ZLG7290_DpRam4,0x02);
else ZLG7290_WriteReg(ZLG7290_DpRam4,0x00);
d = tem / 100;
ZLG7290_Download(3,0,0,d);
tem = tem - d * 100;
d = tem / 10;
ZLG7290_Download(2,0,0,d);
d = tem - d * 10;
ZLG7290_Download(1,0,0,d);
}
else if (tem >= 10)
{
if (flag == 1) ZLG7290_WriteReg(ZLG7290_DpRam4,0x02);
else ZLG7290_WriteReg(ZLG7290_DpRam4,0x00);
tem = tem * 10;
d = tem / 100;
ZLG7290_Download(3,0,0,d);
tem = tem - d * 100;
d = tem / 10;
ZLG7290_Download(2,1,0,d);
d = tem - d * 10;
ZLG7290_Download(1,0,0,d);
}
else
{
if (flag == 1) ZLG7290_WriteReg(ZLG7290_DpRam4,0x02);
else ZLG7290_WriteReg(ZLG7290_DpRam4,0x00);
tem = tem * 100;
d = tem / 100;
ZLG7290_Download(3,1,0,d);
tem = tem - d * 100;
d = tem / 10;
ZLG7290_Download(2,0,0,d);
d = tem - d * 10;
ZLG7290_Download(1,0,0,d);
}
/*
if (tem >= 10)
{
//if (flag == 1) ZLG7290_SegOnOff(7,1);
if (flag == 1) ZLG7290_WriteReg(ZLG7290_DpRam1,0x02);
else ZLG7290_WriteReg(ZLG7290_DpRam1,0x00);
d = tem / 10;
ZLG7290_Download(2,0,0,d);
d = tem - d * 10;
ZLG7290_Download(3,0,0,d);
}
else
{
//if (flag == 1) ZLG7290_SegOnOff(7,1);
if (flag == 1) ZLG7290_WriteReg(ZLG7290_DpRam1,0x02);
else ZLG7290_WriteReg(ZLG7290_DpRam1,0x00);
tem = tem * 10;
d = tem / 10;
ZLG7290_Download(2,1,0,d);
d = tem - d * 10;
ZLG7290_Download(3,0,0,d);
}
*/
}
void main()
{
// uchar temp;
int i,j;
float vx;
EA = 0;
INT0_Init(); //初始化外部中断,该函数打开了EA
ZLG7290_Init(); //系统初始化
EA = 1;
while(1)
{
// temp = sample();
// tempf = temp;
// vx = (tempf/256)*5.0;
// temperature = -25 * (vx) +70;
// Display_Temperature(temperature);
vx=(FreqOne/43.0)*2*3.14*0.262*36/10.0; //速度=count()*2*3.14*0.262*3600/1000/6
// vx=(FreqOne/1.0);
Display_Temperature(vx);
for (i=1;i<20;i++)
for (j=1;j<400;j++) ;
}
}
//--------------------------------------------------------------------------------
//外部中断初始化函数
//--------------------------------------------------------------------------------
void INT0_Init(void)
{
//TCON=0x05;
T2CON=0x00;
// T2MOD=0x00;
//定时10ms
RCAP2H =0xDC;
RCAP2L =0x00;
TH2=0xDC;
TL2=0x00;
ET2=1;
IT0 = 1; //负边沿触发中断
EX0 = 1; //允许外部中断0
//IT1 = 1;
//EX1=1;
TR2=1;
}
//---------------------------------------------------------------
//函数:ZLG7290_Init()
//功能:ZLG7290初始化
//-----------------------------------------------------------------
void ZLG7290_Init()
{
I2C_Init();
Delay1(30); //等待ZLG7290 复位完毕。延时完毕定时器0被关闭。
}
void timer2(void) interrupt 5
{
SystemCount++;
if(SystemCount>=37)
{
TR2=0;
SystemCount=0;
FreqOne=FreqCountOne;
// FreqTwo=FreqCountTwo;
FreqCountOne=0;
// FreqCountTwo=0;
TH2=0xDC;
TL2=0x00;
TR2=1;
}
TF2=0;
}
void External0(void) interrupt 0 using 0//外部中断,用来检测和计算频率
{
FreqCountOne++;
}
//#include <REGX51.H>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -