目录
1 引言 ................................................................... 2
1.1 单片机的发展概况 .................................................. 2 1.2数字秒表的描述与分析 .............................................. 3 1.2.1问题描述 ....................................................... 3 1.2.2设计要求 ....................................................... 3 2 设计目的及要求 ......................................................... 5
2.1 设计目的 .......................................................... 5 2.2 设计要求 .......................................................... 5 3 系统硬件电路设计 ....................................................... 6
3.1数字秒表电路原理 .................................................. 6 3.2数字秒表电路设计 .................................................. 8 4 软件设计 ............................................................... 9
4.1编程环境的介绍 .................................................... 9 4.2设计思想 .......................................................... 9 4.3主程序设计 ........................................................ 9 4.4 外部中断程序设计 ................................................. 10 4.5 定时中断程序设计 ................................................. 11 4.6实验程序 ......................................................... 12 5 仿真结果 .............................................................. 16 总结 .................................................................... 19 参考文献 ................................................................ 20 附录1 ................................................................... 21
单片机课程设计
1 引言
1.1 单片机的发展概况
单片机以其高可靠性、高性价比、低电压、低功耗等一系列优点,近几年得到迅猛发展和大范围推广,广泛应用于工业控制系统,数据采集系统、智能化仪器仪表,及通讯设备、日常消费类产品、玩具等。并且已经深入到工业生产的各个环节以及人民生活的各层次中,如车间流水线控制、自动化系统等、智能型家用电器(冰箱、空调、彩电)等。
管脚图如图1所示。
图1 C52单片机引脚图
(1) 电源地组Vcc和Vss;VCC—(40)脚接+5V电压;VSS—(20)脚接地 (2) 时钟电路组XTAL1和XTAL2 (3) 控制信号组RST/ALE/PSEN和EA (4) I/O端口P0, P1, P2和P3
2
单片机课程设计
近来,单片机的发展尤为迅猛,并且趋于高智能化、存储器大量化、更多的外围电路内装化以及工艺上的多元化等方向,广泛应用于单机应用领域、多机应用领域、自动控制领域和智能化控制领域等。单片机应用系统的结构通常分为三个层次,即单片机、单片机系统和单片机应用系统。单片机通常指应用系统主处理机,即所选择的单片机器件等。单片机系统指按照单片机的技术要求和嵌入对象的资源要求而构成的基本系统。时钟电路、复位电路和扩展存储器等与单片机共同构成了单片机系统。单片机应用系统指能满足嵌入对象要求的全部电路系统。在单片机系统的基础上加上面向对象的接口电路,如前向通道、后向通道、人机交互通道(键盘、显示器、打印机等)和串行通信口(RS232)以及应用程序等。单片机应用系统层次关系如图2所示。
应用程序 向前通道 单片机应用系统 向后通道 单片机系统 人机交互通道 串行通信口 单片机
图2 单片机应用系统三个层次的关系
1.2数字秒表的描述与分析
1.2.1问题描述
设计一个秒表,第一次按键,开始计数,数码管显示从00.00每10毫秒自动加1;第两二次按键,系统暂停计数,数码管显示当前的计数;第三次按键系统清零,数码管显示00.00 。
1.2.2设计要求
1.使用四位数码管显示,显示时间00.00~99.99秒;
3
单片机课程设计
2.正常计数时,每10毫秒自动加1;
3.一个按键(包括开始、暂停、清零),一个复位按键; 4.实现计数、复位、清零功能;
5.单片机通电后,首先初始化。第一次按键用来控制秒表工作的开始;第二次按键用来暂停程序的运行;第三次按键用来进行显示器清零;复位键是用来对程序复位用的,当程序出现死循环或想从00.00开始重新计时,按下复位键可返回程序开始,重新执行。
4
单片机课程设计
2 设计目的及要求
2.1 设计目的
1.建立数字电子电路系统的基本概念;
2.通过本次课程设计加深对单片机课程的全面认识复习和掌握,对单片机课程的应用进一步的了解。
3.掌握定时器、外部中断的设置和编程原理。
4.通过此次课程设计能够将单片机软硬件结合起来,对程序进行编辑,校验。
2.2 设计要求
设计一个数字电子秒表,该秒表具有显示功能和清零、开始计时、停止计时等功能。 设计的要求如下:
1.以10毫秒为最小单位进行显示; 2.秒表可显示00.00~99.99秒的量程; 3.该秒表具有清零、开始计时、停止计时功能;
5
单片机课程设计
3 系统硬件电路设计
3.1数字秒表电路原理
数字电子秒表具有显示直观、读取方便、精度高等优点,在计时中广泛使用。本设计用单片机组成数字电子秒表,力求结构简单、精度高为目标。
设计中包括硬件电路的设计和系统程序的设计。其硬件电路主要有主控制器,计时与显示电路和回零、启动等。主控制器采用单片机C52,显示电路采用四位共阳极LED数码管显示计时时间。由于本实验有四位数码管,如果采用静态显示要占用全部的I/O端口,所以本次试验采用静态显示,共使用12个引脚,即简化了电路又节省了原料。
本设计利用C52单片机的定时器/计数器定时和记数的原理,使其能精确计时。利用中断系统使其能实现开始和复位的功能。P2口输出段码数据,74HC573用作驱动输出,P1.0口接一个按钮开关,分别实现开始、暂停、清零功能。电路原理图设计最基本的要求是正确性,其次是布局合理,最后在正确性和布局合理的前提下力求美观。 秒表原理图如图3所示。
6
单片机课程设计
图3 秒表原理图
7
单片机课程设计
3.2数字秒表电路设计
图4 秒表设计图
8
单片机课程设计
4 软件设计
4.1编程环境的介绍
KeilSoftware公司推出的uVision3是一款可用于多种8051MCU的集成开发环境(IDE),该IDE同时也是PK51及其它开发套件的一个重要组件。除增加了源代码、功能导航器、模板编辑以及改进的搜索功能外,uVision3还提供了一个配置向导功能,加速了启动代码和配置文件的生成。此外其内置的仿真器可模拟目标MCU,包括指令集、片上外围设备及外部信号等。uVision3提供逻辑分析器,可监控基于MCUI/O引脚和外设状态变化下的程序变量。
uVision3提供对多种最新的8051类微处理器的支持,包括AnalogDevices的ADuC83x和ADuC84x,以及Infineon的XC866等
4.2设计思想
本设计采用了C语言编写,由于C语言编程灵活,可移植性强。在一定程度上简化了编程过程。模块化结构程序的设计,可以使系统软件便于调试与优化,也使其他人更好地理解和阅读系统的程序设计。
4.3主程序设计
本系统程序主要模块由主程序、定时中断服务程序、外部中断0服务程序组成。其中主程序是整个程序的主体。可以对各个中断程序进行调用。协调各个子程序之间的联系。系统(上电)复位后,进入主程序,主程序流程图如图5所示。当外部中断有请求则去执行外部中断服务程序。并在执行完后返回主程序。
9
单片机课程设计
开始 开开始始 程序初始化 K=1 K=0 K=2 Temp++ Temp=0 Temp=tem显示数据 图5 主程序流程图
4.4 外部中断程序设计
中断的概念:
CPU在处理某一事件A时,发生了另一事件B请求CPU迅速去处理(中断发生);CPU暂时中断当前的工作,转去处理事件B(中断响应和中断服务);待CPU将事件B处理完毕后,再回到原来事件A被中断的地方继续处理事件A(中断返回),这一过程称为中断 。
10
单片机课程设计
INT0中断 K=0 是 K=2 否 K++ 图6 中断程序子流程图
4.5 定时中断程序设计
定时/计数器的结构:
定时/计数器的实质是加1计数器(16位),由高8位和低8位两个寄存器组成。TMOD是定时/计数器的工作方式寄存器,确定工作方式和功能;TCON是控制寄存器,控制T0、T1的启动和停止及设置溢出标志。 定时/计数器的原理
加1计数器输入的计数脉冲有两个来源,一个是由系统的时钟振荡器输出脉冲经12分频后送来;一个是T0或T1引脚输入的外部脉冲源。每来一个脉冲计数器加1,当加到计数器为全1时,再输入一个脉冲就使计数器回零,且计数器的溢出使TCON中TF0
11
单片机课程设计
或TF1置1,向CPU发出中断请求(定时/计数器中断允许时)。如果定时/计数器工作于定时模式,则表示定时时间已到;如果工作于计数模式,则表示计数值已满。 可见,由溢出时计数器的值减去计数初值才是加1计数器的计数值。
4.6实验程序 4.61主函数设计void main() { init(); while(1) {
if(k==0) { init();
wela=1;
定时器T0入口地址 置初值 否 定时器溢出是 Temp加1 调用数码显示子程序 中断返回
图7定时器T0子程序流程图
//初始化子程序
//初始化子程序
//初始设置显示00.00
12
单片机课程设计
P2=0XFF; wela=0; P0=0xc0;
}
if(k==1) { if(temp==9999) {
temp=0;
}
qian=temp/1000;
bai=temp%1000/100;
shi=temp%1000%100/10;
ge=temp%10;
display(qian,bai,shi,ge);
} Else
{ qian=temp/1000; bai=temp%1000/100;
shi=temp%1000%100/10; ge=temp%10;
display(qian,bai,shi,ge); if(k==3)
k=0;
}
}
}
//第二次按键开始计数
//当计数超过99.99秒时清零//计算数码管第一位 //计算数码管第二位 //计算数码管第三位 //计算数码管第四位
//显示时间
//第二次按键时停止
//第三次按键时清零
13
单片机课程设计
4.62中断子程序设计
void time0() interrupt 0 { }
k++;
//中断子程序
4.61延时子函数设计
4.61显示子程序设计
void display(uint qian,uint bai,uint shi,uint ge) //显示子函数 {
wela=1; P2=0x01; wela=0; P0=table[qian]; delay(1);
//显示数码管第一位
wela=1; P2=0x04; wela=0; P0=table[shi];
14
wela=1; P2=0x02; wela=0;
//显示数码管第二位
P0=table1[bai]; delay(1);
//显示数码管第三位
单片机课程设计
delay(1);
wela=1; P2=0x08; wela=0;
P0=table[ge];
delay(1);
}
4.61初始化子程序设计
void init() { wela=0; temp=0; TMOD=0x01; TH0=0xc8; TL0=0xf0; EA=1;
ET0=1; TR0=1;
EX0=1; IT0=1;
}
//显示数码管第四位
//初始化子程序
//设置定时器0为工作方式1
//开总中断 //开定时器0中断
//启动定时器0
15
单片机课程设计
5 仿真结果
仿真环境
Proteus 是英国Labcenter公司开发的电路分析与实物仿真软件。它运行于Windows操作系统上,可以仿真、分析(SPICE)各种模拟器件和集成电路,该软件的特点是:①实现了单片机仿真和SPICE电路仿结合。具有模拟电路仿真、数字电路仿真、单片机及其外围电路组成的系统的仿真、RS232动态仿真、I2C调试器、SPI调试器、键盘和LCD系统仿真的功能;有各种虚拟仪器,如示波器、逻辑分析仪、信号发生器等。
②支持主流单片机系统的仿真。目前支持的单片机类型有:ARM7(LPC21xx)、 8051/52系列、AVR系列、PIC10/12/16/18系列、HC11系列以及多种外围芯片。③提供软件调试功能。在硬件仿真系统中具有全速、单步、设置断点等调试功能,同时可以观察各个变量、寄存器等的当前状态,因此在该软件仿真系统中,也必须具有这些功能;同时支持第三方的软件编译和调试环境,如Keil C51 uVision2、MPLAB等软件。
④具有强大的原理图绘制功能。总之,该软件是一款集单片机和SPICE分析于一身的仿真软件,功能极其强大。 本实验采用protues7.4版本。
运行开始前,数码显示管显示为00.00。
16
单片机课程设计
按下开关,秒表程序运行,数码管开始跑动。
再次按下开关,秒表程序运行停止,数码管显示时间不变。
17
单片机课程设计
第三次按键,数码管清零。
图10仿真图
18
单片机课程设计
总结
通过本次设计,复习巩固我们以前所学习的单片机原理及应用等课程知识,加深对各门课程及相互关系的理解,使理论知识系统化、实用化,系统地掌握微机应用系统的一般设计方法,培养较强的编程能力、开发能力。同时,在设计的过程中,我也发现了本系统的许多不足和可以改进的地方。本设计的数字电子秒表缺少对多次计时时间进行记录的功能。应给在单片机的内部存储区多设置一些存储空间,用来存储多次计时时间。并在程序中编入对多次计时时间的调用显示。虽然存在不足,但本设计的数字电子秒表仍具有它的实用性。
本设计的数字电子秒表是由C52单片机、共阳数码显示管、控制按键等器件构成的,设有四位计时显示,复位按键以及一个开始、暂停、清零按钮。计时精度能到达10ms,设计精简,使用简单易懂。系统设计合理,线路简单、功能先进,性能稳定,程序精简。并给出了详细的电路设计方法。在此,感谢老师对我们的精心指导,耐心讲解,才能够使我们较成功地完成这次课程设计。
19
单片机课程设计
参考文献
[1] 李华,王思明,张金敏.单片机原理及应用[M].兰州:兰州大学出版社,2001.5. [2]吴蓉,梁龙学,崔用明.数字电子技术[M].兰州:兰州大学出版社,2006.7. [3] 顾滨,李勋.单片微计算机原理开发与应用[M].北京:高等教育出版社,2000.2.
20
单片机课程设计
附录1
程序代码
#include //定义驱动控制端口 //声明全局变量 //数码管显示0到9 uchar code table[]={ 0xc0,0xf9,0xa4,0xb0, 0x99,0x92,0x82,0xf8, 0x80,0x90}; uchar code table1[]={ 0x40,0x79,0x24,0x30, 0x19,0x12,0x02,0x78, 0x00,0x10}; //第二位数码管显示(包含小数 //点) void display(uint qian,uint bai,uint shi,uint ge); //声明显示函数 void delay(uint z); void init(); void main() { init(); //初始化子程序 //声明延时函数 while(1) { if(k==0) { init(); 21 //初始化子程序 //初始设置显示00.00 wela=1; 单片机课程设计 P2=0XFF; wela=0; P0=0xc0; } if(k==1) { if(temp==9999) { temp=0; } qian=temp/1000; bai=temp%1000/100; shi=temp%1000%100/10; ge=temp%10; display(qian,bai,shi,ge); } Else { qian=temp/1000; bai=temp%1000/100; shi=temp%1000%100/10; ge=temp%10; display(qian,bai,shi,ge); if(k==3) k=0; } } } //第二次按键开始计数 //当计数超过99.99秒时清零 //计算数码管第一位 //计算数码管第二位 //计算数码管第三位 //计算数码管第四位 //显示时间 //第二次按键时停止 //第三次按键时清零 22 单片机课程设计 void delay(uint z) { uint x,y; for(x=z;x>0;x--) //延时子函数 for(y=110;y>0;y--);} void display(uint qian,uint bai,uint shi,uint ge) //显示子函数 { wela=1; P2=0x01; wela=0; P0=table[qian]; delay(1); //显示数码管第一位 wela=1; P2=0x08; wela=0; 23 wela=1; P2=0x02; wela=0; //显示数码管第二位 P0=table1[bai]; delay(1); wela=1; P2=0x04; wela=0; //显示数码管第三位 P0=table[shi]; delay(1); //显示数码管第四位 单片机课程设计 P0=table[ge]; delay(1);} void init() { wela=0; temp=0; TMOD=0x01; TH0=0xc8; TL0=0xf0; EA=1; ET0=1; TR0=1; EX0=1; IT0=1; } void timer0() interrupt 1 { TH0=0xc8; TL0=0xf0; if(k==1) temp++; else if(k==2) temp=temp; } void time0() interrupt 0 { k++; } //初始化子程序 //设置定时器0为工作方式1 //开总中断 //开定时器0中断 //启动定时器0 //定时器设置时间10毫秒 //第一次按键加一 //第二次按键保持 //中断子程序 24 因篇幅问题不能全部显示,请点此查看更多更全内容
Copyright © 2019- dfix.cn 版权所有 湘ICP备2024080961号-1
违法及侵权请联系:TEL:199 1889 7713 E-MAIL:2724546146@qq.com
本站由北京市万商天勤律师事务所王兴未律师提供法律服务