📄 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 + -