七、调试运行
(一)软件调试
1、根据设计要求,利用Keil软件,编写程序,并编译生成hex文件;在编写程序的过程,程序基本没有出现语法的错误。
2、根据原理图,从元件库中查找得到相应的元件,并绘制成proteus原理图; 3、将生成的hex文件导入到proteus原理图中的单片机,开始仿真,观察系统是否达到了预期的效果。
4、刚开始仿真时,系统并不能运行。因此,对原理图进行排查,检查各个元件的接线是否合理,确定各个元件的属性是修改合适。通过检查,发现原理图的一些元件用错了,有些电阻的电阻值太大了等等,均及时作了修改。
重新仿真后,系统还是不能运行。于是开始检查程序,确定是否存在逻辑错误。检查发现,程序确实存在逻辑上的错误,比如B、C点的高低电平输出设置错了,没有设置P1口的初始值等等。
通过反反复复的调试、检查、修改,结合程序和原理图,最终系统可以正常运行,实现预期的全部效果。
(二)硬件调试
1、在开始焊接电路之前,利用万用表逐一检查各个元件是否完好,能否正常使用;并确定各个元件的管脚应该如何连接和电路的布线;
2、根据设计好的原理图,利用已有的元件,焊接好电路;
在焊接的过程中,由于焊接技术不够娴熟,导致电路板上的多个金属贴片脱落,无法实现焊锡的附着,不得不用导线代替,同时也影响了电路的美观。同时,由于疏忽,将二极管的管脚装反了,出现了错误,后来不得不修改电路的布线。这些小错误时刻提醒我在焊接时必须全神贯注,认真确认每一步的焊接。通过一个多小时的辛勤付出,我终于完成了电路的焊接。
3、将调试好的hex文件下载到单片机最小系统中,并将电路的相关管脚与单片机最小系统对应连接起来,通过B、C管脚电平的改变,判断电机是否按照设计的要求工作。
- 14 -
八、结果及分析
水塔水位控制系统调试结果如下: 将B、C管脚接至低电平,电机运转;
将B管脚接至高电平,C管脚接至低电平,电机继续运转; 将B、C管脚接至高电平,电机停止运转;
将B管脚接至低电平,C管脚接至高电平,电机停止运转,LED灯亮。
可以发现,水塔水位控制系统正常工作,实现了预期的效果。 (实物及焊接电路如图8-1、图8-2所示)
图8-1 实物图 图8-2 焊接电路图
九、心得体会
在整个课程设计过程中,我自己能够克服重重困难,利用自身所需的专业
知识独立完成程序设计、软件仿真和电路焊接等内容, 这给予我一种强烈的成就感,感觉功夫没有白费,自己的动手能力是有了较大进步的。
通过此次单片机课程设计,我对单片机知识有了进一步的认识,提高了将所学的单片机知识应用实际设计中的能力,逻辑思维能力也到了较多的锻炼,丰富了设计经验,为今后的单片机应用铺下基础;另一方面,我更加熟悉了Keil软件、protel软件和proteus软件的使用,焊接元器件等动手能力也适当提高了,认识了一些常用元件。,
通过此次课程设计,我也深刻认识到认真、细心对动手实践的重要性。一个小小的疏忽都将导致研究的产品不能正常运行,每一个步骤,每一个焊点都应该做到完美无暇,这才是工科学生应有的素养。在以后学习的道路上,我必将以严谨、认真、务实、勤奋的作风面对专业的学习。
- 15 -
十、参考文献
【1】李庆常.数字电子技术基础.北京:机械工业出版社,2008. 【2】王静霞 .单片机应用技术,电子工业出版社,2009. 【3】徐玮 .C51单片机高效入门,机械工业出版社,2006 【4】张永枫 主.单片机应用实训教程,清华大学出版社,2008. 【5】阎石.数字电子技术基础.北京:高等教育出版社,2006.
【6】杨素行.模拟电子技术基础简明教程.北京:高等教育出版社,2006.
十一、致谢
本次单片机课程设计就是在CJK老师的亲切关怀与悉心指导下完成的。 从程序设计到电路板的焊接、调试,CJK老师都始终给予我细心的指导和不懈的支持。S个星期以来来,CJK老师给我以精心指导,在课程设计遇到困难的时候,给了我许多有益的指导和建议。在此谨向CJK老师致以诚挚的谢意和崇高的敬意。同时感谢同学们在课程设计过程中给予我的帮助。
- 16 -
十二、附录
(一)数字时钟 1、内容要求
(1) 用7段8位的LED数码管设计出一个数字时钟,要求显示分(2位)、秒(2位)及十分之一秒即0.1秒(1位)。按下启动按钮启动数字时钟,按下停止按钮暂停计时,当再次按下启动按钮时,从当前值继续计时,当按下复位按钮时,时钟复位。
(2). 通过设定定时按键,对时钟的分钟进行设定,每按一次,分钟设定加1,开始时,LED灯D1处于熄灭状态,当启动计时后,计时到达设定时间,时钟复位,且LED灯D1处于一直亮的状态。
2、分析
数字时钟程序由多个函数组成,包括主函数、数码管显示函数、系统计时中断函数、按钮定时函数和延时子函数。
系统计时中断函数采用定时中断方式,当启动按钮按下时,系统开启中断,开始计时,通过数码管显示函数显示时间;当停止按钮按下时,系统关闭中断,暂停计时,数码管依旧保持当前时间;当复位按钮按下时,系统关闭中断,停止计时,时间清零。
按钮定时函数由外部中断1实现,为最高级中断。当复位按钮按下时,执行外部中断,定时次数加一。
- 17 -
3、程序 #include
unsigned code led[]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90}; //段码、共阳极字型码:0-9 void xianshi();//显示子函数的声明 void delay();//延时子函数的声明
unsigned char m,n;//定义数码管显示分钟的变量m,延时函数中的变量n unsigned char a,b,c;//定义变量的状态位:分位a,、秒位b、十分之一秒位c unsigned char d,k;//定义数码管扫描次数k,定时中断计数d, unsigned counter;//定义定时按钮按下的次数counter sbit P3_0=P3^0;//定义启动按钮位 sbit P3_1=P3^1;//定义停止按钮位 sbit P3_2=P3^2;//定义复位按钮位 sbit P3_3=P3^3;//定义定时按钮位
/****************主函数****************/ void main() {
TMOD=0x00;//设定定时器0在工作方式1下 TH1=3192/256;//设置定时器初值 TL1=3192%6;
ET1=1;//开放定时器T1中断允许位 IT1=1;//置外部中断位下降沿触发方式 EX1=1;//开放外部中断1中允许位 EA=1;//开放中断总允许位 P0=0x00; //LED灯初始化
a=b=c=0; while(1) {
- 18 -