📄 ryll6.c
字号:
/* ryll.c 01,01,11 copyright DaTong YanGaoWei */
#include <d:\dosfile\c51\inc\reg51.h>
#include <d:\dosfile\c51\inc\math.h>
#include <d:\dosfile\c51\inc\stdio.h>
#define ctrl_8279 0x80
#define dis_8279 0x80
#define ds_12887 0x40
extern inp();
extern outp();
float accumulate;
float ad_f_result;
unsigned int ad_resu;
unsigned int ad_result[2];
unsigned char display_buffer[16];
unsigned char work_mark;
unsigned char count_1s;
unsigned char count_i;
bit watch_dog_mark;
bit low_limit;
bit high_limit;
code unsigned char seg_code[15]={0xf3,0x60,0xb5,0xf4,0x66,0xd6,0xd7,
0x70,0xf7,0xf6,0x00,0x04,0x67,0x83,0xff};
/* 0,1,2,3,4,5,6,7,8,9, ,-,h,l,8.,
a 76543210
f b dcbahgfe
g
e c
d h */
char inputx(char addr1,char addr2)
{
DPH=addr1;
DPL=addr2;
inp();
return(ACC);
}
outputx(char addr1,char addr2,char para)
{
DPH=addr1;
DPL=addr2;
ACC=para;
outp();
}
data_output()
{
unsigned char temp1;
unsigned char temp2;
unsigned char temp3;
unsigned char temp4;
long temp;
temp=(long)(accumulate * 10);
temp1=(char)temp;
temp2=(char)(temp >> 8);
temp3=(char)(temp >> 16);
temp4=(char)(temp >> 24);
outputx(ds_12887,0x10,temp1);
outputx(ds_12887,0x11,temp2);
outputx(ds_12887,0x12,temp3);
outputx(ds_12887,0x13,temp4);
}
data_input()
{
unsigned char temp1;
unsigned char temp2;
unsigned char temp3;
unsigned char temp4;
long temp;
temp=0;
temp1=inputx(ds_12887,0x10);
temp2=inputx(ds_12887,0x11);
temp3=inputx(ds_12887,0x12);
temp4=inputx(ds_12887,0x13);
temp=temp4;
temp=temp << 8;
temp=temp | temp3;
temp=temp << 8;
temp=temp | temp2;
temp=temp << 8;
temp=temp | temp1;
accumulate=(float)(temp);
accumulate=accumulate/10;
}
timedelay(unsigned int times)
{
unsigned int ti;
for (ti=times;ti>0;ti--){}
}
watch_dog()
{
if (watch_dog_mark==1)
{
X7=0;
watch_dog_mark=0;
}
else
{
X7=1;
watch_dog_mark=1;
}
}
convert_resultch(float resu)
{
float r1;
unsigned long int r2;
r2=(long)(resu*10);
if (high_limit==1) display_buffer[0]=12;
else {
if (low_limit==1) display_buffer[0]=13;
else display_buffer[0]=10;
}
/* display_buffer[0]=r2/1000; */
display_buffer[1]=(r2/100)%10;
display_buffer[2]=(r2/10)%10;
display_buffer[3]=(r2)%10;
if (display_buffer[1]==0) {
display_buffer[1]=10;
}
}
convert_t(float resu)
{
float t1;
unsigned long int t2;
t2=(long)(resu*10);
display_buffer[4]=t2/100000;
display_buffer[5]=(t2/10000)%10;
display_buffer[6]=(t2/1000)%10;
display_buffer[7]=(t2/100)%10;
display_buffer[8]=(t2/10)%10;
display_buffer[9]=(t2)%10;
if (display_buffer[4]==0) {
display_buffer[4]=10;
if (display_buffer[5]==0) {
display_buffer[5]=10;
if (display_buffer[6]==0) {
display_buffer[6]=10;
if (display_buffer[7]==0) display_buffer[7]=10;
}
}
}
}
display()
{
unsigned char count_dis;
outputx(ctrl_8279,1,0x90);
for (count_i=0;count_i<=15;count_i++){
count_dis=display_buffer[count_i];
count_dis=seg_code[count_dis];
if ((count_i==2) || (count_i==8)) {
count_dis=count_dis|0x8;
}
outputx(dis_8279,0,count_dis);
}
}
max_187()
{
unsigned char max_temp;
X0=0;
timedelay(1);
X0=1;
if (X2==1) max_temp=1;
else max_temp=0;
return(max_temp);
}
ad_tran()
{
unsigned char ad_temp;
ad_result[0]=ad_result[1];
ad_result[1]=0;
X0=0;
X1=0;
timedelay(20);
X0=1;
for (count_i=0;count_i<=12;count_i++){
switch(count_i) {
case 0:
ad_temp=max_187();
ad_result[1]=ad_result[1]+(ad_temp*2048);
break;
case 1:
ad_temp=max_187();
ad_result[1]=ad_result[1]+(ad_temp*1024);
break;
case 2:
ad_temp=max_187();
ad_result[1]=ad_result[1]+(ad_temp*512);
break;
case 3:
ad_temp=max_187();
ad_result[1]=ad_result[1]+(ad_temp*256);
break;
case 4:
ad_temp=max_187();
ad_result[1]=ad_result[1]+(ad_temp*128);
break;
case 5:
ad_temp=max_187();
ad_result[1]=ad_result[1]+(ad_temp*64);
break;
case 6:
ad_temp=max_187();
ad_result[1]=ad_result[1]+(ad_temp*32);
break;
case 7:
ad_temp=max_187();
ad_result[1]=ad_result[1]+(ad_temp*16);
break;
case 8:
ad_temp=max_187();
ad_result[1]=ad_result[1]+(ad_temp*8);
break;
case 9:
ad_temp=max_187();
ad_result[1]=ad_result[1]+(ad_temp*4);
break;
case 10:
ad_temp=max_187();
ad_result[1]=ad_result[1]+(ad_temp*2);
break;
case 11:
ad_temp=max_187();
ad_result[1]=ad_result[1]+(ad_temp*1);
break;
case 12:
ad_temp=max_187();
if (ad_temp!=0) ad_result[1]=ad_result[0];
break;
default:
break;
}
}
X1=1;
ad_resu=(ad_result[1]+ad_result[0])/2;
}
ad_convert()
{
if (ad_resu<=700) low_limit=1;
else low_limit=0;
if (ad_resu>=4050) high_limit=1;
else high_limit=0;
if (ad_resu<=800) ad_resu=0;
else {
if (ad_resu>=4000) ad_resu=3200;
else ad_resu=ad_resu-800;
}
ad_f_result=(float)ad_resu;
ad_f_result=ad_f_result/106.66666666;
}
accu()
{
float accu_temp;
accu_temp=ad_f_result/7200;
accumulate=accumulate+accu_temp;
if (accumulate>=99999.9) accumulate=99999.9;
}
timer1() interrupt 3 using 1
{
EA=0;
TL1=0xaf;
TH1=0x3c; /* 0.05s */
count_1s++;
EA=1;
}
ext1() interrupt 2 using 3
{
EA=0;
EA=1;
}
ext0() interrupt 0 using 3
{
EA=0;
EA=1;
}
init_8279()
{
outputx(ctrl_8279,1,0x0a);
outputx(ctrl_8279,1,0x90);
outputx(ctrl_8279,1,0x34);
outputx(ctrl_8279,1,0xd3);
}
initial()
{
count_1s=0;
count_i=0;
work_mark=0;
data_input();
}
void main()
{
X7=0;
TMOD=0x15;
TL1=0xaf;
TH1=0x3c;
TR0=0;
TR1=1; /* timer1 mode */
ET1=1;
IT1=0; /* ext int mode */
IT0=0;
EX1=0;
EX0=0;
ES=0; /* 232 disable */
IP=0x8;
EA=1;
X7=1;
init_8279();
for (count_i=0;count_i<=15;count_i++) {
display_buffer[count_i]=14;
}
display();
watch_dog();
timedelay(30000);
watch_dog();
initial();
watch_dog();
loop:
if(X6==1) {
accumulate=0;
data_output();
}
if (count_1s>=10){ /* 0.5s accumulate */
count_1s=0;
watch_dog();
ad_tran();
ad_convert();
if (ad_f_result > 0.6) {
accu();
data_output();
}
watch_dog();
convert_resultch(ad_f_result);
convert_t(accumulate);
}
display();
goto loop;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -