?? last5.c
字號(hào):
//=================================================
//主程序文件名:cyjlast8.c
//字庫(kù)文件名 :wordlast8.h
//完成時(shí)間 :2004年5月28日上午10:00
//參加人員 :王慶宇,王洪亮,李路軍
//綜合調(diào)試完成!準(zhǔn)備明天到現(xiàn)場(chǎng)做試驗(yàn)。
//
//=================================================
#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] // 液晶數(shù)據(jù)地址
#define WRITE 0x00 // SMBus寫(xiě)命令
#define READ 0x01 // SMBus讀命令
#define CHIP_ROM 0xA0 // 芯片24wc256的器件地址
#define CHONGCI_NUM_MAX 15 // 設(shè)定的最大沖次數(shù)
#define CHONGCI_NUM_MIN 1 // 設(shè)定的最小沖次數(shù)
#define CHONGCHENG_SPEED_RATIO_MAX 13 // 設(shè)定的最大沖程速度比13(已經(jīng)乘10)
#define CHONGCHENG_SPEED_RATIO_MIN 07 // 設(shè)定的最小沖程速度比7 (已經(jīng)乘10)
#define addr_volt_max_h_set 0x0001 // 設(shè)定的電壓上限高位
#define addr_volt_max_l_set 0x0002 // 設(shè)定的電壓上限低位
#define addr_volt_min_h_set 0x0003 // 設(shè)定的電壓下限高位
#define addr_volt_min_l_set 0x0004 // 設(shè)定的電壓下限低位
#define addr_current_max_set 0x0005 // 電流上限存儲(chǔ)地址
#define addr_current_min_set 0x0006 // 電流下限存儲(chǔ)地址
#define addr_chongci_num_max 0x0007 // 學(xué)習(xí)或設(shè)定最大沖次數(shù)存儲(chǔ)地址
#define addr_chongci_num_min 0x0008 // 學(xué)習(xí)或設(shè)定最小沖次數(shù)存儲(chǔ)地址
#define addr_chongci_num_gp 0x0009 // 學(xué)習(xí)的工頻沖次數(shù)存儲(chǔ)地址
#define addr_bp_start_delay 0x000a // 變頻器加速時(shí)間存儲(chǔ)地址
#define addr_chongci_num_set 0x000b // 目標(biāo)沖次數(shù)存儲(chǔ)地址
#define addr_chongcheng_speed_ratio_set 0x000c // 目標(biāo)沖程速度比存儲(chǔ)地址
#define addr_bp_fault_flag 0x000d // 變頻故障標(biāo)志存儲(chǔ)地址
#define addr_wz_fault_time 0x000e // 位置傳感器超時(shí)時(shí)間存儲(chǔ)地址(單位:秒)
#define addr_bp_study_flag 0x000f // 變頻啟動(dòng)學(xué)習(xí)標(biāo)志存儲(chǔ)地址
#define addr_gp_study_flag 0x0010 // 工頻啟動(dòng)學(xué)習(xí)標(biāo)志存儲(chǔ)地址
#define addr_pwm_chongci_num_set 0x0011 // 設(shè)定沖次數(shù)對(duì)應(yīng)PWM值的存儲(chǔ)地址
#define addr_pwm_data_up 0x0012 // 上沖程沖次數(shù)對(duì)應(yīng)PWM值的存儲(chǔ)地址
#define addr_pwm_data_down 0x0013 // 下沖程沖次數(shù)對(duì)應(yīng)PWM值的存儲(chǔ)地址
#define addr_i_a_compensate 0x0014 //a相電流補(bǔ)償值存儲(chǔ)地址
#define addr_i_b_compensate 0x0015 //b相電流補(bǔ)償值存儲(chǔ)地址
#define addr_i_c_compensate 0x0016 //c相電流補(bǔ)償值存儲(chǔ)地址
#define addr_u_ab_compensate 0x0017 //ab相電壓補(bǔ)償值存儲(chǔ)地址
#define addr_u_bc_compensate 0x0018 //bc相電壓補(bǔ)償值存儲(chǔ)地址
#define addr_u_ca_compensate 0x0019 //ca相電壓補(bǔ)償值存儲(chǔ)地址
#define addr_bp_start_flag 0x001a //變頻啟動(dòng)標(biāo)志存儲(chǔ)地址
sbit key_out1 = P1^0; //鍵盤(pán)掃描輸出1
sbit key_out2 = P1^1; //鍵盤(pán)掃描輸出2
sbit key_out3 = P1^2; //鍵盤(pán)掃描輸出3
sbit key_in1 = P1^3; //鍵盤(pán)掃描輸入1
sbit key_in2 = P1^4; //鍵盤(pán)掃描輸入2
sbit key_in3 = P1^5; //鍵盤(pán)掃描輸入3
sbit key_in4 = P1^6; //鍵盤(pán)掃描輸入4
sbit in_wz1 = P1^7; //位置傳感器1輸入檢測(cè),下死點(diǎn)
sbit in_wz2 = P2^0; //位置傳感器2輸入檢測(cè),上死點(diǎn)
sbit in_bp_start = P2^1; //變頻啟動(dòng)輸入檢測(cè)
sbit in_gp_start = P2^2; //工頻啟動(dòng)輸入檢測(cè)
sbit in_bp_fault = P2^3; //變頻器故障輸入檢測(cè)
sbit in_add = P2^4; //附加干節(jié)點(diǎn)輸入檢測(cè)
sbit out_rs485_control = P2^5; //RS485收發(fā)控制
sbit out_ad_select_iu1 = P2^6; //AD測(cè)量,切換選擇3路電流電壓
sbit out_ad_select_iu2 = P2^7; //AD測(cè)量,切換選擇3路電流電壓
sbit out_lcd_rst = P3^0; //液晶復(fù)位控制
sbit out_lcd_light = P3^1; //液晶背光燈電源開(kāi)關(guān)控制
sbit out_spk_control = P3^2; //語(yǔ)音報(bào)警控制
sbit out_yemian_rst = P3^3; //液面?zhèn)鞲衅鲝?fù)位控制
sbit out_jt = P3^4; //急停控制
sbit out_bgt = P3^6; //變頻器停止控制
sbit out_bgq = P3^5; //變頻器啟動(dòng)控制
sbit out_add = P3^7; //附加繼電器輸出
//----------全局變量定義----------
uchar bdata bit_byte1;// 進(jìn)行數(shù)制轉(zhuǎn)換時(shí)使用
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;// 進(jìn)行數(shù)制轉(zhuǎn)換時(shí)使用
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;// 進(jìn)行數(shù)制轉(zhuǎn)換時(shí)使用
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; // 臨時(shí)計(jì)時(shí)器(主程序中使用)
uint cycle_measure_timer; // 周期測(cè)量計(jì)時(shí)器(主程序中使用)
uint lcd_light_timer; // 液晶背光燈點(diǎn)亮?xí)r間長(zhǎng)度計(jì)時(shí)器
uint wz1_fault_timer; // 位置傳感器1超時(shí)檢測(cè)計(jì)時(shí)器
uint wz2_fault_timer; // 位置傳感器2超時(shí)檢測(cè)計(jì)時(shí)器
bit wz1_fault_flag; // 位置傳感器1故障標(biāo)志(主程序中使用)
bit wz2_fault_flag; // 位置傳感器2故障標(biāo)志(主程序中使用)
uchar wz1_low_counter; // 位置傳感器1低電平計(jì)數(shù)器
uchar wz2_low_counter; // 位置傳感器2低電平計(jì)數(shù)器
uchar wz1_high_counter; // 位置傳感器1高電平計(jì)數(shù)器
uchar wz2_high_counter; // 位置傳感器2高電平計(jì)數(shù)器
bit wz1_low_flag; // 位置傳感器1檢測(cè)到可靠低電平標(biāo)志
bit wz2_low_flag; // 位置傳感器2檢測(cè)到可靠低電平標(biāo)志
bit wz1_touch_flag; // 位置傳感器1可靠觸發(fā)標(biāo)志(主程序中使用)
bit wz2_touch_flag; // 位置傳感器2可靠觸發(fā)標(biāo)志(主程序中使用)
uchar key_press_counter; // 鍵盤(pán)消抖計(jì)數(shù)器
uchar key_value_previous; // 上一次中斷獲得的鍵值
uchar key_value_main; // 確定的按鍵返回值(主程序中使用)
uint wz_fault_time; // 位置傳感器超時(shí)故障認(rèn)定時(shí)間
uchar xdata year; // 時(shí)鐘芯片操作變量
uchar xdata month;
uchar xdata date;
uchar xdata week;
uchar xdata hour;
uchar xdata minute;
uchar xdata second;
uint xdata measure_data16[501]; // AD采樣臨時(shí)存儲(chǔ)數(shù)組
uint volt_max_set; // 設(shè)定的電壓上限
uchar volt_max_h_set; // 設(shè)定的電壓上限高位
uchar volt_max_l_set; // 設(shè)定的電壓上限低位
uint volt_min_set; // 設(shè)定的電壓下限
uchar volt_min_h_set; // 設(shè)定的電壓下限高位
uchar volt_min_l_set; // 設(shè)定的電壓下限低位
uchar current_max_set;// 設(shè)定的電流最大值
uchar current_min_set;// 設(shè)定的電流最小值
uint volt_ab_present_measure; // 電壓測(cè)量的當(dāng)前值
uint volt_bc_present_measure;
uint volt_ca_present_measure;
uchar current_a_present_measure; // 電流測(cè)量的當(dāng)前值
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; // 電壓故障點(diǎn)計(jì)數(shù)器
uchar xdata volt_bc_fault_counter;
uchar xdata volt_ca_fault_counter;
bit volt_ab_fault_flag; // 電壓故障標(biāo)志
bit volt_bc_fault_flag;
bit volt_ca_fault_flag;
uchar xdata current_a_low_fault_counter; // 電流過(guò)小故障點(diǎn)計(jì)數(shù)器
uchar xdata current_b_low_fault_counter;
uchar xdata current_c_low_fault_counter;
bit current_a_low_fault_flag; // 電流過(guò)小故障標(biāo)志
bit current_b_low_fault_flag;
bit current_c_low_fault_flag;
uchar xdata current_a_high_fault_counter;// 電流過(guò)大故障點(diǎn)計(jì)數(shù)器
uchar xdata current_b_high_fault_counter;
uchar xdata current_c_high_fault_counter;
bit current_a_high_fault_flag; // 電流過(guò)大故障標(biāo)志
bit current_b_high_fault_flag;
bit current_c_high_fault_flag;
uchar xdata current_a_fault_counter; // 工頻電流故障點(diǎn)計(jì)數(shù)器
uchar xdata current_b_fault_counter;
uchar xdata current_c_fault_counter;
bit current_a_fault_flag; // 工頻電流故障標(biāo)志
bit current_b_fault_flag;
bit current_c_fault_flag;
uchar chongci_num_max; // 最大沖次數(shù),PWM=255時(shí)測(cè)量
uchar chongci_num_min; // 最小沖次數(shù),PWM=5時(shí)測(cè)量
uchar chongci_num_set; // 目標(biāo)沖次數(shù)(已經(jīng)乘10)
uchar chongcheng_speed_ratio_set; // 目標(biāo)沖程速度比(已經(jīng)乘10)
uchar chongci_num_down; // 計(jì)算的下沖程沖次數(shù)(已經(jīng)乘10)
uchar chongci_num_up; // 計(jì)算的上沖程沖次數(shù)(已經(jīng)乘10)
uchar pwm_chongci_num_set; // 目標(biāo)沖次數(shù)對(duì)應(yīng)的PWM數(shù)值
uchar pwm_data_up; // 上沖程PWM數(shù)值
uchar pwm_data_down; // 下沖程PWM數(shù)值
uchar bp_start_delay; // 設(shè)定的變頻器加速時(shí)間
uchar chongci_num_gp; // 測(cè)量的工頻沖次數(shù)(已經(jīng)乘10)
//uchar cycle_finish_counter; // 周期完成計(jì)數(shù)器
bit bp_fault_flag; // 變頻故障標(biāo)志
bit bp_start_flag; // 變頻啟動(dòng)標(biāo)志
bit gp_start_flag; // 工頻啟動(dòng)標(biāo)志
bit bp_study_flag; // 變頻啟動(dòng)學(xué)習(xí)標(biāo)志
bit gp_study_flag; // 工頻啟動(dòng)學(xué)習(xí)標(biāo)志
int xdata calculate; //參數(shù)設(shè)定時(shí)使用的步長(zhǎng)
uint xdata x_volt_max_set; //參數(shù)設(shè)定時(shí)使用的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相電流補(bǔ)償值
char xdata i_b_compensate; // b相電流補(bǔ)償值
char xdata i_c_compensate; // c相電流補(bǔ)償值
char xdata u_ab_compensate; //ab相電壓補(bǔ)償值
char xdata u_bc_compensate; //bc相電壓補(bǔ)償值
char xdata u_ca_compensate; //ca相電壓補(bǔ)償值
//函數(shù)說(shuō)明
void delay(uint i);//軟件循環(huán)延時(shí)
void sp_out(uchar shu);//串口發(fā)射1字節(jié)
uchar hex_askii(uchar data_hex);//十六進(jìn)制數(shù)轉(zhuǎn)換成ASKII碼
void change2_hex_askii(uchar shu_byte);//將1字節(jié)拆分成2個(gè)ASKII碼
void sp_out2(void);//串口發(fā)射拆分后的2個(gè)ASKII碼
void write_com_lcd(int n);//液晶寫(xiě)命令
void write_data_lcd(int m);//液晶寫(xiě)數(shù)據(jù)
void clear_lcd(int csrl,int csrh,int datal);//液晶清屏
void init_lcd(void);//液晶初始化
void displaych(int x,int y,uchar *d);//顯示1個(gè)漢字
void ad_channel_select(uchar ad_channels_select);//ADC0通道選擇: 0x00電流,0x01電壓
void iu_channel_select(uchar iu_channels_select);//模擬開(kāi)關(guān)通道切換
uint ad_sampling(void);//AD采樣,去壞點(diǎn)后求均值
uchar reverse_byte_hl(uchar clock_data);//將時(shí)鐘數(shù)據(jù)從高位到低位顛倒
void read_time(void);//讀時(shí)鐘
void write_time(void);//寫(xiě)時(shí)鐘
uchar SM_Receive (char chip_select, uint byte_address);//從24WC256讀1字節(jié)
void SM_Send (char chip_select, uint byte_address, char out_byte);//向24WC256寫(xiě)1字節(jié)
uint change_2byte_1word(uchar datah,uchar datal);//將高位和低位字節(jié)合成1個(gè)字
void init_cpu(void);//初始化CPU
void init_program_parameter(void);//從24WC256里讀數(shù)據(jù)初始化程序運(yùn)行參數(shù)
void switch_bp_gp(void);//控制變頻運(yùn)行切換到工頻運(yùn)行
uchar change_bcd_hex(uchar shu);//BCD到HEX轉(zhuǎn)換
uchar change_hex_bcd(uchar shu);//HEX到BCD轉(zhuǎn)換
void xianshi_hanzi_chuan(int hang,int lie,uchar nei_rong[]);//顯示漢字串,hl edit
void xianshi_hanzi_dan(int hang,int lie,uchar order);//顯示單個(gè)漢字,hl edit
void xianshi_shuzi_dan(int hang,int lie,uchar order);//顯示單個(gè)數(shù)字,hl edit
void xianshi_fuhao_dan(int hang,int lie,uchar order);//顯示單個(gè)符號(hào),hl edit
void xianshi_spaces_hanzi(int hang,int lie,uchar nei_rong[],uchar space_longth);
//對(duì)指定區(qū)域刷新后顯示文本信息
void xianshi_spaces_data(int hang, int lie, uchar area_long, uchar dot, uint split_data, uchar zf);
//對(duì)指定區(qū)域刷新后顯示數(shù)字信息
void menu_selftest(void); //顯示文本“系統(tǒng)正在自檢···”
void menu_bp_before_run(void);//顯示文本“變頻啟動(dòng)監(jiān)測(cè)···”
void menu_gp_before_run(void);//顯示文本“工頻啟動(dòng)監(jiān)測(cè)···”
void menu_wait(void); //顯示“啟動(dòng)前循環(huán)監(jiān)測(cè)靜態(tài)界面”
void menu_bp_run(void); //顯示“變頻運(yùn)行監(jiān)測(cè)靜態(tài)界面”
void menu_gp_run(void); //顯示“工頻運(yùn)行監(jiān)測(cè)靜態(tài)界面”
void menu_setup_static(void); //顯示“設(shè)置靜態(tài)界面”
void menu_setup(void); //參數(shù)設(shè)置,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初始化
// 變量初始化
//-----------------------------------------------
?? 快捷鍵說(shuō)明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -