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

📄 51

📁 51单片机应用系统典型模块开发大全
💻
字号:
#include <reg51.h>
#include <absacc.h>

#define uchar unsigned char
#define uint  unsigned int
#define ADATA  XBYTE[0xEFFF]	//转换数据读取地址
#define LED P1					//定义数码管输出端
#define NUM 21                  //采样数据个数

sbit  LED_1=P2^5;               //显示数据个位
sbit  LED_2=P2^6;               //显示数据十位
sbit  LED_3=P2^7;               //显示数据百位
sbit  CLK=P3^4;					//TLC5510时钟输入
uchar buffer[NUM];              //采集数据缓冲区
const uchar tab[]={             /* 根据共阳极字型编码表获取0~9,A~B字型代码 */
    0xc0,0xf9,0x24,0x30,//0~3
    0x19,0x12,0x02,0x78,//4~7
    0x00,0x18,0x08,0x03,//8~b
    0x46,0x21,0x06,0x0e,//c~f
    0xff//mie
};

/**************************声明函数******************************/
void delay(void);				//延时程序
uchar read_ad(void);			//读取A/D转换数据
uchar tem_dat(void);			//将读取数据转换成为温度值
uchar median(void);				//进行中值滤波处理
void disp(uchar dis_dat);		//数据显示函数
/*************************主函数******************************/
main()
{
    uchar i,send_dat;
	while (1)
    {
		for (i=0;i<NUM;i++)
		{
			buffer[i]=tem_dat();//将采样温度值全部存入数据缓冲区
		}
		send_dat=median();		//中值滤波
		disp(send_dat);			//显示温度值
    }
}
/*************************延时函数******************************/
void delay(void)
{
    uchar i;
    for (i=0;i<100;i++);
}
/*******************TLC5510转换数据读取函数*********************/
uchar read_ad(void)
{
    uchar dat,i;
	for(i=0;i<3;i++)
	{
		CLK=1;
		CLK=0;					//TLC5510采样模拟信号
	}
	CLK=1;						//上升沿
    dat=ADATA;					//读取TLC5510中的采样数据
	CLK=0;
    return(dat);
}
/*******************将读取数据转换成为温度值*********************/
uchar tem_dat(void)
{
    uchar temp,tem;
    float temp1;
    temp=read_ad();				//读入A/D转换数据
    temp1=((float)temp)*100/255;
	tem=(uchar)temp1;			//将数据值转换成温度值
	return(tem);
}

/*******************中值滤波*********************/
uchar median(void)
{
    uchar i,j,temp;
    uchar tempbuf[NUM];
    for (i=0;i<NUM;i++)			//采用冒泡法对采样温度进行排序
        for (j=0;j<NUM-i;j++)
        {
            if (tempbuf[i]>tempbuf[i+1])
            {
                temp=tempbuf[i];	
                tempbuf[i]=tempbuf[i+1];
                tempbuf[i+1]=temp;
            }
        }
    return(tempbuf[(NUM-1)/2]); //取中值并返回
}
/*******************显示读取数据*********************/
void disp(uchar dis_dat)
{
	uchar dat_b,dat_s,dat_g;
	dat_b=dis_dat/100;			//计算百位数值
	dat_s=(dis_dat%100)/10;		//计算十位数值
	dat_g=(dis_dat%100)%10;		//计算个位数值	
	LED_3=0;
	LED=tab[dat_b];				//送高位数据
	delay();
	LED_3=1;
	LED_2=0;
	LED=tab[dat_s];				//送高位数据
	delay();
	LED_2=1;
	LED_1=0;
	LED=tab[dat_g];				//送高位数据
	delay();
	LED_1=1;
}

⌨️ 快捷键说明

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