应变片称重 单片机程序

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

/*****************************************

*程序名称:电子称称重显示

*程序目的:采集电压信号进行AD转换,并通过数码管显示出来

*编写人员;S3C3

*编写时间:2016.2.26

*****************************************/

#include "intrins.h"

#include "show.h"

#include "collect.h"

#include "key.h"

unsigned long chuzhi = 1900;

//unsigned long kuadu;

unsigned long kuadu_100;

void uart_sendstring(unsigned char *str);

void change(unsigned char volt);//转换函数

void init_timer0();//定时器0初始化函数

unsigned char voltage; //电压采集变量

unsigned char timer0_cnt_200,timer0_cnt_20;//定时器自增变量

unsigned long weight;//质量变量

unsigned char key[] = {0,0};

unsigned long key_value;//按键返回值

// 电压质量校准0g 校准100g 校准初值500g 校准初值4 校准初值5 JIESU

unsigned long show_value[] = { 0, 0, 0, 0, 0, 0, 0, 6666 };

unsigned char show_cnt = 0;//show_value数组数据选择变量

unsigned long beishu[] = {1000,100,10,1};

unsigned long beishu_cnt;

unsigned char pjz[] = {0,0,0, 0,0,0, 0,0,0, 0,0};//求平均值

unsigned char pjz_cnt;

bit change_5,change_6;

bit collect_flag;//定义采集标志位

bit show_flag ;//显示电压或者重量

bit key_flag;//按键检测标志位

//主函数

void main()

{

init_timer0();

while(1)

{

if(collect_flag == 1) //信号采集

{

collect_flag = 0;

voltage = collect();

//求平均值

pjz[pjz_cnt++] = voltage;

if(pjz_cnt == 10)

pjz_cnt = 0;

pjz[10] = (pjz[0] + pjz[1] + pjz[2]+ pjz[3] + pjz[4]+ pjz[5] + pjz[6]+ pjz[7] + pjz[8] + pjz[9])/10;

voltage = pjz[10];

//

change(voltage);

}

if(key_flag == 1) //按键采集和处理

{

/*

P3 = 0x01;

if(P3 != 0x01)

{

if((show_cnt < 2) || (show_cnt > 6))

show_cnt = 2;

else

show_cnt++;

show_value[show_cnt] = show_value[0];

if(show_cnt == 6)

{

kuadu = (show_value[6]-show_value[2])/4;

chuzhi = (show_value[2] + show_value[3] + show_value[4] + show_value[5] + show_value[6])/5 - 2*kuadu-8;

show_cnt = 1;

}

while(P3 != 0x01); //自动校准模式

}

*/

key_flag = 0;

Key_read(key);

if(key[1] == 1)

{

if(show_cnt != 5)

key[1] = 0;//有按键按下

switch (key[0])

{

case 0: key_value = 1;break; //第一排123

case 1: key_value = 2;break;

case 2: key_value = 3;break;

case 3: show_flag = 1;

show_cnt = 0;break; //电压显示

case 4: key_value = 4;break; //第二排456

case 5: key_value = 5;break;

case 6: key_value = 6;break;

case 7: show_flag = 0;

show_cnt = 1;break; //质量显示

case 8: key_value = 7;break; //第三排789

case 9: key_value = 8;break;

case 10: key_value = 9;break;

case 11: if((show_cnt < 2) || (show_cnt > 4))

show_cnt = 2;

else

show_cnt++;

show_value[show_cnt] = show_value[0];

if(show_cnt == 4)

{

chuzhi = show_value[2];

kuadu_100 = (show_value[4] - show_value[3] )/4;

// mv/g

show_value[6] = kuadu_100;

show_cnt = 6;

}

break; //自动校准模式

case 12: show_cnt = 5;

change_5 = ~change_5;break; //第四排_ 0 _

case 13: key_value = 0;break;

case 14: show_cnt = 6;

相关文档
最新文档