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

📄 p_hot.c

📁 aduc812驱动热敏打印程序,在keil c下开发,是一个完整的工程文件.
💻 C
📖 第 1 页 / 共 4 页
字号:
write_ds(0x00);                 //打开写保护
cs=0;
//delay();
//delay1(2);
sclk=0;


write_cm(0xc0);
write_ds(temp1);
cs=0;
//delay1(2);
sclk=0;

write_cm(0xc2);
write_ds(temp2);
cs=0;
//delay1(2);
sclk=0;

         temp1=point1a;
         temp2=point1a/256;

write_cm(0xc4);
write_ds(temp1);
cs=0;
//delay1(2);
sclk=0;

write_cm(0xc6);
write_ds(temp2);
cs=0;
//delay1(2);
sclk=0;

write_cm(0x8e);
write_ds(0x80);                 //关闭写保护,禁止写操作
cs=0;
//delay1(2);
sclk=0;


           min_c=0;                             //清一分钟数据开始位标志位
           max_c=0;
}
////////////////////////////////////////////////////////////////////
void printend()
{
  unsigned char tempj1,tempj2,hour[5],ic1;

tempj1=temp_hour;
hour[0]=tempj1/100;
tempj1=tempj1-hour[0]*100;
hour[1]=tempj1/10;
hour[2]=tempj1-hour[1]*10;

tempj1=temp_minute;
hour[3]=temp_minute/10;
hour[4]=tempj1-hour[3]*10;

        send(ESC);                               //初始化打印机
        send(0x40);
        send(0x0a);
        send(0x0a);

        send(0x1c);                              //让字符旋转270度打印
        send(0x49);
        send(0x00);

        send(ESC);                               //打印16*16点阵汉字
        send(0x38);
        send(0x00);
        send(ESC);                               //设置左限112
        send(0x6c);
        send(0x00);
        send(ESC);                               //设置字间距为4个空白点
        send(WORDSPACE);
        send(0x04);
        send(ESC);                               //设置行间距为10
        send(0x31);
        send(0x0d);

         send(0xb4);                               //打印汉字:打印时间
        send(0xf2);
         send(0xd3);
        send(0xa1);
         send(0xca);
        send(0xb1);
         send(0xbc);
        send(0xe4);

        send(0x0a);

        send(ESC);                               //打印字符集1
        send(0x36);
        send(ESC);                               //设置左限64
        send(0x6c);
        send(0x30);
        send(ESC);                               //设置字间距为4个空白点
        send(WORDSPACE);
        send(0x04);
        send(ESC);                               //设置行间距为10
        send(0x31);
        send(0x0a);

        tempj1=geted_time[4]&0xf0;
        tempj1=tempj1>>4;
        tempj1=tempj1+0x30;

        tempj2=geted_time[4]&0x0f;
        tempj2=tempj2+0x30;

        send(tempj1);
        send(tempj2);
        send(0xc8);

        tempj1=geted_time[3]&0xf0;
        tempj1=tempj1>>4;
        tempj1=tempj1+0x30;

        tempj2=geted_time[3]&0x0f;
        tempj2=tempj2+0x30;

        send(tempj1);
        send(tempj2);
        send(0xc8);

        tempj1=geted_time[2]&0xf0;
        tempj1=tempj1>>4;
        tempj1=tempj1+0x30;

        tempj2=geted_time[2]&0x0f;
        tempj2=tempj2+0x30;

        send(tempj1);
        send(tempj2);
        send(0x20);

        tempj1=geted_time[1]&0xf0;
        tempj1=tempj1>>4;
        tempj1=tempj1+0x30;

        tempj2=geted_time[1]&0x0f;
        tempj2=tempj2+0x30;

        send(tempj1);
        send(tempj2);
        send(0x3a);

        tempj1=geted_time[0]&0xf0;
        tempj1=tempj1>>4;
        tempj1=tempj1+0x30;

        tempj2=geted_time[0]&0x0f;
        tempj2=tempj2+0x30;

        send(tempj1);
        send(tempj2);
        send(0x3a);

        tempj1=geted_time[5]&0xf0;
        tempj1=tempj1>>4;
        tempj1=tempj1+0x30;

        tempj2=geted_time[5]&0x0f;
        tempj2=tempj2+0x30;

        send(tempj1);
        send(tempj2);
        send(0x0d);

        send(0x1c);                              //让字符旋转270度打印
        send(0x49);
        send(0x00);

        send(ESC);                               //打印16*16点阵汉字
        send(0x38);
        send(0x00);
        send(ESC);                               //设置左限112
        send(0x6c);
        send(0x00);
        send(ESC);                               //设置字间距为4个空白点
        send(WORDSPACE);
        send(0x04);
        send(ESC);                               //设置行间距为10
        send(0x31);
        send(0x0d);

         send(0xb4);                             //打印汉字:打印区间长
        send(0xf2);
         send(0xd3);
        send(0xa1);
         send(0xc7);
        send(0xf8);
         send(0xbc);
        send(0xe4);
         send(0xb3);
        send(0xa4);

        send(0x0a);

        send(ESC);                               //打印字符集1
        send(0x36);
        send(ESC);                               //设置左限64
        send(0x6c);
        send(0x30);
        send(ESC);                               //设置字间距为4个空白点
        send(WORDSPACE);
        send(0x04);
        send(ESC);                               //设置行间距为10
        send(0x31);
        send(0x0a);

        for(ic1=0;ic1<5;ic1++)
        {
         hour[ic1]=hour[ic1]+0x30;
        }
        send(hour[0]);
        send(hour[1]);
        send(hour[2]);

        send(0x68);
        send(0x6f);
        send(0x75);
        send(0x72);
        send(0x73);
        send(0x20);

        send(hour[3]);
        send(hour[4]);

        send(0x6d);
        send(0x69);
        send(0x6e);
        send(0x75);
        send(0x74);
        send(0x65);
        send(0x73);

        send(0x0d);
}
///////////////////////////////////////////////////////////////
void intial()                                    //打印曲线头
{       int m1,m2;
        //IE=0x00;                                 //关串行口中断
        send(ESC);                               //初始化打印机
        send(0x40);
        send(0x0a);
        send(0x0a);
        send(0x1c);                              //让字符旋转270度打印
        send(0x49);
        send(0x03);
        //send(ESC);                               //打印16*16点阵汉字
        send(0x1c);
        send(0x26);
        send(ESC);                               //设置左限64
        send(0x6c);
        send(0x40);
        send(ESC);                               //设置字间距为8
        send(0x70);
        send(0x08);
        send(ESC);                               //设置行间距为0
        send(0x31);
        send(0x00);
        if(flag168==1)
      {
        for(m1=0;m1<=7;)                         //打印说明
        {    for(m2=0;m2<=11;)
             {   send(direction1[m1][m2]);
                 m2++;
             }
             send(0x0d);
             m1++;
        }
      }
      else
      {
        for(m1=0;m1<=6;)                         //打印说明
        {    for(m2=0;m2<=11;)
             {   send(direction[m1][m2]);
                 m2++;
             }
             send(0x0d);
             m1++;
        }
       }
   /*    if(fan_wei==0)
      {
        send(ESC);                               //打印字符集1
        send(0x36);
        send(ESC);                               //设置左限0
        send(0x6c);
        send(0x00);
        send(ESC);                               //设置字间距为12个空白点
        send(WORDSPACE);
        send(0x0c);
        send(ESC);                               //设置行间距为0
        send(0x31);
        send(0x00);
        send(0x20);
        /////////////////
        send(0x31);
        send(0x31);
        send(0x0a);
        send(ESC);                               //设置字间距为12个空白点
        send(WORDSPACE);
        send(0x0c);                              //换行
        send(0x20);
        send(0x31);
        send(0x30);
        for(m1=0x39;m1>=0x32;m1--) send(m1);     //打印“9-2”
        send(0x0a);
        send(0x49);
        ////////////////////////////
        send(ESC);                               //设置字间距为12个空白点
        send(WORDSPACE);
        send(0x0c);                              //换行
        for(m1=9;m1>=0;m1--) send(0x30);         //打印9个"0"
        send(0x0a);
      }
        else
      {
        send(ESC);                               //打印字符集1
        send(0x36);
        send(ESC);                               //设置左限0
        send(0x6c);
        send(0x00);
        send(ESC);                               //设置字间距为32个空白点
        send(WORDSPACE);
        send(0x20);
        send(ESC);                               //设置行间距为0
        send(0x31);
        send(0x00);


        for(m1=0x36;m1>=0x31;m1--) send(m1);     //打印“1-6”
        send(0x0a);
        //send(0x49);

        for(m1=5;m1>=0;m1--) send(0x30);         //打印6个"0"
        send(0x0a);
      }
        send(ESC);                               //画一竖线
        send(0x27);
        send(0xc9);
        for(m1=0;m1<201;m1++) send(m1);
        send(0x0d);
        //IE=0x92;                                 //开串行口中断
*/

}
////////////////////////////////////////////////////////
void print8()
{
unsigned int temp_id,temp_y,temp1;
unsigned char temp2;
flag8=1;
j2=0;
last_max=200;
last_min=0;
led_print();
    out2=0x00;                                  //打开继电器
delay3(1);

//send(0x1b);                             //请打印机缓冲区
//send(0x40);

     temp_id=point1;

     if(eight_c==0)
     {
      temp1=temp_id;
      temp_hour=temp1/120;
      temp_minute=(temp1%120)/2;
     }
     else
     {
      temp_hour=8;
      temp_minute=0;
     }

intial();
delay3(120);
     if(eight_c==0)                             //判断参数的数据是否超过八小时,打印第一个数据
     {
        draw(0,temp_id);
        if(flag_end==1)goto end_8;
     }
     else                                        //数据超过八小时
     {   if(temp_id<960)                               //如果数据指针正好在八小时以内
         {     temp_y=49151+temp_id-960;                     //求出八小时前指针的位置
              draw(temp_y,49151);
        if(flag_end==1)goto end_8;
              draw(0,temp_id);
        if(flag_end==1)goto end_8;

          }
          else                                   //如果数据指针正好在八小时以外
          {   temp_y=temp_id-960+1;                           // 求出八小时前指针的位置
              draw(temp_y,temp_id);
        if(flag_end==1)goto end_8;

           }
      }
        printend();
end_8:

//send(0x1b);                             //请打印机缓冲区
//send(0x40);
        flag_end=0;
        key_i=0xff;
        lpaper(7);                                //走纸
        flag8=0;
        delay3(60);

out2=0x80;
//send(0x1b);                             //请打印机缓冲区
//send(0x40);
//lpaper(1);
//flag8=0;
}
////////////////////////////////////////////////////////
void print24()
{
unsigned int temp_id,temp_y,temp1;
flag24=1;
j2=0;
last_max=200;
last_min=0;

led_print();
    out2=0x00;                                  //打开继电器
delay3(1);

//send(0x1b);                             //请打印机缓冲区
//send(0x40);

     temp_id=point1;

     if(day_c==0)
     {
      temp1=temp_id;
      temp_hour=temp1/120;
      temp_minute=(temp1%120)/2;
     }
     else
     {
      temp_hour=24;
      temp_minute=0;
     }



intial();
delay3(120);

     if(day_c==0)                             //判断参数的数据是否超过24小时,打印第一个数据
     {
        draw(0,temp_id);
               if(flag_end==1)goto end_24;
     }
     else                                        //数据超过24小时
     {   if(temp_id<2880)                               //如果数据指针正好在24小时以内
         {     temp_y=49151+temp_id-2880;                     //求出24小时前指针的位置
              draw(temp_y,49151);
                     if(flag_end==1)goto end_24;
              draw(0,temp_id);
                     if(flag_end==1)goto end_24;
          }
          else                                   //如果数据指针正好在八小时以外
          {   temp_y=temp_id-2880+1;                           // 求出八小时前指针的位置
              draw(temp_y,temp_id);
                     if(flag_end==1)goto end_24;

           }
      }
        printend();
end_24:
        flag_end=0;
        key_i=0xff;
        lpaper(7);                                //走纸
        flag24=0;
        delay3(60);

//send(0x1b);                             //请打印机缓冲区
//send(0x40);
//send(0);
out2=0x80;
//send(0x1b);                             //请打印机缓冲区
//send(0x40);
}
////////////////////////////////////////////////////////
void print168()
{
unsigned int temp_id,temp_y,temp1;
flag168=1;
j2=0;
last_max=200;
last_min=0;

led_print();
    out2=0x00;                                  //打开继电器
delay3(1);
//send(0x1b);                             //请打印机缓冲区
//send(0x40);

     temp_id=point1;

     if(week_c==0)
     {
      temp1=temp_id;
      temp_hour=temp1/120;
      temp_minute=(temp1%120)/2;
     }
     else
     {
      temp_hour=168;
      temp_minute=0;
     }

//hot_head();
intial();
delay3(120);

     if(week_c==0)                             //判断参数的数据是否超过八小时,打印第一个数据
     {
        draw(0,temp_id);
        if(flag_end==1)goto end_168;
     }
     else                                        //数据超过八小时
     {   if(temp_id<20160)                               //如果数据指针正好在八小时以内
         {     temp_y=49151+temp_id-20160;                     //求出八小时前指针的位置
              draw(temp_y,49151);
              if(flag_end==1)goto end_168;
              draw(0,temp_id);
              if(flag_end==1)goto end_168;
          }
          else                                   //如果数据指针正好在八小时以外
          {   temp_y=temp_id-20160+1;                           // 求出八小时前指针的位置
              draw(temp_y,temp_id);
              if(flag_end==1)goto end_168;

           }
      }

        printend();
end_168:
        flag_end=0;
        key_i=0xff;
        lpaper(7);                                //走纸
        flag168=0;
        delay3(60);

zhenprint=0;
out2=0x80;                                      //关继电器
//send(0x1b);                             //请打印机缓冲区
//csend(0x40);
//flag168=0;

}
//////////////////////////////////////////////////////////////
void lian(unsigned char data_1,unsigned char data_2)
{
unsigned char tempmax,tempmin,ss1;
unsigned char tempi1,i2;
unsigned char print_data;
if(data_1>=data_2){tempmax=data_1;tempmin=data_2;}
else{tempmax=data_2;tempmin=data_1;}

if(tempmin>last_max){tempmin=last_max;}
if(tempmax<last_min){tempmax=last_min;}


last_max=tempmax;
last_min=tempmin;

      if(fan_wei==0)
       {
        if(tempmax>200){tempmax=200;}
        if(tempmin>200){tempmin=200;}
       }

      if(fan_wei==1)
       {
        if(tempmax<120){tempmax=120;}
        tempmax=tempmax*2-240;
        if(tempmin<120){tempmin=120;}
        tempmin=tempmin*2-240;
       }

        send(ESC);                               //画曲线
        send(0x27);

    print_data=tempmax-tempmin;                       //计算最大值与最小值之间的差值
        if(j1==0)                                //每隔10点画横坐标,打印新x+16个点
              {     print_data=print_data+16;                      //把两点之间的阶跃空白补上
                    send(print_data);                     //打印x+16个点
                    for(tempi1=tempmin;tempi1<=tempmax;)
                    {    send(tempi1);
                         tempi1++;
                    }
                    for(tempi1=0;tempi1<199;)             //发送坐标轴点
                    {   send(tempi1);
                        tempi1=tempi1+20;
                    }
                    send(0xcc);
                    send(0xcb);
                    send(0xca);
                    send(0xc9);
                    send(0xc8);                  //横坐标轴点
                    send(0x0d);                  //回车换行

                    if(j3==0){flag1=0;}

               }
           else
               {
               if(flag1==0)
                  {  switch(j2)
                    {
                    case 5:                     //在横坐标轴上打印坐标5共5行
                    ss++;
                    if(ss>5){ss=0;flag1=1;}
                    break;

                    case 10:                    //在横坐标轴上打印坐标10共9行
                    ss++;

⌨️ 快捷键说明

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