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

📄 p_hot.c

📁 aduc812驱动热敏打印程序,在keil c下开发,是一个完整的工程文件.
💻 C
📖 第 1 页 / 共 4 页
字号:
if(v1==1){op1=geted_time[5];}
if(v1==2){op1=geted_time[2];}
np1=op1&0x0f;
np2=op1&0xf0;
np2=np2>>4;

led_7219(1,led_bcd[np1]);
led_7219(2,led_bcd[np2]);

if(v1==1){op1=geted_time[0];}
if(v1==2){op1=geted_time[3];}
np1=op1&0x0f;
np2=op1&0xf0;
np2=np2>>4;


if(flagx==1){led_7219(3,led_bcd[np1]);}
else{temp1=led_bcd[np1]|0x80;led_7219(3,temp1);}
led_7219(4,led_bcd[np2]);


if(v1==1){op1=geted_time[1];}
if(v1==2){op1=geted_time[4];}
np1=op1&0x0f;
np2=op1&0xf0;
np2=np2>>4;


if(flagx==1){led_7219(5,led_bcd[np1]);}
else{temp1=led_bcd[np1]|0x80;led_7219(5,temp1);}
led_7219(6,led_bcd[np2]);
}
//////////////////////////////////////////////
void led_timed(void)
{
unsigned char op1,np1,np2,temp1;

get_time();

if(vv1==1){np1=10;np2=10;}
else
{
if(v1==1){op1=geted_time[5];}
if(v1==2){op1=geted_time[2];}
np1=op1&0x0f;
np2=op1&0xf0;
np2=np2>>4;
}

led_7219(1,led_bcd[np1]);
led_7219(2,led_bcd[np2]);


if(vv1==2){np1=10;np2=10;}
else
{
if(v1==1){op1=geted_time[0];}
if(v1==2){op1=geted_time[3];}
np1=op1&0x0f;
np2=op1&0xf0;
np2=np2>>4;
}

if(flagx==1){led_7219(3,led_bcd[np1]);}
else{temp1=led_bcd[np1]|0x80;led_7219(3,temp1);}
led_7219(4,led_bcd[np2]);


if(vv1==3){np1=10;np2=10;}
else
{
if(v1==1){op1=geted_time[1];}
if(v1==2){op1=geted_time[4];}
np1=op1&0x0f;
np2=op1&0xf0;
np2=np2>>4;
}

if(flagx==1){led_7219(5,led_bcd[np1]);}
else{temp1=led_bcd[np1]|0x80;led_7219(5,temp1);}
led_7219(6,led_bcd[np2]);

}


////////////////////////////////////////////////////////
void main(void)
{
unsigned char tempi1,tempi2,jjx,temp_v5;
float wx;
unsigned int temp_led;
dir=0xfc;
dir1=0x00;
dir2=0x80;
out2=0x80;

//////////////////
/*lcd_ini();

dataouto(0x01);
delay1(100);
 WAIT();
lcd_char(0,"***Orient Sun***");
//lcd_char(16,"*Welcome To You*");
//lcd_data(16,0xaa);
//delay1(60000);
*/
///////////////////
write_cm(0x8e);                 //实时时钟的初始化
write_ds(0x00);                 //打开写保护
cs=0;
//delay();
//delay1(2);
sclk=0;

write_cm(0x80);
write_ds(0x00);                 //启动时钟
cs=0;
//delay1(2);
sclk=0;

write_cm(0x90);
write_ds(0xab);                 //充电设置
cs=0;
//delay1(2);
sclk=0;

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

        TCON=0x01;                               //外部中断的边沿触发
        SCON=0x50;                               //串行口工作方式1
        PCON=0x00;                               //SMOD=0
        //TMOD=0x20;                             //定时器1工作为方式2,8位定时器

        TMOD=0x21;                               //定时器0工作为方式1,16位定时器;定时器1工作为方式2,8位定时器
        TL0=0xaf;
        TH0=0x3c;                                //使定时器0 每50ms溢出一次
        TR0=1;

        TL1=0xf3;                                //波特率为2400
        TH1=0xf3;
        IE=0x00;                                 //暂时不开中断,等初始化完毕再开中断
        TR1=1;                                   //启动定时器1

ADCCON1=0x62;                                   //a/d转换初始化
ADCCON2=0;
RCAP2L=0x00;
RCAP2H=0x60;
TL2=0x00;
TH2=0x60;
//EA=1;
EADC=1;
TR2=1;

/*pa2=0;                                  //复位热敏打印机
out=temp_pa;
delay1(1000);
pa2=1;
out=temp_pa;
*/
///////////////////max7219初始化
pa4=1;
pa5=0;
out=temp_pa;

led_7219(0x09,0x00);                 //不采用BCD码显示
led_7219(0x0a,0x02);                 //选择亮度
led_7219(0x0b,0x05);                 //扫描六个数码管
led_7219(0x0c,0x01);                 //0 关闭所有显示器 1 允许显示
led_7219(0x0f,0x00);                 //0 led处于正常工作状态 1 允许显示


intial();
while(1){;}

/////////////////

IE=0xc2;
////////////////                //取指针
write_cm(0xc1);
read_ds();
cs=0;
//delay1(2);
sclk=0;
tempi1=xx2;

write_cm(0xc3);
read_ds();
cs=0;
//delay1(2);
sclk=0;
tempi2=xx2;
point1=tempi2*256+tempi1;

//lcd_data(24,tempi1);


write_cm(0xc5);
read_ds();
cs=0;
//delay1(2);
sclk=0;
tempi1=xx2;


write_cm(0xc7);
read_ds();
cs=0;
//delay1(2);
sclk=0;
tempi2=xx2;
point1a=tempi2*256+tempi1;

if(point1==~point1a)
{
count1=point1;
fpread(count1);
if(flash_read!=0xff){count1=count1+1;}
}
else{count1=0;point1=0;}

//lcd_data(28,tempi1);

write_cm(0xc9);                 //取变比
read_ds();
cs=0;
//delay1(2);
sclk=0;
tempi1=xx2;

write_cm(0xcb);
read_ds();
cs=0;
//delay1(2);
sclk=0;
tempi2=xx2;

if(tempi1==~tempi2){read_s=tempi1;}
else{read_s=1;}
//////////////
write_cm(0xcd);                 //取纵坐标范围
read_ds();
cs=0;
//delay1(2);
sclk=0;
tempi1=xx2;

write_cm(0xcf);
read_ds();
cs=0;
//delay1(2);
sclk=0;
tempi2=xx2;

if(tempi1==~tempi2){fan_wei=tempi1;}
else{fan_wei=0;}
//--------------------------------------
read_over_from_ds();
if((write_over_byte&0x01)==0)eight_c=0;else eight_c=1;
if((write_over_byte&0x02)==0)day_c=0;else day_c=1;
if((write_over_byte&0x04)==0)week_c=0;else week_c=1;
/////////////////////////////////              //主循环
qqq:

if(minute_c==1)
{
 process();                             //调用数据处理程序
 minute_c=0;                            //清分钟结束标志位
}

if(count1>=960&&eight_c==0){eight_c=1;write_over_flag=1;}
if(count1>=2880&&day_c==0){day_c=1;write_over_flag=1;}
if(count1>=20160&&week_c==0){week_c=1;write_over_flag=1;}


if(write_over_flag==1){write_over_flag=0;write_over_byte=0;
if(eight_c==1)write_over_byte|=0x01;
if(day_c==1)write_over_byte|=0x02;
if(week_c==1)write_over_byte|=0x04;
write_over_to_ds();
}



key_i=in1;

if(key_i==0xef){get_time();print8();}
if(key_i==0xdf){get_time();print24();}
if(key_i==0xbf){get_time();print168();}

if(key_i==0x7f)
{
   out2=0x00;
   delay3(1);
   ledlp();
   lpaper(7);
   delay3(60);
   out2=0x80;

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

}                            //走纸

if(key_i==0xf6)
{
count1=0;
//fperase(0);
point1=count1;
point1a=~count1;
eight_c=0;
day_c=0;
week_c=0;
led_clear();
write_over_byte=0;
write_over_to_ds();
delay3(4);
}
////////////////////////////                    //实时时钟的键盘和显示
  if(key_i==0xfb)
     {
     flag_led=1;
     delay2();
     v1++;
     if(v1==5){v1=1;}
     if(flag2==1){vv1=1;}

     }

     if(flag_led==1)                    //以下程序完成从时钟设置状态自动回到电流记录显示状态
       {
        if((key_i&0x0f)!=0x0f)
        {
         IE=0x00;
         TH0=0;
         TL0=0;
         TR0=1;
         xtime=0;
         }
         if(TF0==1)
         {
          TF0=0;
          TH0=0;
          TL0=0;
          xtime=xtime+1;
          if(xtime>85)
          {
           xtime=0;
           key_i=0xf7;
           }
          }
        }


if(flag_led==1)         //以下是实时时钟的主程序
{
 switch(v1)
 {
 case 1:
 if(flag2==1&jjx>13){led_timed();}
 else {led_time();}
                   if(jjx>13){flagx=1;}
                   else{flagx=0;}
                   if(jjx>15){jjx=0;}
                  jjx++;
                  delay5();


break;

case 2:                                 //读分
 if(flag2==1&jjx>13){led_timed();}
 else{led_time();}
                  if(jjx>13){flagx=1;}
                   else{flagx=0;}
                  if(jjx>15){jjx=0;}
                  jjx++;
        delay5();

break;



case 3:
if(flag_led==1){led_dog(read_s);}
 delay5();
break;

case 4:
if(flag_led==1){led_wei();}
delay5();
delay1(3000);
break;

        }


if(key_i==0xfd)                    //时钟修改允许
{
write_cm(0x8e);
write_ds(0x00);
cs=0;
//delay1(2);
sclk=0;

delay2();      //原来的delay1();
vv1++;
if(vv1==4){vv1=1;}
flag2=1;
}


if(key_i==0xf7)                    //保存参数,修改保护,返回.
{
flag_led=0;
flag2=0;
v1=0;
vv1=0;

write_cm(0xc8);                 //存入变比
write_ds(read_s);
cs=0;
//delay1(2);
sclk=0;

tempi1=~read_s;
write_cm(0xca);
write_ds(tempi1);
cs=0;
//delay1(2);
sclk=0;

write_cm(0xcc);                 //存入纵坐标范围
write_ds(fan_wei);
cs=0;
//delay1(2);
sclk=0;

tempi1=~fan_wei;
write_cm(0xce);
write_ds(tempi1);
cs=0;
//delay1(2);
sclk=0;



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



        TL0=0xb0;
        TH0=0x3c;
        //TR0=1;
        IE=0xc2;
}


if(flag2==1)
{
      if(key_i==0xfe)              //修改参数
      {

       delay5();
       delay5();
       get_time();
       if(v1==1&vv1==2)
       {
                xx2=geted_time[0];
                bcd_bcd();
                if(temp_hex>=59){temp_hex=0;}
            else{temp_hex=temp_hex+1;}
        }


       if(v1==1&vv1==3)
       {
                xx2=geted_time[1];
                bcd_bcd();
            if(temp_hex>=23){temp_hex=0;}
            else{temp_hex=temp_hex+1;}
         }

       if(v1==2&vv1==1)
       {
                xx2=geted_time[2];
                bcd_bcd();
            if(temp_hex>=31){temp_hex=1;}
            else{temp_hex=temp_hex+1;}
       }

       if(v1==2&vv1==2)
       {
                xx2=geted_time[3];
                bcd_bcd();
         if(temp_hex>=12){temp_hex=1;}
            else{temp_hex=temp_hex+1;}
       }


       if(v1==2&vv1==3)
       {
                xx2=geted_time[4];
                bcd_bcd();
        if(temp_hex>=99){temp_hex=0;}
            else{temp_hex=temp_hex+1;}

        }


       bcd(temp_hex);                           //转化为BCD码

       if(v1==1&vv1==2){temp_v5=0x82;}       //修改分
       if(v1==1&vv1==3){temp_v5=0x84;}       //时
       if(v1==2&vv1==1){temp_v5=0x86;}       //日
       if(v1==2&vv1==2){temp_v5=0x88;}       //月
       if(v1==2&vv1==3){temp_v5=0x8c;}       //年

write_cm(temp_v5);                           //写入设定好的参数
write_ds(v7);
cs=0;
//delay1(2);
sclk=0;
//delay();

if(v1==3)
{
read_s=read_s+1;
if(read_s>=5){read_s=1;}
}

if(v1==4)
{
 if(fan_wei==1){fan_wei=0;}
 else{fan_wei=1;}
}

   }
  }
}
//////////////////////////                         //A/D采样后显示采样值
if(flag_ad==1)
{

 flag_ad=0;
        wx=ad_data*2.5/4095.0;                  //满度值为2.5V时A/D转换器的输入电压
        if(read_s==1){wx=wx*50.0;}
        else{wx=wx*read_s*100.0/3.0;}                             //0-2.5V对应0-250个点
if(flag_led==0&flag168==0&flag24==0&flag8==0)
{
 temp_led=wx*10;
 sum=sum+temp_led;
 sum_i++;
         if(sum_i>=6)
         {
          temp_led=sum/sum_i;
          if(temp_led<(30+read_s*20))temp_led=0;
          led_led(temp_led);
          sum_i=0;
          sum=0;
         }
}

}




goto qqq;






}


///////////////////////////////////
void write_over_to_ds(void)
{
write_cm(0xd0);                 //存入over
write_ds(write_over_byte);
cs=0;
//delay1(2);
sclk=0;

write_cm(0xd2);
write_ds(~write_over_byte);
cs=0;
//delay1(2);
sclk=0;
}

void read_over_from_ds(void)
{
unsigned char temp_over1,temp_over2;
write_cm(0xd1);                 //取over
read_ds();
cs=0;
//delay1(2);
sclk=0;
temp_over1=xx2;

write_cm(0xd3);
read_ds();
cs=0;
//delay1(2);
sclk=0;
temp_over2=xx2;

if(temp_over1==~temp_over2)write_over_byte=temp_over1;else write_over_byte=0;
	}

⌨️ 快捷键说明

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