资源描述
课程设计说明书
目录
第一章 系统概述
1、1 设计目得 、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、 1
1、2 设计内容、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、1
1、3 设计要求、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、1
第二章 系统方案 、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、2
2、1 总体方案、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、 、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、2
2、2 方案组成、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、2
第三章 软件设计、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、3
3、1 主程序设计、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、3
3、1、1 倒计时模块、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、ﻩ4
3、1、2 键盘扫描模块、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、4
3、1、3显示程序模块、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、5
3、1、4 实施结果、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、6
第四章 总结体会、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、6
4、1设计心得及体会、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、6
4、2 参考文献、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、7
附录程序清单、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、 、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、8
第一章 系统概述
1、1 设计目得
此次设计就是我们更进一步了解基本电路得设计流程,提高自己得设计理念,丰富自己得理论知识,巩固所学知识,使自己得动手动脑能力有更进一步提高,为自己今后得学习与工作打好基础,为自己得专业技能打好基础。通过解决实际问题,巩固与加深“单片微型计算机原理与接口技术”课程中所学得理论知识与实验能力,基本掌握单片机应用电路得一般设计方法,学习定时器得使用方法、独立按键程序编写、多位数码管扩展方法,提高实验能力,加深对单片机软硬知识得理解,获得初步得应用经验,为以后从事生产与科研工作打下一定得基础。本次设计注重对单片机工作原理以及键盘控制及显示原理得理解,提高自己得动手能力与设计能力,培养创新能力,丰富自己得理论知识,做到理论与实践相结合。本次设计得重要意义还在于对单片机得内部结构与工作状态做更进一步得了解,同时还对单片机得接口技术,中断技术,存储方式与控制方式作更深层次得了解。
1、2设计内容
(1)设计一个1-200秒倒计时报警器,报警时间可调,用数码管显示报警时间,用两个按键可调节报警范围,一个按键启动,一个按键设置/修改。
(2)画出程序流程图并编写程序实现上述功能。
1、3 设计要求
1、能够实现秒得倒计时功能;
2、倒计时结束,报警提示;
3、通过按键能够设置倒计时报警器得初始值;
第二章 系统方案
2、1 总体方案
设计时可采用模块化程序设计方法。模块划分时应遵循下述原则:
(1)每个模块应具有独立得功能,能产生一个明确得结果。
(2)模块之间得控制参数应尽量简单,数据参数应尽量少。
(3)根据模块得划分原则,将该程序划分成5个模块,如图2-2所示。
重 设 倒 计 时
主程序
数码管动态扫描模块
当前时间倒计时模块
输入倒计时时间模块
指示灯显示模块
图2-2 倒计时器设计框图
2、2 方案组成
硬件部分由重设按钮、启动按钮、AT89C51单片机、一个6位共阴极LED显示器等组成。
软件部分主程序主要由系统初始化段、键盘识别、键值处理,以及6位共阴极LED显示器扫描显示子程序,T1中断。
第三章 软件设计
3、1 主程序设计
所以主程序得设计一般包括:主程序得起始地址,中断服务程序得起始地址,有关内存单元及相关部件得初始化与一些子程序调用等等。
(1)程序得起始地址
MCS-51系列单片机复位后,(PC)=0000H,而0003H~002BH分别为个中断源得入口地址。所以,编程也应在0000H处写一跳转指令。
当CPU接受到中断请求信号并予以响应后,CPU把当前得PC内容压入栈中进行保护,然后转入响应得中断服务程序入口处执行。一般在响应得中断服务程序入口处写一条跳转指令,并以跳转指令得目标地址作为中断服务程序得其始地址进行编程。
(2)主程序得初始化内容
所谓初始化,就是对用到得单片机内部部件或拓展芯片进行初始工作状态设定。
在本例中,使用了两个中断,即T1。其中:
1、T1中断:采用T1定时中断工作方式,完成倒计时。
主程序
设置各中断服务程序得入口地址
相关寄存器清零
设置数码管显示初始状态
按键扫描
显示按下得数字
进行倒计时
时间就是否超出
指示灯亮灭
Y
N
(3)主程序流程图
在这里介绍几个主要得模块:
3、1、1 倒计时模块设计
(1)定时器T1计数初值
T1计数初值为:TH1=(65536-700)/256;TL1=(65536-700)MOD 256
工作方式TMOD=00000001H=01H
开始倒计时
寄存器清零
设置定时器1工作方式
判断按键次数
N
启动定时器1
关闭定时器1
等待中断
通过SET设置
指示灯亮灭
(2)流程图如图4-2所示
3、1、2 键盘扫描模块
扫描按键情况,并显示在数码管得分数值位。
按键去抖动得处理。由于机械触点得弹性作用,在闭合及断开得瞬间均伴随有一连串得抖动,抖动时间长短由按键得机械特性决定,一般为5~10ms。而按键稳定闭合时间得长短则就是由操作人员得按键动作决定得,一般为零点几秒至数秒。键抖动会引起一次按键被误读多次,为了确保CPU对键得一次闭合仅做一次处理,键抖动可用硬件与软件两种方法消除。本设计采用软件方法。
3、1、3 显示程序模块
由于该系统使用得就是六位LED显示器显示倒计时,因此显示采用动态扫描显示方法,即由显示器扫描显示子程序控制显示器逐个循环从左至右依次点亮各个显示器。这样虽然在任一时刻只要一个显示器点亮,但就是由于人眼具有视觉残留效应,瞧起来与全部显示器持续点亮效果一样。如下面得图所示:
从89C51得P1口送显示器位码
读相应位存储单元数据
由读得数据查表确定段码由89C51送相应显示器位
结束
开始
3、1、4 实施结果
(1)首先开始找到主程序入口地址,运行程序;
(2)按A时间加,按B时间减,时间在1到200,按C开始倒计时。倒计时得时候可以随时按A或者B更改时间。
(3)倒计时得时候可以随时按A或者B更改时间。
(4)倒计时结束二极管亮起,蜂鸣器响三秒结束后可以重新赋值。
第四章 总结体会
4、1设计心得及体会
该倒计时器就是基于定时而设计得实现计时报警(指示灯亮)得装置。由键盘扫描、动态LED显示电路、指示灯亮三大部分构成。装置利用AT89S51单片机构成电路,以实现对计时时间得控制。同时装置还用一个由电平控制得指示灯得亮灭装置,用以实现倒计时时间到时提示,以及错出现时候得提示。
本装置得最大特点就是实时性强,可操作性好。因为采用了矩阵式键盘控制,能够随时改变倒计时时间,所以装置能够应对不同得要求而做出相应得调整,以适应不同得环境。
瞧事物要辩证得瞧。本装置也存在一些缺点值得注意。如当按键开关出现问题时,系统会出现错误,出现指示灯亮得状态。
我们在课堂上掌握得仅仅就是专业课得理论知识,如何去锻炼我们得实践能力?如何把我们所学得专业基础课理论知识运用到实践中去呢?我想做类似得课程设计就为我们提供了良好得实践平台。
我在整个设计过程中懂得了许多东西,当遇到一不了得问题,跟同伴一起商量、合作,或许能收到事半功倍得效果。不管学什么,一定要打好基础,并将其学好、学精,但空有知识也不一定就能说明什么,还得能为己所用;还有更重要得就是培养了独立思考与设计得能力,树立了对知识应用得信心,相信会对今后得学习工作与生活有非常大得帮助,并且提高了自己得动手实践操作能力, 使自己充分体会到了在设计过程中得成功喜悦。虽然这个设计做得不就是很完美,但就是在设计过程中所学到得东西就是这次课程设计得最大收获与财富,使我终身受益;最后,也就是我感触比较深得一点,这次课程设计时为数不多得独立完成得一次,虽然过程中遇到很多困难,让自己犯愁过,彷徨过,急躁过,可当自己很快调整好心态,从跌倒得地方爬起来继续,最后取得成功,不止就是成功后得喜悦,也就是一次锻炼!
本次课程设计总得来说就是比较成功得,但在设计及操作过程中也遇到了不少得问题。这个过程当然也就少不了老师与同学得帮助,所以我们要感谢给予我们帮助与支持得老师与同学。在设计过程中,我们始终得到她们得悉心教导与认真指点,使得我们在理论知识与动手操作方面都有了很大得提高!通过这次课程设计使我们懂得了理论与实际结合就是很重要得,只有理论知识就是远不够得,只有把所学得理论知识与实践相结合起来,从理论中得出结论,才能真正服务于社会,从而提高自己得实际动手与独立思考得能力。同时在设计得过程中我们也发现了自己得不足之处,对以前所学过得知识理解得不够深刻,掌握得不够牢固。通过这次课程设计之后,也把以前所学过得知识重新进行了温故。它不仅锻炼了我们得实际操作能力,还与我们得专业零距离接触,更主要得就是我们学到了书本上没有得知识,尤其感到自身对于书本知识得掌握太死板,并不能灵活运用。这样就使我们得理论知识更加实践化了,让我们对书本上得知识也更加重视了,不再像以前那样盲目,同时通过这次设计,对以后得毕业设计也奠定了一定得基础,更为重要得就是对我们自己得将来有了更为明确得奋斗目标。
4、2参考文献
[1] 张毅刚、 单片机原理及接口技术[M] 、哈尔滨:哈尔滨工业大学出版社,2010、
附录程序:
#include<reg51、h>
sbit b_1 = P2^0;ﻩ//数码管引脚定义
sbit b_2 = P2^1;ﻩ//数码管引脚定义
sbit b_3 = P2^2; //数码管引脚定义
sbit b_4 = P2^3;ﻩ//数码管引脚定义
sbit key_1 = P1^0;ﻩ//累加
sbit key_2 = P1^1;ﻩﻩ//移位
sbit key_3 = P1^2;ﻩﻩ//移位
sbit BEEP = P1^7;
int number = 0;
int number_flag = 0;
bit start = 1;
unsigned char dis[] = {0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xff,0xbf}; //数码管引脚定义 0123456789 -
unsigned int count=0;ﻩ//计数标量
unsigned char bit_1 = 0; //数码管显示得四位标量
unsigned char bit_2 = 0;ﻩ //数码管显示得四位标量
unsigned char bit_3 = 0;ﻩﻩ//数码管显示得四位标量
unsigned char bit_4 = 0; //数码管显示得四位标量
void delay10ms(char d) //误差 0us
{
unsigned char a,b,c;
for(c=d;c>0;c--)
for(b=38;b>0;b--)
for(a=130;a>0;a--);
}
char flag=0;
void main()
{
TMOD = 0X01;ﻩ //设置定时器T0 16位
EA = 1;ﻩ ﻩ //打开中断
ﻩET0 = 1;ﻩ //打开TO定时器
ﻩTR0 = 1;ﻩﻩ //关闭中断
ﻩTH0 = (65536-5000)/256;
ﻩTL0 = (65536-5000)%256;
ﻩBEEP = 0;
ﻩstart = 0;
while(1)
{
ﻩ if(key_1==0) ﻩ //标量+
{
ﻩwhile(key_1==0)
ﻩ {
ﻩ ﻩnumber++;
ﻩ if(number>=200)
ﻩﻩﻩ ﻩnumber=200;
delay10ms(10); //按键时间调整
ﻩﻩ }
ﻩ}
if(key_2==0)ﻩﻩ //标量-
{
ﻩﻩﻩwhile(key_2==0)
ﻩ{
ﻩflag=3;
ﻩﻩ number--;
ﻩ if(number<=0)
ﻩ ﻩﻩnumber=0;
ﻩﻩﻩdelay10ms(10);
} ﻩﻩ
ﻩ }
ﻩ//开始 暂停
if(key_3==0)ﻩ ﻩ //从0开始计时
ﻩﻩ{
while(key_3==0);
ﻩﻩﻩstart=1;
ﻩﻩ}
if((start==1)&&(number==0))
{
ﻩBEEP = 1;ﻩ //蜂鸣器响
ﻩﻩnumber = 0;
delay10ms(100);
ﻩﻩ delay10ms(100);
ﻩ delay10ms(100);
ﻩ BEEP = 0;
ﻩ start = 0;ﻩ
}
ﻩﻩelse
ﻩﻩ{
ﻩﻩBEEP = 0;ﻩ //蜂鸣器不响
ﻩ }
ﻩ delay10ms(10);
ﻩ}
}
//中断函数
void delay1s(void) interrupt 1
{
TH0 = (65536-5000)/256;ﻩﻩﻩ //5ms产生一次中断 用于数码管动态扫描
ﻩTL0 = (65536-5000)%256; ﻩﻩ //5ms产生一次中断 用于数码管动态扫描
ﻩcount++;
if(start==1)
ﻩ{
ﻩ if(count>=200)
ﻩﻩ{
ﻩ count = 0;
ﻩ number--;
ﻩﻩ if(number<=0)
ﻩ ﻩnumber=0;
}
}
bit_1 = number/1000;
bit_2 = (number%1000)/100;
ﻩbit_3 = (number%100)/10;
ﻩbit_4 = number%10;
b_1 = b_2 = b_3 = b_4 =0; //消隐
switch(count % 4)
{
ﻩcase 0: ﻩﻩﻩﻩ //数码管1位ﻩ ﻩﻩﻩ ﻩ
b_1 = 1;
ﻩ ﻩ b_4 = b_3 = b_2 =0;
ﻩﻩ P0 = dis[bit_1];ﻩ
ﻩ ﻩbreak;
ﻩcase 1: ﻩ ﻩ //数码管2位ﻩ ﻩ ﻩﻩﻩ
ﻩ ﻩb_2 = 1;
ﻩﻩﻩ b_1 = b_3 = b_4 =0;ﻩ
ﻩﻩ ﻩP0 = dis[bit_2];
ﻩﻩﻩ break;
ﻩcase 2: ﻩﻩ ﻩ //数码管3位 ﻩ ﻩﻩﻩ
ﻩ ﻩb_3 = 1;
ﻩb_1 = b_2 = b_4 =0;
ﻩﻩﻩ P0 = dis[bit_3];
ﻩ ﻩbreak;
case 3: ﻩﻩﻩ //数码管4位 ﻩ ﻩﻩ
ﻩ b_4 = 1;
ﻩﻩﻩﻩb_2 = b_3 = b_1 =0;ﻩ
ﻩ ﻩP0 = dis[bit_4];
ﻩ break;
}ﻩ
}
展开阅读全文