📄 last5.c
字号:
//=================================================
//主程序文件名:cyjlast8.c
//字库文件名 :wordlast8.h
//完成时间 :2004年5月28日上午10:00
//参加人员 :王庆宇,王洪亮,李路军
//综合调试完成!准备明天到现场做试验。
//
//=================================================
#include <c8051f020.h>
#include <stdio.h>
#include <math.h>
#include <absacc.h>
#include <wordlast8.h>
#define uchar unsigned char
#define uint unsigned int
#define addr_commond XBYTE[0x7fff] // 液晶命令地址
#define addr_data XBYTE[0x7eff] // 液晶数据地址
#define WRITE 0x00 // SMBus写命令
#define READ 0x01 // SMBus读命令
#define CHIP_ROM 0xA0 // 芯片24wc256的器件地址
#define CHONGCI_NUM_MAX 15 // 设定的最大冲次数
#define CHONGCI_NUM_MIN 1 // 设定的最小冲次数
#define CHONGCHENG_SPEED_RATIO_MAX 13 // 设定的最大冲程速度比13(已经乘10)
#define CHONGCHENG_SPEED_RATIO_MIN 07 // 设定的最小冲程速度比7 (已经乘10)
#define addr_volt_max_h_set 0x0001 // 设定的电压上限高位
#define addr_volt_max_l_set 0x0002 // 设定的电压上限低位
#define addr_volt_min_h_set 0x0003 // 设定的电压下限高位
#define addr_volt_min_l_set 0x0004 // 设定的电压下限低位
#define addr_current_max_set 0x0005 // 电流上限存储地址
#define addr_current_min_set 0x0006 // 电流下限存储地址
#define addr_chongci_num_max 0x0007 // 学习或设定最大冲次数存储地址
#define addr_chongci_num_min 0x0008 // 学习或设定最小冲次数存储地址
#define addr_chongci_num_gp 0x0009 // 学习的工频冲次数存储地址
#define addr_bp_start_delay 0x000a // 变频器加速时间存储地址
#define addr_chongci_num_set 0x000b // 目标冲次数存储地址
#define addr_chongcheng_speed_ratio_set 0x000c // 目标冲程速度比存储地址
#define addr_bp_fault_flag 0x000d // 变频故障标志存储地址
#define addr_wz_fault_time 0x000e // 位置传感器超时时间存储地址(单位:秒)
#define addr_bp_study_flag 0x000f // 变频启动学习标志存储地址
#define addr_gp_study_flag 0x0010 // 工频启动学习标志存储地址
#define addr_pwm_chongci_num_set 0x0011 // 设定冲次数对应PWM值的存储地址
#define addr_pwm_data_up 0x0012 // 上冲程冲次数对应PWM值的存储地址
#define addr_pwm_data_down 0x0013 // 下冲程冲次数对应PWM值的存储地址
#define addr_i_a_compensate 0x0014 //a相电流补偿值存储地址
#define addr_i_b_compensate 0x0015 //b相电流补偿值存储地址
#define addr_i_c_compensate 0x0016 //c相电流补偿值存储地址
#define addr_u_ab_compensate 0x0017 //ab相电压补偿值存储地址
#define addr_u_bc_compensate 0x0018 //bc相电压补偿值存储地址
#define addr_u_ca_compensate 0x0019 //ca相电压补偿值存储地址
#define addr_bp_start_flag 0x001a //变频启动标志存储地址
sbit key_out1 = P1^0; //键盘扫描输出1
sbit key_out2 = P1^1; //键盘扫描输出2
sbit key_out3 = P1^2; //键盘扫描输出3
sbit key_in1 = P1^3; //键盘扫描输入1
sbit key_in2 = P1^4; //键盘扫描输入2
sbit key_in3 = P1^5; //键盘扫描输入3
sbit key_in4 = P1^6; //键盘扫描输入4
sbit in_wz1 = P1^7; //位置传感器1输入检测,下死点
sbit in_wz2 = P2^0; //位置传感器2输入检测,上死点
sbit in_bp_start = P2^1; //变频启动输入检测
sbit in_gp_start = P2^2; //工频启动输入检测
sbit in_bp_fault = P2^3; //变频器故障输入检测
sbit in_add = P2^4; //附加干节点输入检测
sbit out_rs485_control = P2^5; //RS485收发控制
sbit out_ad_select_iu1 = P2^6; //AD测量,切换选择3路电流电压
sbit out_ad_select_iu2 = P2^7; //AD测量,切换选择3路电流电压
sbit out_lcd_rst = P3^0; //液晶复位控制
sbit out_lcd_light = P3^1; //液晶背光灯电源开关控制
sbit out_spk_control = P3^2; //语音报警控制
sbit out_yemian_rst = P3^3; //液面传感器复位控制
sbit out_jt = P3^4; //急停控制
sbit out_bgt = P3^6; //变频器停止控制
sbit out_bgq = P3^5; //变频器启动控制
sbit out_add = P3^7; //附加继电器输出
//----------全局变量定义----------
uchar bdata bit_byte1;// 进行数制转换时使用
sbit bit_byte1_7=bit_byte1^7;
sbit bit_byte1_6=bit_byte1^6;
sbit bit_byte1_5=bit_byte1^5;
sbit bit_byte1_4=bit_byte1^4;
sbit bit_byte1_3=bit_byte1^3;
sbit bit_byte1_2=bit_byte1^2;
sbit bit_byte1_1=bit_byte1^1;
sbit bit_byte1_0=bit_byte1^0;
uchar bdata bit_byte2;// 进行数制转换时使用
sbit bit_byte2_7=bit_byte2^7;
sbit bit_byte2_6=bit_byte2^6;
sbit bit_byte2_5=bit_byte2^5;
sbit bit_byte2_4=bit_byte2^4;
sbit bit_byte2_3=bit_byte2^3;
sbit bit_byte2_2=bit_byte2^2;
sbit bit_byte2_1=bit_byte2^1;
sbit bit_byte2_0=bit_byte2^0;
uchar bdata bit_byte3;// 进行数制转换时使用
sbit bit_byte3_7=bit_byte3^7;
sbit bit_byte3_6=bit_byte3^6;
sbit bit_byte3_5=bit_byte3^5;
sbit bit_byte3_4=bit_byte3^4;
sbit bit_byte3_3=bit_byte3^3;
sbit bit_byte3_2=bit_byte3^2;
sbit bit_byte3_1=bit_byte3^1;
sbit bit_byte3_0=bit_byte3^0;
uint timer0_10ms; // 临时计时器(主程序中使用)
uint cycle_measure_timer; // 周期测量计时器(主程序中使用)
uint lcd_light_timer; // 液晶背光灯点亮时间长度计时器
uint wz1_fault_timer; // 位置传感器1超时检测计时器
uint wz2_fault_timer; // 位置传感器2超时检测计时器
bit wz1_fault_flag; // 位置传感器1故障标志(主程序中使用)
bit wz2_fault_flag; // 位置传感器2故障标志(主程序中使用)
uchar wz1_low_counter; // 位置传感器1低电平计数器
uchar wz2_low_counter; // 位置传感器2低电平计数器
uchar wz1_high_counter; // 位置传感器1高电平计数器
uchar wz2_high_counter; // 位置传感器2高电平计数器
bit wz1_low_flag; // 位置传感器1检测到可靠低电平标志
bit wz2_low_flag; // 位置传感器2检测到可靠低电平标志
bit wz1_touch_flag; // 位置传感器1可靠触发标志(主程序中使用)
bit wz2_touch_flag; // 位置传感器2可靠触发标志(主程序中使用)
uchar key_press_counter; // 键盘消抖计数器
uchar key_value_previous; // 上一次中断获得的键值
uchar key_value_main; // 确定的按键返回值(主程序中使用)
uint wz_fault_time; // 位置传感器超时故障认定时间
uchar xdata year; // 时钟芯片操作变量
uchar xdata month;
uchar xdata date;
uchar xdata week;
uchar xdata hour;
uchar xdata minute;
uchar xdata second;
uint xdata measure_data16[501]; // AD采样临时存储数组
uint volt_max_set; // 设定的电压上限
uchar volt_max_h_set; // 设定的电压上限高位
uchar volt_max_l_set; // 设定的电压上限低位
uint volt_min_set; // 设定的电压下限
uchar volt_min_h_set; // 设定的电压下限高位
uchar volt_min_l_set; // 设定的电压下限低位
uchar current_max_set;// 设定的电流最大值
uchar current_min_set;// 设定的电流最小值
uint volt_ab_present_measure; // 电压测量的当前值
uint volt_bc_present_measure;
uint volt_ca_present_measure;
uchar current_a_present_measure; // 电流测量的当前值
uchar current_b_present_measure;
uchar current_c_present_measure;
uchar current_a_max_measure; // 单周期电流峰值
uchar current_b_max_measure;
uchar current_c_max_measure;
uchar xdata volt_ab_fault_counter; // 电压故障点计数器
uchar xdata volt_bc_fault_counter;
uchar xdata volt_ca_fault_counter;
bit volt_ab_fault_flag; // 电压故障标志
bit volt_bc_fault_flag;
bit volt_ca_fault_flag;
uchar xdata current_a_low_fault_counter; // 电流过小故障点计数器
uchar xdata current_b_low_fault_counter;
uchar xdata current_c_low_fault_counter;
bit current_a_low_fault_flag; // 电流过小故障标志
bit current_b_low_fault_flag;
bit current_c_low_fault_flag;
uchar xdata current_a_high_fault_counter;// 电流过大故障点计数器
uchar xdata current_b_high_fault_counter;
uchar xdata current_c_high_fault_counter;
bit current_a_high_fault_flag; // 电流过大故障标志
bit current_b_high_fault_flag;
bit current_c_high_fault_flag;
uchar xdata current_a_fault_counter; // 工频电流故障点计数器
uchar xdata current_b_fault_counter;
uchar xdata current_c_fault_counter;
bit current_a_fault_flag; // 工频电流故障标志
bit current_b_fault_flag;
bit current_c_fault_flag;
uchar chongci_num_max; // 最大冲次数,PWM=255时测量
uchar chongci_num_min; // 最小冲次数,PWM=5时测量
uchar chongci_num_set; // 目标冲次数(已经乘10)
uchar chongcheng_speed_ratio_set; // 目标冲程速度比(已经乘10)
uchar chongci_num_down; // 计算的下冲程冲次数(已经乘10)
uchar chongci_num_up; // 计算的上冲程冲次数(已经乘10)
uchar pwm_chongci_num_set; // 目标冲次数对应的PWM数值
uchar pwm_data_up; // 上冲程PWM数值
uchar pwm_data_down; // 下冲程PWM数值
uchar bp_start_delay; // 设定的变频器加速时间
uchar chongci_num_gp; // 测量的工频冲次数(已经乘10)
//uchar cycle_finish_counter; // 周期完成计数器
bit bp_fault_flag; // 变频故障标志
bit bp_start_flag; // 变频启动标志
bit gp_start_flag; // 工频启动标志
bit bp_study_flag; // 变频启动学习标志
bit gp_study_flag; // 工频启动学习标志
int xdata calculate; //参数设定时使用的步长
uint xdata x_volt_max_set; //参数设定时使用的XDATA
uint xdata x_volt_min_set;
uchar xdata x_current_max_set;
uchar xdata x_current_min_set;
uchar xdata x_chongci_num_min;
uchar xdata x_chongci_num_max;
uchar xdata x_chongci_num_set;
uchar xdata x_chongcheng_speed_ratio_set;
uchar xdata x_bp_start_delay;
char xdata i_a_compensate; // a相电流补偿值
char xdata i_b_compensate; // b相电流补偿值
char xdata i_c_compensate; // c相电流补偿值
char xdata u_ab_compensate; //ab相电压补偿值
char xdata u_bc_compensate; //bc相电压补偿值
char xdata u_ca_compensate; //ca相电压补偿值
//函数说明
void delay(uint i);//软件循环延时
void sp_out(uchar shu);//串口发射1字节
uchar hex_askii(uchar data_hex);//十六进制数转换成ASKII码
void change2_hex_askii(uchar shu_byte);//将1字节拆分成2个ASKII码
void sp_out2(void);//串口发射拆分后的2个ASKII码
void write_com_lcd(int n);//液晶写命令
void write_data_lcd(int m);//液晶写数据
void clear_lcd(int csrl,int csrh,int datal);//液晶清屏
void init_lcd(void);//液晶初始化
void displaych(int x,int y,uchar *d);//显示1个汉字
void ad_channel_select(uchar ad_channels_select);//ADC0通道选择: 0x00电流,0x01电压
void iu_channel_select(uchar iu_channels_select);//模拟开关通道切换
uint ad_sampling(void);//AD采样,去坏点后求均值
uchar reverse_byte_hl(uchar clock_data);//将时钟数据从高位到低位颠倒
void read_time(void);//读时钟
void write_time(void);//写时钟
uchar SM_Receive (char chip_select, uint byte_address);//从24WC256读1字节
void SM_Send (char chip_select, uint byte_address, char out_byte);//向24WC256写1字节
uint change_2byte_1word(uchar datah,uchar datal);//将高位和低位字节合成1个字
void init_cpu(void);//初始化CPU
void init_program_parameter(void);//从24WC256里读数据初始化程序运行参数
void switch_bp_gp(void);//控制变频运行切换到工频运行
uchar change_bcd_hex(uchar shu);//BCD到HEX转换
uchar change_hex_bcd(uchar shu);//HEX到BCD转换
void xianshi_hanzi_chuan(int hang,int lie,uchar nei_rong[]);//显示汉字串,hl edit
void xianshi_hanzi_dan(int hang,int lie,uchar order);//显示单个汉字,hl edit
void xianshi_shuzi_dan(int hang,int lie,uchar order);//显示单个数字,hl edit
void xianshi_fuhao_dan(int hang,int lie,uchar order);//显示单个符号,hl edit
void xianshi_spaces_hanzi(int hang,int lie,uchar nei_rong[],uchar space_longth);
//对指定区域刷新后显示文本信息
void xianshi_spaces_data(int hang, int lie, uchar area_long, uchar dot, uint split_data, uchar zf);
//对指定区域刷新后显示数字信息
void menu_selftest(void); //显示文本“系统正在自检···”
void menu_bp_before_run(void);//显示文本“变频启动监测···”
void menu_gp_before_run(void);//显示文本“工频启动监测···”
void menu_wait(void); //显示“启动前循环监测静态界面”
void menu_bp_run(void); //显示“变频运行监测静态界面”
void menu_gp_run(void); //显示“工频运行监测静态界面”
void menu_setup_static(void); //显示“设置静态界面”
void menu_setup(void); //参数设置,hl edit
//void key_set_dispose(void);
//void key_look_dispose(void);
//void key_browse_page_dispose(void);
//void key_password_dispose(void);
//==============================================================================================
// 主程序
//==============================================================================================
void main (void)
{
uchar wqy,key_flag;
uint i;
init_cpu(); // CPU资源初始化
init_lcd(); // LCD初始化
// 变量初始化
//-----------------------------------------------
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -