📄 ybmain.c
字号:
////////////////////////////////////////////////////////////////////////
// 函数名称: AT24C64_W(void *mcu_address,uint AT24C64_address,uint count)
// 入口参数: 无
// 函数功能:写24C64;
////////////////////////////////////////////////////////////////////////
void AT24C64_W(void *mcu_address,uint AT24C64_address,uint count)
{
//DOG_WDI=!DOG_WDI;
//DOGTIME=0;
while(count--)
{
I2C_Start();
/*I2C_Send_Byte( 0xa0 + AT24C64_address /256 *2);*/ /* 24C16 USE */
I2C_Send_Byte( 0xa0 );
I2C_Send_Byte( AT24C64_address/256 );
I2C_Send_Byte( AT24C64_address %256 );
I2C_Send_Byte( *(uchar*)mcu_address );
I2C_Stop();
Delay_N_mS(50); /* waiting for write cycle to be completed */
((uchar*)mcu_address)++;
AT24C64_address++;
}
}
////////////////////////////////////////////////////////////////////////
// 函数名称: AT24C64_R(void *mcu_address,uint AT24C64_address,uint count)
// 入口参数: 无
// 函数功能:读24C64;
////////////////////////////////////////////////////////////////////////
void AT24C64_R(void *mcu_address,uint AT24C64_address,uint count)
{
// DOG_WDI=!DOG_WDI;
// DOGTIME=0;
while(count--)
{
I2C_Start();
/*I2C_Send_Byte( 0xa0 + AT24C64_address / 256 *2 );*/ /* 24C16 USE */
I2C_Send_Byte( 0xa0 );
I2C_Send_Byte( AT24C64_address/256 );
I2C_Send_Byte( AT24C64_address % 256 );
I2C_Start();
/*I2C_Send_Byte( 0xa1 + AT24C64_address /256 *2 );*/
I2C_Send_Byte( 0xa1 );
*(uchar*)mcu_address = I2C_Receive_Byte();
I2C_Nack();
I2C_Stop();
((uchar*)mcu_address)++;
AT24C64_address++;
}
}
#endif
#ifdef TT
////////////////////////////////////////////////////////////////////////
// 函数名称: Init()
// 入口参数: 无
// 函数功能:初始化系统
////////////////////////////////////////////////////////////////////////
void Init()
{
//从存储器中读入数据
unsigned char tek;
//读初始化标识位;
AT24C64_R(&tek,0x00,1);
if(tek==8) //已经初始化24c64
{
ReadPass(); //读密码
ReadFenDu();//读分度
ReadWeiShu();//读位数;
ReadFull(); //读满量程;
ReadFlt(); // 读滤波强度;
ReadZeroChase();//读零点跟踪范围
ReadStartZero();//读开机置0范围
ReadSetZero();//读置0键置0范围
ReadPrintType();//读打印机类型;
ReadBuadRate(); //读波特率
ReadZeroCode(); //读零点码;
ReadBdRate(); //读标率
ReadPJ();//读关机
ReadTS();//读天数;
ReadJLSet();//读记录设置
ReadPrtNum();//打印联单数;
ReadAutoPrt(); //读联单数
ReadStartPW(); //读自动打印起点重量
ReadRecADD(); //初始化记录地址
// #ifdef TSTEST
ReadYMD();
// #endif
}
else //初始化24c64;
{
tek=8;
AT24C64_W(&tek,0x00,1);
InitPass(); //初始化密码;
InitFenDu(); //初始化分度;
InitWeiShu(); //初始化位数;
InitFull(); //初始化满量程
InitFlt(); //初始化滤波强度;
InitZeroChase(); //初始化零点跟踪范围
InitStartZero(); //初始化开机置0范围;
InitSetZero(); //初始化置0键置0范围
InitPrintType();//初始化打印机类型;
InitBuadRate(); //初始化波特率
InitZeroCode();//初始化零点码;
InitBdRate(); //初始化标率;
InitPJ(); //初始化关机;
InitTS(); //初始化天数
InitJLSet(); //初始化记录设置
InitPrtNum();//初始化联单数;
InitAutoPrt(); //初始化联单数
SaveStartPW(); //保存自动打印起点重量
InitStartPW(); //初始化自动打印起点重量
InitRecADD(); //初始化记录地址
// #ifdef TSTEST
InitYMD();
// #endif
}
// ES=0;
UART_init();//串行通信
dtcode=(G_FenDu*100)/G_BdRate;//计算dtcode;
//AD,中断
T0=1;
T1=1;
fuhao=0;
dot_number=0;
zero_flag=0;
timer_all=0;
timer_ok=0;
timer_number=0;
display1=0;
display2=0;
display3=0;
display4=0;
display5=0;
display6=0;
dis[0]=0;
dis[1]=0;
dis[2]=0;
dis[3]=0;
dis[4]=0;
dis[5]=0;
T0=1;
T1=0;
TMOD=0x11;
TR0=0;
ET0=0;
// TR2=1;
ET2=0;
IT1=1;
IT0=1;
IE1=0;
IE0=0;
EX0=1;
EX1=1;
ET1=1;
TL1=0x00;
TH1=0xAC;
T0=0;
T1=1;
TR1=1;
EA=1;
bHand=0;
// v_Get1302(ucCurtime);
// PrintCZ(&ucCurtime);
ucCurtime[0]=0;
ucCurtime[1]=0;
ucCurtime[2]=0;
//蜂鸣器;
beep=0;
//键盘,显示;
COM8155=0xE3;
PB8155=0x10;
ptr=19;
//显示器自检;
DisplayCheck();
// #ifdef TSTEST
DSGuangJi();
// #endif
//重量处理;
//开机置0
if(bZl)
{
//計算开机置0範圍
switch(G_StartZero)
{
case 1:kjzl=G_Full*0.02;
break;
case 2:kjzl=G_Full*0.04;
break;
case 3:kjzl=G_Full*0.2;
break;
case 4:kjzl=G_Full*0.5;
break;
case 5:kjzl=G_Full;
break;
}
if(G_hw<kjzl)
kjzl=G_hw;
else
kjzl=0;
bZl=0;//已经置0
}
}
////////////////////////////////////////////////////////////////////////
// 函数名称:DisplayWeight()t
// 入口参数: 无
// 函数功能:显示重量
////////////////////////////////////////////////////////////////////////
void DisplayWeight()
{
if(IsFull==1)
{
dcode[5]=15;
dcode[4]=28;
dcode[3]=16;
dcode[2]=16;
dcode[1]=20;
dcode[0]=20;
DisplayCode(dcode,6);
}
else
DisplayCode(dis,6);
}
////////////////////////////////////////////////////////////////////////
// 函数名称:DisplayWeight()t
// 入口参数: 无
// 函数功能:显示内码
////////////////////////////////////////////////////////////////////////
void DisplayWeightCode()
{
// unsigned char dp[6]={1,2,3,4,5,6};
/* dcode[0]=display1;
dcode[1]=display2;
dcode[2]=display3;
dcode[3]=display4;
dcode[4]=display5;
dcode[5]=display6; */
DisplayCode(dis,6);
}
void int0_int(void) interrupt 0
{
TR0=0;
T0=1;
T1=0;
PA8155=0;
}
void int1_int(void) interrupt 2
{
TR1=0;
TL1=0x00; //20ms E0
TH1=0xAC; //20ms B1
PA8155=0;
ET1=1;
T0=0;
T1=1;
TR1=1;
scan();
calculate();
TH0=0;
TL0=0;
}
void timer1_int(void) interrupt 3
{
T0=0;
T1=0;
TR0=1;
PA8155=0;
TR1=0;
TL1=0;
TH1=0;
ET1=0;
}
////////////////////////////////////////////////////////////////////////
// 函数名称: void scan(void)
// 入口参数: 无
// 函数功能:健盘中断扫描程序
////////////////////////////////////////////////////////////////////////
void scan(void)
{
char a1=0x70,i ;//,i;
FLAG=0;
// Count++;
for(i=0;i<4;i++)
{
PB8155=a1;
m=PC8155;
if(i==3) i=10;
switch(m & 0x0F)
{
case 0x07: ptr=i+1;beep=1;beep=0;
FLAG=1;
break;
case 0x0B: ptr=i+4;beep=1;beep=0;
FLAG=1;
break;
case 0x0D: ptr=i+7;beep=1;beep=0;
FLAG=1;
break;
case 0x0E: ptr=i+40;beep=1;beep=0;
if(i==1) ptr=0;
FLAG=1;
break;
default: break;
}
if(FLAG==1)
{
KEYUP=0;
return;
}
a1=a1>>1|0x80;
}
// FLAG=0;
ptr=66;
KEYUP=1;
return;
}
////////////////////////////////////////////////////////////////////////
// 函数名称: KeyScan()
// 入口参数: 无
// 函数功能:健盘扫描程序
////////////////////////////////////////////////////////////////////////
unsigned char KeyScan()
{
// unsigned char key=99;
// Count++;
if(KEYUP==0) //键按下
{
keycode=ptr;
KEYDN=1;
return 99;
}
if(KEYUP) //键抬起;
{
if (KEYDN==1) //此键按下
{
beep=1;
KEYDN=0;
beep=0;
return keycode;
}
else //无键按下。
return 66;
}
}
////////////////////////////////////////////////////////////////////////
// 函数名称:calculate(void))
// 入口参数: 无
// 函数功能:得到内码
////////////////////////////////////////////////////////////////////////
void calculate(void)
{
unsigned char t;
timer_all+=TL0;
timer_all+=TH0*256;
timer_number+=1;
if(timer_number>9)
{
timer_number=0;
timer_ok=(timer_ok+timer_all)>>1;
timer_all=0;
fuhao=0;
//计算重量;
if(!bBDing)
{
if(timer_ok>=G_ZeroCode)
{
G_hw=((timer_ok-G_ZeroCode)*100+dtcode/2)/dtcode;
fuhao=0;
G_hw=G_hw*G_FenDu;
}
else
{
fuhao=1;
G_hw=((G_ZeroCode-timer_ok)*100+50*G_FenDu)/dtcode;
G_hw=G_hw*G_FenDu;
}
//滿量程處理;
IsFull=0;
if(G_hw>(G_Full+9*G_FenDu))
{
IsFull=1;
beep=1;
}
else
beep=0;
//开机置0;
G_hw=G_hw-kjzl;
//手动置0
if(bHand)
G_hw=G_hw-handzero;
G_Weight=G_hw; //重量;
if(G_hw<0)
{
fuhao=1;
G_hw=0-G_hw;
}
}
}
//原始值
else if(timer_number==1)
{
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -