⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 psener.c

📁 SHT10温湿度测试
💻 C
字号:
#include"reg52.h"
#include"stdio.h"
#include"intrins.h"
#include "LED.h"
#include "44KEY.h"
#define uchar unsigned char
#define uint  unsigned int
char  AsciiArray[5];
unsigned int j;
uint fg;
char fgf;

sbit TLC1549_CLK     = P3^2;        //AD_CLK
sbit TLC1549_DOUT    = P3^3;        //AD_DOUT
sbit TLC1549_CS      = P3^4;        //AD_CS
uint result=0; 
uint flag1;
uint t0,t1;                    //转换变量初始化为0
uint IntNumber;

void InttoChar (uint IntNumber)
//---------------------------------------------------------
// Name: void InttoChar (int IntNumber)
// Func.: Translate integer to ASCII charactor array
// Char.: IntNumber  number to be translated to ASCII charactor
//---------------------------------------------------------
{
 if (IntNumber < 10)
 {
  AsciiArray[0] = IntNumber + 0x30;
  AsciiArray[1] = 0x20;
  AsciiArray[2] = 0x20;
  AsciiArray[3] = 0x20;
  AsciiArray[4] = 0x20;
  return;
 }
 if (IntNumber < 100)
 {
  AsciiArray[0] = IntNumber / 10 + 0x30;
  AsciiArray[1] = IntNumber % 10 + 0x30;
  AsciiArray[2] = 0x20;
  AsciiArray[3] = 0x20;
  AsciiArray[4] = 0x20;
  return;
 }
 if (IntNumber < 1000)
 {
  AsciiArray[0] = IntNumber / 100 + 0x30;
  AsciiArray[1] = IntNumber % 100 / 10 + 0x30;
  AsciiArray[2] = IntNumber % 10 + 0x30;
  AsciiArray[3] = 0x20;
  AsciiArray[4] = 0x20;
  return;
 }
 if (IntNumber < 10000)
 {
  AsciiArray[0] = IntNumber / 1000 + 0x30;
  AsciiArray[1] = IntNumber % 1000 / 100 + 0x30;
  AsciiArray[2] = IntNumber % 100 / 10 + 0x30;
  AsciiArray[3] = IntNumber % 10 + 0x30;
  AsciiArray[4] = 0x20;
  return;
 }
 else
 {
  AsciiArray[0] = IntNumber / 10000 + 0x30;
  AsciiArray[1] = IntNumber % 10000 / 1000 + 0x30;
  AsciiArray[2] = IntNumber % 1000 / 100 + 0x30;
  AsciiArray[3] = IntNumber % 100 / 10 + 0x30;
  AsciiArray[4] = IntNumber % 10 + 0x30;
  return;
 }
} 

static void mDelay(j)
{
    unsigned int i;
	for(;j>0;j--)
	{
	    for(i=124;i>0;i--)
		{;}
	}
}

void adelay(uchar us)        //delay time
{
    while(us--);
}

uint adc()
{ 
    uint  u=0;
    uchar i;
    TLC1549_CS=1;                   //先高电平,禁止I/O CLOCK
    _nop_();
	TLC1549_CLK=0; 
	_nop_();
    TLC1549_CS=0;                   //开启控制电路,使能DATA OUT和I/O CLOCK               
    for(i=0;i<10;i++)               //read data
    { 
        TLC1549_CLK=0; 				 //时钟下降沿
		_nop_();		             
        u=(u<<1)|TLC1549_DOUT;      //读取数字放在16位u中
        TLC1549_CLK=1;              //时钟的上升沿每个时钟取一次数
        _nop_();      
    }
    for(i=0;i<10;i++);
        adelay(2);        //延时21uS 有问题???
    TLC1549_CS=1;                   //DOUT 返回到高阻状态而终止序列
    return(u);                      //返回AD转换后的值
}

void Psener(void)
{  
    uint i,a=0,temp,temp1;
    float u1,sum=0;
 
	mDelay(30);
    while(1)
    {
        u1=0;sum=0;	   	
		
		KeyScan();
        KeyFree();
        for(i=0;i<30;i++)
        {
	        u1=adc(); 
	        temp=((500*(u1))/(1023));//扩大100倍
	        sum=sum+temp-30;
	    }
        temp1=sum/30;
	  
        fg=(temp1*50)/2.5;
	
		//fgf=fg;
        if(fg<0||fg>5000)
	        fg=0;
		InttoChar(fg); 
      if(fg>=0&&fg<=5000)
	   {
           sel1= fg%10;
		  // ascii[0]=sel1+48;
           fg= fg/10;
           sel2= fg%10;
		   //ascii[1]=sel2+48;
           fg= fg/10;
           sel3= fg%10;
		   //ascii[2]=sel2+48;
           fg= fg/10;
           sel4= fg%10;
		  // ascii[3]=sel2+48;
		   sel8=12;
        }  
		
        if(flag1==4)               //如果测量的是温度
        {
	        for(a=50;a>0;a--)
	        {
	            led_show4();
	        }
	    }
        else if(flag1==3)               //如果上位机测量
        { 
              
			 break;
        }   
	    if(key==1)        //如果要退出   
        {
	       mDelay(100);
           if(key==1)
	       {
              key=0;
		      P0=0xff;
			  fg=0;
              flag1=0;
			  
			  break;
            }
        }   
    }   
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -