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