📄 main.c
字号:
/******************************
名字: main.c
作者: 春风
创建日: 2008.8.15
工程: 数控稳压电源
*******************************/
#include"reg52.h"
#include"delay.h"
#include"Config.h"
#include"IOCfg.c"
#include"AD7705.h"
#include"DACMAX531.h"
#include"KEY.h"
#include"LCD12864.h"
#include"MENU.h"
//#include"stdlib.h"
char code dx516[3] _at_ 0x003b;//这是为了仿真设置的(大虾仿真器)
idata uchar GOUT[7];//在片内定义间接寻址的数组
static idata uchar x[6] = {0,0,0,0,0,0}; //---定义一个数组 按键数值 存放
static uchar set_lcd_temp;// lcd刷新计数
static idata float dac_temp;
uchar aaa;
//idata float key_vol = 0.0000;
/************************************************************************************
把浮点数拆开存储指针型数据
************************************************************************************/
void chai(float x)
{
uint i;
for(i = 0;i < 7;i ++)
{
GOUT[i] = 0;
}
i = x / 10;
if(i == 0)
{
GOUT[0] = ' ';
}
else
{
GOUT[0] = i + '0';
}
GOUT[1] = (int)x % 10 + '0';
x = x * 10;
GOUT[3] = (int)x % 10 + '0';
x = x * 10;
GOUT[4] = (int)x % 10 + '0';
x = (x * 10);
GOUT[5] = (unsigned int)x % 10 + '0';
GOUT[2] = '.';
GOUT[6] = '\0';
}
/************************************************************************************
显示设定电压
************************************************************************************/
void disp_set(float set_temp1)
{
lcm_w_word(0x90,0x00,"设定:");
chai(set_temp1 +0.0003);
lcm_w_word(0x90,3,GOUT);
lcm_w_word(0x90,0x06,"V ");
}
/************************************************************************************
扫描按键,并根据键值修改DAC的电压
用数字键输入电压值 ,和加减电压1V和0.1V
************************************************************************************/
void key_dac(uchar key_temp)
{
uchar j = 0;
uchar i;
static uchar ii = 0;
//static uchar key_temp;
set_lcd_temp = 0;
//key_temp = key_num();
if(((key_temp <= 0x09) && (key_temp >= 0x00)) || (key_temp == '.'))
{
if(ii == 0)
{ w_code(0x93);
for(ii = 0;ii < 6;ii ++)
{
w_data(' ');
}
ii = 0;
}
if(ii > 5)
{
for(i = 0;i < 5;i ++)
{x[i] = 0;}
w_code(0x93);
for(j = 0;j < 6;j++)
{w_data(' ');}
ii = 0;
}
x[ii] = key_temp;
ii ++;
if(ii != 0)
{
w_code(0x93);
for(j = 0;j < ii;j++)
{
if(x[j] == '.')
{
w_data('.');
}
else
{
w_data(x[j] + 0x30);
}
}
}
lcm_w_word(0x90,0x06,"V ");
BELL_ONOFF(1);
delay(14000);
BELL_ONOFF(0);
}
if(ii != 0)
{
if(key_temp == key_enter)
{
idata float key_vol = 0.0000;
idata float chu = 10;
uchar y = 0;
j = 0;
while((x[j] != '.') && (j < 6))
j ++;
if(j == 6)
{
x[ii] = '.';
}
ii = 0;
while((x[y] != '.') && (y < 6))
key_vol = key_vol * 10 + x[y ++];
y ++;
while(y < 6)
{
key_vol = key_vol + x[y ++] / chu;
chu = chu * 10;
}
for(ii = 0;ii < 6;ii ++)
{
x[ii] = 0;
}
ii = 0;
j = 0;
dac_temp = key_vol;
RS = 1;
RW = 0;
if((dac_temp < 0) || (dac_temp >= 30.10))
{
dac_temp = 0;
lcm_w_word(0x90,0x03," 无效 ");
BELL_ONOFF(1);
delay(7000);
BELL_ONOFF(0);
delay(10000);
BELL_ONOFF(1);
delay(7000);
BELL_ONOFF(0);
delay(10000);
BELL_ONOFF(1);
delay(7000);
BELL_ONOFF(0);
delay(60000);
disp_set(dac_temp);
dac(conver(dac_temp));
}
else
{
disp_set(dac_temp);
dac(conver(dac_temp));
BELL_ONOFF(1);
delay(14000);
BELL_ONOFF(0);
}
}
}
switch(key_temp)
{
case key_shang:dac_temp = dac_temp + 1.0;break;//---按下上键电压加1V
case key_xia :dac_temp = dac_temp - 1.0;break;//---按下下键电压减1
case key_zuo :dac_temp = dac_temp - 0.1;break;//---按下左键电压减0.1
case key_you :dac_temp = dac_temp + 0.1;break;//---按下右键电压加0.1
default: key_temp = 0xff;
}
if(key_temp != 0xff)
{
uchar i;
for(i = 0;i < 5;i ++)
{
x[i] = 0;
}
w_code(0x93);
for(i = 0;i < 6;i++)
{
w_data(' ');
}
ii = 0;
RS = 1;
RW = 0;
if((dac_temp < 0) || (dac_temp >= 30.10))
{
dac_temp = 0;
lcm_w_word(0x90,0x03," 无效 ");
BELL_ONOFF(1);
delay(7000);
BELL_ONOFF(0);
delay(10000);
BELL_ONOFF(1);
delay(7000);
BELL_ONOFF(0);
delay(10000);
BELL_ONOFF(1);
delay(7000);
BELL_ONOFF(0);
delay(60000);
disp_set(dac_temp);
dac(conver(dac_temp));
}
else
{
disp_set(dac_temp);
dac(conver(dac_temp));
BELL_ONOFF(1);
delay(14000);
BELL_ONOFF(0);
}
}
}
/************************************************************************************
上电初始屏显示
************************************************************************************/
void disp_start()
{
lcd_rst();
set_zifu();
lcm_w_word(0x80,0x02,"稳压电源");
lcm_w_word(0x90,0x00,"设定:");
lcm_w_word(0x88,0x00,"电压:");
lcm_w_word(0x98,0x00,"电流:");
chai(0);
lcm_w_word(0x90,3,GOUT);
lcm_w_word(0x90,0x06,"V ");
chai(0);
lcm_w_word(0x88,3,GOUT);
lcm_w_word(0x8e,0x00,"V ");
chai(0);
lcm_w_word(0x98,3,GOUT);
lcm_w_word(0x9e,0x00,"A ");
}
/************************************************************************************
读AD计算并送显示
************************************************************************************/
void read_ad_disp(void)
{
static bit U_or_I;
if(U_or_I == 1)
{
if(AD_DRDY == 0)
{
chai(adjisuan_U(readAD_data()));
lcm_w_word(0x88,3,GOUT);
lcm_w_word(0x8e,0x00,"V ");
U_or_I = 0;
write_ad(0x11);
write_ad(0x14);
write_ad(0x39);
}
}
else
{
if(AD_DRDY == 0)
{
chai(adjisuan_I(readAD_data()));
lcm_w_word(0x98,3,GOUT);
lcm_w_word(0x9e,0x00,"A ");
U_or_I = 1;
write_ad(0x10);
write_ad(0x04);
write_ad(0x38);
}
}
}
void main(void)
{
uchar key_linshi;
LED_ONOFF(1);
BELL_ONOFF(0);
dac_temp = 0 ;
dac(conver(dac_temp));
BELL_ONOFF(0);
lcd_rst();
lcd_clr();
set_huitu();
delay(6000);
BELL_ONOFF(0);
disp_start();
rst_ad();
BELL_ONOFF(1);
set_7705_ch(0);
write_ad(0x38);
delayms(100);
readAD_data();
set_7705_ch(1);
write_ad(0x39);
delayms(100);
readAD_data();
BELL_ONOFF(0);
disp_set(0);
while(1)
{
lcm_w_word(0x80,0x00," 稳压电源 ");
lcm_w_word(0x90,0x00,"设定:");
lcm_w_word(0x88,0x00,"电压:");
lcm_w_word(0x98,0x00,"电流:");
read_ad_disp();
key_linshi = key_num();
Menu(key_linshi);
key_dac(key_linshi);
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -