📄 print_new.c
字号:
#include <absacc.h>
#include <reg52.h>
#define uchar unsigned char
#define INPUT0 XBYTE[0X8200]
#define INPUT1 XBYTE[0X8300]
extern void Clr_WDog(void);
void printhz(uchar code *d,uchar num) ; //打印代码空间的字符串
void printover(uchar NUM_OVERTIME,uchar *ptr);//打印一条超时驾驶记录
bit read_print(void) ; //读打印机状态
void init_print(void);
void print(uchar xdata *d,uchar num);
void space(uchar num) ;
void printrecord(void);
uchar code huiche[1]={0X0D};//回车
uchar code carNo[9]={0xb3,0xb5,0xc5,0xc6,0xba,0xc5,0xc2,0xeb,0x3a}; /*----车牌号码:----*/
uchar code carType[9]={0xb3,0xb5,0xc5,0xc6,0xb7,0xd6,0xc0,0xe0,0x3a}; /*----车牌分类:----*/
uchar code driverNo[11]={0xbc,0xdd,0xca,0xbb,0xd4,0xb1,0xb4,0xfa,0xc2,0xeb,0x3a}; /*----驾驶员代码:----*/
uchar code driverID[11]={0xbc,0xdd,0xca,0xbb,0xd6,0xa4,0xba,0xc5,0xc2,0xeb,0x3a}; /*----驾驶证号码:----*/
uchar code time[9]={0xb4,0xf2,0xd3,0xa1,0xca,0xb1,0xbc,0xe4,0x3a}; /*----打印时间:----*/
uchar code speed1[21]={0xcd,0xa3,0xb3,0xb5,0xc7,0xb0,0x31,0x35,
0xb7,0xd6,0xd6,0xd3,0xc6,0xbd,0xbe,0xf9,0xcb,0xd9,0xb6,0xc8,0x3a}; /*----停车前15分钟平均速度:----*/
uchar code stp_tm[9]={0xcd,0xa3,0xb3,0xb5,0xca,0xb1,0xbc,0xe4,0x3a}; /*----停车时间:----*/
uchar code unit[4]={0x6b,0x6d,0x2f,0x68}; /*----km/h----*/
uchar code maohao[3]={0x31,0x3a,0x0a}; // 1 :
uchar code record[15]={0xc6,0xa3,0xc0,0xcd,0xbc,0xdd,0xca,0xbb,
0xbc,0xc7,0xc2,0xbc,0x3a,0xce,0xde}; /*----疲劳驾驶记录:无----*/
uchar code start[9]={0xbf,0xaa,0xca,0xbc,0xca,0xb1,0xbc,0xe4,0x3a}; /*----开始时间:----*/
uchar code end[9]={0xbd,0xe1,0xca,0xf8,0xca,0xb1,0xbc,0xe4,0x3a}; /*----结束时间:----*/
extern unsigned char xdata new_speed_15min[15][21];// 停车前15分钟速度
extern unsigned char xdata cur_id[25];//驾驶员资料
extern unsigned char xdata overtime_rec[21][28];
extern unsigned char xdata stop_3day[11]; //存放停车当天及前两天的年、月、日
extern unsigned char xdata index_threeday;// _at_ 0x801F;
extern unsigned char xdata cur_id[7];//7个字节的当前驾驶员代码
extern uchar xdata YEAR; //主程序里定义的放当前时间的地址
extern unsigned char xdata vin[41];
extern unsigned char xdata num_ovrec;
void init_print(void) // 打印机初始化
{
Clr_WDog(); //清w-dog
//stxd=1;
T2CON=0X34;
RCAP2H=0XFF; //18.432MHz下9600波特
RCAP2L=0XC4;
SCON=0XC0;
}
bit read_print() // 读打印机状态,0 打印机准备好,1 打印机不在线或满忙
{
Clr_WDog(); //清w-dog
if ((INPUT1&0x04)==0) return(0);
else return(1);
}
void printhz(uchar code *d,uchar num) // 输出代码空间字符串到打印机
{
uchar xdata i;
for(i=0;i<num;i++)
{
Clr_WDog(); //清w-dog
ACC=d[i];
TB8=(!P);
SBUF=d[i];
while(TI==0)
{
Clr_WDog(); //清w-dog
}
TI=0;
while(read_print());
}
}
void print(uchar xdata *d,uchar num) // 输出数据空间字符串到打印机
{
uchar xdata i;
for(i=0;i<num;i++)
{
Clr_WDog(); //清w-dog
ACC=d[i];
TB8=(!P);
SBUF=d[i];
while(TI==0)
{
Clr_WDog(); //清w-dog
}
TI=0;
while(read_print());
}
}
void space(uchar num) //输出num个空格
{
uchar xdata sp[1]=0x20,i;
for(i=0;i<num;i++)
{
Clr_WDog(); //清w-dog
print(sp,1);
}
}
void printrecord(void) // main()//响应主菜单 打印 命令时调用的函数。
{
unsigned char xdata i,j,k,l,m,temp;//t1,t2,t3 在day_three[3][3]中前天、昨天、今天
unsigned char xdata number_overtime;
unsigned char xdata a[3],b[3],c[5],d[5],e[15];
uchar * ptr_time;
uchar xdata No[12]; //车牌号码
uchar xdata Type[12];//车辆类型
uchar xdata num[25]; //驾驶员资料
uchar xdata curtime[14]={0x32,0x30};//yyyy mm dd hh mm ss
uchar xdata stoptime[6];//hh mm ss
uchar xdata speed3[3];//临时变量,保存速度值的 百位、十位、个位
uchar xdata stopdate[10];//存放停车的年月日时分
Clr_WDog();
for(i=0;i<9;i++)
{
Clr_WDog(); //清w-dog
No[i]=vin[17+i];
}
for(i=0;i<8;i++)
{
Clr_WDog(); //清w-dog
Type[i]=vin[29+i];
}
for(i=0;i<7;i++)
{
Clr_WDog(); //清w-dog
num[i]=cur_id[i]+0x30;//驾驶员代码
}
for(i=7;i<25;i++)
{
Clr_WDog(); //清w-dog
num[i]=cur_id[i]; //驾驶证号码
}
ptr_time=&YEAR;
for(i=0;i<6;i++) //读当前系统时间,ASCII
{
Clr_WDog(); //清w-dog
curtime[3+2*i]=((*(ptr_time+i)%10)+0x30);
curtime[2+2*i]=((*(ptr_time+i)/10)+0x30);
}
init_print();
//车牌号码
printhz(carNo,9);
space(2);
print(No,2);
print(No+2,6);
printhz(huiche,1); //回车
Clr_WDog();
//车牌分类
printhz(carType,9);
space(2);
print(Type,8);
printhz(huiche,1); //回车
Clr_WDog();
//驾驶员代码
printhz(driverNo,11);
space(2);
print(num,7);//驾驶员代码
printhz(huiche,1); //回车
Clr_WDog();
//驾驶证号码
printhz(driverID,11);
printhz(huiche,1); //回车
space(2);
print(num+7,18);//打印驾驶证号码
printhz(huiche,1); //回车
Clr_WDog();
//打印时间
printhz(time,9);
printhz(huiche,1); //回车
space(2);
print(curtime+2,2);
printhz(unit+2,1); //打印“/”,
print(curtime+4,2);
printhz(unit+2,1);
print(curtime+6,2);
space(1);
print(curtime+8,2);
printhz(maohao+1,1);
print(curtime+10,2);
printhz(maohao+1,1);
print(curtime+12,2);
printhz(huiche,1); //回车
Clr_WDog();
//打印停车时间
if(stop_3day[6]!=0XFF)
{
for(i=0;i<5;i++)
{
Clr_WDog(); //清w-dog
stopdate[2*i]=(stop_3day[6+i]>>4)+0x30;
stopdate[2*i+1]=stop_3day[6+i]%16+0x30;
}
printhz(stp_tm,9);
printhz(huiche,1); //回车
space(2);
print(stopdate,2); //年
printhz(unit+2,1); //打印“/”,
print(stopdate+2,2); //月
printhz(unit+2,1); //打印“/”,
print(stopdate+4,2); //日
space(1);
print(stopdate+6,2); //时
printhz(maohao+1,1); //打印“:”
print(stopdate+8,2); //分
printhz(huiche,1); //回车
}
//打印停车前15分钟平均速度
printhz(speed1,21);
printhz(huiche,1); //回车
//将当前驾驶证号码和15分钟速度数组比较
temp=0;
for(i=0;i<15;i++)
{
Clr_WDog(); //清w-dog
if(new_speed_15min[i][3]!=0XFF)
{
e[temp]=i; //将该下标存入数组e[]
temp++;
}
}
if(!temp) //如果没有速度记录
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -