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

📄 p_hot.c

📁 aduc812驱动热敏打印程序,在keil c下开发,是一个完整的工程文件.
💻 C
📖 第 1 页 / 共 4 页
字号:
//////////////////////////////////////////////////////////////////////////////////
///////////////for aduc812 and 针打///////////////////////////////////////////////
///正式版本
//////////////////////////////////////////////////////////////////////////////////
#include <aduc812.h>
#include<absacc.h>
#define unchar   unsigned char

#define page       XBYTE[0x40e0]
#define control    XBYTE[0x4002]
#define dir        XBYTE[0x4006]
#define out        XBYTE[0x4004]
#define in         XBYTE[0x4000]

#define dir1       XBYTE[0x4007]
#define out1       XBYTE[0x4005]
#define in1       XBYTE[0x4001]

#define dir2       XBYTE[0x4014]
#define out2       XBYTE[0x4012]

#define zhenprint   XBYTE[0x5004]
#define lcd1       XBYTE[0x5002]

#define ESC        0x1b
#define PRTCHINESE 0x38
#define CHANGELINE 0x0a
#define LINESPACE  0x31
#define WORDSPACE  0x20
#define NEXTSTART  0x0c

char code direction1[8][12]={
 {0xa1,0xa1,0xc3,0xbf,0xca,0xae,0xb5,0xa5,0xa1,0xa1,0xb6,0xab},
 {0xa1,0xa1,0xb8,0xf1,0xb7,0xd6,0xce,0xbb,0xa1,0xa1,0xc8,0xd5},
 {0xcd,0xbc,0xb4,0xfa,0xd6,0xd3,0xca,0xc7,0xa1,0xa1,0xb5,0xe7},
 {0xd6,0xd0,0xb1,0xed,0xa3,0xac,0xa6,0xa1,0xa1,0xa1,0xc6,0xf8},
 {0xba,0xe1,0xd2,0xbb,0xd7,0xdd,0xa1,0xa3,0xa1,0xa1,0xd1,0xd0},
 {0xd7,0xf8,0xb0,0xd9,0xd7,0xf8,0xa1,0xa1,0xa1,0xa1,0xbe,0xbf},
 {0xb1,0xea,0xcb,0xc4,0xb1,0xea,0xa1,0xa1,0xa1,0xa1,0xcb,0xf9},
 {0xa1,0xa1,0xa1,0xa1,0xa1,0xa1,0xa1,0xa1,0xa1,0xa1,0xa1,0xa1}
};

unchar code ll5[5][7]={                                         //字模5
 {0xd0,0xd1,0xd2,0xd5,0xc8,0xc8,0xc8},
 {0xd0,0xd2,0xd6,0xc8,0xc8,0xc8,0xc8},
 {0xd0,0xd2,0xd6,0xc8,0xc8,0xc8,0xc8},
 {0xd0,0xd2,0xd6,0xc8,0xc8,0xc8,0xc8},
 {0xd0,0xd3,0xd4,0xd5,0xc8,0xc8,0xc8}
};

unchar code ll1[4][7]={
 {0xd1,0xd6,0xc8,0xc8,0xc8,0xc8,0xc8},
 {0xd0,0xd1,0xd2,0xd3,0xd4,0xd5,0xd6},
 {0xd6,0xc8,0xc8,0xc8,0xc8,0xc8,0xc8},
 {0xc8,0xc8,0xc8,0xc8,0xc8,0xc8,0xc8}
 };

 unchar code ll2[5][7]={
 {0xd1,0xd5,0xd6,0xc8,0xc8,0xc8,0xc8},
 {0xd0,0xd4,0xd6,0xc8,0xc8,0xc8,0xc8},
 {0xd0,0xd3,0xd6,0xc8,0xc8,0xc8,0xc8},
 {0xd0,0xd3,0xd6,0xc8,0xc8,0xc8,0xc8},
 {0xd1,0xd2,0xd6,0xc8,0xc8,0xc8,0xc8}
};

 unchar code ll0[5][7]={
 {0xd1,0xd2,0xd3,0xd4,0xd5,0xc8,0xc8},
 {0xd0,0xd5,0xd6,0xc8,0xc8,0xc8,0xc8},
 {0xd0,0xd3,0xd6,0xc8,0xc8,0xc8,0xc8},
 {0xd0,0xd1,0xd6,0xc8,0xc8,0xc8,0xc8},
 {0xd1,0xd2,0xd3,0xd4,0xd5,0xc8,0xc8}
};

unchar code ll3[5][7]={
 {0xd0,0xd5,0xc8,0xc8,0xc8,0xc8,0xc8},
 {0xd0,0xd6,0xc8,0xc8,0xc8,0xc8,0xc8},
 {0xd0,0xd3,0xd6,0xc8,0xc8,0xc8,0xc8},
 {0xd0,0xd2,0xd3,0xd6,0xc8,0xc8,0xc8},
 {0xd0,0xd1,0xd4,0xd5,0xc8,0xc8,0xc8}
};

unchar code ll4[5][7]={
 {0xd3,0xd4,0xc8,0xc8,0xc8,0xc8,0xc8},
 {0xd2,0xd4,0xc8,0xc8,0xc8,0xc8,0xc8},
 {0xd1,0xd4,0xc8,0xc8,0xc8,0xc8,0xc8},
 {0xd0,0xd1,0xd2,0xd3,0xd4,0xd5,0xd6},
 {0xd4,0xc8,0xc8,0xc8,0xc8,0xc8,0xc8}
};

unchar code ll6[5][7]={
 {0xd2,0xd3,0xd4,0xd5,0xc8,0xc8,0xc8},
 {0xd1,0xd3,0xd6,0xc8,0xc8,0xc8,0xc8},
 {0xd0,0xd3,0xd6,0xc8,0xc8,0xc8,0xc8},
 {0xd0,0xd3,0xd6,0xc8,0xc8,0xc8,0xc8},
 {0xd0,0xd4,0xd5,0xc8,0xc8,0xc8,0xc8}
};

unchar code ll7[5][7]={
 {0xd0,0xc8,0xc8,0xc8,0xc8,0xc8,0xc8},
 {0xd0,0xd4,0xd5,0xd6,0xc8,0xc8,0xc8},
 {0xd0,0xd3,0xc8,0xc8,0xc8,0xc8,0xc8},
 {0xd0,0xd2,0xc8,0xc8,0xc8,0xc8,0xc8},
 {0xd0,0xd1,0xc8,0xc8,0xc8,0xc8,0xc8}
};




unsigned char geted_time[6];
unsigned int max_temp,min_temp;
unsigned int t_50ms;
unsigned char flash_read;
unsigned char max,min;
unsigned char read_s;
unsigned int count1,point1,point1a;
unsigned int ad_data;
unsigned char xx2;      //读出的时间值
unsigned char temp_hex;
unsigned char v1,vv1,v7;
unsigned char xtime;
unsigned char temp_hour,temp_minute;
unsigned char key_i,j1,j2,j3;
unsigned char last_max,last_min;
unsigned char ss;
unsigned char fan_wei;
unsigned int sum;
unsigned char sum_i;
unsigned char write_over_byte;

bit write_over_flag;

#define fp ((unsigned char volatile xdata *)0x8000)

bit flag1=0;
bit max_c=0;
bit min_c=0;
bit eight_c=0;
bit day_c=0;
bit week_c=0;
bit flag168=0;
bit flag24=0;
bit flag8=0;
bit flag_led=0;
bit flag_hot=0;
bit minute_c=0;
bit flag_ad;
bit flag2;
bit flagx;
bit flag_end=0;

sbit cs=P3^3;                           //实时时钟的片选
sbit io=P3^4;                           //实时时钟的数据端口
sbit sclk=P3^5;                         //实时时钟的时钟输入

unsigned char bdata temp_pa;
sbit pa2=temp_pa^2;
sbit pa3=temp_pa^3;
sbit pa4=temp_pa^4;
sbit pa5=temp_pa^5;
sbit pa6=temp_pa^6;
sbit pa7=temp_pa^7;

void draw(unsigned int start_id,unsigned int end_id);
void delay1(unsigned int jx);
void led_print();
void write_over_to_ds(void);
void read_over_from_ds(void);
//////////////////////////////////////////////////////////////////
 void delay1(unsigned int jx)
 {
  unsigned int i2;
  for(i2=0;i2<=jx;i2++){}
 }

 void delay5(void)
 {
  float i;
  for(i=0;i<=0x60;i++){}
 }

void delay2(void)
 {
  float i;
  for(i=0;i<=0x0220;i++){}
 }

 void delay3(unsigned char loop_x)
 {
  unsigned char ix;
  for(ix=0;ix<=loop_x;ix++)
  {
   delay2();
  }
 }
//////////////////////////////////////////////////bcd与十进制码的相互转化
void bcd(unsigned char temp_v6)
{
unsigned char n1,n2,temp1;
temp1=temp_v6;
v7=0;
n1=temp1/10;
n2=temp1-n1*10;
n1=n1<<4;
v7=v7|n2;
v7=v7|n1;
}


void bcd_bcd(void)
{
unsigned char bcd1,bcd2;
bcd1=xx2&0xf0;
bcd1=bcd1>>4;
bcd2=xx2&0x0f;
temp_hex=bcd1*10+bcd2;
}

/*///////////////////////////////////////////////////////液晶lcd驱动程序
 void dataouto(unsigned char gg)
 {
 pa6=0;
 pa7=0;
out=temp_pa;
delay1(10);
 lcd1=gg;
 delay1(10);
 pa6=1;
 pa7=1;
out=temp_pa;
 }

 void dataoutd(unsigned char gg)
 {
 pa6=1;
 pa7=0;
out=temp_pa;
delay1(10);
 lcd1=gg;
 delay1(10);
 pa6=1;
 pa7=1;
out=temp_pa;
 }

 void WAIT(void)
 {
 unsigned char qq;
 pa7=1;
 pa6=0;
out=temp_pa;
 delay1(10);
 qq=lcd1;
 qw:
 if(qq&0x80)goto qw;
 pa6=1;
 pa7=1;
out=temp_pa;
  }

void lcd_ini(void)
{
dataouto(0x30);
delay1(2500);
dataouto(0x30);
delay1(500);
dataouto(0x30);
delay1(500);
dataouto(0x30);
delay1(500);
dataouto(0x30);
delay1(500);

dataouto(0x38);
delay1(200);

dataouto(0x0f);
delay1(200);

dataouto(0x01);
delay1(200);

dataouto(0x02);
delay1(200);

dataouto(0x06);
delay1(200);
}

lcd_data(unsigned char start1,unsigned char ldata)
{
unsigned char temp2,temp3,temp4;
temp4=ldata/100;
ldata=ldata-temp4*100;
temp2=ldata/10;
temp3=ldata-temp2*10;

temp4=temp4+0x30;
temp3=temp3+0x30;
temp2=temp2+0x30;

if(start1<16){start1=start1+0x80;}
 else{start1=start1+0xc0-16;}

dataouto(start1);
WAIT();

if(temp4==0x30)
{
  if(temp2==0x30)
  {
  dataoutd(0x20);
  WAIT();
  dataoutd(0x20);
  WAIT();
  dataoutd(temp3);
  WAIT();
  }
  else
  {
  dataoutd(0x20);
  WAIT();
  dataoutd(temp2);
  WAIT();
  dataoutd(temp3);
  WAIT();
  }
}
else
{
dataoutd(temp4);
 WAIT();
 dataoutd(temp2);
 WAIT();
 dataoutd(temp3);
 WAIT();
 }

}

 void lcd_char(unsigned char start,char data_code[20])
 {
 static unsigned char temp1,i;
 i=0;

if(start<16){start=start+0x80;}
 else{start=start+0xc0-16;}

dataouto(start);
WAIT();

 loop1:
 temp1=data_code[i];
 if(temp1==0)goto loop_end;
 dataoutd(temp1);
 WAIT();
 i++;
 goto loop1;

loop_end:
i=0;
 }
*/
///////////////////////////////////////////////////////max7219 的驱动
void led_7219(unsigned char digx,unsigned char segx)
{  unsigned char i;
   unsigned int song,flag_y;
   digx=digx&0x0f;
   song=digx;
   song=song<<8;
   song=song|segx;

   pa4=0;
   out=temp_pa;

      for(i=0;i<=15;i++)
      {
      pa5=0;
      out=temp_pa;
      flag_y=song&0x8000;
      song=song<<1;
      if(flag_y){pa3=1;out=temp_pa;}
      else{pa3=0;out=temp_pa;}

      pa5=1;
      out=temp_pa;

       }

      pa4=1;
      out=temp_pa;
      pa5=0;
      out=temp_pa;
}
////////////////////////////////////////////////////////电流显示子程序
void led_led(unsigned int temp_xx)
{
unsigned int temp1;
unsigned char temp_n1,temp_n2,temp_n3,temp_n4,temp_n5;
temp1=temp_xx;
temp_n5=temp1/1000;                      //把数据x拆开
temp1=temp1-temp_n5*1000;
temp_n4=temp1/100;
temp1=temp1-temp_n4*100;
temp_n3=temp1/10;
temp_n2=temp1-temp_n3*10;

if(temp_n5==0)
{
 if(temp_n4==0)
 {
   led_7219(3,led_bcd[10]);
   led_7219(4,led_bcd[10]);
 }
 else
 {
   led_7219(3,led_bcd[temp_n4]);
   led_7219(4,led_bcd[10]);
 }
}
else
{
led_7219(3,led_bcd[temp_n4]);
led_7219(4,led_bcd[temp_n5]);
}

temp_n1=led_bcd[temp_n3]|0x80;
led_7219(2,temp_n1);
led_7219(1,led_bcd[temp_n2]);

led_7219(5,led_bcd[10]);
led_7219(6,0x9f);                       //显示 A


}
////////////////////////////////////////////////////////ds1302实时时钟的子程序
void write_cm(unsigned char xx1)
{  unsigned char y,i;
EA=0;
    sclk=0;
    //y=0;
    cs=1;
    //y=0;

      for(i=0;i<=7;i++)
      {
      sclk=0;
      y=xx1&0x01;
      xx1=xx1>>1;
      if(y==0x01){io=1;}
      else{io=0;}
      //  y=0;
      sclk=1;
      //y=0;
      }
EA=1;
}


void write_ds(unsigned char xx4)
{  unsigned char y,i;
EA=0;
       for(i=0;i<=7;i++)
      {
      sclk=0;
      y=xx4&0x01;
      xx4=xx4>>1;
      if(y==0x01){io=1;}
      else{io=0;}
      //y=0;
      sclk=1;
      //y=0;
      }
EA=1;
}

 void read_ds(void)
 {
 unsigned char i,y;
    bit tt;
EA=0;
       for(i=0;i<=7;i++)
       {

       sclk=0;
       //tt=0;
       tt=io;
       xx2=xx2>>1;
       if(tt==1)xx2=xx2|0x80;
       sclk=1;
      //y=0;
      }
EA=1;
  }

//////////////////////////////////////////////////////psd中flash的读,写,擦除
void fpprog(unsigned char num,unsigned int addrs)
{
unsigned char check;
EA=0;
        page=addrs/16/1024;


check=num;
                fp[0x555]=0xaa;
                fp[0xaaa]=0x55;
	        fp[0x555]=0xa0;
                fp[addrs%16384]=num;

		       while (check!=fp[addrs%16384]);
EA=1;
}

void fperase(unsigned  char sector)
{
EA=0;
page=sector;
	fp[0x555]=0xaa;
	fp[0xaaa]=0x55;
	fp[0x555]=0x80;
	fp[0x555]=0xaa;
	fp[0xaaa]=0x55;
	fp[0xaaa]=0x30;
	while ((fp[0xaaa]&0x80)!=0x80);
EA=1;
}

void fpread(unsigned int addrs)
{
EA=0;
page=addrs/16384;
flash_read=fp[addrs%16384];
//return(fp[addrs%16384]);
EA=1;
}


////////////////////////////////////////////////////////////////////////////
void timer0(void) interrupt 1                         //50ms延时子程序
{

  TL0=0xb0;
  TH0=0x3c;
  if(t_50ms>=1200){minute_c=1;t_50ms=0;}else t_50ms++;
}

/////////////////////////////////////////////////////////热敏打印机的送数子程序
void waitt(void)
{
unsigned char BUSY;
 qq1:
 BUSY=in;
 if(BUSY&0x02)goto qq1;
}

void send(unsigned char temp_x)
{
 waitt();
zhenprint=temp_x;
//delay1(1);
}
/////////////////////////////////////////////////////////
void lpaper(unchar jjx)                                    //走纸
{    unchar ib;
     send(ESC);
     send(0x40);
     for(ib=0;ib<jjx;ib++)send(0x0a);
     send(0x0a);


}

//////////////////////////////////////////////////
void process()                                   //处理正常的电流值
{

           unsigned int dd;
           float w;
           unsigned char temp1,temp2;

        w=max_temp*2.5/4095.0;                  //满度值为2.5V时A/D转换器的输入电压
        if(read_s==1){w=w*48.0;}
        else{w=w*read_s*32.0;}                             //0-2.5V对应0-250个点
        w=w*2.0;

        dd=w;                                   //buffer的值不能大于255!!!
        if(dd>240){dd=240;}
        if(dd<20){dd=20;}
        temp1=dd;
        min=240-temp1;


        w=min_temp*2.5/4095.0;
        if(read_s==1){w=w*48.0;}
        else{w=w*read_s*32.0;}
        w=w*2.0;

        dd=w;                                   //buffer的值不能大于255!!!
        if(dd>240){dd=240;}
        if(dd<20){dd=20;}
        temp1=dd;
        max=240-temp1;

 if(count1==16384){fperase(1);}
 if(count1==32768){fperase(2);}
 if(count1==49152){count1=0;}
 if(count1==0){fperase(0);}
         fpprog(max,count1);
         count1++;

 if(count1==16384){fperase(1);}
 if(count1==32768){fperase(2);}
 if(count1==49152){count1=0;}
 if(count1==0){fperase(0);}
         fpprog(min,count1);
          count1++;

           point1=count1;                        //把当前数据的位置付给打印指针
           point1a=~count1;

           temp1=point1;
           temp2=point1/256;

//lcd_data(16,temp1);
//lcd_data(20,temp2);

write_cm(0x8e);

⌨️ 快捷键说明

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