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

📄 51

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

#define uchar unsigned char
#define uint  unsigned int
#define right_set XBYTE[0x0000]	//右端配置区旗语锁存器
#define data_get  XBYTE[0x0001]	//数据区旗语锁存器
#define int_left  XBYTE[0X2FFE]	//左邮箱单元地址
#define LED P1					//定义数码管输出端

uchar xdata *right_addr;		//右端配置地址区
uchar xdata *dat_addr;			//右端采集数据区
uchar dat_in;
uchar dat_num=10;
sbit  LED_l=P3^5;
sbit  LED_h=P3^4;
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 init_left(void);
void init_right(void); 			//初始化右端单片机参数
void sem_flag(uchar *sem_apply);//申请旗语
uchar avg_dat(void);			//计算采集数据的平均值
void disp(uchar dat);			//显示函数
void delay(void);				//延时函数
/**************************主函数******************************/
main()
{
    init_left();			//初始化本机
	init_right();			//初始化右端单片机相关设置
    while (1)
    {
		disp(dat_in);		//显示获得数据的平均值
    }
}
/*********************初始化本机**********************/
void init_left(void)
{
	EA=1;					//开总中断
	EX0=1;					//开外部中断0
}
/*************初始化右端单片机相关设置**************/
void init_right(void)       //配置右端单片机
{
    sem_flag(&right_set);	//申请右端设置区的使用权
    right_addr=0x2000;		//右端单片机参数设置区
    dat_addr=0x3000;		//右端单片机采集数据地址区
    *right_addr=dat_num;	//采集数据的个数
    *(right_addr+1)=0x30;	//采集数据高8位地址
    *(right_addr+2)=0x00;	//采集数据低8位地址
	right_set=0x01;
}
/*************通过申请旗语获取某地址区域的使用权**************/
void sem_flag(uchar *sem_apply)
{
    *sem_apply=0x00;			//申请旗语
    while((*sem_apply)!=0x00);	//等待并获得旗语
}
/*************读取采集数据并取得平均值**************/
uchar avg_dat(void)
{
    uchar i,average;
	uint sum=0;
    for (i=0;i<dat_num;i++)
    {
        sum+=*(dat_addr+i);	//采集数据求和
	}
	average=sum%dat_num;	//去平均值
	return(average);
}
/*************延时程序**************/
void delay(void)
{
	uchar i,j;
	for(i=0;i<10;i++)
		for(j=0;j<1140;j++);
}
/*************显示采集数据的平均值**************/
void disp(uchar dat)
{
	uchar dat_h,dat_l;
	dat_h=dat/16;
	dat_l=dat%16;
	LED_h=0;
	LED=tab[dat_h];				//送高位数据
	delay();
	LED_h=1;
	LED_l=0;
	LED=tab[dat_l];				//送低位数据
	delay();
	LED_l=1;
}
/*************读取采集区数据**************/
void read_dat()interrupt 0 using 1
{
	uchar ch;
	sem_flag(&data_get);		//获取数据区旗语
	dat_in=avg_dat();			//求采集数据平均值
	ch=int_left;				//清除左边中断
	data_get=0x01;				//释放数据区旗语
}

⌨️ 快捷键说明

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