应变片称重 单片机程序
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 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;