📄 p_hot.c
字号:
//////////////////////////////////////////////////////////////////////////////////
///////////////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 + -