您好,欢迎来到小奈知识网。
搜索
您的当前位置:首页秒表课程设计

秒表课程设计

来源:小奈知识网
※※※※※※※※※ ※※ 2010级

※※※

单片机课程设计

※※※※※※※

※ ※ ※

单片机课程设计报告书

课题名称 姓 名 学 号 院、系、部 专 业 指导教师

2016年 7 月10日

秒表设计

秒表设计

一、设计目的

以单片机为基础,用C语言编写程序,完成一个可以实现开始、复位、暂停、继续,并且以精度为0.1秒正计时、倒计时的秒表。锻炼硬件和软件相结合的能力。

二、 设计要求

1、可启动、暂停、继续、复位。 2、4位显示,精确到0.1(999.9)。

3、可正计时、倒计时。正计时时,从0000开始,最大到999.9秒,倒计时时,从设定时间开始。

4、通过键设定时间,可设定正计时的结束时间和倒计时的开始时间,当到 达设定时间或倒计时到0时报警,数码管闪烁最后时间。

三、 硬件电路设计

3.1系统结构框图

显示数码管 单片机 按键

直流电 +5V

图3-1系统框图

秒表设计系统主要由单片机、显示数码管、锁存器、开关、电容几部分组成。

系统框图如图3-1所示。

2

3.2 STCC52单片机介绍

C52共有四个八位的并行双向口,即有32根输入输出口线。各口的每一位均由锁存器、输出驱动器和输入缓冲器组成。STCC52芯片有40个引脚,各引脚功能介绍如下:

VCC(40引脚):电源电压。 VSS(20引脚):接地。

P0端口(P0.0~P0.7,39~32引脚):P0口是一个漏极开路的8位双向I/O口。作为输出端口,每个引脚能驱动8个TTL负载,对端口P0写入“1”时,可以作为高阻抗输入。在访问外部程序和数据存储器时,P0口也可以提供低8位地址和8位数据的复用总线。此时,P0口内部上拉电阻有效。在Flash ROM编程时,P0端口接收指令字节;而在校验程序时,则输出指令字节。验证时,要求外接上拉电阻。

P1端口(P1.0~P1.7,1~8引脚):P1口是一个带内部上拉电阻的8位双向I/O口。P1的输出缓冲器可驱动4个TTL负载。对端口写入1时,通过内部的上拉电阻把端口拉到高电位,这是可用作输入口。P1口作输入口使用时,因为有内部上拉电阻,那些被外部拉低的引脚会输出一个电流。P1口特点是输出锁存器,输出时没有条件。输入缓冲,输入时有条件,即需要先将该口设为输入状态,先输出1。此外,P1.0和P1.1是多功能的。P1.0还可以作为定时器/计数器2的外部输入端T2。P1.1还可以作为定时器/计数器2的外部控制端T2EX。

P2端口(P2.0~P2.7,21~28引脚):P2口是一个带内部上拉电阻的8位双向I/O端口。P2的输出缓冲器可以驱动4个TTL负载。对端口写入1时,通过内部的上拉电阻把端口拉到高电平,这时可用作输入口。P2作为输入口使用时,因为有内部的上拉电阻,那些被外部信号拉低的引脚会输出一个电流。在访问外部程序存储器和16位地址的外部数据存储器时,P2送出高8位地址。在访问8位地址的外部数据存储器时,P2口引脚上的内容在整个访问期间不会改变。

P3端口(P3.0~P3.7,10~17引脚):P3是一个带内部上拉电阻的8位双向I/O端口。P3的输出缓冲器可驱动4个TTL负载。对端口写入1时,通过内部的上拉电阻把端口拉到高电位,这时可用作输入口。P3做输入口使用时,因为有内部的上拉电阻,那些被外部信号拉低的引脚会输入一个电流。P3口除作为一般I/O口外,还有其他一些复用功能如下:

P3.0---RXD,串行输入口。 P3.1---TXD,串行输出口。 P3.2---INT0,外部中断0的请求。

3

P3.3---INT1,外部中断1的请求。

P3.4---T0,定时器/计数器0外部计数脉冲。 P3.5---T1,定时器/计数器,1外部计数脉冲。 P3.6---WR,外部数据存储器写选通。 P3.7---RD,外部数据存储器读选通。

RST(9引脚):复位输入。当输入连续两个机器周期以上高电平时为有效,用来完成单片机单片机的复位初始化操作。

ALE(30引脚):地址锁存控制信号(ALE)是访问外部程序存储器时,锁存低8位地址的输出脉冲。

XTAL1(19引脚):振荡器反相放大器和内部时钟发生电路的输入端。 XTAL2(18引脚):振荡器反相放大器的输入端。

图3-2 STCC52引脚图

4

3.3 按键扫描电路

按键电路由8个开关组成。8个开关分别为启动定时键时控制数码管四位显示的4个按键(K0、K1、K2、K3)、开始键(K4)、暂停键(K5)、定时键(K6)、倒计时开始/继续键(K7),开始键(K4)、暂停键(K5)、定时键(K6)、倒计时开始/继续键(K7),在线路板上分别与P3.0、P3.1、P3.3、P3.4相连,按键低电平时表示按下,高电平时表示弹起,按键扫描。按键电路的电路图如图3-3所示

图3-3 按键电路

3.4 数码管显示电路

秒表的数码显示电路如图3-4所示。此次设计最小为0秒,最大为999.9秒。图3-4(a)为四位一体共阴极数码管,图中的A、B、C、D、E、F、G、DP作为段选,由74HC573来控制,74HC573的管脚如图3-4(b)所示,数码管的1、2、3、4作为位选由P3口的4个端口来控制。

(a) (b)

图3-4 数码显示

5

74HC573功能表:

3.5 指示灯

秒表的指示灯电路如图3-5所示。在没有设定时间的时候,当正计时达到999.9秒的时候指示灯点亮,倒计时达到0的时候,指示灯也点亮。当有设定的时间的时候,当达到设定的时间的时候,指示灯也会点亮。因为LED灯外接电源为+5V,其通过的电流为20mA,通过公式:R=U/I得:R2的阻值为1K欧姆。

图3-5 指示电路

3.6时钟电路

此系统的时钟电路设计是采用的内部方式,即利用芯片内部的振荡电路。MCS-51内部有一个用于构成振荡器的高增益反相放大器。引脚XTAL1和XTAL2分别是此放大器的输入端和输出端。这个放大器与作为反馈元件的片外晶体谐振器一起构成一个自激振荡器。外接晶体谐振器以及电容CX1和CX2构成并联谐振电路,接在放大器的反馈回路中。此系统电路的晶体振荡器的值为12MHz,电容值约为22μF。

晶振电路如图3-6所示

6

图3-6 时钟电路

3.7复位电路

复位电路的工作原理是:1、当单片机RST引脚收到2微秒以上的电平信号,只要保证电容的充放电时间大于2微秒,即可实现复位;2、当按下复位按键时,电容处于短路状态,释放出其电能,电阻两端电压增加,RST引脚得点实现复位。

其原理图如图3.1所示

图3-7 复位电路

3.8系统电路原理图

所需元件有电阻:1KΩ(1个);按钮:8个;电容:1μF(1个);单片机芯片:1个;显示数码管:1个;锁存器:1个。此次设计中有8个按键,不同的按键的功能也不同。用P1口来扫描按键,确定执行的功能。用P2和P3口来控制数码管的输出,P2口通过74HC573来输出段码,用P3口来控制数码管的位码。系统电路原理图如图3-5所示。

7

图3-5 系统电路原理图

四、程序流程图设计

主程序流程图见图4-1:

图4-1 主程序流程图

8

五、程序设计

#include

#define uchar unsigned char #define uint unsigned int sbit k0=P1^0; sbit k1=P1^1; sbit k2=P1^2; sbit k3=P1^3; sbit k4=P1^4; sbit k5=P1^5; sbit k6=P1^6; sbit k7=P1^7; sbit k8=P3^2;

uchar code table[]={

0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f}; void delayms(uint);

void display(uchar,uchar,uchar,uchar); void keyscan();

uchar num2=0,qian,bai,shi,ge,q=0,b=0,s=0,g=0; uint num,n,x,=0,y=0,z=0; void main() { num=0; P0=0x00; TMOD=0x11;

TH0=(65536-50000)/256; TL0=(65536-50000)%256; TH1=(65536-50000)/256; TL1=(65536-50000)%256; EA=1; ET0=1; ET1=1; EX0=1; IT0=0; while(1) {

keyscan();

qian=num/1000;

bai=(num-1000*qian)/100;

shi=(num-1000*qian-100*bai)/10; ge=num-1000*qian-100*bai-10*shi;

9

P2=0x80; P3=0xbf; delayms(5);

display(qian,bai,shi,ge); } }

void display(uchar qian,uchar bai,uchar shi,uchar ge) //显示 {

P2=table[qian]; P3=0xef; delayms(5); P2=table[bai]; P3=0xdf; delayms(5); P2=table[shi]; P3=0xbf; delayms(5); P2=table[ge]; P3=0x7f; delayms(5);}

void delayms(uint xms) //延时 {

uint i,j;

for(i=xms;i>0;i--) for(j=110;j>0;j--); }

void keyscan() //按键扫描 {

if(k4==0) //正计时 {

delayms(10); if(k4==0) {

while(!k4) { if(z==1) num=0; x=1; y=0; TR0=0; TR1=1; } } }

if(k5==0) //暂停与继续 {

10

delayms(10); if(k5==0) {

while(!k5); if(x==1) {TR0=0; TR1=~TR1;} if(y==1) { TR1=0; TR0=~TR0; } } }

if(k6==0) //设置 {

delayms(10); if(k6==0) {

while(!k6) ; k8=0; TR0=0; TR1=0; } }

if(k7==0) //倒计时 {

delayms(10); if(k7==0) {

while(!k7) ; y=1;x=0; TR0=1; TR1=0; } } }

void T0_time()interrupt 1 //倒计时中断 {

TH0=(65536-50000)/256; TL0=(65536-50000)%256; num2++;

if(num2==2) { num2=0; num--;}

11

if(num==0) { P0=0x01;

EA=0;} }

void T1_time()interrupt 3 //正计时中断 {

TH1=(65536-50000)/256; TL1=(65536-50000)%256; num2++;

if(num2==2) {

num2=0; num++; } if(num==9999) { P0=0x01;EA=0;} if(num==n&&z==1) { P0=0x01; EA=0;} }

void Tn_0()interrupt 0 { P3=0xff; while(z!=1) {if(k6==0) {delayms(10); if(k6==0) {while(!k6); z=1; } }

if(k0==0) {delayms(10); if(k0==0) {

while(!k0); if(q<9) { q++; } } }

if(k1==0) {

delayms(10);

//4位设置按键中断 12

if(k1==0) { while(!k1); if(b<9) { b++; } } }

if(k2==0) {

delayms(10); if(k2==0)

{ while(!k2); if(s<9) { s++; } } }

if(k3==0) {

delayms(10); if(k3==0) {

while(!k3); if(g<9) { g++; } } } }

num=q*1000+b*100+s*10+g; //取设定的时间 n=num;}

六、设计结果

按下开始键将秒表复位后的结果如图6-1:

13

图6-1复位状态

由复位状态切换到正计时(按下K4键)如图6-2:

图6-2正计时状态

由设定时间999.9s开始倒计时(按下K7键)的状态见图6-3:

图6-3 倒计时状态

按下K5键计时暂停的状态见图6-4:

图6-4暂停状态

14

七、设计总结

这次基于52单片机的程序设计采用硬件和软件相结合的方式,利用C语言对单片机进行程序下载控制,实现秒表的功能。采用两个定时器T0和T1完成正计时和倒计时的实现。通过按键,控制定时器的打开和关闭,完成计时。这次课程设计也遇到了很多的问题,比如时间的调整方面。

八、参考文献

[1] 高峰.单片微型计算机原理与接口技术.科学出版社,2007. [2] 李飞.单片机原理及其应用. 西安电子科技大学出版社 ,2007. [3] 李广弟.单片机基础.北京航空航天出版社,2001.

15

因篇幅问题不能全部显示,请点此查看更多更全内容

Copyright © 2019- huatuo3.com 版权所有 蜀ICP备2023022190号-1

违法及侵权请联系:TEL:199 1889 7713 E-MAIL:2724546146@qq.com

本站由北京市万商天勤律师事务所王兴未律师提供法律服务