计算机科学与技术系 硬件课程设计实验 } }
iny=0; operators=0; num=0; break;
case '+':
if (operators)
arithmetic(); operators=1; num=0; break;
case '-':
if (operators)
arithmetic(); operators=2; num=0; break;
case '*':
if (operators) }
arithmetic(); operators=3; num=0; break;
if (operators) arithmetic(); operators=4; num=0; break;
case '/':
2、 LCD显示程序设计
利用LCD静态显示,通过程序向LCD写指令字或数据使LCD完成不同功能或显示相应数据。
/**************LCD初始化函数*************/ void init_LCM() {
write_com(0x30); write_com(0x30); write_com(0x30);
11
计算机科学与技术系 硬件课程设计实验 write_com(0x38); write_com(0x08); write_com(0x01); write_com(0x06); write_com(0x0e);
}
/***********LCD写数据函数*************/ void write_data(char ddata) { RS=1;/*写指令*/ R_W=0;
EN=1;/*使能信号开*/ P1=ddata;/*将数据送入p1口*/ EN=0;/*使能信号关*/ check_BF(); }
/***********LCD写指令函数*************/ void write_com(char command) {
RS=0;/*写指令*/ R_W=0;
EN=1;/*使能信号开*/
P1=command;/*将数据送入p1口*/ EN=0;/*使能信号关*/ check_BF(); }
/************LCD检查忙碌函数***********/ void check_BF() { char i,x=0x80; P1=0xff; while(x&0x80) { RS=0; R_W=1; EN=1; x=P1; EN=0;
for (i=0;i<10;i++); }
EN=0;/*关闭使能信号*/ }
12
计算机科学与技术系 硬件课程设计实验 /**********LCD清屏函数**********/ void clearLCD() {
write_com(0x01); }
/**********LCD显示函数**********/ void display(long a) {
long temp,b,c=-1; int lenth=1,i,j; clearLCD(); if(a<0) { a=a*c;
write_data('-'); }
temp=a;
while((temp=temp/10)!=0) { lenth++; }
for(i=lenth;i>0;i--) { b=1;
for(j=0;j write_data(0x30+a/b); a=a%b; } } 3、 算术运算程序设计 13 计算机科学与技术系 硬件课程设计实验 开始 运算符是? 加 乘 除 减 Y 运算结果溢出? Y 除数为0? N N 错误信息送显示缓冲 数值送显示缓冲 4、 错误处理及提示程序设计 /**********除数为处理函数**********/ void dealerror() { int i=0; clearLCD(); for(i=0;i<5;i++) write_data(error[i]); } /*********数值溢出处理函数**********/ 14 计算机科学与技术系 硬件课程设计实验 void dataoverflow() { int i=0; clearLCD(); for(i=0;i<8;i++) write_data(overflow[i]); } 四、联机调试 在联机调试的过程中,一开始没有做数值溢出方面的控制,导致LCD显示的输入数据或计算结果与实际不相符。后来经过计算得到有符号长整型的表示范围为-2147483648—2147483647,遂取2的30次方1073741824为本计算器的最大表示范围,以此来控制数值溢出,修改后,LCD显示正确。 五、总结 课程设计是培养我们综合运用所学知识,发现、提出、分析和解决实际问题,锻炼实践能力的重要环节,是对我们实际工作能力的具体训练和考察过程。随着科学技术发展的日新日异,单片机已经成为当今计算机应用中空前活跃的领域, 在生活中可以说得是无处不在。因此作为计算机专业的学生来说掌握单片机的开发技术是十分重要的。 我们的题目是基于单片机设计简易计算器,对于我们这些实践中的新手来说,这是一次考验。这次课程设计我们学到很多很多的东西,学会了怎么在遇到问题时去解决问题。不仅巩固了以前所学过的知识,而且学到了很多在书本上所没有学到过的知识,掌握了一种系统的研究方法,可以进行一些简单的编程。通过这次课程设计使我懂得 15 计算机科学与技术系 硬件课程设计实验 了理论与实际相结合是很重要的,只有理论知识是远远不够的,只有把所学的理论知识与实践相结合起来,从而提高自己的实际动手能力和独立思考的能力。同时在设计的过程中发现了自己的不足之处,对以前所学过的知识理解得不够深刻,掌握得不够牢固。 这次课程设计通过我们小组的努力终于顺利完成了,在设计中遇到了很多问题,最后在王本有老师的辛勤指导下,终于迎刃而解,在此我们表示感谢! 【参考文献】 [1]《例说51单片机(C语言版)》 张义和、王敏男等 人民邮电出版社 [2]《单片机原理与接口技术》(第3版) 李朝青编著 北京航空航天大学出版社 16