单片机结课设计报告
设计课题:秒表设计
专业班级:
学生姓名
学号:
指教教师:
设计时间:20##年10月22日--10月29日
目录
一、 设计任务和要求………………………………………….….3
(1)设计任务…………………………..…………………...…..…3
(2)设计要求…………………..……………..………………....…3
二、 设计方案与论证………………………………………….....3
三、 单元电路设计与参数计算………………………………….4
(1)时钟电路…………………………………………………….4
(2)按钮电路…………………………………………………….4
(3)显示电路…………………………………………………….5
(4)单片机……………………………………………………….5
四、 原理图及器件清单………………………………………….6
( 1 )总原理图…………………………………………………..…..6
(2)PCB图………………………………………………….…….7
(3)Proteus仿真图…………………………………………….……7
(4)元器件清单………………………………………..……….….8
五、 安装与调试……………………………………………..…..8
(1)安装………………………………………………………...8
(2)调试………………………………………………………...8
六、 性能测试和分析…………………………………………….9
七、 结论和心得………………………………………………….9
八、 参考文献……………………………………………….…...9
秒表设计
一、 设计任务和要求
(1)设计任务
用AT89C51设计一个3位的LED数码作为“秒表”。
(2)设计要求
显示时间为0.0-99.9秒,每0.1秒自动加1,另外设计一个“开始”键、一个“复位”键和一个“停止”键。秒表可单独分别计时,且最多可计5次。
二、方案设计与论证
本设计分为时钟电路、按钮电路、显示电路和单片机四大部分,这些模块中单片机占主控地位。其模块电路如图2-1所示。时钟电路常用的有内部时钟方式和外部时钟方式,但因为本设计中只需要一片单片机,所以采用内部时钟方式比较简单。按钮电路中的“复位”按钮是按键手动复位,它有电平和脉冲两种方式,比较电路的复杂程度,本设计选择了按钮电平复位电路,其他几个按钮则是通过单片机判断高低电平的不同来控制按钮。显示电路所用的数码管有共阴和共阳之分,不管使用何种数码管,P0口作为I/O使用时都是需要上拉电阻才能驱动数码管。另外,因为单片机的4个并行I/O口的输出电流一般是1mA,短路电流为4mA左右,而数码管的最少驱动电流也需要10mA,因而不管在使用共阴数码管时,单片机输出口也必须使用上拉电阻提高输出电流,才能驱动数码管。为了使电路简单化,本设计选用共阳数码管。 但根据显示方式的不同选择,我们可以有几种方案:
方案一:使用静态显示方式。静态显示方式下的数码管的显示字符一经确定,相应锁存器锁存的断码输出將维持不变,直到送入另一个字符的断码为止。因而此设计中使用的显示位数使用了三个8位并行I/0口。如果另外想扩展单片机功能,则能使用的输出管脚很是有限。
方案二:使用动态显示方式。这个显示方式是将所有显示位的段码线的相应段并联在一起,由一个8位I/O口控制,而各位的共阴或共阴极分别由相应的I/O线控制,形成各位的分时选通。这种显示方式,简化了硬件电路,特别在多位数码管显示时尤为突出。
本小组尝试了各种方案,在此报告中以静态显示方式为例说明。(动态显示方式省略)
图2-1
三、单元电路设计与参数计算
注://单元电路设计中的网络标号的数字即为单片机的管脚//
(1)时钟电路
图3-1
时钟电路如图3-1所示,时钟电路的晶振频率越高,系统的时钟频率越高,单片机的运行速度也就越快。晶振频率根据设计需要设为12MHz,又根据谐振性质,电路中的电容C1、C2选择为30pF左右。该电容的的大少会影响振荡器频率的高低、振荡器的稳定性和起振的快速性。
(2)按钮电路
图3-2a 图3-2b
A、复位按钮
根据计算容抗的公式以及并联电阻变小的性质,可以知道,当S13断开时,C3的容抗大,管脚9处的电位U9为电阻R3上的压降,因而U9为低电平,复位键无效。当S13按下时,R2与C3的并联阻抗变小,R3上的压降增大,U9为高电平,复位键有效,实现复位功能。本设计中C3取值22uF,电阻R2取值100欧姆,R3取值1K欧姆。具体电路如图3-2a所示。
B、开始,停止、翻页按钮
电路如图3-2b所示
(3)显示电路
P1口控制显示的是十位,p0口控制显示的是个位,P2口控制显示的是十分位。
不同的数码管显示方式,对应的最适合的共阴或者共阳级的数码管也不同。静态显示的适宜选共阳的数码管,动态显示的适宜选共阴的数码管。如果动态显示方式下选择共阳的数码管,位选端直接用单片机驱动则数码管的亮度不够,因而应该在位选端使用上拉电阻以提高数码管的驱动电流,但因为显示那个的数据段选的数目不同,故而需要用电阻对各段进行限流,以保证显示的每个数据亮度相同。相同情况下,静态显示的数码管的亮度要比动态的亮。
(4)单片机
单片机的程序可用汇编语言也可用C语言,为了提高使用汇编语言的能力,本设计特用了汇编语言了编写程序主程序流程图如下所示,具体程序见电子档。主程序流程图:
四、总原理图及元器件清单
(1)总原理图
(2)PCB图
(3)Proteus仿真图
(4)元器件清单
1) AT89C51的引脚图和数码管5101BS的引脚图
图4-3a AT89C51引脚图 图4-3b 5101引脚图
2)元器件总清单
连接器con2
五、安装与调试
(1)安装
制板的顺序依次是:画原理图、做封装、在原理图中添加元器件对应的封装、布PCB板、改焊盘大少、打印PCB图、用快速制板机将PCB图烤制到铜板上、腐蚀铜板、钻孔、放置元器件、烙铁焊好器件。一块电路板就安装完毕了。
(2)调试
将外部电源接至电路板上,检验电路板是否完全实现设计要求。本设计中,发现按钮功能完全符合设计要求,但是数码管的显示中有些段码不亮,从而显示的数据乱码,用万用表检测对应的管脚是否有电压,发现焊盘有虚焊,引脚与引脚之间有短路,排查后电路板实现设计要求。
六、性能测试与分析
所制电路板虽然能实现设计中要求的功能,但是在实际使用中还是存在着许多缺陷。这块电路板不能随意查看记录的数据,而是必须在计完五次数据后才能依次的翻页查看,复位后所计数据便会丢失,不能翻看历史,所计数据组数不能满足现实需要。
七、结论与心得
在这三周的课程设计中,不管是在软件方面还是硬件方面我都有了更深入的学习。
………
八、参考文献
(1)单片机原理及接口技术 张毅刚 彭喜元著 人民邮电出版社
(2)单片机课程设计实例指导 李光飞等编著 北京航空航天大学出版社
(3)51系列单片机原理、开发与应用实例 孙进平等编著
(4)单片机程序设计实例 先锋工作室编著 清华大学出版社
(5)电子工程师之家 、豆丁网 、百度、搜狗、电子工程专辑 等等
附程序如下:
D EQU 60H
E EQU 61H
F EQU 62H
G EQU 63H
H EQU 64H
I EQU 65H
ORG 0000H
LJMP MAIN
ORG 000BH ;定时器T0的入口地址
LJMP DINGSHI
ORG 0013H ;外部中断1的入口地址
LJMP STOP1
ORG 0030H ;主程序入口地址
MAIN: MOV P0,#0C0H ;置初值
MOV P2,#0C0H
MOV P1,#0C0H
MOV DPTR,#TABLE ;数据指针指向表头地址
SETB EA ;开中断
SETB EX0
SETB EX1
SETB ET0
SETB PX0 ;设中断优先级
SETB PX1
MOV TMOD,#01H ;工作方式为方式1
;********************************************
;开始及计数程序
;********************************************
START: MOV R0,#40H
MOV R1,#50H
MOV R2,#00H
CLR P1.0
MOV TH0,#0D8H ;置计数初始值
MOV TL0,#0F0H
MOV R3,#00H
MOV R4,#00H
MOV R7,#00H
MOV B,#10
MOV SP,#30H
MOV D,#60H
MOV E,#61H
MOV F,#62H
MOV G,#63H
MOV I,#65H
MOV R5,#05
XUNHUAN: JB P1.7,START1 ;p1.7=0是开始
LCALL DELAY10 ;按键消抖
JB P1.7,XUNHUAN
JNB P1.7,$
LJMP GN1
LJMP XUNHUAN
START1: JB P3.0,XUNHUAN
LCALL DELAY10
JB P3.0,XUNHUAN
JNB P3.0,$
LCALL FANYE
LJMP XUNHUAN
;********************************************
;翻页模块
;********************************************
FANYE: MOV A,@R0
MOV R3,A
MOV A,@R1
MOV R4,A
DEC R5
CJNE R5,#04,LOP1
MOV A,D
MOV R7,A
LJMP L1
LOP1: CJNE R5,#03,LOP2
MOV A,E
MOV R7,A
LJMP L1
LOP2: CJNE R5,#02,LOP3
MOV A,F
MOV R7,A
LJMP L1
LOP3: CJNE R5,#01,LOP4
MOV A,G
MOV R7,A
LJMP L1
LOP4: CJNE R5,#00,FANYE
MOV A,I
MOV R7,A
LJMP L1
L1: INC R0
INC R1
INC R2
CJNE R2,#5,LOOP2
MOV R0,#40H
MOV R1,#50H
MOV R2,#00H
LOOP2:LCALL XIANSHI
RET
;********************************************
;数码管记录程序
;********************************************
GN1: SETB TR0
LOOP: CJNE R2,#05H,LOOP
MOV R0,#40H
MOV R1,#50H
MOV R2,#00H
CLR EA
AJMP XUNHUAN
;********************************************
;1毫秒延时子程序
;********************************************
DELAY1: MOV R6,#2
DL1: MOV H,#248
DJNZ H,$
DJNZ R6,DL1
RET
;********************************************
;10毫秒延时子程序
;********************************************
DELAY10: MOV R6,#20
DL2: MOV H,#248
DJNZ H,$
DJNZ R6,DL2
RET
;********************************************
;外部中断1中断程序,停止模块
;********************************************
STOP1 : PUSH ACC
PUSH PSW
LCALL DELAY10 ;延时10毫秒消抖
JB P3.3, FAN1
JNB P3.3,$
MOV A, R3
MOV @R0 , A
MOV A, R4
MOV @R1, A
DEC R5
CJNE R5, #04, LOP5
MOV A, R7
MOV D, A
LJMP L4
LOP5: CJNE R5, #03, LOP6
MOV A, R7
MOV E, A
LJMP L4
LOP6: CJNE R5, #02, LOP7
MOV A, R7
MOV F, A
LJMP L4
LOP7: CJNE R5, #01, LOP8
MOV A, R7
MOV G, A
LJMP L4
LOP8: CJNE R5, #00, STOP1
MOV A, R7
MOV I,A
LJMP L4
L4: INC R0
INC R1
INC R2
FAN1: POP PSW
POP ACC
RETI
;********************************************
;显示子程序
;********************************************
XIANSHI:
MOV A ,R3 ;扫描十分位上的数字
MOV DPTR ,#TABLE
MOVC A ,@A+DPTR
MOV P2 ,A
MOV A ,R4 ;扫描个位上的数字
MOV DPTR ,#TABLE
MOVC A ,@A+DPTR
MOV P0 ,A
MOV A ,R7 ;扫描十位上的数字
MOV DPTR ,#TABLE
MOVC A ,@A+DPTR
MOV P1 ,A
RET
;********************************************
;定时器T0中断程序
;********************************************
DINGSHI:PUSH ACC
PUSH PSW
DJNZ B,DH1
MOV B,#10
AJMP COUNT
COUNT: INC R3
CJNE R3,#0AH,DH2
MOV R3,#00H
INC R4
CJNE R4,#0AH,DH2
MOV R4,#00H
INC R7
CJNE R7,#0AH,DH2
MOV R7,#00H
DH1: MOV TH0,#0D8H
MOV TL0,#0F0H
SETB TR0
DH2: POP PSW
POP ACC
LCALL XIANSHI
RETI
TABLE: DB 0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H
END
这里可以加学校LOGAL
单片机课程设计报告
院系: xxxxxxxxxx
班别:xxxxxxxxxx
课程名称: 秒表设计
姓名:xxx
学号:xxxxxxx
指导老师: xxxxxxx
2011.12.23
目录
1课程设计的目的和任务
1.1 单片机秒表课程设计的概述
1.2课程设计思路及描述
1.3 课程设计任务和要求
2硬件与软件的设计流程
2.1系统硬件方案设计
2.2软件方案设计
3 程序编写流程及课程设计效果
3.1源程序及注释
3.2原理图分析
3.3课程设计效果
4 心得体会
5 相关查阅资料
1. 课程设计的目的和任务
1.1单片机秒表课程设计的概述
一、课程设计题目
秒表系统设计——用STC89C52RC设计一个4位LED数码显示“秒表”,显示时间为00.00~99.99秒,每10毫秒自动加一,每1000毫秒自动加一秒。
二、增加功能
增加一个“复位”按键(即清零),一个“暂停”和“开始”按键。
三、课程设计的难点
单片机电子秒表需要解决三个主要问题,一是有关单片机定时器的使用;二是如何实现LED的动态扫描显示;三是如何对键盘输入进行编程。
四、课程设计内容提要
本课程利用单片机的定时器/计数器定时和记数的原理,结合集成电路芯片8051、LED数码管以及课程箱上的按键来设计计时器。将软、硬件有机地结合起来,使得系统能够正确地进行计时,数码管能够正确地显示时间。其中本课程设计有两个开关按键:其中key1按键按下去时开始计时,即秒表开始键(同时也用作暂停键),key2按键按下去时数码管清零,复位为“00.00”.
五、课程设计的意义
1) 通过本次课程设计加深对单片机课程的全面认识复习和掌握,对单片机课程的应用进一步的了解。
2) 掌握定时器、外部中断的设置和编程原理。
3) 通过此次课程设计能够将单片机软硬件结合起来,对程序进行编辑,校验。
4) 该课程通过单片机的定时器/计数器定时和计数原理,设计简单的计时器系统,拥有正确的计时、暂停、清零,并同时可以用数码管显示,在现实生活中应用广泛,具有现实意义
六、课程设计仪器
a) 集成电路芯片8051,七段数码管,89C51单片机开发板
b) MCS-51系列单片机微机仿真课程系统中的软件(Keil uvision2)。
1.2课程设计思路及描述
该课程设计要求进行计时并在数码管上显示时间,则可利用MCS-51系列单片机的芯片AT89C52的P3.2,P3.5作为按键的入口;定时器T1作为每0.01秒加一的定时器。其中“开始”按键当开关由上向下拨时开始计时,此时若再拨“开始”按键则数码管暂停;“清零”按键当开关由上向下拨时数码管清零,此时若再拨“开始”按键则又可重新开始计时。
方框图如下图1:
图1数字秒表设计导向
1.3 课程设计任务和要求
1.3.1设计指标。
了解8051芯片的的工作原理和工作方式 ,使用该芯片对LED数码管进行显示控制,实现用单片机的端口控制数码管,显示分、秒,并能用按钮实现秒表起动、停止、99秒、清零等功能,精确到0.01秒。
要求选用定时器的工作方式,画出使用单片机控制LED数码管显示的电路图,并实现其硬件电路,并编程完成软件部分,最后调试秒表起动、停止、清零等功能。
1.3.2设计要求
① 画出电路原理图(或仿真电路图);
② 软件编程与调试;
③ 电路仿真与调试;
2.软件与硬件设计
2.1系统硬件方案设计
单片机应用系统由硬件系统和软件系统两部分组成。硬件系统是指单片机以及扩展的存储器、I\O接口、外围扩展的功能芯片以及接口电路。软件系统包括监控程序和各种应用程序。
在单片机应用系统中,单片机是整个系统的核心,对整个系统的信息输入、处理、信息输出进行控制。与单片机配套的有相应的复位电路、时钟电路以及扩展的存储器和I\O接口,使单片机应用系统能够运行。
在一个单片机应用系统中,往往都会输入信息和显示信息,这就涉及键盘和显示器。在单片机应用系统中,一般都根据系统的要求配置相应的键盘和显示器。配置键盘和显示器一般都没有统一的规定,有的系统功能复杂,需输入的信息和显示的信息量大,配置的键盘和显示器功能相对强大,而有些系统输入/输出的信息少,这时可能用几个按键和几个LED指示灯就可以进行处理了。在单片机应用系统在中配置的键盘可以是独立键盘,也可能是矩阵键盘。
图2系统硬件结构框
2.2软件方案设计
此次选用C51来编程,首先要有初始化程序,通过初始化程序,将对主程序所用到的变量、常量以及各个参数和所调用的子函数定义。其次还有显示程序、按键扫描及处理程序、时钟程序和倒计时程序,系统软件流程图图如图 3所示:
3 程序编写的流程及课程设计效果
3.1 源程序及注释
/*-----------------------------------------------
名称:数码管显示,按键控制秒表
论坛:www.doflye.net
编写:shifang
日期:2009.5
修改:无
内容:中断按键控制,数码管显示,中断0控制计时和停止,中断1清零
------------------------------------------------*/
#include<reg52.h> //包含头文件,一般情况不需要改动,头文件包含特殊功能寄存器的定义
unsigned int msecond,second;//定义全局变量
bit GoFlag;//定义停止,计时标志
#define DataPort P0 //定义数据端口 程序中遇到DataPort 则用P0 替换
sbit LATCH1=P2^2;//定义锁存使能端口 段锁存
sbit LATCH2=P2^3;// 位锁存
sbit KEY=P3^2;
unsigned char code dofly_DuanMa[10]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};// 显示段码值0~9
unsigned char code dofly_WeiMa[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};//分别对应相应的数码管点亮,即位码
unsigned char TempData[8]; //存储显示值的全局变量
void DelayUs2x(unsigned char t);//函数声明
void DelayMs(unsigned char t);
void Display(unsigned char FirstBit,unsigned char Num);
void Init_Timer0(void);
void CLR(void);
/*------------------------------------------------
主函数
------------------------------------------------*/
void main (void)
{
unsigned char num=0;
EX0=1; //外部中断0开
IT0=1; //IT1=0表示边沿触发
EX1=1; //外部中断1开
IT1=1; //IT1=1表示边沿触发
Init_Timer0();
while (1) //主循环
{
TempData[0]=dofly_DuanMa[second/10];//分解显示信息,如要显示68,则68/10=6 68%10=8
TempData[1]=dofly_DuanMa[second%10];
TempData[2]=0x40;// "-"
TempData[3]=dofly_DuanMa[msecond/10];//分解显示信息,如要显示68,则68/10=6 68%10=8
TempData[4]=dofly_DuanMa[msecond%10];
//主循环中添加其他需要一直工作的程序
}
}
/*------------------------------------------------
显示函数,用于动态扫描数码管
输入参数 FirstBit 表示需要显示的第一位,如赋值2表示从第三个数码管开始显示
如输入0表示从第一个显示。
Num表示需要显示的位数,如需要显示99两位数值则该值输入2
------------------------------------------------*/
void Display(unsigned char FirstBit,unsigned char Num)
{
static unsigned char i=0;
DataPort=0; //清空数据,防止有交替重影
LATCH1=1; //段锁存
LATCH1=0;
DataPort=dofly_WeiMa[i+FirstBit]; //取位码
LATCH2=1; //位锁存
LATCH2=0;
DataPort=TempData[i]; //取显示数据,段码
LATCH1=1; //段锁存
LATCH1=0;
i++;
if(i==Num)
i=0;
}
/*------------------------------------------------
定时器初始化子程序
------------------------------------------------*/
void Init_Timer0(void)
{
TMOD |= 0x01; //使用模式1,16位定时器,使用"|"符号可以在使用多个定时器时不受影响
//TH0=0x00; //给定初值
//TL0=0x00;
EA=1; //总中断打开 (总中断控制开关)
ET0=1; //定时器中断打开 (允许中断0的发生)
TR0=1; //定时器开关打开 (定时器T0开始工作)
}
/*------------------------------------------------
定时器中断子程序
------------------------------------------------*/
void Timer0_isr(void) interrupt 1
{
static unsigned char num;
TH0=(65536-2000)/256; //重新赋值 2ms
TL0=(65536-2000)%256;
Display(0,8);
if(GoFlag)
{
num++;
if(num==5)
{
num=0;
msecond++;
if (msecond==100)//100进1
{
msecond=0;
second++;//秒加1
if(second==100)
second=0;
}
}
}
}
/*------------------------------------------------
外部中断0程序
------------------------------------------------*/
void ISR_INT0(void) interrupt 0
{
if(!KEY) //如果检测到低电平,说明按键按下
{
DelayMs(20); //延时去抖,一般10-20ms
if(!KEY) //再次确认按键是否按下,没有按下则退出
{
GoFlag=!GoFlag; //利用外部中断打开和关闭定时标志 用于开始和停止计时
}
}
//主循环中添加其他需要一直工作的程序
}
/*------------------------------------------------
外部中断1程序
------------------------------------------------*/
void ISR_INT1(void) interrupt 2
{
if(GoFlag==0)//停止时才可以清零
CLR();
}/*------------------------------------------------
数值清零
------------------------------------------------*/
void CLR(void)
{
second=0; //利用外部中断清零
msecond=0;
}
void DelayUs2x(unsigned char t)
{
while(--t);
}
void DelayMs(unsigned char t)
{
while(t--)
{
//大致延时1mS
DelayUs2x(245);
DelayUs2x(245);
}
}
3.2原理图分析
图4按键原理图
图5显示电路
图6电源电路原理图
3.3课程设计效果
通过最后软件对程序的编译,组建,执行,还有最终生成.hex文件,把.hex下载到TX-1C开发板的STC89C52RC单片机上的最终效果图如下:
下图: 开始运行,执行自动加1
下图:下图为复位后的显示
下图:“开始自加”运行,一直加到99秒
4 心得体会
以下是我在设计这个秒表过程中所总结的心得,整个过程主要是:设计程序----修正程序 ----扩展功能----完善程序,经过自己的独立思考与查阅相关知识,最终完成这个作品.
5 相关资料查阅
【1】孙育才编著.MCS-51系列单片微型计算机及其应用.东南大学出版社.2009.12
【2】郭天祥编著.51单片机C语言教程-入门、提高、开发、拓展全攻略.电子工业出版社.2010.05
【3】刘刚编著.Protel DXP 20## SP2原理图与PCB设计.电子工业出版社.2009.07
【4】丁峻岭主编.C语言程序设计.中国铁道出版社.2009.12
机械与车辆学院单片机课程设计报告20xx20xx学年第一学期课程设计题目水塔水位控制系统姓名学号班级指导老师职称时间成绩单片机课程…
物理与机电学院课程设计报告课程名称:单片机课程设计系部:物理与机电工程学院专业班级:07级电子信息工程(1)班完成时间:20XX年…
成绩单片机原理及应用课程设计课程名ltlt单片机原理及应用gtgt学部专业学号姓名指导教师日期20xx年06月一设计任务与要求1任…
井冈山大学机电工程学院单片机课程设计报告课程名称单片机设计题目流水灯姓名覃家应陈东阳专业生物医学工程班级10级医工本一班学号100…
单片机课程设计示例交通灯控制系统设计一总体设计1设计要求交通灯的任务要求为模拟十字路口的交通灯的亮灭及闪烁基本工作原理根据交通灯的…
XXXXXX学院51单片机系统设计课程设计报告题目专业班级学生姓名学号指导教师分数摘要本设计是一个秒表计时器采用51单片机实现电路…
JINGCHUUNIVERSITYOFTECHNOLOGY电子信息工程学院单片机原理与应用技术课程设计报告电子秒表系统专业班级11…
单片机课程设计报告设计课题秒表设计专业班级电子班学生姓名学号指教教师设计时间20xx年5月306月19日目录一设计任务和要求31设…
课程名称题目微机原理课程设计基于51单片机的秒表设计1摘要随着社会的发展单片机已经渗透到我们生活中的各个领域广泛应用于仪器仪表家用…
课程名称题目微机原理课程设计基于51单片机的秒表设计1摘要随着社会的发展单片机已经渗透到我们生活中的各个领域广泛应用于仪器仪表家用…
数字秒表课程设计总结报告一课题名称数字秒表设计二内容摘要本实验要求设计一个计数范围在0099秒的数字秒表电路设计基本包括01秒脉冲…