自动称量参考程序.docx
- 文档编号:4674856
- 上传时间:2022-12-07
- 格式:DOCX
- 页数:58
- 大小:25.05KB
自动称量参考程序.docx
《自动称量参考程序.docx》由会员分享,可在线阅读,更多相关《自动称量参考程序.docx(58页珍藏版)》请在冰豆网上搜索。
自动称量参考程序
自动称量参考程序.c
#
#
/
#
#
include
defineFOSC22118400L
***定义通讯协议***/
definesend_zhen_tousend_data1(0xEE);
definesend_zhen_wen
send_data1(0xFF);send_data1(0xFC);send_data1(0xFF);send_data1(0xF
F);
/
*
*************定义程序必须有的变量
*******************************/
bitbusy=0;//COM1使用
sbitsck=P0^3;//定义HX711的SCK
sbitd_out=P0^2;//定义HX711的D_0UT引脚
sbitk_1=P3^2;
sbitk_2=P3^3;
sbitk_3=P3^4;
sbitk_4=P3^5;
sbitk_5=P2^0;//定义了5个开关量输入
sbitstep_en=P2^2;
sbitstep_dir=P2^3;
/
/sbitstep_pul=P2^4;//定义步进电机驱动引脚
sbitjd1=P1^7;
sbitjd2=P1^6;//定义继电器驱动引脚
************通信使用命令********************/
xdataunsignedcharread_hua_mian_id[8]=
0XEE,0XB1,0X01,0XFF,0XFC,0XFF,0XFF,0xcc};
/
{
xdataunsignedchar
shua_xin_off[8]={0xee,0xb3,0x00,0xff,0xfc,0xff,0xff,0xcc};
xdataunsignedchar
shua_xin_on[8]={0xee,0xb3,0x01,0xff,0xfc,0xff,0xff,0xcc};
xdataunsignedchar
feng_ming[8]={0XEE,0X61,0X32,0XFF,0XFC,0XFF,0XFF,0XCC};
/
**********声明无需存入EEPROM的变量******************/
unsignedcharsend_message[20]=0;//发送帧消息专用数组
unsignedcharread_message[20]=0;//接收消息专用缓冲区
unsignedcharuart_read_f=0;
unsignedcharuart_read_count=0;
unsignedlonghx711_ad=0;//HX711AD转换结果
unsignedlongad_bi_jiao=0;
unsignedintstep_f=0;//存放频率计算结果
unsignedintlin_step_f=10;
unsignedcharhua_mian_id=0;
floatxi_shu_xiao=0.0;
floatxi_shu_da=0.0;
unsignedlongmu_biao_liang_1=0;//实际进料时,去掉提前量的数值
第1页
自动称量参考程序.c
unsignedlongmu_biao_liang_8=0;//X0.8的数值
unsignedlongshi_shi_zhi_liang=0;//动态,实时质量
/***********声明需要存入EEPROM的变量**********/
unsignedintmi_ma=0;
unsignedintstep_fast=0;//步进电机快速运行的频率
unsignedintstep_low=0;//步进电机慢速运行的频率
unsignedlongmu_biao_liang=0;//目标量
unsignedlongpian_yi=0;//质量偏移
unsignedcharlv_bo=0;//滤波系数
unsignedintfa_ma_da=0;//校准时大砝码的
unsignedintfa_ma_zhong=0;//校准时中砝码质量
unsignedintfa_ma_xiao=0;//校准时小砝码质量
unsignedlongcai_yang_da=0;//校准时,大砝码采样值
unsignedlongcai_yang_zhong=0;//较准时,中砝码采样值
unsignedlongcai_yang_xiao=0;//较准时,小砝码采样值
unsignedcharliang_du=130;//默认亮度130
floatpi_zhong=0;//定义皮重
/************声明子函数********************/
voiduse_k(void);
voidsend_data1(unsignedchardat);
voidsend_str1(char*s);
voidnum_to_message(unsignedlongdat);
unsignedlonghx711_10(void);
voidstep_control(unsignedchark,unsignedintf);
voidupdata_zhong_liang(unsignedlongke);
voiddelay_1ms(unsignedchark);
voiddelay_50ms(unsignedintm);
voidset_txt(unsignedcharscreen_id,unsignedchar
control_id,unsignedlongdat,unsignedcharcounter);
voidying_jian_ce_shi(void);
unsignedinttft_read_txt(unsignedcharhua_mian,unsignedchar
txt);
voidshu_ru_mi_ma(void);
voidtft_show_6bit(unsignedcharhua_mian,unsignedchar
txt,unsignedlongnum);
voidcan_shu_she_zhi(void);
voidtft_show_4bit(unsignedcharhua_mian,unsignedchar
txt,unsignedintnum);
voidjiao_cheng(void);
unsignedintass_to_num_4bit(unsignedchar*p);
unsignedlongass_num_dot(unsignedchar*p);
voidte_shu_mi_ma(void);
voidsave_eeprom(unsignedintadd,unsignedlongdat);
unsignedlongread_eeprom(unsignedintadd);
第2页
自动称量参考程序.c
voidget_xi_shu(void);
floatget_zhi_liang(void);
unsignedlongshi_ji_zhong_liang(void);
voidmao_pao_pai_xu(unsignedlong*a,unsignedcharchang_du);
voidzheng_chang_xia_liao(void);
voidkuai_su_qing_liao(void);
voidset_mu_biao_liang(void);
/*************主函数**********************/
voidmain()
{
P0M1=0;P0M0=0;
jd1=0;jd2=0;
P1M1=0;P1M0=0xff;
jd1=0;jd2=0;
P2M1=0x10;P2M0=0;
P3M1=0;P3M0=0;
P4M1=0;P4M0=0;
P5M1=0;P5M0=0;
SCON=0x50;
AUXR=0x15;//COM1,COM2,控制波特率发生器
T2L=0xD0;
T2H=0xFF;//波特率设置
AUXR1|=0X40;
PS=1;
ES=1;//允许串行口中断
AUXR1|=0X20;
CMOD=0X02;
step_f=FOSC/4/3000;
CCON=0;
CH=0;
CL=0;
CCAP0L=step_f;
CCAP0H=step_f>>8;
CCAPM0=0x4d;
CR=0;
/
/
**********************************/
EA=1;//允许CPU总中断
step_en=1;
step_dir=1;
delay_1ms(250);//250ms
*********读取**EEPROM**********/
mi_ma=read_eeprom
(1);
step_fast=read_eeprom
(2);
step_low=read_eeprom(3);
mu_biao_liang=read_eeprom(4);
第3页
自动称量参考程序.c
pian_yi=read_eeprom(5);
lv_bo=read_eeprom(6);
fa_ma_da=read_eeprom(7);
fa_ma_zhong=read_eeprom(8);
fa_ma_xiao=read_eeprom(9);
cai_yang_da=read_eeprom(10);
cai_yang_zhong=read_eeprom(11);
cai_yang_xiao=read_eeprom(12);
liang_du=read_eeprom(13);
pi_zhong=read_eeprom(14);
/
/
**************************/
k_1=1;
k_2=1;
k_3=1;
k_4=1;
k_5=1;
****************停留在开机画面*****************/
while(hua_mian_id==0)
{
send_str1(read_hua_mian_id);
/获取有效的画面ID结果
/
if((read_message[1]==0xB1)&(read_message[2]==0x01))
hua_mian_id=read_message[4];
}
/
*********发送亮度控制信号**********/
send_zhen_tou;
send_data1(0x60);
send_data1(liang_du);
send_zhen_wen;//将亮度调暗到130
delay_1ms(100);//200ms,使传感器电源供给稳定
get_xi_shu();//计算称重系数
pi_zhong=hx711_10();
set_txt(1,6,mu_biao_liang,6);//工作界面的目标量
delay_1ms(100);
mu_biao_liang_1=mu_biao_liang-pian_yi;//计算去掉提前量
的值
mu_biao_liang_8=mu_biao_liang_1*8/10;//0.8
send_str1(feng_ming);
jd1=1;
/*****************主循环*******************/
while
(1)
{
send_str1(read_hua_mian_id);
delay_1ms(5);
if((read_message[1]==0xB1)&(read_message[2]==0x01))
第4页
自动称量参考程序.c
hua_mian_id=read_message[4];
else
hua_mian_id=0xfe;
switch(hua_mian_id)
{
//工作界面
case0x01:
{
use_k();//处理按键按下结果
updata_zhong_liang(shi_ji_zhong_liang());
}
/
break;
/输入密码界面,设置各项参数
case0x02:
{
shu_ru_mi_ma();
}
break;
/硬件功能测试
case0x03:
/
{
ying_jian_ce_shi();
}
break;
/参数设置
case0x04:
/
{
can_shu_she_zhi();
}
break;
/传感器校准
case0x05:
/
{
jiao_cheng();
}
break;
/特别密码界面
case0x06:
/
{
te_shu_mi_ma();
}break;
case0xfe:
{
;
}
break;
}
}
}
voidPCA_isr()interrupt7
{
第5页
自动称量参考程序.c
CCF0=0;
CH=0;
CL=0;
}
voiduart1_inte(void)interrupt4using1
{
if(RI)
{
if(SBUF==0XAA)
IAP_CONTR=0X60;
if(SBUF==0XEE)
{
uart_read_f=1;
for(uart_read_count=0;uart_read_count<20;uart_read_count++)
read_message[uart_read_count]=0;
uart_read_count=0;
}
if(uart_read_f==1)
{
read_message[uart_read_count]=
SBUF;
uart_read_count++;
}
if(SBUF==0XFF)
{
uart_read_f=0;
uart_read_count=19;
}
RI=0;
}
if(TI)
{
TI=0;
busy=0;
}
}
voidsend_data1(unsignedchardat)
{
while(busy);
busy=1;
SBUF=dat;
}
voidsend_str1(unsignedchar*s)
第6页
自动称量参考程序.c
{
do
while(*s!
=0xcc);
send_data1(*s++);
}
/
/1ms
voiddelay_1ms(unsignedchark)
{
unsignedchari,j,m;
for(m=0;m { _ nop_(); nop_(); i=22; _ j=128; do { while(--j); while(--i); } } } //50ms voiddelay_50ms(unsignedintm) { unsignedchari,j,k; unsignedintn=0; for(n=0;n { _ _ nop_(); nop_(); i=5; j=52; k=195; do { do { while(--k); while(--j); } while(--i); } } } / /按键扫描程序,返回5个按键值的某一个 unsignedcharscan_k(void) { 第7页 自动称量参考程序.c unsignedchari=0x38;//什么都没有按,则返回8 if(k_1==0) { delay_1ms(70);//70ms if(k_1==0) i=0x31; } k_1=1; if(k_2==0) { delay_1ms(70);//70ms if(k_2==0) i=0x32; } k_2=1; if(k_3==0) { delay_1ms(70);//70ms if(k_3==0) i=0x33; } k_3=1; if(k_4==0) { delay_1ms(70);//70ms if(k_4==0) i=0x34; } k_4=1; if(k_5==0) { delay_1ms(70);//70ms if(k_5==0) i=0x35; } k_5=1; returni; } / /读取HX711数值,25个脉冲 unsignedlongread_hx711(void) { unsignedlongcount=0; unsignedchari=0; sck=0;//AD转换准备。 AD结束后,电平也为0; count=0;//接收存储区清零 第8页 自动称量参考程序.c while(d_out==1);//等待芯片准备好. sck=1; NOP2();//芯片上升沿读取数据。 sck=0; NOP2(); for(i=0;i<23;i++) { sck=1; NOP1(); if(d_out)count++;//上升沿读取数据 count=count<<1; sck=0; NOP2(); } for(i=0;i<1;i++) { sck=1; NOP2(); sck=0; NOP2(); } sck=0; returncount; } voidmao_pao_pai_xu(unsignedlong*a,unsignedcharchang_du) { unsignedchari=0,j=0; unsignedlongtemp=0; for(j=0;j<(chang_du-1);j++) { for(i=0;i<(chang_du-1-j);i++) { if(a[i]>a[i+1]) { temp=a[i]; a[i]=a[i+1]; a[i+1]=temp; } } } /读取HX711 unsignedlonghx711_10(void) } / { unsignedlongcount[3]=0; 第9页 自动称量参考程序.c unsignedchari=0; for(i=0;i<3;i++) count[i]=read_hx711(); mao_pao_pai_xu(count,3); returncount[1];//返回中间值 } //获取称重系数 voidget_xi_shu(void) { longa[2]=0.0; a[0]=fa_ma_zhong-fa_ma_xiao; a[1]=cai_yang_zhong-cai_yang_xiao; xi_shu_xiao=a[0]/a[1]; a[0]=fa_ma_da-fa_ma_zhong; a[1]=cai_yang_da-cai_yang_zhong; xi_shu_da=a[0]/a[1]; } / /返回当前质量 floatget_zhi_liang(void) { floata=0; a=hx711_10(); if(a a=pi_zhong; if(a a=(a-pi_zhong)*xi_shu_xiao; else a=(a-pi_zhong)*xi_shu_da; returna; } //返回实际重量 unsignedlongshi_ji_zhong_liang(void) { floata=0; a=get_zhi_liang(); a*=100; returna; } //步进电机处理函数,开关和频率 voidstep_control(unsignedchark,unsignedintf) { if(f==0) { CR=0; } 第10页 自动称量参考程序.c else { CR=0; step_f=FOSC/4/f+0.5; CH=0; CL=0; CCAP0L=step_f; CCAP0H=step_f>>8; } if(k==1) { CR=1; CR=0; } else { } } voidupdata_zhong_liang(unsignedlongke) { unsignedlongi=0; unsignedchara,b,c,d,e; i=ke; a=i/10000; b=i/1000%10; c=i/100%10; d=i/10%10; e=i%10; / /send_str1(shua_xin_off); set_txt(1,1,a,1); set_txt(1,2,b,1); set_txt(1,3,c,1); set_txt(1,4,d,1); set_txt(1,5,e,1); / /send_str1(shua_xin_on); } //更新某画面,某号控件,某个字节长度的数字 voidset_txt(unsignedcharscreen_id,unsignedchar control_id,unsignedlongdat,unsignedcharcounter) { unsignedcharp[8]=0; unsignedchari=0; if(counter==1) { send_zhen_tou; 第11页 自动称量参考程序.c send_data1(0XB1);send_data1(0X10);sen
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 自动 称量 参考 程序