单片机课程设计报告.docx

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

单片机课程设计报告.docx

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

单片机课程设计报告.docx

单片机课程设计报告

湖南科技大学

信息与电气工程学院

 

《课程设计报告》

 

题目:

电子日历

专业:

通信工程

班级:

通信三班

姓名:

李毓哲

学号:

1302070131

指导教师:

陈君

2016年6月17日

 

单片机原理与应用课程设计评阅书

题目

姓名

专业班级

学号

指导教师评语:

 

 

成绩评定为:

指导教师(签字):

年月日

信息与电气工程学院

课程设计任务书

2015—2016学年第2学期

专业:

通信工程班级:

3班学号:

1302070131姓名:

李毓哲

课程设计名称:

单片机微机接口与技术

设计题目:

电子日历

完成期限:

自2016年6月6日至2016年6月17日共2周

设计依据、要求及主要内容:

一、设计依据:

本系统采用PCF8563时钟芯片进行计时,STC15F2K60S2单片机通过IIC总线进行数据读写,并采用IO方式控制两片74HC595芯片驱动8位数码管,数码管可以实时显示秒,分,小时,日期,月份和年等信息,并且实现闹铃功能时,数码管闪烁显示。

阵列式键盘采用行列扫描方式,可以实现秒,分,小时,日期,月份和年信息的校准,以及时钟显示与日历显示的切换功能。

二、要求:

(1)利用STC15F2K60S2单片机作为主控器组成一个电子日历和电子钟。

(2)利用LED分别显示当前时间和日历。

(3)利用尽可能少的开关实现:

校正日历和时间

(4)定制闹钟(时、分、表)

三、主要内容:

(1)采用8位LED数码管显示日期、时间、闹钟

(2)显示器驱动采用“动态扫描驱动”,连接方式为共阳极,单片机的P1口作为显示器的位选线,P0口作为段选线

(3)显示器驱动采用“动态扫描驱动”,连接方式为共阳极,单片机的P1口作为显示器的位简化实验电路

(4)m=0时,数码管显示时间;m=1时,数码管显示日期;m=2时,数码管显示闹钟。

(5)在单片机P1.6口增加led7闪烁电路,作为闹钟提示装置。

指导教师(签字):

批准日期:

年月日

摘要 

本文提出了一种基于STC15F2K60S2单片机的电子日历设计方案。

该方案以STC15F2K60S2单片机为主控制器,与时钟芯片PCF8563、按键输入、8位LED数码管显示等电路模块组成硬件系统。

以串行时钟日历芯片PCF8563记录日历和时间,它可以对年、月、日、时、分、和秒进行计时,并且具有闹钟功能。

电子日历采用两片74HC595芯片作为LED数码管显示驱动,可以支持更多数码管的稳定显示,采用直观的数字显示在数码管上,并设有独立的按键控制,可以根据使用者的需要随时对时钟进行校准和时间选择。

此电子日历具有读取方便、显示直观、功能多样、电路简洁、成本低廉等优点,符合电子仪器仪表的发展趋势,具有广阔的市场前景。

 

关键词:

单片机;LED数码显示管;PCF8563;电子日历;74HC595

 

目录

一、摘要·····························································4

二、设计的任务与要求·················································6

1.数字钟的设计目的···············································6

2.数字钟的设计要求···············································6

3.数字电子钟的基本原理···········································6

三、电子日历设计方案论证及选择·······································6

1.主控芯片······················································7

2.显示部分······················································7

3.按键部分······················································7

四、主要元器件的介绍·················································7

1.STC15F2K60S2单片机介绍········································7

2.八位数码管简介················································8

3.74HC595芯片介绍··············································8

4.矩阵键盘介绍··················································9

五、总原理图·························································9

六、源程序设计······················································10

七、心得体会························································18

参考文献····························································19

 

二、设计的任务与要求

1.数字钟的设计目的:

(1)掌握数字电子钟的设计方法和制作过程。

(2)掌握常用数字集成电路的功能和使用。

(3)了解各芯片的逻辑功能、引脚安排和使用方法。

(4)掌握计数器相互级联的方法。

(5)学会用仿真软件对设计的原理图进行仿真。

2.数字钟的设计要求:

(1)利用STC15F2K60S2单片机作为主控器组成一个电子日历和电子钟。

(2)利用LED分别显示当前时间和日历。

(3)利用尽可能少的开关实现:

校正日历和时间

(4)定制闹钟(时、分、表)

3.数字电子钟的基本原理:

单片机先通过了STC15F2K60S2主芯片,再通过74LHC595寄存器驱动时钟屏幕,芯片驱动方式则是并行驱动,这样可以避免每次传送新的显示数据时,都需要从头到尾传送24个笔段数据。

目前的传送方式可以只是传送已经变化了的显示数据。

晶体频率使用的是32768HZ,这种低频率时基,对掉电保护的电池耗电关系极大,STC15F2K60S2单片机具有的实时时钟的功能,大大方便了电路设计。

按照常规,在如此低的频率下,对单片机的指令执行速度会有矛盾,但是,这种单片机却能够让程序运行时使用“内部RC”振荡频率而仅仅是时钟部分使用32768HZ频率,这样,就可以选择“内部RC”高达数MHZ的指令运行频率而不用理会时钟走时频率,两者依靠这种特有的“RTC”功能获得了很理想的配合。

当进入电池掉电保护的时候,可以令电池耗电维持在仅仅数十uA的水平,一只60mAh的掉电保护电池,就可以让掉电保护时间长达几个月之久!

进入掉电保护后,屏幕不显示,所有按钮和控制功能暂时失效,仅仅实时时钟仍然继续走时。

当外部主电源恢复供电后,所有功能自动恢复,实时时钟无需调整。

单片机的15p是复位引脚,当上电时或者程序运行发生异常时,可以通过此引脚让程序重新运行。

但是,一般地,单片机本身具有“看门狗”自动复位功能,可以快速地自动对程序运行异常进行复位,人们几乎觉察不到它的复位影响。

单片机的10P引脚安排为专门检测外部供电是否正常,当外部5v供电掉电后,单片机将立即进入掉电保护状态,而在电路中电源能量还没有完全消耗尽之前,程序也必须抢先对各个端口进行配置,以便进入低电源消耗状态。

电路图中有两个输出端口,一个是“睡眠”控制输出端口,它只有在开始倒计时的时候才会输出高电平;另一个时“定时”输出端6口,它只有在到达定时时间的时候才会输出高电平

三、数字电压表设计方案论证及选择

主要设计方框图如下:

 

1.主控芯片

方案1:

基本门电路搭建用基本门电路来实现数字闹钟,电路结构复杂,故障系数大,不易调试。

方案2:

仅仅由单片机实现时钟功能单片机内部具有定时器,可方便实现定时功能,但由于系统晶振误差、温漂、中断响应时间的不确定性及定时器重新装载时间常数所带来的误差,决定它不能用来作为时钟的时间基准。

方案3:

专用时钟芯片目前市场上已有很多实时时钟芯片,如DS12887、DS1302、PCF8563和X1227等,芯片内都集成了时钟/日历功能,给时钟系统设计带来很多方便。

因此计时功能以选专用时钟芯片为宜。

基于课程设计的要求和实验室能提供的芯片,本设计选用方案2。

2.显示部分

方案1:

LED数码管显示 数码管通过设置可以完成制作任务,经济耐用,但其显示不够直观、提供信息量少、不易理解等缺点。

 

方案二:

液晶显示屏 液晶特别是具有汉字显示功能的液晶显示器,来实现显示功能,不仅可以实现基本的显示信息,而且可以显示丰富的符号指示信息以及文字指示信息,如AM/PM,闹钟符号等,信息量丰富且直观易懂。

而且液晶显示有功耗低,体积小,重量轻,寿命长,不产生电磁辐射污染等优点。

 

基于课程设计的要求和实验室能提供的,系统采用方案1。

3.按键部分

方案1:

阵列式键盘此类键盘是采用行列扫描方式,优点是当按键较多时可以降低占用单片机的I/O口数目,缺点是电路复杂且会加大编程难度。

方案二:

独立按键电路独立式按键电路,每个键单独占有一根I/O接口线,每个I/O口的工作状态互不影响,此类键盘采用端口直接扫描方式。

缺点是当按键较多时占用单片机的I/O数目较多,优点是电路设计简单,且编程极其容易。

基于课程设计的要求和实验室能提供的,本系统采用方案1。

四、主要元器件的介绍

1.STC15F2K60S2单片机介绍

 

STC15F2K60S2单片机由STC宏晶科技公司生产的,采用STC第八代技术,不需要外部晶振和外部复位的单片机,可省掉外部EEPROM,利用IAP技术---ISP/IAP,在线编程,无需编程器/仿真器,2K字节SRAM,双串口,两个独立串口,高速10位A/D转换器,8个输入通道 ,1个时钟/机器周期8051,高速,高可靠,超低功耗,超低价。

STC15F2K60S2有PDIP、PQFP/TQFP及PLCC等三种封装形式,以适应不同产品的需求。

其主要特性如下:

1.增强型8051CPU,1T型,即每个机器周期只有1个系统时钟。

2.ISP/IAP功能,即在系统可编程/在应用可编程。

3.低功耗设计:

低速模式、空闲模式、掉电模式。

4.8-62KBFlash程序存储器。

5.6个定时器:

两个16位可重装载初始值的定时器T0/T1,T2定时器,3路CCP可再实现3个定时器。

6.2个全双工异步串行口。

7.8通道高速10位ADC,速度可达30万次/秒。

8.高速SPI串行口通信接口。

9.多路可编程时钟输出。

10.最多42个I/O口。

2.八位数码管介绍

 

数码管0-9的C51编程为:

ucharcodetable[]={0xbf,0x86,0xdb,0xcf,0xe6,0xed,0xfd,0x87,0xff,0xef}

3.74HC595芯片介绍

 

74HC595具有8位移位寄存器和一个存储器,三态输出功能。

移位寄存器和存储器有相互独立的时钟。

数据在SH_cp(移位寄存器时钟输入)的上升沿输入到移位寄存器中,在ST_cp(存储器时钟输入)的上升沿输入到存储寄存器中去。

如果两个时钟连在一起,则移位寄存器总是比存储寄存器早一个脉冲。

移位寄存器有一个串行移位输入(Ds),和一个串行输出(Q7’),和一个异步的低电平复位,存储寄存器有一个并行8位的,具备三态的总线输出,当使能OE时(为低电平),存储寄存器的数据输出到总线。

将串行输入的8位数字,转变为并行输出的8位数字

4.矩阵键盘介绍

 

键盘分编码键盘和非编码键盘,键盘上闭合键的识别由专用的硬件编码器实现,并产生按键编码号或键值的称为编码键盘,如计算机键盘。

而靠软件编程来识别的称为非编码键盘,在单片机组成的各种系统中,用的最多的是非编码键盘,也有用到编码键盘的,我们这里用的就是非编码键盘,也就是矩阵键盘当按钮按下时;端口会变成低电平,我们设计一段扫描程序来判断那个端口是低电平来判断是否有按键按下。

五、总原理图

 

六、源程序设计

#defineMAIN_Fosc22118400L

#include"STC15Fxxxx.H"

#defineTimer0_Reload(65536UL-(MAIN_Fosc/1000))

#defineDIS_DOT0x20

#defineDIS_BLACK0x10

#defineDIS_0x11

u8codet_display[]={

//0123456789ABCDEF

0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F,0x77,0x7C,0x39,0x5E,0x79,0x71,

//black-HJKLNoPUtGQrMy

0x00,0x40,0x76,0x1E,0x70,0x38,0x37,0x5C,0x73,0x3E,0x78,0x3d,0x67,0x50

0x37,0x6e,0xBF,0x86,0xDB,0xCF,0xE6,0xED,0xFD,0x87,0xFF,0xEF,0x46};

u8codeT_COM[]={0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80};

sbitP_HC595_SER=P4^0;//pin14SERdatainput

sbitP_HC595_RCLK=P5^4;//pin12RCLkstore(latch)clock

sbitP_HC595_SRCLK=P4^3;//pin11SRCLKShiftdataclock

u8LED8[8];

u8display_index;

bitB_1ms;

u8hour,minute,second;

u8hour1,minute1,second1;

u16year,month,day;

u16msecond,delay,flag;

u8KeyCode;

u8cnt10ms;

u8IO_KeyState,IO_KeyState1,IO_KeyHoldCnt;

u8cnt50ms;

u8m;

voidIO_KeyScan(void);//50mscall

voidDisplayRTC(void)

{

if(m==0)//ÏÔʾʱÖÓ

{

if(hour>=10)LED8[0]=hour/10;

elseLED8[0]=DIS_BLACK;

LED8[1]=hour%10;

LED8[2]=DIS_;

LED8[3]=minute/10;

LED8[4]=minute%10;

LED8[5]=DIS_;

LED8[6]=second/10;

LED8[7]=second%10;

}

elseif(m==1)//ÏÔʾÈÕÆÚ

{

LED8[0]=2;

LED8[1]=0;

LED8[2]=year/10;

LED8[3]=year%10;

LED8[4]=month/10;

LED8[5]=month%10;

LED8[6]=day/10;

LED8[7]=day%10;

}

elseif(m==2)//ÏÔʾÄÖÖÓ

{

if(hour>=10)LED8[0]=hour1/10;

elseLED8[0]=DIS_BLACK;

LED8[1]=hour1%10;

LED8[2]=DIS_;

LED8[3]=minute1/10;

LED8[4]=minute1%10;

LED8[5]=DIS_;

LED8[6]=second1/10;

LED8[7]=second1%10;

}

if(hour==hour1)//ÄÖÖÓÏìLED7·¢¹â

if(minute==minute1)

if(second==second1)

{

P17=0;

for(delay=0;delay<=50000;delay++);

P17=1;

}

}

voidRTC(void)

{

if(++second>=60)

{

second=0;

if(++minute>=60)

{

minute=0;

if(++hour>=24)

{

hour=0;

day++;

if(day>30)

{

day=0;

month++;

if(month>12)

{

month=0;

year++;

}

}

}

}

}

}

voidmain(void)

{

u8i,k;

P0M1=0;P0M0=0;

P1M1=0;P1M0=0;

P2M1=0;P2M0=0;

P3M1=0;P3M0=0;

P4M1=0;P4M0=0;

P5M1=0;P5M0=0;

P6M1=0;P6M0=0;

P7M1=0;P7M0=0;

AUXR=0x80;//Timer0setas1T,16bitstimerauto-reload,

TH0=(u8)(Timer0_Reload/256);

TL0=(u8)(Timer0_Reload%256);

ET0=1;//Timer0interruptenable

TR0=1;//Tiner0run

EA=1;

display_index=0;

hour=11;

minute=59;

second=58;

hour1=12;

minute1=01;

second1=00;

year=16;

month=6;

day=13;

m=0;

RTC();

DisplayRTC();

//for(i=0;i<8;i++)LED8[i]=DIS_BLACK;

for(i=0;i<8;i++)LED8[i]=i;

k=0;

KeyCode=0;

cnt10ms=0;

IO_KeyState=0;

IO_KeyState1=0;

IO_KeyHoldCnt=0;

cnt50ms=0;

while

(1)

{

if(B_1ms)

{

B_1ms=0;

if(++msecond>=1000)

{

msecond=0;

RTC();

DisplayRTC();

}

if(++cnt50ms>=50)

{

cnt50ms=0;

IO_KeyScan();

}

if(KeyCode>0)

{

if(KeyCode==17)//hour+1

{

if(m==0)

{

if(++hour>=24)hour=0;

}

elseif(m==1)

{

if(++year>=100)year=0;

}

elseif(m==2)

{

if(++hour1>=24)hour1=0;

}

DisplayRTC();

}

if(KeyCode==18)//hour-1

{

if(m==0)

{

if(--hour>=24)hour=23;

}

elseif(m==1)

{

if(--year>=100)year=99;

}

elseif(m==2)

{

if(--hour1>=24)hour1=23;

}

DisplayRTC();

}

if(KeyCode==19)//minute+1

{

if(m==0)

{

second=0;

if(++minute>=60)minute=0;

}

elseif(m==1)

{

month++;

if(month>=30)month=0;

}

elseif(m==2)

{

if(++minute1>=60)minute1=0;

}

DisplayRTC();

}

if(KeyCode==20)//minute-1

{

if(m==0)

{

second=0;

if(--minute>=60)minute=59;

}

elseif(m==1)

{

month--;

if(month>30)month=29;

}

elseif(m==2)

{

if(--minute1>=60)minute1=59;

}

DisplayRTC();

}

if(KeyCode==21)//second+1

{

if(m==0)

{

if(++second>=60)hour=0;

}

elseif(m==1)

{

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

当前位置:首页 > 小学教育 > 小升初

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

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