深圳市鼎盛合科技有限公司为您免费提供自动卷发器、珠宝秤、血压计等相关信息,敬请关注!
当前所在位置: 首页 > 行业资讯 > 详细内容

新闻动态

News information

联系鼎盛合

深圳市鼎盛合科技有限公司

电话:
18923768313
邮箱:
wangguohuad@163.com
地址:
深圳市南山区留仙大道1183号云谷创新产业园综合服务楼7楼A1

以电子秤单片机为例做单片机程序开发

活动时间:2019-09-25

方案开发鼎盛合科技提供电子秤方案开发、单片机软硬件整体解决方案及芯海芯片代理!详细可咨询官网:www.peakcoo.com

电子秤主要由承重系统、传感器和显示系统组成。它的主要工作流程就是将物体放在秤盘上时,物体压力施加给传感器,该传感器发生弹性形变,从而使阻抗发生变化,同时使用激励电压发生变化,输出一个变化的模拟信号。该信号经放大电路放大输出到模数转换器。转换成便于处理的数字信号输出到单片机运算控制,单片机根据键盘命令以及程序将这种结果输出到显示器。

电子秤单片机 电子秤芯片 电子秤方案

电子秤单片机CSU18M88是一颗SOC集成单片机,它是将系统信息集成到一个芯片上面的 一个技术实现,所以CSU18M88芯片同时也带有系统集成功能。CSU18M88芯片它是一个8位RISC架构的高性能单片机,集成了24Bit高精度ADC和LCD显示模块。内部集成8k*16Bits的MTP程序存储器。可以应用在电子衡器,精密测量及控制系统上面,电子秤单片机就是应用它的功能设计开发的。

下面介绍main.c主程序编写,其他程序略。

(1) 头文件和一些宏定义

#include 《reg52.h》

#include 《intrins.h》

#include 《string.h》

#include “lcd.h”

#include “hx711.h”

#include “keyboard.h”

//定义量程系数

#define RATIO 2114/1623

(2) 管脚、常量、变量定义

//定义标识

volaTIle bit FlagTest = 0;

//定时测试标志,每0.5秒置位,测完清0

volaTIle bit FlagKeyPress = 0; //有键按下标志,处理完毕清0

volaTIle bit FlagSetPrice = 0; //价格设置状态标志,设置好为1

//管脚定义 sbit LedA = P2^2;

sbit beep = P1^0;

sbit alert = P1^1;

//显示用变量 int Counter;

uchar idata str1[6] = “000000”;

int i, iTemp; //称重用变量

unsigned long idata FullScale; //满量程AD值/1000

unsigned long AdVal; //AD采样值

unsigned long weight; //重量值,单位g

unsigned long idata price; //单价,长整型值,单位为分

unsigned long idata money; //总价,长整型值,单位为分

//键盘处理变量

uchar keycode; uchar DotPos;

//小数点标志及位置

(4) 各子程序

//整型转字符串的函数,转换范围0--65536 void int2str(int x, char* str)

{

int i=1;

int tmp=10;

while(x/tmp!=0)

{

i++;

tmp*=10;

}

tmp=x;

str[i]=‘\0’;

while(i》1)

{

str[--i]=‘0’+(tmp%10);

tmp/=10;

}

str[0]=tmp+‘0’;

}

//重新找回零点,每次测量前调用

void To_Zero() {

FullScale=ReadCount()/1000;

price=0;

}

//显示单价,单位为元,四位整数,两位小数

void Display_Price()

{

unsigned int i,j;

display_GB2312_string(5,44,“ ”);

i = price/100; //得到整数部分

j = price - i*100;//得到小数部分

int2str(i,str1); //显示整数部分

if (i》=1000)

{

display_GB2312_string(5,44,str1);

}

else if (i》=100)

{

display_GB2312_string(5,52,str1);

}

else if (i》=10)

{

display_GB2312_string(5,60,str1);

}

else

{

display_GB2312_string(5,68,str1);

}

//显示小数点

display_GB2312_string(5,76,“。”);

//显示小数部分

int2str(j,str1);

if (j《10)

{

display_GB2312_string(5,84,“0”);

display_GB2312_string(5,92,str1);

}

else

{

display_GB2312_string(5,84,str1);

}

}

//显示重量,单位kg,两位整数,三位小数

void Display_Weight()

{

unsigned int i,j;

display_GB2312_string(3,60,“ ”); //weight单位是g

i = weight/1000; //得到整数部分

j = weight - i*1000;//得到小数部分

int2str(i,str1);

if (i》=10)

{

display_GB2312_string(3,60,str1);

}

else

{

display_GB2312_string(3,68,str1);

}

display_GB2312_string(3,76,“。”);

int2str(j,str1);

if (j《10) else if (j《100)

{

display_GB2312_string(3,84,“0”);

display_GB2312_string(3,92,str1);

}

else

{

display_GB2312_string(3,84,str1);

}

}

//显示总价,单位为元,四位整数,两位小数

void Display_Money()

{

unsigned int i,j;

display_GB2312_string(7,44,“ ”);

if (money》999999) //超出显示量程

{

display_GB2312_string(7,44,“-------”);

return;

}

display_GB2312_string(7,44,str1);

}

else if (i》=100)

{

display_GB2312_string(7,52,str1);

}

else if (i》=10)

{

display_GB2312_string(7,60,str1);

}

else

{

display_GB2312_string(7,68,str1);

}

//显示小数点

display_GB2312_string(7,76,“。”); //显示小数部分

int2str(j,str1);

if (j《10)

{

display_GB2312_string(7,84,“0”);

display_GB2312_string(7,92,str1);

}

else

{

display_GB2312_string(7,84,str1);

}

}

//数据初始化

void Data_Init()

{

price = 0;

DotPos = 0;

beep = 1;

alert = 1;

}

//管脚配置 void Port_Init()

{

}

//定时器0初始化

void Timer0_Init()

{

ET0 = 1; //允许定时器0中断 TMOD = 1;

//定时器工作方式选择 TL0 = 0x06;

TH0 = 0xf8; //定时器赋予初值

TR0 = 1; //启动定时器

}

//定时器0中断

void Timer0_ISR (void) interrupt 1 using 0

{

TL0 = 0x06;

TH0 = 0xf8; //定时器赋予初值

//每0.5秒钟刷新重量

Counter ++;

if (Counter 》= 200)

{

FlagTest = 1;

Counter = 0;

}

}

//===============main program===================//

void main(void)

{

Rom_CS=1;

initial_lcd();

EA = 0;

Data_Init();

Port_Init();

Timer0_Init(); //初始化完成,开中断

EA = 1; //背光

LedA = 1;

clear_screen(); //clear all dots

display_GB2312_string(1,1,“电子秤初始化。。。。”);

To_Zero();

display_GB2312_string(1,1,“电子秤初始化成功”);

display_GB2312_string(3,1,“重量: kg”);

display_GB2312_string(5,1,“单价: 元”);

display_GB2312_string(7,1,“金额: 元”);

Display_Price();

while(1)

{

//每0.5秒称重一次

if (FlagTest==1)

{

//称重,得到重量值weight,单位为g

AdVal=ReadCount();

weight=FullScale-AdVal/1000;

if (weight》0x8000) weight=0;

weight=10000*weight/FullScale;

weight=weight*RATIO; //如果超量程,则报警

if (weight 》= 10000)

{

beep = 0;

alert = 0;

display_GB2312_string(3,60,“------”);

display_GB2312_string(7,44,“--------”);

}

//如果不超量程

else

{

beep = 1;

alert = 1; //显示重量值

Display_Weight();

//如果单价设定好了,则计算价格

if (FlagSetPrice == 1)

{

money = weight*price/1000; //money单位为分

//显示总金额

Display_Money();

}

else

{

display_GB2312_string(7,44,“ ”);

}

//清测试标志

FlagTest = 0;

}

}

//获取按键

keycode = Getkeyboard(); //有效键值0-15

if ((keycode《16)&&(FlagKeyPress==0))

{

FlagKeyPress = 1;

KeyPress(keycode);

FlagKeyPress = 0;

}

delay(20);

}

}
销售热线
189-2376-8313
在线咨询
版权所有:深圳市鼎盛合科技有限公司 © 粤ICP备09073270号