课程设计.docx

上传人:b****6 文档编号:8895110 上传时间:2023-02-02 格式:DOCX 页数:20 大小:227.90KB
下载 相关 举报
课程设计.docx_第1页
第1页 / 共20页
课程设计.docx_第2页
第2页 / 共20页
课程设计.docx_第3页
第3页 / 共20页
课程设计.docx_第4页
第4页 / 共20页
课程设计.docx_第5页
第5页 / 共20页
点击查看更多>>
下载资源
资源描述

课程设计.docx

《课程设计.docx》由会员分享,可在线阅读,更多相关《课程设计.docx(20页珍藏版)》请在冰豆网上搜索。

课程设计.docx

课程设计

一、设计名称:

秒表计时器

二、设计目的与要求:

目的:

通过对电子时钟的设计实践,了解PIC单片机系统控制过程、设计要求、应完成的工作内容和具体设计方法。

通过设计也有助于复习、巩固以往所学的知识,达到灵活应用的目的。

课程设计应强调能力培养为主,在独立完成设计任务的同时,还要注意其他方面的能力的培养与提高,如独立工作能力与创造力;综合运用专业及基础知识的能力,解决实际工程技术问题的能力等。

要求:

通过试验箱上的后四位LED显示器显示时钟范围:

00.00秒-99.99秒,分辨度:

0.01秒。

在设计过程中用一个定时器作为基本计数单元,使用一个矩阵式四键键盘进行控制,当定时器定时时间到时,就让0.01秒计数单元加1,当秒计数达到99.99时,就自动返回到0,重新开始秒计数。

并且使其前四位显示字符,字符难易度不论。

 

三、设计原理说明:

PIC16F877原理简介

1.1、

PIC16F877特性:

PIC16F877是由Microchip公司所生产开发的新产品,属于PICmicro系列单片微机,具有Flashprogram程序内存功能,可以重复烧录程序,适合教学、开发新产品等用途;而其内建ICD(InCircuitDebug)功能,可以让使用者直接在单片机电路或产品上,进行如暂停微处理器执行、观看缓存器内容等,让使用者能快速地进行程序除错与开发。

如图1为PIC16F877的40根接脚图,PDIP是指一般最常见的DIP(DualInLinePackage)包装,而PIC单片机也有PLCC(PlasticLeadedChipCarrier)与QFP(QuadFlatPackage)两种形式的包装,依照不同的需求,寻找不同的包装形式。

如图所示,每根接脚都有其特定功能,例如Pin11与Pin32(VDD)为正电源接脚,Pin12与Pin31(VSS)为地线接脚;而有些接脚有两种甚至三种以上功能,例如Pin2(RA0/AN0)代表PORTA的第一支接脚,在系统重置(Reset)后,可自动成为模拟输入接脚,接收模拟讯号,也可经由程序规划为数字输出输入接脚。

 

设计原理:

此次课程设计题目是秒表计时器,由课程设计的要求和任务,以及单片机课程学习和实验,最终采用MAPLAB+ICD+实验箱作为软件编程硬件调试平台,由于设计为秒表,要求系统对时间敏感,采用了定时器和简单循环来定时,其中一个软件一个硬件,会在方案论证中分析在0.01秒时采用的是硬件定时,即用单片机内部的定时器TMR0。

先将时钟初始化,赋入初值2ms定时,循环5次来进行0.01秒定时。

然后由定义的变量S0来进行加一运算,然后将其值通过PIC的SPI硬件接口将数据发送至级联的74HC595,最终在数码管上进行静态显示。

其中数码管的显示时,我在程序中首先定义了两个关于数码管显示的字形码定义,一个带小数点,一个不带小数点,以便在显示时调用即可。

四、硬件设计:

系统设计总框图:

 

硬件使用实验室现有多功能实验箱作为基础平台部分电路如图所示:

键盘:

其中K2为开始键,K4为暂停/继续键,K1为清零键。

.

由于电路为矩阵键盘,所以程序中先查询是否有按键按下,再判断是哪个按键按下。

显示电路:

利用单片机现有硬件SPI接口,外接八个级联74HC595实现静态显示。

由于设计只需要四位数码管,其余位作为动画显示。

 

74HC595参数:

QA--QH:

八位并行输出端。

QH':

级联输出端。

SI:

串行数据输入端。

74595的控制端说明:

/SCLR(10脚):

低点平时将移位寄存器的数据清零。

SCK(11脚):

上升沿时数据寄存器的数据移位。

QA-->QB-->QC-->...-->QH;下降沿移位寄存器数据不变。

(脉冲宽度:

5V时,大于几十纳秒就行了)

RCK(12脚):

上升沿时移位寄存器的数据进入数据存储寄存器,下降沿时存储寄存器数据不变。

(5V时,大于几十纳秒就行了),更新显示数据。

/G(13脚):

高电平时禁止输出(高阻态)。

如果单片机的引脚不紧张,用一个引脚控制它,可以方便地产生闪烁和熄灭效果。

比通过数据端移位控制要省时省力。

五、软件设计:

程序主流程图

 

中断服务程序流程图

 

整体电路:

程序清单:

LISTP=16F877

INCLUDE"P16F877.INC"

;---------------------现计时秒表-------------------------------

;时钟显示范围:

00.00秒-99.99秒,分辨度:

0.01秒;所用的寄存器如下

S0EQU0X20;0.01秒计时器

S1EQUS0+1;0.1秒计时器

S2EQUS0+2;1秒计时器

S3EQUS0+3;10秒计时器

SREGEQUS0+4;中断次数计数器

LEDFEQUS0+5;显示的LED的位置指示寄存器

XW_TEMPEQUS0+6;用于中断中保护W的值

XHOSTSEQUS0+7;用于中断中保护STATUS的值

DEYHEQUS0+8

DEYLEQUS0+9;以上两个寄存器用于软件延时

HOSTFEQUS0+0X0A;用于中断中保护FSR0L的值

JIANREQUS0+0X0B;保存键值

TEMPEQUS0+0X0C

ZDYEQUS0+0x0D

ORG0X00

NOP

GOTOMAIN

ORG0X04

GOTOCLKINT;转向中断服务程序

ORG0X10

;--------------------------------------------------------------------------

CONVERT;不带小数点的共阳极码表

ADDWFPCL,1

RETLW0XC0;0

RETLW0XF9;1

RETLW0XA4;2

RETLW0XB0;3

RETLW0X99;4

RETLW0X92;5

RETLW0X82;6

RETLW0XD8;7

RETLW0X80;8

RETLW0X90;9

RETLW0XBF;"-"

RETLW0XFF;灭灯

retlw0x89

retlw0x86

retlw0xc7

retlw0x8c

RETURN

CONVERT2;带小数点的共阳极码表

ADDWFPCL,1

RETLW0X40;0.

RETLW0X79;1.

RETLW0X24;2.

RETLW0X30;3.

RETLW0X19;4.

RETLW0X12;5.

RETLW0X02;6.

RETLW0X78;7.

RETLW0X00;8.

RETLW0X10;9.

RETLW0xA0

RETURN

;-----------------------SPI发送显示子模块--------------------------------

TRANSMIT

CLRFPORTA;LACK送低电平,为锁存做准备

MOVWFSSPBUF;启动发送

WAIT

BANKSELPIR1

BTFSSPIR1,SSPIF

GOTOWAIT;等待发送结束

BCFPIR1,SSPIF;清除中断标志

RETURN

;--------------------------显示子程序模块---------------------------------

DISPLAYMOVLW0X01

MOVWFLEDF

XIANDBTFSCS2,0

GOTOZXC

MOVLW0X0B

GOTOVBN

ZXCMOVLW0X0A

VBNCALLCONVERT

INCFLEDF

MOVFLEDF,W

SUBLW0X05

BTFSSSTATUS,Z

GOTOXIAND;显示动画

MOVLW0X01

MOVWFLEDF

MOVLW0XA0

MOVWFFSR

AGAINXIAN

MOVFLEDF,W

SUBLW0X02

BTFSSSTATUS,Z

GOTOXIANB

MOVFINDF,W

CALLCONVERT2;若是第二位,则查带小数点的码表

GOTOTRAN

XIANB

movfLEDF,w

sublw0x08

BTFSCSTATUS,Z

gotoxian8

movfLEDF,w

sublw0x07

BTFSCSTATUS,Z

gotoxian7

movfLEDF,w

sublw0x06

BTFSCSTATUS,Z

gotoxian6

movfLEDF,w

sublw0x05

BTFSCSTATUS,Z

gotoxian5

xian5MOVFLEDF,W

SUBLW0X05

BTFSSSTATUS,Z

gotoaaa

MOVLW0x0f

CALLCONVERT

GOTOTRAN

xian6MOVFLEDF,W

SUBLW0X06

BTFSSSTATUS,Z

gotoaaa

MOVLW0x0e

CALLCONVERT

GOTOTRAN

xian7MOVFLEDF,W

SUBLW0X07

BTFSSSTATUS,Z

gotoaaa

MOVLW0x0d

CALLCONVERT

GOTOTRAN

xian8MOVFLEDF,W

SUBLW0X08

BTFSSSTATUS,Z

gotoaaa

MOVLW0x0c

CALLCONVERT

GOTOTRAN

 

aaaMOVFINDF,W

CALLCONVERT

TRANCALLTRANSMIT;发送一个显示数据

INCFFSR

INCFLEDF

MOVFLEDF,W

SUBLW0X09

BTFSSSTATUS,Z

GOTOAGAINXIAN

BSFPORTA,5;最后给一个锁存信号,代表一次显示任务完成

RETURN

;-----------S0计数溢出处理子程序------------

CS0CLRFS0

INCFS1

RETURN

;-----------S1计数溢出处理子程序---------------

CS1CLRFS1

INCFS2

RETURN

;-----------S2计数溢出处理子程序---------------

CS2CLRFS2

INCFS3

RETURN

;-----------S3计数溢出处理子程序---------------

CS3CLRFS3

RETURN

;-----------时钟中断服务程序-------------------

CLKINTMOVWFXW_TEMP;保存W的值

SWAPFSTATUS,W

MOVWFXHOSTS;暂存STATUS的值

MOVFFSR,W

MOVWFHOSTF;保存FSR的值。

以上程序为中断现场保护--6

MOVLW0X07

MOVWFTMR0;对TMR0写入初值

BCFINTCON,T0IF;清除中断标志

INCFSREG

MOVFSREG,W

SUBLW0X05;TMR0每2ms中断一次

BTFSSSTATUS,Z;其中断5次后才执行对S0,S1,S2,S3的操作

GOTOTIFAN

CLRFSREG

INCFS0

MOVFS0,W

SUBLW0X0A

BTFSCSTATUS,Z

CALLCS0

MOVFS1,W

SUBLW0X0A

BTFSCSTATUS,Z

CALLCS1

MOVFS2,W

SUBLW0X0A

BTFSCSTATUS,Z

CALLCS2

MOVFS3,W

SUBLW0X0A

BTFSCSTATUS,Z

CALLCS3

TIFANMOVFHOSTF,W;以下为中断现场恢复

MOVWFFSR;恢复间接寻址指针FSR的值

SWAPFXHOSTS,W

MOVWFSTATUS;恢复STATUS的值

SWAPFXW_TEMP,1

SWAPFXW_TEMP,W;恢复W的值

RETFIE

;-----------------------TMR0初始化子程序-----------------------------------

CLKINSUB

BANKSELOPTION_REG

BCFOPTION_REG,T0CS;TMR0工作于定时器方式

BCFOPTION_REG,PSA;TMR0用分频

BCFOPTION_REG,PS2

BSFOPTION_REG,PS1

BCFOPTION_REG,PS0;TMR08分频比

BANKSELINTCON

BCFINTCON,T0IF;清除TMR0的中断标志

BCFINTCON,GIE;总中断禁止

BSFINTCON,T0IE;TMR0中断允许------10

RETURN

;---------------------------系统初始化子程序------------------------

MAINSUB

BANKSELTRISA

BCFTRISA,5;置RA5为输出方式,以输出锁存信号

BCFTRISB,1

BCFTRISB,2

BSFTRISB,4

BSFTRISB,5;设置与键盘有关的各口的输入输出方式

BCFTRISC,5

BCFTRISC,3;设置SCK与SDO为输出方式

BCFINTCON,GIE;关闭所有中断

MOVLW0XC0

MOVWFSSPSTAT;设置SSPSTAT寄存器

BANKSELSSPCON

MOVLW0X30

MOVWFSSPCON;设置SPI的控制方式,允许SSP方式,

;并且时钟下降沿发送,与“74HC595,当

;其SCLK从低到高电平跳变时,串行输入数据

;(DI)移入寄存器”的特点相对应---15

BCFSTATUS,IRP;间接寻址选中BANK0、BANK1

MOVLW0X01

MOVFTEMP

MOVLW0X00

MOVFJIANR

RETURN;返回

;-------------------------------键扫描子程序-----------------------------

KEYSCANCLRFPORTB;B1和B2两条线上送0

NOP

NOP;经过一段时间的延时,避开引脚电平的过渡过程

MOVFPORTB,W

ANDLW0X30;只检查B4和B5两位,屏蔽其它各位

SUBLW0X30

RETURN

;--------------------------------------------------------------------------

KEYDELAY;键盘去抖子程序(约8ms的软件延时)

MOVLW0X80

MOVWFDEYH

AGAIN2MOVLW0XFF

MOVWFDEYL

AGAIN1DECFSZDEYL,1

GOTOAGAIN1

DECFSZDEYH,1

GOTOAGAIN2

RETURN

;--------------------------------------------------------------------------

KEYSERVEMOVLW0X00

MOVWFJIANR

MOVLW0XFD;键盘服务子程序

MOVWFPORTB

BTFSSPORTB,4

GOTOS10

BTFSSPORTB,5

GOTOS9

MOVLW0XFB

MOVWFPORTB

BTFSSPORTB,4

GOTOS12

BTFSSPORTB,5

GOTOS11

GOTOTUICHU

S10MOVLW0X02

MOVWFJIANR

GOTOTUICHU

S9MOVLW0X01

MOVWFJIANR

GOTOTUICHU

S12MOVLW0X04

MOVWFJIANR

GOTOTUICHU

S11MOVLW0X03

MOVWFJIANR;把键值送给JIANR

TUICHURETURN

;--------------------------------显示缓冲区处理子程序----------------------

XIANHUANMOVLW0XA0

MOVWFFSR

MOVFS3,W

MOVWFINDF

INCFFSR

MOVFS2,W

MOVWFINDF

INCFFSR

MOVFS1,W

MOVWFINDF

INCFFSR

MOVFS0,W

MOVWFINDF

RETURN

;------------------------------------------------------------------------

MAINNOP

CALLMAINSUB;系统初始化

CALLCLKINSUB;调用时钟初始化子程序

;--------------------------------------------------------------------------

DENJIAN

BANKSELS0

CLRFS0

CLRFS1

CLRFS2

CLRFS3

CLRFSREG;复位显示数据即:

CLRFLEDF;使S0=S1=S2=S3=0

CALLXIANHUAN;把S3、S2、S1、S0的值装入显示缓冲区

CALLDISPLAY;显示

DENANBCFINTCON,GIE;关中断

CALLKEYSCAN;进行键扫描

BTFSSSTATUS,Z

GOTOXIAODOU1;如起始键按下,则消抖动

GOTODENAN;如起始键没按下,则继续等待

XIAODOU1CALLKEYDELAY;延时消抖动

CALLKEYSCAN;再次进行键扫描

BTFSCSTATUS,Z

GOTODENAN;若为干扰,则再次等待键按下

CALLKEYSERVE;不为干扰则查键值

MOVFJIANR,W

SUBLW0X01;键S9按下

BTFSSSTATUS,Z

GOTODENAN

BANKSELS0

CLRFS0

CLRFS1

CLRFS2

CLRFS3

CLRFSREG;设置新一次计时的初始条件

WAITSCALLKEYSCAN

BTFSSSTATUS,Z

GOTOWAITS;等键松开后再进行下面的操作

ABCMOVLW0X06

MOVWFTMR0

BSFINTCON,GIE;开总中断

HERECALLXIANHUAN;显示缓冲区处理

CALLDISPLAY;即时更新显示内容

CALLKEYSCAN

BTFSSSTATUS,Z

GOTOXIAODOU;若停止计时键按下,则消抖

GOTOHERE;若停止计时键没按下,则继续等待中断计时

XIAODOUCALLDISPLAY;利用消抖动时间调用显示程序

CALLDISPLAY

CALLDISPLAY

CALLDISPLAY

CALLDISPLAY

CALLDISPLAY

CALLDISPLAY

CALLDISPLAY

CALLDISPLAY

CALLKEYSCAN

BTFSCSTATUS,Z

GOTOHERE;若为干扰,则继续等待停止键按下

CALLKEYSERVE;不为干扰则查键值

MOVFJIANR,W

SUBLW0X03;键S11按下

BTFSSSTATUS,Z

GOTOHERE

BCFINTCON,GIE;若S11键按下,则禁止中断

CALLDISPLAY;若不为干扰,则禁止中断,更新显示内容

WAITRCALLKEYSCAN

BTFSSSTATUS,Z

GOTOWAITR;等键松开后再进行下面的操作

DENDAICALLKEYSCAN

BTFSCSTATUS,Z

GOTODENDAI;循环进行键扫描,等待继续键按下

CALLKEYDELAY

CALLKEYSCAN

BTFSCSTATUS,Z

GOTODENDAI;延时消抖

CALLKEYSERVE;不为干扰则查键值

MOVFJIANR,W

SUBLW0X03;键S11按下继续

BTFS

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 高等教育 > 农学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1