完整版基于单片机的精确正反计数工程文档毕业论文.docx
《完整版基于单片机的精确正反计数工程文档毕业论文.docx》由会员分享,可在线阅读,更多相关《完整版基于单片机的精确正反计数工程文档毕业论文.docx(20页珍藏版)》请在冰豆网上搜索。
完整版基于单片机的精确正反计数工程文档毕业论文
项目设计报告
课程名称单片机基础
题目基于单片机的精确正反计数
计时系统的设计与实现
学院信息科学与技术学院
专业计算机科学与技术(物联网方向)
学生姓名王朋
学号班级1
任课教师游磊
2013年12月19日
【摘 要】单片机自1976年由Intel公司推出MCS-48开始,迄今已有三十多年了。
由于单片机集成度高、功能强、可靠性高、体积小、功耗地、使用方便、价格低廉等一系列优点,目前已经渗入到人们工作和生活的方方面面,几乎“无处不在,无所不为”。
单片机的应用领域已从面向工业控制、通讯、交通、智能仪表等迅速发展到家用消费产品、办公自动化、汽车电子、PC机外围以及网络通讯等广大领域。
目前,各个行业,各个领域,在新产品的设计中,都尽可能的应用单片机技术,来提高产品的智能化程度,增强产品的竞争力,适应技术的进步。
电子钟已成为人们日常生活中的必需品,广泛应用于家庭、车站、码头、剧院、办公室等场所。
本系统采用本系统以AT89C52为主控芯片,设计并实现一个正计时和倒计时的秒表,并考虑节约系统的硬件,能用软件实现的功能尽量都用软件实现。
这款秒表能按人们预定的时刻蜂鸣器发出音响信号来起到提醒的作用。
这款秒表,不仅功能齐全,系统稳定度高,显示数据准确而且成本低,能够广泛应用于各种场合。
【关键词】单片机、秒表、AT89C52。
目录
一、设计目的4
二、实现环境4
1.上位机环境4
2.下位机环境4
三、设计思路6
1.中断的概念6
2.中断源6
3.中断寄存器7
4.寄存器功能与赋值说明7
5.中断结构图:
9
6.C51单片机定时器简介9
7.定时器计数器详细说明10
8.实验步骤11
9.实验流程图12
10.实验误差处理12
四、设计代码12
五、运行结果15
六、总结16
七、参考文献17
附录1.(元件清单)17
附录2.(51_4原理图)19
一、设计目的
单片机的优点:
◆体积小巧,携带方便。
USB接口通讯及供电,通讯速度快,无须外接电源,活动自锁40Pin锁紧座有电源和烧写状态指示灯,可直观了解编程器当前状态,只需要USB供电,无需使用外部电源。
周密的自保护方式,有效保证不损毁用户器件或编程器本身。
◆USB供电系统,直接插接到电脑。
USB口即可提供电源,不需另接直流电源。
◆8位数码管(可做数码管的静态扫描以及动态扫描显示实验如:
0-999计数器实验,温度检测实验,遥控解码实验等都可以用数码管显示)。
◆8位LED发光二极管(做跑马灯实验,交通灯实验)。
◆一路继电器控制(通过继电器可以控制其他电器设备的工作低压控制高压等实验,不过为了安全,建议不要控制电压超过30V的设备)
◆蜂鸣器(做单片机发声实验,播放音乐实验,报警实验等声响实验)
◆DS18B20温度传感器,(初步掌握单片机操作后即可亲自编写程序获知当时的温度)
◆MAX232芯片RS232通讯接口(可以做为与计算机通迅的接口同时也可做为STC单片机下载程序的接口及仿真调试的接口)
◆设计布局优势,4个按键位于左边,操作更方便。
[1]
所以选择单片机作为项目开发工具。
通过项目实践,进一步学习和掌握单片机应用系统的有关知识,加深了解单片机的工作原理。
初步掌握单片机应用系统设计,制作和调试的方法。
提高动手实践能力,提高科学的思维能力。
二、实现环境
1.上位机环境
硬件环境:
电脑型号华硕K43SJ笔记本电脑
操作系统Windows864位(DirectX11)
处理器英特尔第二代酷睿i5-2410M@2.30GHz双核
主板华硕K43SJ(英特尔HM65芯片组)
内存6GB(金士顿DDR31333MHz昱联DDR31333MHz)
主硬盘日立HTS723232A7A364(320GB7200转分)
显卡NvidiaGeForceGT520M(1GB华硕)
显示器LGLGD02F8(14英寸)
光驱松下DVD-RAMUJ8A0ASWDVD刻录机
声卡瑞昱ALC269@英特尔6SeriesChipset高保真音频
网卡瑞昱RTL8168EPCI-EGigabitEthernetNIC华硕
软件环境:
本设计采用VC6.0++来实现编程,,VC6.0++是一种功能强大的面向对象的Windows编程开发平台。
VC6.0的优点是界面简洁,占用资源少,操作方便。
所以本设计采用VC作为串口编程工具。
2.下位机环境
硬件环境:
cdu51-4单片机开发板,采用STC89C52单片机,(它具有8K在系统可编程Flash存储器。
STC89C52使用经典的MCS-51内核,在单芯片上,拥有灵巧的8位CPU和在系统可编程Flash。
具有以下标准功能:
8k字节Flash,512字节RAM,32位IO口线,看门狗定时器,内置4KBEEPROM,MAX810复位电路,3个16位定时器计数器,4个外部中断,一个7向量4级中断结构,全双工串行口。
)8位数码管6个,8位LED发光二极管,它采用一种以MAX232为核心的通信接口电路。
该接口电路适用于由一台PC机与多个8051单片机串行通信的设计,其原理和方法同样适用于PC机与其它单片机之间的串行数据通信。
[2-3]
软件环境:
本实验采用KeiluVision3编程软件,Keil软件是目前最流行开发MCS-51系列单片机的软件,这从近年来各仿真机厂商纷纷宣布全面支持Keil
即可看出。
Keil提供了包括C编译器、宏汇编、连接器、库管理和一个功能强大的仿真调试器等在内的完整开发方案,通过一个集成开发环境(uVision)将这些部份组合在一起Keil
软件需要Pentium或以上的CPU,16MB或更多RAM、20M以上空闲的硬盘空间、WIN98、NT、WIN2000、WINXP,WIN7WIN8等操作系统。
掌握这一软件的使用对于使用51系列单片机的爱好者来说是十分必要的,如果你使用C语言编程,那么Keil几乎就是你的不二之选。
[4-5]
Keil编程软件图2-1
图2-1Keil编程软件页面
STC_ISP_V480烧录软件图2-2
图2-2STC_ISP_V480烧录软件页面
3、设计思路
1.中断的概念
CPU在处理某一事件A时,发生了另一事件B请求CPU迅速去处理(中断发生);
CPU暂时中断当前的工作,转去处理事件B(中断响应和中断服务);
待CPU将事件B处理完毕后,再回到原来事件A被中断的地方继续处理事件A(中断返回),这一过程称为中断
2.中断源
在51单片机中有5个中断源
中断号优先级中断源中断入口地址
01(最高)外部中断00003H
12定时器0000BH
23外部中断10013H
34定时器10018H
45串口总段0023H
3.中断寄存器
单片机有10个寄存器主要与中断程序的书写控制有关
1).中断允许控制寄存器IE
2).定时器控制寄存器TCON
3).串口控制寄存器SCON
4).中断优先控制寄存器IP
5).定时器工作方式控制寄存器TMOD
6).定时器初值赋予寄存器(TH0TH1,TL0TL1)
4.寄存器功能与赋值说明[6-7]
注:
在用到中断时,必须要开总中断EA,即EA=1。
开总中断
1).中断允许控制寄存器IE
EX0(EX1):
外部中断允许控制位
EX0=1外部中断0开关闭合开外部0中断EX0=0外部中断0开关断开
ET0(ET1):
定时中断允许控制位
ET0=1定时器中断0开关闭合开内部中断0
ET0=0定时器中断0开关断开
ES:
串口中断允许控制位
ES=1串口中断开关闭合开串口中断
ES=0串口中断开关断开
2).定时器控制寄存器TCON控制外部中断和定时器中断
外部中断:
IE0(IE1):
外部中断请求标志位
当INT0(INT1)引脚出现有效的请求信号,此位由单片机自动置1,cpu开始响应,处理终端,而当入
中断程序后由单片机自动置0.
外部中断,即外部中断相应的引脚接入低电平或下降沿信号时,中断开始响应。
IT0(IT1):
外部中断触发方式控制位选择有效信号
IT0(IT1)=1:
脉冲触发方式,下降沿有效。
IT0(IT1)=0:
电平触发方式,低电平有效。
内部中断:
TF0(TF1):
内部定时器计数器溢出中断标志位
当定时器、计数器计数溢出的时候,此位由单片机自动置1,cup开始响应,处理中断,而当进入中
断程序后由单片机自动置0.
内部中断实际上就是利用内部的计数器,只不过提供计数的脉冲来自单片机自身。
TRO(TR1):
定时器计数器启动位启动定时器
TRO(TR1)=1;启动定时器计数器0
TR0(TR1)=0;关闭定时器计数器0
3).串口控制寄存器SCON
TI:
串行口发送中断标志位
当单片机串口发送完一帧数据后,此位由单片机自动置1,而当进入中断服务程序后是不会自动清0的,
必须由用户在中断服务中用软件清0.
RI:
串行口接收中断标志位
当单片机串口接收完一帧数据后,此位由单片机自动置1,而当进入中断服务程序后是不会自动清0的,
必须由用户在中断服务软件中用软件清0.
(IP以后补上,TMOD,TL0TH0在定时器计数器中讲)
5.中断结构图:
6.C51单片机定时器简介
本课程设计是利用MCS-51单片机内部的定时计数器、中断系统、以及行列键盘和LED显示器等部件,设计一个单片机秒表计时器。
设计的计时器通过数码管显示,并能通过按键实现设置暂停、复位等。
[4-6]正计时和倒计时分别使用两个定时器T0T1,采用方式1,对12MHZ的系统时钟进行定时计数,初值设为XXYY(自己计算)。
形成定时时间为50ms。
用片内RAM的7BH单元对50ms计数,计920次产生秒计数器78H单元加1,正秒计数器加到999则复位,倒秒表计时减到000则复位。
然后通过数码管显示出来。
在处理过程中加上了按键判断程序,能对按键处理。
[7-8]
7.定时器计数器详细说明
1).计数的定义:
计数是指对外部事件进行计数,外部事件的发生以输入脉冲的形式表示,因此计数功能的实质就是对外来
的脉冲进行计数,在单片机中对应引脚T0和T1,两个脉冲输入端。
外部输入的脉冲在负跳变时有效(即外部脉冲由1变化到0),计数器加1.
2).定时器:
定时器是通过计数器的计数来实现的,不过此时的计数脉冲来自单片机的内部,因此定时器的实质是对内
部脉冲的计数,在单片机中,每个机器周期产生一次计数脉冲,计数器加1.
3).工作方式控制寄存器TMOD:
[9]
TMOD的低半字节(D0,D1,D2,D3)用来控制定时器计数器0
TMOD的高半字节(D4,D5,D6,D7)用来控制定时器计数器1
对TMOD中的内容说明:
GATE——门控制。
GATE=1时,由外部中断引脚INT0、INT1来启动定时器T0、T1。
当INT0引脚为高电平时TR0置位,启动定时器T0;
当INT1引脚为高电平时TR1置位,启动定时器T1。
GATE=0时,仅由TR0,TR1置位分别启动定时器T0、T1。
CT——功能选择位
CT=0时为定时功能,CT=1时为计数功能。
M0、M1——方式选择功能
由于有2位,因此有4种工作方式
4).根据单片机晶振,所选TMOD的的工作方式,所要定的时间,来确定THO和TLO所要赋予的初值[10-11]
(以12M晶振,工作方式1,16位计数器为例,设所定时间为Xus(16为计数器最大数65536,即65536us,若所
定时间大于65535,则要用if语句控制,现假设X<65535))
1.时钟周期的时间t=112M=112us
2.机器周期的时间T=12*112=1us
3.因为每经过一个机器周期计数器+1,所以,计数器+1,经过的时间为1us。
若所定时间为X,则要求经过Xus,中断响应,又因为16为计数器要全部置1(即达到65535)+1后,中断才会
响应,所以,初值=(65536-X)
4.将初值转化为16进制码,分别付给THO和TLO
eg:
所定时间50ms
初值=()=15536=3CB0H
TH0=0X3C;TL0=0XB0;
(当工作方式不同时,TH0TL0的赋值也不同,个人觉得有了16位计数器了,其余的没什么用,不介绍了)
8.实验步骤
1)启动KeiluVision3
2)新建项目“秒表”,并新建文件“正计时与倒计时7.c”
3)在“正计时与倒计时7.c”中写入代码,选择创建hex文件,编辑运行产生hex文件
4)使用STC_ISP_V480软件将产生的hex烧录到开发板中(注意com号的选择,在设备管理器中查看com号)。
9.实验流程图
10.实验误差处理
由于中断溢出,晶振和其他硬件原因造成单片机秒表时间可能不准确,那么我们可以使用软件来修正,使其计时更加精准。
正常情况下:
TC=M-TT计数=65536-50ms1us=15536=3CB0H
但是我们在16位计数机使用3CB0时存在误差,和标准时间比较5min慢1s,
那么就应该修改TC:
N=20*50ms*5*60,T计数=N299;
TC=M-TT计数=3D57
设计核心代码
#include{
time=999;
timer0_init();
timer1_init();
interrupt0_init();
interrupt1_init();
while
(1)
{
uint16ge,shi,bai;
ge=time%10;通过取余的方法把时间的个位取出来
shi=(time10)%10;通过取整的方法把时间的十位取出来
bai=(time100)%10;通过取整的方法把时间的百位取出来
refresh0();刷新低3位
delay
(2);调用延迟函数
refresh1(bai,shi,ge);刷新高3位
delay
(2);调用延迟函数
if(Key1==0)
{
delay
(2);
if(Key1==0)
{
while(!
Key1);
D0=0;
D1=0;
D2=0;
}
}
if(Key2==0)
{
delay
(2);
if(Key2==0)
{
while(!
Key1);
D0=0;
D1=0;
D2=0;
time=999;
ge=time%10;通过取余的方法把时间的个位取出来
shi=(time10)%10;通过取整的方法把时间的十位取出来
bai=(time100)%10;通过取整的方法把时间的百位取出来
refresh0();刷新低3位
delay
(2);调用延迟函数
refresh1(bai,shi,ge);刷新高3位
delay
(2);调用延迟函数
}
}
}
voidrefresh0()
{
staticuint8j=0;
switch(j)
{
case0:
P0=0xff;
P2&=0xDF;P2|=0x1F;
j++;P0=number[a[0]];
break;?
?
x
case1:
P0=0xff;P2&=0xEF;P2|=0x2F;j++;P0=number[a[1]];
break;?
x?
case2:
P0=0xff;P2&=0xF7;P2|=0x37;j=0;P0=number[a[2]];
break;x?
?
default:
break;
}
}
voidrefresh1(uint8data1,uint8data2,uint8data3)
{
P0=number[data1];
P2&=0xFE;
P2|=0x3E;最高位
delay
(1);
P0=0xff;
P0=number[data2];
P2&=0xFD;
P2|=0x3D;
delay
(1);
P0=0xff;
P0=number[data3];
P2&=0xFB;
P2|=0x3B;
delay
(1);
P0=0xff;
}
voidinterrupt_timer0()interrupt1定时器0溢出中断
{
staticuint16sec=0;
TH0=0x3D;重新对计数器进行赋值
TL0=0x57;修正成3D57
TL0=0xB0;
counter0++;
if(20==counter0)表示记满20次,即为1S
{
sec++;
counter0=0;
a[0]=sec%10;个位
a[1]=sec10%10;十位
a[2]=sec100%10;百位
}
}
voidinterrupt_timer1()interrupt3定时器1溢出中断高3位中断
{
TH1=0x3D;重新对计数器进行赋值
TL1=0x57;修正成3D57
TL1=0xB0;
counter1++;
if(20==counter1)表示记满20次,即为1S
{
time--;
counter1=0;
if(time==65536)
time=999;
}
}
5、运行结果
计时器运行结果如图:
6、总结
单片机是我所学专业的主要课程之一,因此我认为单片机课程设计是十分必要而且十分重要的。
尽管刚刚拿到课程设计题目时有点迷惘,不知道如何着手,但通过上网和图书馆查阅相关资料,自己认真钻研以及虚心询问同学,终于解决了一个又一个的困难和障碍,成功完成了任务。
通过本次的单片机课程设计,不仅大大地丰富了我的理论知识,而且在实践过程中更令我学会了坚持、耐心和努力。
此次单片机课程设计需要运用到许多之前所学过的知识,令我认识到自己以前学习的一些不足之处,例如对以前所学知识的理解不够深刻,掌握得不够牢固,运用不够灵活。
这让我懂得了认真学习的重要性,以及要孜孜不倦地钻研所学过的知识,做得融会贯通,不能一览而过,不求甚解。
在边学习边动手的过程中,我对电子时钟的构造以及原理有了进一步的了解,同时也加深和巩固了我对单片机C语言的认识。
除此之外,由于是第一次做单片机,因此在此次课程设计的过程中,无论是电路绘制还是C语言编写都难免遇到了不少困难和障碍,例如C语言编写出错、电路元件无从入手等。
在面对困难和障碍时,我庆幸自己没有退缩和逃避,而是通过各种方法,迎难而上,以坚持、耐心和努力勇敢无畏地面对困难,克服困难,解决困难。
让我发现问题、分析问题、解决问题以及动手实践的能力都有了很大的提高,并了解到理论知识与实践相结合的重要意义。
从这次的课程设计中,我们真真正正的意识到,在以后的学习中,要理论联系实际,把我们所学的理论知识用到实际当中,学习单机片机更是如此,程序只有在经常的练习的过程中才能提高。
本次课程设计尽管时间不长,但从中所获,将令我受益终生。
七、参考文献
[1]刘守义,单片机应用技术[M]成都:
西安电子科技大学出版,2002
[2]Victor P. Nelson ,Digital Logical Circuits Analysis & Design [J], Prentice Hall.2003年6月出版, P40-94
[3]万胜前. 基于KeilC51软件的电子钟设计与制作[J],鄂州大学学报,2007年第2期,P16-20
[4]赵秀珍,单片微型计算机原理及其应用[M] 中国水利水电出版社,2001
[5]向继文等..基于AT89C51的电子钟系统设计[J],应用科技,2007年第2期,P34-37
[6]M.Morris Mano 《Digital Design》[M](Third Edition)Higher Education Press ,2002
[7]何希才,杜煜.实用电子电路设计[M].北京:
电子工业出版社,1998.2
[8]马鸿文.基于AT89C51单片机的自动存取柜的设计与实现[J].微计算机信息(1-2):
P
[9]彭小军. 用单片机实现电子时钟[J].新余高专学报,2004年4月第9卷第2期,P27-34
[10] 蒋敏. 单片微机万年历设计[J],职大学报,2000年第2期 ,P66-73
[11]StevenF.Barrett,Daniel J.Pack.Embedded System[M].BeiJing:
ElectronicIndustryPress,2004
附录1.(元件清单)
易购元件商城发货清单
收货地址
四川省成都市龙泉驿区十陵镇成都大学男生寝室9栋336
固定电话
手机号码
商家编码
商品名称
商品规格
数量
单价
总价
1
贴片电阻0805
102
10
0.008
0
2
贴片电阻0805
103
12
0.008
0
3
贴片电阻0805
331
10
0.008
0
4
贴片电阻0805
510
2
0.008
0
5
9P—4.7K排阻
9P直插,2.54mm间距
1
0.16
0
6
贴片电容0805
30P
4
0.03
0
7
贴片电容0805
104
10
0.03
0
8
胆电容,3528
106E,6.3V
4
0.55
2
9
led灯0805,红绿各半
0805,红绿各半
12
0.08
1
10
自锁开关
8*8*12.5
1
0.15
0
11
301-3p接线端子-继电器
KF-301-3P,5.08mm
1
0.28
0
12
6*6*6开关
四脚直插
4
0.06
0
13
1*40座
2.54mm
1
0.24
0
14
1*40针