单片机电子秤设计报告 - 图文(4)

2019-03-27 17:06

A.加大平行布线的间距,遵循3W规则。 B.在平行线间插入接地的隔离线。 C.减少布线层与地平面的距离 ③ 屏蔽保护

图18 屏蔽保护

对应地线回路规则,实际上也是为了尽量减小信号的回路面积,多用于一些比较重要的信号,如时钟信号,同步信号;对一些特别重要,频率特别高的信号,应该考虑采用铜轴电缆屏蔽结构设计,即将所布的线上下左右用地线隔离,而且还要考虑好如何有效的让屏蔽地与实际地平面有效结合。

④ 走线方向控制规则

相邻层的走线方向成正交结构,避免将不同的信号线在相邻层走成同一方向,以减少不必要的层间窜扰;当由于板结构限制(如某些背板)难以避免出现该情况,特别是信号速率较高时,应考虑用地平面隔离各布线层,用地信号线隔离各信号线。

⑤ 电源与地线层的完整性规则

对于导通孔密集的区域,要注意避免孔在电源和地层的挖空区域相互连接,形成对平面层的分割,从而破坏平面层的完整性,并进而导致信号线在地层 的回路面积增大。

四、 软件设计

1、软件流程图

本设计主程序使用了定时器,用来实现每0.5秒称重一次的功能,流程图如图19所示。键盘扫描程序如图20所示。

时钟中断入口逐列扫描Counter累加有键按下?置称重标志取键值返回

返回 图19 时钟中断程序流程图 图20 键盘扫描程序流程图

主程序软件流程如图21所示。

数据初始化端口初始化显示初始化定时器初始化进入后台while循环有称重标志吗?有称重并计算总价无显示重量和总价键盘扫描

图21 主程序流程图

3、主程序

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

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

#include #include #include #include \

#include \#include \

//定义量程系数

#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] = \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;

//小数点标志及位置

(3) 函数声明

void int2str(int, char *); void Data_Init(); void Port_Init(); void Timer0_Init(); void Timer0_ISR () ; void INT1_Init(); void KeyPress(uchar); void To_Zero(); void Display_Price(); void Display_Weight(); void Display_Money();

(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); 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,\ 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);


单片机电子秤设计报告 - 图文(4).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:初级财务会计习题

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: