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

📄 main2.c

📁 用CS5532做的无线吊钩称的吊称端程序
💻 C
字号:
/*
	修改的地方:
	1> :修改速度0~3,显示的稳定的速度快慢
	2> :显示程序全部删除:disp_code();tran();displong();
	3> :txsend[7] = ( pd+0x30 );  电池电压检测位发送

*/


#include < reg52.h>
#include <intrins.h>

#define TRUE   1
#define FALSE  0

sfr ss1 = 0xbf;	//sm8958a sfr set
sfr ss2 = 0x85;  

//I/O口的定义

sbit buzz   = P1 ^ 0;
sbit power     = P0 ^ 4;					//P2 ^ 5;
sbit IOAdPower = P0 ^ 3;
sbit IOBat     = P3 ^ 6;			//电池检测


//A/D转换和滤波程序
extern void InitAd();
extern void adpro();
extern void InitPol();
extern   signed long data ad_out;		//POL输出的内码

//调用串口的程序
extern void InitUart(void);
extern void SendStr(unsigned char num);
extern void SendDigital(signed long int li);
extern bit RdBufData(void);
extern unsigned  int RecInt;			//接收到数据转换成的整数 如OK__  为0x4f4b

unsigned char bdata flag;			//待发送的几个标志位
sbit pick      = flag ^ 4;
sbit stab1     = flag ^ 5;
sbit bat_crane = flag ^ 6;

unsigned char bdata flag1;
sbit in_send     = flag1 ^ 0;				//正在发送数据标志
sbit r_succes_b  = flag1 ^ 1;				//成功接受一个字符的标志
sbit BRecData    = flag1 ^ 2;				//接收端已接收到数据(长度>=7个)标志

sbit delb        = flag1 ^ 3;         		//开始延时置1,延时到为零
sbit bk_delb     = flag1 ^ 4;				//自动背光的显示时间
sbit BReq        = flag1 ^ 5;		//请求发送内码命令已发送

unsigned char xdata ReqTime;		//请求发送数据以后的最长等待时间
unsigned char xdata ReqNum;         //请求发送的次数

unsigned char xdata last_min;			//电池不足时的开机时间
unsigned char xdata min_add;			//电池不足
unsigned  int xdata c_del;			//时间定时,100次到1秒

unsigned  int del_num; 			//延时时间参数 

unsigned char TranChoice;		//发送选择 0 -- 等待接收命令
						//         1 -- 等到 pick = 1 才发送数据
						//         2 -- 立即发送数据
						//         3 -- 关闭传感器和A/D的电源

unsigned char xdata sec;
unsigned char xdata min;
unsigned char xdata hour;

void DelayInter(unsigned int num)
{
	del_num=num;
	delb=1;
	do 
	{	 
	}
	while (delb);
}

////////中断程序///////////
void int_ex0 (void) interrupt 0 
{
}
void int_t0(void)  interrupt 1 
{
}
void int_ex1 (void) interrupt 2 
{
	EX1=0;
}

/////
void RunTime(void)
{
	if (delb)
	{
		del_num--;
		if (del_num == 0) 
		{
			delb = FALSE;
		}
	}
}
 
//////unit weight input enter time////
////
/*void BkTime(void)
{
	if (bk_delb)
	{
		bk_del=bk_del-1;
		if (bk_del==0)
		{
			bk_delb=0;
		}
	}
}*/


void UartTime(void)
{
	if (BReq)
	{
		ReqTime--;
		if (ReqTime == 0) 
		{
			BReq = FALSE;
			ReqNum++;
			if (ReqNum > 4) ReqNum = 4;
		}
	}
}

//////////
void int_t1 (void)  interrupt 3
{
	TH1=0xdc;		//0xee;		//0xf7;   

	RunTime();
//	BeepFunc();	
	UartTime();		//串口交换数据之间的时间常数
	sec++;
	if (sec >= 60) min++;
	if (min >= 60) hour++;
	if (hour > 1) hour = 1;
}


///////////特殊功能寄存器初始化
void InitFsr(void)
{
	EA = 0;
	TMOD=0x11;
	PCON=0x00;
	SCON = 0x70;
	IP=0x08;
	TH0=0;
	TL0=0;
	TH1=0xdc;		//0xee;			//0xf7;
	TL1=0x00;
	TR0=0;
	TR1=1;
	IT1=1;
	EX0=0;
	EX1=0;
	ET1=1;
	ET0=0;
	ES=1;
	EA=1;
}

//=========================================================
void main (void)
{     
 	ss1=2;
	ss2=0;
	_nop_();
	_nop_();
	power=0;                     	//上电开机
//	buzz=0;
	buzz = 1;
	//蜂鸣器
	IOAdPower = 0;			//打开AD的电源

	InitFsr();
	InitUart();
//	init();
//	chk_ser();					//			
	InitAd(); 					//初始化ad
	InitPol();
//	del_sys(10,0);		
	for ( ; ; )
	{
		bat_crane = ~IOBat;
		if (!bat_crane) sec=min=hour=0;
		if (hour!=0) IOAdPower = 1;		//关闭A/D的电源
		adpro();
		if(pick)
		{
			if (TranChoice==1) goto go1;
		}	
		if (RdBufData())
		{
			switch (RecInt)
			{
				case 0x4f4b:		//OK          接收的数据正确。
					TranChoice = 1;
					break;
				case 0x4e47:		//NG          接收的数据错误,并请求重发
					TranChoice = 2;
					break;
				case 0x4153:		//AS          请求发送数据。
					TranChoice = 2;
					break;
				case 0x414b:		//AK          接收的数据正确并请求再次发送。
					TranChoice = 1;
					break;
				case 0x5355:		//SU          关闭传感器和A/D转换的电源。
					TranChoice = 3;
					break;
			}
		}
		if (TranChoice == 2)
		{
go1:			for ( ; in_send ; ) ;
			SendDigital(ad_out);
			pick = 0;
			TranChoice = 0;
		}
		
        
	}	
}

⌨️ 快捷键说明

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