第五章 总结与体会
本次课程设计为基于AT89C51单片机的简易电子秤,虽然功能简单但很实用。具有性能稳定,操作简单,显示直观,便于使用,价格低廉等优点。完成本设计任务过程中应用到了传感器技术,微机技术,数字电子技术等多门专业课知识。虽然基础功能简单,但在其基础上能够通过扩展外部接口使其功能丰富化,让其更具商业价值。 下面就本次课程设计过程谈谈心得体会:在完成本次设计过程中,对于其涉及到的知识有了进一步的掌握,对利用单片机进行控制系统的设计与开发及对系统的分析和问题的解决有了切身的体会和体会。学以致用,在这个过程中我增长了知识,积累了经验,提高了解决问题的能力。由于时间仓促,经验不足,理论知识方面的储备也不足以及条件的限制,本次课程设计仍然存在着一些问题。这让我认识到了自己个人技能有待提高以及理论知识的巩固和加强。
15
6.参考文献
[1].黄智伟. 凌阳单片机课程设计指导.北京:北京航空航天大学出版社,2007 {2}.周航慈.单片机程序设计基础.北京:北京航空航天大学出版社,1997 {3}.求实科技.单片机典型模块设计实例导航.北京:人民邮电出版社,2004
{4}.余永权.89系列(MCS-51)Flash单片机原理及应用. 北京:电子工业出版社,2003 {5}.王幸之.单片机应用系统电磁干扰与抗干扰技术.北京:北京航空航天大学出版社,2006 {6}.黄智伟.全国大学生电子设计竞赛技能训练.北京:北京航空航天大学出版社,2007 {7}.黄智伟.印制电路板(PCB)设计技术与实践(第二版).北京:电子工业出版社,2012 [8].于京《51系列单片机C程序设计与应用方案》[M] 中国电力出版社 2002 [9].李广弟 《单片机基础》[M],北京航空航天大学出版社(第三版),2007
16
7.附录
源程序清单:
(1) 头文件和一些宏定义
#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;
//小数点标志及位置
(4) 各子程序
//整型转字符串的函数,转换范围0--65536 void int2str(int x, char* str)
17
{
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; }
//显示重量,单位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);
18
}
display_GB2312_string(3,76,\ int2str(j,str1); if (j<10) else if (j<100) {
display_GB2312_string(3,84,\ display_GB2312_string(3,92,str1);
} else {
display_GB2312_string(3,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
19