PIC单片机万年历设计报告.docx

上传人:b****5 文档编号:3307037 上传时间:2022-11-21 格式:DOCX 页数:17 大小:210.20KB
下载 相关 举报
PIC单片机万年历设计报告.docx_第1页
第1页 / 共17页
PIC单片机万年历设计报告.docx_第2页
第2页 / 共17页
PIC单片机万年历设计报告.docx_第3页
第3页 / 共17页
PIC单片机万年历设计报告.docx_第4页
第4页 / 共17页
PIC单片机万年历设计报告.docx_第5页
第5页 / 共17页
点击查看更多>>
下载资源
资源描述

PIC单片机万年历设计报告.docx

《PIC单片机万年历设计报告.docx》由会员分享,可在线阅读,更多相关《PIC单片机万年历设计报告.docx(17页珍藏版)》请在冰豆网上搜索。

PIC单片机万年历设计报告.docx

PIC单片机万年历设计报告

基于PIC单片机的万年历的设计

1设计目的

通过本课程设计,进一步了解课程设计的要求和写作过程,了解课程设计的研究方法,培养文献检索能力、创新能力、文字表达能力等。

本设计主电路都采用目前流行的简单的典型电路接法,简单实用、稳定廉价。

本设计可起到一个很好的教学目的和实验目的,对于认识PIC单片机也有一定的好处,能更加熟悉单片机和其它芯片之间的通信。

2设计的主要内容和要求

2.1主要内容

1)PIC16F87X系列单片机是美国微芯公司(Microchip)推出的单片机系列,采用精简指令集结构(RISC)的高性价比嵌入式控制器,其总线结构采取数据总线和指令线分离独立的哈佛(Harvard)结构。

所以我们要先掌握精简指令集结构和哈佛结构的特点和用法。

2)实时时钟芯片DS1302和温度传感芯片DS18B20都是DALLAS公司出产的,都采用单总线数据传送方式,所以我们先要弄懂单总线传送方式是一个什么样的传送方式。

3)1602液晶芯片是一款常见的LCD,对它的读写我们要注意读写时序,还有PIC单片机速度比8051单片机要快,以前对1602写操作前不会检查忙否,但PIC一定要确认1602不忙才进行写操作。

4)PIC16F87X系列单片机资源很丰富,故控制寄存器较多,要注意运用,还有PIC16F87X系列单片机有些引角在开出厂时输入输出的是模拟信号,要对其控制寄存器进行设置。

2.2 主要要求

1)设计要做到操作简单实用廉价;

2)要能显示秒、分、时、天、月、周、年、农历以及闹钟等信息,并能调整以上信息;

3)键盘控制调整时钟信息和显示要灵敏不能出现较大的延时,灵活,可移植性强,能够随时对电路进行改进。

3整体设计方案

为提高设计效率,本设计拟将整个系统模块化。

采用的整体设计方案如图3.1所示,整个系统由MCU[1]、显示电路[2],独立键盘电路[3]、DS1302实时时钟电路[4]、复位电路等部分组成。

图3.1整体设计框图

当电源开关打开后,系统电路初始化,一从DS1302实时时钟电路中读取一串时钟信息,二从DS18B20温度传感电路读取一串温度信息,然后,MCU系统对采集到的进行变换和处理,再通过LCD显示出来,完成一次显示过程。

独立键盘与外部中断连接,当有键盘按下时,触发中断,进入中断服务子程序,子程序将会判断哪个键被按下了,有什么作用,要进行怎样的处理;复位键按下,系统将重新初始化,并再按上面所述执行下来。

4硬件电路的设计

本设计中的万年历的硬件电路主要由MCU电路、实时时钟电路、独立键盘电路四部分组成:

4.1 MCU电路的设计

主要元器件:

PIC16F877A单片机,4MHz晶振、33pF电容、10K电阻、开关。

PIC16F87X系列单片机是美国微芯公司(Microchip)推出的单片机系列,采用精简指令集结构(RISC)的高性价比嵌入式控制器,其总线结构采取数据总线和指令线分离独立的哈佛(Harvard)结构,哈佛结构是数据存储器与程序存储器独立编址,也就是两种存储器位于不同的逻辑空间里,使得它在执行一条指令的同时,就可以提取下一条指令,因此具有很高的流水处理速度。

其高速度、低电压工作,低功耗,强大驱动能力,低价OTP技术,体积小巧等都体现了单片机工业的新趋势;其FLASH在线编程功能可以极大地满足市场的需要,同时第三方开发的C语言开发工具,更使得研发工程师能够快速地开发升级产品,满足市场不断变化的需求。

其节约成本的最优化设计,适于用量大、档次低、价格敏感的产品[4]。

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

设计中以PIC16F877A单片机为主芯片,DS1302、DS18B20等为辅芯片,将结果在LCD上显示。

具体总原理图如图4.1。

图4.1总原理图电路图

图4.2MCU电路图

4.2 实时时钟电路的设计

主要元器件:

DS1302、电容、5K\10K\20K电阻。

DS1302是DALLAS公司推出的涓流充电时钟芯片,内含有一个实时时钟/日历和31字节静态RAM,通过简单的串行接口与单片机进行通信。

实时时钟/日历电路秒、分、时、日期、月、年的信息,每月的天数和闰年的天数可自动调整,时钟操作可通过AM/PM指示决定采用24或12小时格式。

DS1302与单片机之间能简单地采用同步串行的方式进行通信,公需用到三个口线:

(1)RES(复位),

(2)I/O(数据线),(3)SCLK(串行时钟)。

时钟RAM的读/写数据以一个字节或多达31个字节的字符组方式通信。

DS1302工作时功耗很低,保持数据和时钟信息时功率小于1mW。

DS1302是由DS1202改进而来,Vcc1为可编程涓流充电电源,附加七个字节存储器。

实时时钟具有能计算2100年之前的秒、分、时、日期、星期、月、年的能力、还有闰年调整的能力,这就使本来要通过复杂的算法来计算出的星期、闰年的计算简单了许多。

设计中我们要设计一个高稳定晶振电路,这里我们用二片电容和一个32.768MHz的晶振。

具体电路连接如图4.2所示。

图4.3实时时钟电路图

4.3 独立键盘和其它电路的设计

主要元器件:

键盘、10千欧和100欧电阻、电源和地等等。

键盘电路一般都是让端口检测低电平,有用扫描的方法检测哪个键有按下,也有用中断的方法检测。

本设计中的独立键盘是前者,一般键盘可直接接地,但这里为了稳定起见,在挂键盘的端口用了个上拉电阻。

具体电路连接如图4.4所示。

图4.5独立键盘电路图

5软件设计

软件设计部分可分为:

主程序、LCD显示子程序和DS1302实时时钟子程序、DS18B20温度计子程序、键盘服务子程序等。

5.1主程序设计

在主程序中,需要完成整体的功能构架并对各芯片的初始化,另外,在主程序模块中还需要设置定时器0,并对它们进行初始化。

主程序一次循环流程图如图5.1所示。

当打开电源开关时,各个模块初始化,然后显示固定在液晶上的用于美化显示的图形。

之后读取温度信息,定时器0初始化,读取时间等信息,冒号闪烁,读取星期、农历信息,显示所有信息,结束一次循环。

在实际运行时,显示完所有信息后,将返回到读取温度子函数前再往循环下执行。

图5.1主程序流程图

5.2键盘服务子程序设计

在主程序中,进入键盘服务程序后,开始扫描键盘,如果设置键没有键按下或是按下次数K=K%10=0,则本次扫描结束,若设置键按下次数K=K%10=1;则可通过加、减键调节秒;若设置键按下次数K=K%10=2,则可通过加、减键调节分;若设置键按下次数K=K%10=3,则可通过加、减键调节时;若设置键按下次数K=K%10=4,则可通过加、减键调节天;若设置键按下次数K=K%10=5,则可通过加、减键调节年;若设置键按下次数K=K%10=6,则可通过加、减键调节星期;若设置键按下次数K=K%10=7,则可通过加、减键调节闹铃开关;若闹铃关,则设置键按下次数K=K%10=8,将回到初始显示界面。

若闹铃开,则设置键按下次数K=K%10=8,则可通过加、减键调节闹铃分;则可通过加、减键调节闹铃时;若设置键按下次数K=K%10=10,将回到初始显示界面。

图5.2独立键盘服务流程图

5.3LCD显示子程序设计

 在LCD显示子程序中,初始化后,从LCD中读状态字,判断LCD是否在忙状态,不是则可向LCD写控制命令,再写数据,即显示数据。

       

图5.3LCD显示流程图

器材:

LCD(LGM12641BS1R)一个

单片机PIC16F877A一个

红色法官二极管一个

DS1302一个

32768Hz的晶振一个

6pF的电容二个

10k的电阻五个

1k的电阻四个

Button按键四个

1.目的和意义

1.1设计目的

1.掌握单片机8031的性能及使用方法

2.掌握使用单片机编程的方法;

3了解七段数码显示数字的原理;

4.掌握多位数字的显示技术;

5.掌握ADC0809模/数转换的应用;

1.2设计的内容

由于日常电压都是模拟量,要把他们的输出变为数字量就需要有模/数转换器。

本次实验选用的是八位模/数转换器ADC0809。

其次,计算机中的数字都是十六进制数,而我们习惯于十进制数的读写,因此,在软件设计中则要把十六进制数转换成十进制数。

在显示的时候也是如此。

本装置的输出用三位LED显示,因此在软件设计中还要解决数字输出与LED的接口问题。

硬件则需要将输出线接到八段数码管上。

 

原理框图

 

 

 

 

1.3设计要求

1.可测量0~99V的模拟电压;

2.精确到0.1V;

3.结果用LED动态显示;

硬件电路设计

8031单片机

8031为字长8位的单片微型计算机,由中央处理器、内部RAM、内部ROM、两个16位的定时计数器、四个8位的I/O口(P0、P1、P2、P3)、一个全双工的串行口、五个中断源以及时钟等组成。

它具有速度快、功能强、功耗底、抗干扰性好、价格低廉等特点。

它是标准的40引脚双列直插封装(DIP)形式。

八位模/数转换器ADC0809,

ACD0809是典型的8位8通道逐次逼近式A/D转换器,为28引脚双列直插式封装。

可实现8路模拟信号的分时采集,片内有8路模拟选通开关,以及相应的通道地址锁存译码电路,其转换时间为100微秒左右。

A/D转换用于实现模拟量到数字量的转换。

按转换原理可分为四种,即:

计数式A/D转换器、双积分式A/D转换器、逐次逼近式A/D转换器和并行式A/D转换器。

目前使用较多的为后三种。

双积分式A/D转换器具有高精度、抗干扰性好、价格低廉等特点,但速度较慢,经常应用于对速度要求不高的仪表中;逐次逼近式A/D转换器在精度、速度和价格上都适中,是目前最常用的A/D转换器;并行式A/D转换器是一种用编码技术实现的高速A/D转换器其速度最快,价格也最高,使用于要求较高的场合。

综上,本设计选用逐次逼近式8位A/D转换芯片ADC0809。

ADC0809的主要技术特性和指标:

·分辨率:

8位。

·转换时间:

取决于芯片时钟频率。

·单一电源:

+5V。

·模拟输入电压范围:

单极性0~5V,双极性+5V或+10V。

·具有可控三态输出锁存器。

·启动转换控制脉冲式(正脉冲),上升沿使内部所有寄存器清“0”,下降沿使A/D转换器开始。

LED显示器

通常所说的LED显示器有七个发光二极管组成,因此也称之为七段LED显示器。

此外,显示器中还有一个圆点型发光二极管,用于显示小数点。

a

fb

gy

 

ec

 

3.软件电路设计

3.1设计思路

本题要求输入0~99v的模拟电压,结果用LED显示。

由于计算机读入的只能是数字量,因此首先要用模/数转换器ADC0809将采集到的数据转换成数字量送入8031进行处理。

再者,用LED显示结果时就要考虑8031与LED的接口问题。

在程序中要完成的还有输入量于输出量的对应问题。

ADC0809是八位的模/数转换器,数字范围为0~255,而输出要求0~100。

因此,模拟量与数字输出的变化比为100/255。

在计算机乘法中不能给一个数直接乘以0.4,所以在处理输入值时就必须计算输入值*4/10。

算得的值不必再进行其他转换便可通过LED显示。

3.2程序流程图

 

显示程序

led:

movdptr,#9002h;位控口部分

movx@dptr,a

jnbacc.1,b1;是否有小数点

movdptr,#outseg

mova,@r0

calltable1

jmpshow

b1:

movdptr,#outseg

mova,@r0

calltable

show:

movx@dptr,a

movr6,#01h

acalldelay

incr0

mova,r3

rla

jbacc.3,ld1

movr3,a

ajmpled

movdptr,#outbit

mova,#0

movx@dptr,a;关所有八段管

ld1:

ljmpstart;返回

table:

inca

movca,@a+pc

ret

db3fh06h5bh4fh66h6dh

db7dh07h7fh6fh

table1:

inca

movca,@a+pc

ret

db0bfh86h0dbh0cfh0e6h

db0edh0fdh87h0ffh0efh

Delay:

;延时子程序

movr7,#0

DelayLoop:

djnzr7,DelayLoop

djnzr6,DelayLoop

ret

3.3程序清单

outbitequ9002h

outsegequ9004h

start:

movdptr,#outbit

mova,#0

movx@dptr,a;关所有八段管

movdptr,#8000h

mova,#00

movx@dptr,a;起动A/D

jisuan:

movxa,@dptr;把ADC的输出赋给a

movb,#04h

mulab

mov30h,b;积的高位存入30h单元

mov31h,a;积的低位存入31h单元

mova,#0ffh;15-51是进制转换问题

movb,#0ah

divab

mov32h,a;商存入32h单元

mov33h,b;余数存入33h单元

movb,30h

mulab

mov32h,a;高位的总商

mova,33h

movb,30h

mulab

adda,30h

mov33h,a

mova,31h

movb,#0ah

divab

adda,32h

mov32h,a

mova,33h

adda,b

movb,#0ah

divab;b中放总后的余数

adda,32h

mov32h,a

mova,b

mov70h,a;把小数位存入缓存区

mova,32h

movb,#0ah

divab

mov72h,a

cjnea,#0ah,a1;把十位存入缓存区

mov70h,#09h;溢出处理部分

mov71h,#09h

mov72h,#09h

jmpxianshi

a1:

mova,b

mov71h,a;把个位数存入缓存区

xianshi:

movr0,#70h

movr3,#01h

mova,r3

led:

movdptr,#9002h;位控口部分

movx@dptr,a

jnbacc.1,b1;是否有小数点

movdptr,#outseg

mova,@r0

calltable1

jmpshow

b1:

movdptr,#outseg

mova,@r0

calltable

show:

movx@dptr,a

movr6,#01h

acalldelay

incr0

mova,r3

rla

jbacc.3,ld1

movr3,a

ajmpled

movdptr,#outbit

mova,#0

movx@dptr,a;关所有八段管

ld1:

ljmpstart;返回

table:

inca

movca,@a+pc

ret

db3fh06h5bh4fh66h6dh

db7dh07h7fh6fh

table1:

inca

movca,@a+pc

ret

db0bfh86h0dbh0cfh0e6h

db0edh0fdh87h0ffh0efh

Delay:

;延时子程序

movr7,#0

DelayLoop:

djnzr7,DelayLoop

djnzr6,DelayLoop

ret

end

4.调试程序

通过单步执行检测程序的运行情况。

在调试计算程序的时候,由电位器给输入一个值,通过计算的到它经过A/D转换后的数字量。

设置PC,单步执行。

每执行一步,在数据监测窗口和程序监测窗口观察它的变化情况,看是否与自己计算出的结果相符。

如不同,则思考是哪个地方出现了问题,修改后继续执行,知道输出结果与计算结果相同为止。

当程序中有跳转指令时,通过单步执行可以看到条件满足时它跳到哪一步,条件不满足时程序跳到哪一步,从而达到想要的结果。

LED的显示程序在调试中出错是相对较少的。

给输出分配好段控口和位控口之后,它基本就能按8031的处理结果显示。

5.结论

通过本次设计,我们更好地掌握了单片机编程和调试。

熟悉了汇编语言的使用方法,将即将遗忘的知识得到了巩固。

这次的题目并不是很难,但它有一个非常复杂的计算程序,是我们以前所没接触过的,因此在编程和调试过程中也遇到了一些麻烦。

克服困难的办法就是想尽一切办法去解决它,通过不懈的努力和老师同学们的帮助,我们的问题很快就解决了。

这次设计总体来说还是比较顺利的,从中学到的知识也是相当丰富的,这为我们今后的课程设计和毕业设计积累了知识和经验,丰富了我们的大学生活。

 

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

当前位置:首页 > 考试认证 > 公务员考试

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

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