📄 main.c
字号:
/***************Copyright (c)*****************************************
**
** Description: Made By KDQX in Hebust
** Email: shirenwei2003@163.com
**
**--------------File Info--------------------------------------------
**
** File Name: 数据直流电源(digtal power)
** Last modified Date: 2006-12-01
** Last Version: V1.1
** Description: 河北科技大学2005年大学生创新项目
**
**-------------------------------------------------------------------
**
** Created By: 侍任伟(tigerots)
** Company: 科大七星工作室(KDQX)
** Created date: 2003-11-16
** Version: V1.0
** Descriptions:用AT89S52单片机实现电压电流的数字化控制
**
**-------------------------------------------------------------------
**
** Modified by:侍任伟(tigerots)
** Company: 科大七星工作室(KDQX)
** Modified date: 2006-12-01
** Version:V1.1
** Descriptions:增加用户存储/调用功能(RAM)
**
**-------------------------------------------------------------------
**
** Modified by:
** Company:
** Modified date:
** Version:
** Descriptions:
**
**********************************************************************/
//头文件
#include "reg51.h"
#include "intrins.h"
#include "disp.c"
#include "key.c"
#include "delay.c"
#include "tlc5615.c"
#include "tlc1549.c"
//#include "x5045.c"
//4mul4键盘功能键
#define USER 10
#define CALL 11
#define SETi 12
#define SETu 13
#define ESC 14
#define OK 15
//1mul8键盘功能键
#define ISET 19
#define ISEL 18
#define IADD 17
#define ISUB 16
#define USET 23
#define USEL 22
#define VADD 21
#define VSUB 20
//系统状态定义
#define IDLE_STA 0xf0
#define U_SET_STA 0xf1
#define I_SET_STA 0xf2
#define U_SETu 0xf3
#define I_SETi 0xf4
#define USER_SET_STA 0xf5
#define CALL_USER_STA 0xf6
//函数声明
void IDLE_Mange(void);
void U_SET_Mange(void);
void I_SET_Mange(void);
void Disp_I_Real(void);
void Disp_U_Real(void);
void U_SETu_Mange(void);
void I_SETi_Mange(void);
void USER_SET_Mange(void);
void CALL_USER_Mange(void);
//外部变量声明
extern unsigned char Disp_Buf[8];
//外部函数声明
extern void Init(void);
extern void Disp (void);
extern unsigned char Key(void);
extern void Delay(unsigned int N);
extern unsigned int Read1549_U(void);
extern unsigned int Read1549_I(void);
extern void SEND_5615_U(unsigned int dd);
extern void SEND_5615_I(unsigned int dd);
//全局变量
unsigned int U_data=500,I_data=300;//电流电压设定数据
unsigned int U_temp=0,I_temp=0;//电流电压显示数据
unsigned char Sys_sta;//系统状态
unsigned char keytemp;//键值
unsigned char U_Buf[4];
struct store{
unsigned int U;
unsigned int I;
};
struct store user[7]={0};//0~~6 七组用户数据;7,8,9组作为系统预设数据
//标志位
unsigned char uset_bit=3;
unsigned char iset_bit=7;
unsigned int dis=0;
unsigned int disi=0;
unsigned long int flashbuf = 0;//显示刷新频率
unsigned char ubit=0;
unsigned char ibit=0;
unsigned char userbit=0;//用户已存储组数
//状态位
bit u_ds=0;
bit i_ds=0;
bit uset=0;
bit flash=0;
//函数初始化
void Init (void)
{
AD_CLK = 0;
AD_CS1 = 1;
AD_CS2 = 1;
Sys_sta=IDLE_STA;
SEND_5615_U(U_data);
Delay(50);
SEND_5615_I(I_data);
Delay(50);
Disp_U_Real();
Disp_I_Real();
Delay(50);
Sys_sta=IDLE_STA;
}
//显示设置电流电压
void Disp_U_set(unsigned int du)
{
Disp_Buf[0]=du/1000;
Disp_Buf[1]=du%1000/100;
Disp_Buf[2]=du%100/10;
Disp_Buf[3]=du%10;
Disp();
}
void Disp_I_set(unsigned int di)
{
Disp_Buf[4]=di/1000;
Disp_Buf[5]=di%1000/100;
Disp_Buf[6]=di%100/10;
Disp_Buf[7]=di%10;
Disp();
}
//显示实际电流电压值
void Disp_U_Real(void)
{
dis=dis++;
if(dis == 20)
{
dis = 0;
AD_CLK = 0;
AD_CS1 = 1;
AD_CS2 = 1;
U_temp = Read1549_U();
Delay(30);
if(U_temp == 0)
{
Delay(10);
U_temp = Read1549_U();
}
Disp_Buf[0]=U_temp%10000/1000;
if(Disp_Buf[0]==0)
{
Disp_Buf[0]=18;
}
Disp_Buf[1]=U_temp%1000/100;
Disp_Buf[2]=U_temp%100/10;
Disp_Buf[3]=U_temp%10;
}
Disp();
}
void Disp_I_Real(void)
{
disi=disi++;
if(disi == 20)
{
disi = 0;
I_temp = Read1549_I();
Delay(10);
I_temp = Read1549_I();
}
Disp_Buf[4]=I_temp%10000/1000;
Disp_Buf[5]=I_temp%1000/100;
Disp_Buf[6]=I_temp%100/10;
Disp_Buf[7]=I_temp%10;
Disp();
}
//移位显示
void Disp_change(unsigned char dc)
{
Disp_Buf[0]=Disp_Buf[1];
Disp_Buf[1]=Disp_Buf[2];
Disp_Buf[2]=Disp_Buf[3];
Disp_Buf[3]=dc;
Disp();
}
void Disp_changei(unsigned char di)
{
Disp_Buf[4]=Disp_Buf[5];
Disp_Buf[5]=Disp_Buf[6];
Disp_Buf[6]=Disp_Buf[7];
Disp_Buf[7]=di;
Disp();
}
//IDLE状态下的服务程序
void IDLE_Mange(void)
{
unsigned int temp;
temp = U_data;
keytemp = Key();
Sys_sta=IDLE_STA;
switch(keytemp)
{
//微调键
case VADD:
{
if(U_data >= 0x03ff)
{}
else
{
U_data=U_data+1;
SEND_5615_U(U_data);
Delay(5);
}
}break;
case VSUB:
{
if(U_data <= 5 || U_data >= 0x03ff)
{}
else
{
U_data=U_data-1;
SEND_5615_U(U_data);
Delay(5);
}
}break;
case IADD:
{
if(I_data >= 0x03ff)
{}
else
{
I_data=I_data+1;
SEND_5615_I(I_data);
Delay(5);
}
}break;
case ISUB:
{
if(I_data <= 5 || I_data >= 0x03ff)
{
SEND_5615_I(I_data);
Delay(5);
}
else
{
I_data=I_data-1;
SEND_5615_I(I_data);
Delay(5);
}
}break;
//功能键
case USET://1*8
{
Sys_sta = U_SETu;
}break;
case SETu://4*4
{
Sys_sta = U_SET_STA;
}break;
case ISET://1*8
{
Sys_sta = I_SETi;
}break;
case SETi://4*4
{
Sys_sta = I_SET_STA;
}break;
case USER://4*4
{
Sys_sta = USER_SET_STA;
}break;
case CALL://4*4
{
Sys_sta = CALL_USER_STA;
}break;
default:break;
}
while(keytemp!=0xff)
{
keytemp = Key();
Disp();
Delay(5);
}
Disp_U_Real();
Delay(20);
Disp_I_Real();
}
//4mul4电压设定状态下的服务程序
void U_SET_Mange(void)
{
unsigned int temp;
temp = U_data;
if(u_ds==0)
{
u_ds=1;
Disp_Buf[0]=16;
Disp_Buf[1]=18;
Disp_Buf[2]=18;
Disp_Buf[3]=18;
Disp();
}
Disp_I_Real();
keytemp = Key();
switch(keytemp)
{
case 0:
{
if(ubit<=3)
{
U_Buf[ubit]=0;
Disp_change(U_Buf[ubit]);
ubit=ubit+1;
}
else
{
ubit=0;
}
}break;
case 1:
{
if(ubit<=3)
{
U_Buf[ubit]=1;
Disp_change(U_Buf[ubit]);
ubit=ubit+1;
}
else
{
ubit=0;
}
}break;
case 2:
{
if(ubit<=3)
{
U_Buf[ubit]=2;
Disp_change(U_Buf[ubit]);
ubit=ubit+1;
}
else
{
ubit=0;
}
}break;
case 3:
{
if(ubit<=3)
{
U_Buf[ubit]=3;
Disp_change(U_Buf[ubit]);
ubit=ubit+1;
}
else
{
ubit=0;
}
}break;
case 4:
{
if(ubit<=3)
{
U_Buf[ubit]=4;
Disp_change(U_Buf[ubit]);
ubit=ubit+1;
}
else
{
ubit=0;
}
}break;
case 5:
{
if(ubit<=3)
{
U_Buf[ubit]=5;
Disp_change(U_Buf[ubit]);
ubit=ubit+1;
}
else
{
ubit=0;
}
}break;
case 6:
{
if(ubit<=3)
{
U_Buf[ubit]=6;
Disp_change(U_Buf[ubit]);
ubit=ubit+1;
}
else
{
ubit=0;
}
}break;
case 7:
{
if(ubit<=3)
{
U_Buf[ubit]=7;
Disp_change(U_Buf[ubit]);
ubit=ubit+1;
}
else
{
ubit=0;
}
}break;
case 8:
{
if(ubit<=3)
{
U_Buf[ubit]=8;
Disp_change(U_Buf[ubit]);
ubit=ubit+1;
}
else
{
ubit=0;
}
}break;
case 9:
{
if(ubit<=3)
{
U_Buf[ubit]=9;
Disp_change(U_Buf[ubit]);
ubit=ubit+1;
}
else
{
ubit=0;
}
}break;
case ESC:
{
U_data = temp;
u_ds=0;
ubit=0;
Sys_sta = IDLE_STA;
}break;
case OK:
case USET:
{
if (ubit == 4)
{
if((U_Buf[0]==1 && U_Buf[2]==2 && U_Buf[3]>=4) || U_Buf[0]>=2)
{
U_data = U_Buf[1]*100+U_Buf[2]*10+U_Buf[3];
}
else
{
U_data = U_Buf[0]*1000+U_Buf[1]*100+U_Buf[2]*10+U_Buf[3];
}
}
else if(ubit == 3)
{
U_data = U_Buf[0]*100+U_Buf[1]*10+U_Buf[2];
}
else if(ubit == 2)
{
U_data = U_Buf[0]*10+U_Buf[1];
}
else if(ubit == 1)
{
U_data = U_Buf[0];
}
SEND_5615_U(U_data);
U_Buf[0]=0;
U_Buf[1]=0;
U_Buf[2]=0;
U_Buf[3]=0;
u_ds=0;
ubit=0;
Sys_sta = IDLE_STA;
}break;
}
while(keytemp!=0xff)
{
keytemp = Key();
Disp();
Delay(10);
}
}
//4mul4电流设定状态下的服务程序
void I_SET_Mange(void)
{
unsigned int temp;
temp = I_data;
if(i_ds==0)
{
i_ds=1;
Disp_Buf[4]=1;
Disp_Buf[5]=18;
Disp_Buf[6]=18;
Disp_Buf[7]=18;
Disp();
}
Disp_U_Real();
keytemp = Key();
switch(keytemp)
{
case 0:
{
if(ubit<=3)
{
U_Buf[ubit]=0;
Disp_changei(U_Buf[ubit]);
ubit=ubit+1;
}
else
{
ubit=0;
}
}break;
case 1:
{
if(ubit<=3)
{
U_Buf[ubit]=1;
Disp_changei(U_Buf[ubit]);
ubit=ubit+1;
}
else
{
ubit=0;
}
}break;
case 2:
{
if(ubit<=3)
{
U_Buf[ubit]=2;
Disp_changei(U_Buf[ubit]);
ubit=ubit+1;
}
else
{
ubit=0;
}
}break;
case 3:
{
if(ubit<=3)
{
U_Buf[ubit]=3;
Disp_changei(U_Buf[ubit]);
ubit=ubit+1;
}
else
{
ubit=0;
}
}break;
case 4:
{
if(ubit<=3)
{
U_Buf[ubit]=4;
Disp_changei(U_Buf[ubit]);
ubit=ubit+1;
}
else
{
ubit=0;
}
}break;
case 5:
{
if(ubit<=3)
{
U_Buf[ubit]=5;
Disp_changei(U_Buf[ubit]);
ubit=ubit+1;
}
else
{
ubit=0;
}
}break;
case 6:
{
if(ubit<=3)
{
U_Buf[ubit]=6;
Disp_changei(U_Buf[ubit]);
ubit=ubit+1;
}
else
{
ubit=0;
}
}break;
case 7:
{
if(ubit<=3)
{
U_Buf[ubit]=7;
Disp_changei(U_Buf[ubit]);
ubit=ubit+1;
}
else
{
ubit=0;
}
}break;
case 8:
{
if(ubit<=3)
{
U_Buf[ubit]=8;
Disp_changei(U_Buf[ubit]);
ubit=ubit+1;
}
else
{
ubit=0;
}
}break;
case 9:
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -