📄 niuju1.c
字号:
/*2005.1.15 交流采样
2004.7.4
在山东发现电压量程系数个位输入不进,原来是在sub_set()中原来有5,6的约束,将其去掉
2004.6.20:
1分钟定时清屏
当转速为50转/分以上时 存储分时
从子屏幕返回时清屏幕
设定键进入时间加长
时间清零改为right key+set key==chk key
查看三相电压改为up key
时间存储单元为:
time_ptr--0x20--0x2f, in EEPROM x25045
minute----0x21--0x2f
hour -----0x31--0x3f
time_ptr=byte_read(0x20);
time_ptr++
time_ptr&=0x0f;
byte_write(0x20,time_ptr)
byte_write(time_ptr,minute)
byte_write(time_ptr|0x10,hour)
功率 P=1VA=0.101972KgF.m/s=0.9993256.N.m/s
机械功率 P=w.M
w=n.PI/30(弧度/秒) //
M==扭矩(牛顿。米 )
所以:
M=(30.P)/PI/n
其中 P为(瓦) n(转/分)
主显示屏:
扭矩 10.0 KN.m
300r/min 10.0 KW
380V 40.0A
hh:mm:ss
screen :
1--gnd 2--+5V 3-- 亮度 4---RS P0.0 5--R/W P0.2 6--E P0.1
x25645:
1--CS P1.4 2--DOUT P1.5 5--DIN P1.7 6--CLK P1.6
按键: P1.1 P1.2 P1.3 P0.4(从上到下)
按键-显示-存储的结构设计:
屏为4行,每行8个汉字(或16个字母数字)
键为3*3=9个(或2*2=4个)分别为 up down left right ok set check 等
静态画面:
大标题在第一行
名称一号 1234 V
名称二号 5678 I
up down pup ret
动态画面: 含光标位置
〈
〈〈〈〈
〈〈〈〈
〈 〈 〈 〈
存储格式:
DDDD DDDD D D B1 B2 共12个字节
char str[12]
动态数据:
D D D D D D D D FUNC CURSER B B 共12个字节
pin: 1--GND 2--+5V 3--NC 4--RS 5--R/W 6--E
7~14==D0~D7
15--PSB 16--NC 17--/rst 18--NC
19--A 20--K (19,20可能是背光)
1、 initial()在运行前对液晶显示屏初始化
2、 instruct(uchar x) 将x作为命令送给液晶显示屏
x==0x01 清屏幕 约1.6ms
x==0x02 地址和光标归零 HOME
0x06 光标右移、地址增加方式
0x09 闪烁
0x0a 显示光标
0x0c 显示内容
0x0f 内容、光标、闪烁全显示
3、 write_abyte(uchar x)
3.1 显示字母数字1--9a--z
地址自动增1
可显示四行,分别为1 3 2 4行
3.2 显示汉字
调用两次,如下:
p=&"汉";
hanzi=*p; //两个字节
ch=hanzi>>8; cl=hanzi; ch为高字节 cl为低字节
write_abyte(ch);
write_abyte(cl);
/*
*/
#pragma LARGE
#include <absacc.h>
#include <reg52.h>
#include <string.h>
#define uchar unsigned char
#define uint unsigned int
#define KEYBORD P1 //P1.1--P1.3 P0.4
#define data1 P1
#define clear 0x01 //清屏幕,约1.6ms
#define home 0x02 //光标回零(左上角)/
#define f_set 0x30 //并行、基本指令
#define dis_on 0x0f //打开显示,光标,闪烁功能
#define in_mode 0x06 //输入方式,地址增1,光标右移
#define panel_num 1
sbit key4=P0^4;
/*-------------screen---------------------*/
sbit P_RS=P0^7;
sbit P_RW=P0^6;
sbit P_E= P0^5;
/*-------------2543----------------------*/
sbit ad43_cs=P0^3;
sbit clk43=P0^0;
sbit din43=P0^1;
sbit dout43=P0^2;
/*-------------25045----------------------*/
//1--CS P1.4 2--DOUT P1.5 5--DIN P1.7 6--CLK P1.6
sbit x25_cs=P1^4;
sbit x25_WP=0xb0^5;
sbit clk=P1^6; /*1;*/
sbit din=P1^7;
sbit dout25=P1^5;
/*---------------------------------------*/
bdata uchar ab;
sbit abit0=ab^0;sbit abit1=ab^1;sbit abit2=ab^2;sbit abit3=ab^3;
sbit abit4=ab^4;sbit abit5=ab^5;sbit abit6=ab^6;sbit abit7=ab^7;
sbit flag=P1^3;
/*********************************************************/
/*
12Mhz 1us/time
T1==100us
T0==50ms interrupt
*/
//idata uchar string[50];
data unsigned char T_key,ms_timing,second,second2,minute,minuter,second3;
idata uchar time_delta,hour,old_hour,old_minute,min,n_sub_set,*ptr;
//idata uint ptr,NUM;
idata uchar str1[4];
idata uchar str2[10];
idata uchar chint; //通信
//data uchar time,time1,tune,time2,tz1,tz2;
data uchar n_filt[6],n_v,time_n; //,n_value;
data uint viad[5],v380,max2; //VI[5],v380,torque;
idata uint a_filt[5][5];
idata uchar k_current,k_torque,k2_va,k2_vb,k2_vc,k2_current,k2_power;
bit flag_232C,T_50ms;
bit flag_COM,flag_n;
/*----------------------------------------------------------------------*/
data uchar key_sfr;
bdata uchar key_sfr0;
sbit key_chk =key_sfr0^0;
sbit key_stage =key_sfr0^1;
sbit key_ok =key_sfr0^2;
sbit key_left =key_sfr0^3;
sbit key_up =key_sfr0^4;
sbit key_right =key_sfr0^5;
sbit key_set =key_sfr0^6;
sbit key_down =key_sfr0^7;
bit key_run;
bit flag_key,flag_cursor;
idata unsigned char second_k,speed;
//
/*----------------------------------------------------*/
idata struct v_data{
uint current;
uint power;
uint V[3];
uint torque;
uint n_value;
uchar T[3];
};
idata struct v_data DA;
/*----------------------------------------------------*/
code struct panel{
uchar name1[20];
uchar name2[20];
};
code struct panel set_hz[10]={
"设置间隔时间(秒\0",
"请输入\0\0",
"设置间隔时间(秒\0",
"请输入\0\0",
"电流互感器变比\0",
"请输入\0\0",
"力矩效率\0\0",
"请输入\0\0",
"二级设定\0\0",
"请输入\0\0",
"电压A 相比值\0\0",
"请输入\0\0",
"电压B 相比值\0\0",
"请输入\0\0",
"电压C 相比值\0\0",
"请输入\0\0",
"电流比值\0",
"请输入\0",
"有功功率比值\0",
"请输入\0"
};
/*---------------------------------------------------------*/
/*----------------------------------------*/
int AD_2543(uchar n)
{
data uchar i,j;
data union{
uchar ch[2]; /*0高八位,1低八位*/
uint i;
}u;
clk43=0;
ad43_cs=0;
ab=n<<4;
for(j=0;j<10;j++);
for(i=0;i<8;i++){
din43=abit7;
ab<<=1;
abit0=dout43; /*dout; dout;*/
clk43=1;
for(j=0;j<10;j++);
clk43=0;
for(j=0;j<10;j++);
}
u.ch[0]=ab;
ab=0;
for(i=0;i<4;i++){
ab<<=1;
abit0=dout43;
clk43=1;
for(j=0;j<10;j++);
clk43=0;
for(j=0;j<10;j++);
}
u.ch[1]=ab<<4;
u.i>>=4;
ad43_cs=1;
return u.i;
}
/*---------------------------------------------------------*/
/*----------------------------------------*/
void VI_collect(uchar j1)
{
data uchar i,j;
//data uint a[7];
//data long int sum1;
data uint sum1,min,max1;
j=j1;
//for(j=0;j<5;j++){
sum1=0;
max1=0;
min=4095;
AD_2543(j);
for(i=0;i<5;i++){ /*滑差处理数据*/
if(j==0){
a_filt[j][i]=max2;
}
else{
a_filt[j][i]=AD_2543(j);
}
if(i==0){max1=a_filt[j][i];min=a_filt[j][i];}
if(a_filt[j][i]>max1){max1=a_filt[j][i];}
if(a_filt[j][i]<min){min=a_filt[j][i];}
sum1=sum1+a_filt[j][i];
}
viad[j]=(sum1-max1-min)/3;
max2=0;
}
/*----------------------------------------*/
void VI_handle(uchar j1)
{
data uchar j;
data uint dw,dp;
data unsigned long vi;
code uchar v_tbl[5]={0,2,1,0,0};
j=j1;
if((j>=1)&&(j<4)){
//for(i=2;i<5;i++){
vi=viad[j];
//vi[i]=vi[i]*57/880;
vi=vi*57/88; //380.0V
/*
if(j==2)vi=vi*k_va/100;
if(j==3)vi=vi*k_vb/100;
if(j==4)vi=vi*k_vc/100;
*/
DA.V[v_tbl[j]]=vi;
if(j==3){
vi=(DA.V[0]+DA.V[1]+DA.V[2]); vi=vi*564/1000; v380=vi;
}
}
if(j==0){
vi=viad[0];
//vi=vi*tz1/819; //电流
vi=vi*k_current*95/10000;
DA.current=vi; //*75/10;
}
if(j==4){
vi=viad[4];
//vi=vi*8/10*75/10; //tz1; //有功功率 tz1=7.5
vi=vi*829/1000; //?805/1000; //12.3KW
vi=vi*k_current; ///100
dp=vi; //有功功率(瓦)
vi=vi/10;
dw=vi%10; if(dw>=5) vi=(vi+10);
vi=vi/10;
DA.power=vi; //有功功率(千瓦) //if(DA.power>999)DA.power=999;
// M=(30.P)/PI/n
// 其中 P为(瓦) n(转/分)
//vi=9.55*VI[1]/n_value;
if(DA.n_value==0)DA.n_value=1;
//DA.n_value=300;
vi=(long int)955*dp/DA.n_value; ///100; //12.3N.m
DA.torque=vi/100; //100;
vi=DA.torque;
vi=vi*k_torque/100;
DA.torque=vi;
if(DA.torque>9000)DA.torque=9000;
}
}
/*----------------------------------------*/
/*----------------------------------------*/
void VI_range(uchar j1)
{
data uchar j;
data unsigned long vi;
code uchar v_tbl[5]={0,0,1,0,2};
j=j1;
switch(j){
case 3:
vi=DA.V[0];
DA.V[0]=vi*k2_va/100; //380.0V
break;
case 2:
vi=DA.V[1];
DA.V[1]=vi*k2_vb/100; //380.0V
break;
case 4:
vi=DA.V[2];
DA.V[2]=vi*k2_vc/100; //380.0V
break;
case 0:
vi=DA.current;
vi=vi*k2_current/100;
DA.current=vi;
break;
case 1:
vi=DA.power;
vi=vi*k2_power/100;
DA.power=vi;
break;
default:
break;
}
}
/*----------------------------------------*/
void Collect_Handle(uchar j1)
{
data uchar j;
j=j1;
VI_collect(j); /*采集电压电流量*/
VI_handle(j); /*处理数据*/
VI_range(j); //量化系数(2级设定)
}
/*----------------------------------------*/
/*----------------------------------------------------*/
void from_sfr_sfr0(void)
{
static data uchar old_key=0xff,count=0;
if(key_sfr==old_key){
count++;
if(count>15){
speed=1; count=15;
}
if(second_k>2){
speed=0; count=0;
}
second_k=0;
}else{
old_key=key_sfr;
speed=0;
count=0;
second_k=0;
}
key_sfr0=0;
switch(key_sfr){
case 0:
key_set=1; /*cut=1;*/
key_ok=1;
break;
case 1:
key_up=1; /*start=1;*/
break;
case 2:
key_down=1;
break;
case 3:
key_right=1; /*up=1;*/
break;
case 4:
key_chk=1; /*up=1;*/
break;
case 5:
key_stage=1; /*stage key=1; 232C communication */
break;
case 6:
key_ok=1; /* store flag data as reference dot */
break;
default:
break;
}
}
/*----------------------------------------------------*/
/*
getkey0:
uchar getkey0(uchar i,uchar j)
i---line
j---columue
key_value=i+3*j i=0,1,2 j=0,1,2,3 key value=0--11 no key down when return 0xff
*/
/*----------------------------------------------------*/
uchar getkey0(void)
{
data uchar ch,i;
//code uchar line[4]={0xef,0xdf,0xbf}; /*0xf7,0xfb,0xfd,0xfe};*/
code uchar colu[8]={0x0e,0x07,0x0b,0x0d,0x0c,0x0a,0x06,0xff};
//code uchar change[10]={0,3,6,1,4,7,2,5,8,0xff};
//PC8155=0;
KEYBORD=0xff; key4=1; //key4=p0.4
ab=0;ch=0;
ab=KEYBORD&0x0e;
abit0=key4; ch=0;
ch=ab;
//PC8155=0xff;
if(ch==0x0f)return 0xff;
for(i=0;i<7;i++){
if(ch==colu[i]) return i;
}
return 0xff; //=change[ch];
}
/*----------------------------------------------------*/
void rst_wdog(void);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -