郑州大学单片机课程设计.docx

上传人:b****2 文档编号:24327348 上传时间:2023-05-26 格式:DOCX 页数:26 大小:259.55KB
下载 相关 举报
郑州大学单片机课程设计.docx_第1页
第1页 / 共26页
郑州大学单片机课程设计.docx_第2页
第2页 / 共26页
郑州大学单片机课程设计.docx_第3页
第3页 / 共26页
郑州大学单片机课程设计.docx_第4页
第4页 / 共26页
郑州大学单片机课程设计.docx_第5页
第5页 / 共26页
点击查看更多>>
下载资源
资源描述

郑州大学单片机课程设计.docx

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

郑州大学单片机课程设计.docx

郑州大学单片机课程设计

存档资料成绩:

 

郑州大学光华学院

课程设计报告书

 

所属课程名称单片机原理与应用

题目万年电子历

分院 电信分院 

专业班级2007级计算机科学与技术

(2)班

学  号20070210440212   

学生姓名 冯文科     

指导教师  夏康伟  

 

2010年7月16日

郑州大学光华学院

课程设计(论文)任务书

专业07计算机科学与技术班级

(2)班姓名冯文科

一、课程设计(论文)题目万年电子历

二、课程设计(论文)工作:

自2010年7月5日起至2010年7月16日止。

三、课程设计(论文)的目的要求和任务内容:

一.实验目的

通过本次课程设计达到如下目的:

1、熟悉AT89C51单片机与时钟芯片DS1302的应用。

2、熟悉时钟时、分、秒计时方法,掌握编程技巧。

3、掌握键盘的基本工作原理,键的识别,键抖动和重键问题的解决,键盘工作方式和键盘程序的编程。

4、掌握七段码LED显示器的结构,七段码LED显示器的工作方式和显示程序的编程。

5、掌握串行通信程序的编写。

 

二.设计要求

利用AT89C51单片机,时钟芯片DS1302、七段码LED显示器、按键、MAX7219及常用外围器件,设计一个具有动态显示功能的电子万年历,具体要求如下:

1、设计实现电子万年历的电路系统构成框图。

2、能动态显示年、月、日、星期、小时、分钟、秒。

3、可用键盘进行校对时间,以及日期时间的修改。

 

学生签名:

_____________

2010年7月16日

课程设计(论文)评阅意见

 

序号

项目

等   级

优秀

良好

中等

及格

不及格

1

课程设计态度评价

2

出勤情况评价

3

任务难度评价

4

工作量饱满评价

5

任务难度评价

6

设计中创新性评价

7

论文书写规范化评价

8

综合应用能力评价

综合评定等级

评阅人 职称

 

2010年7月16日

目 录

第1章课程设计任务书...........................2

第2章设计方案................................6

第3章硬件设计.................................7

第4章软件设计................................15

第5章程序清单................................17

第6章课程设计心得............................24

第7章参考文献................................25

第二章设计方案

按照系统设计功能的要求,初步确定系统由主控模块、时控模块、显示驱动及显示模块和键盘接口模块共4个模块组成,电路系统构成框图如图所示。

图2.1电子万年历电路系统构成框图

主控芯片使用51系列AT89C51单片机,时钟芯片使用美国DALLAS公司推出的一种高性能、低功耗、带RAM的实时时钟DS1302。

采用DS1302作为计时芯片,可以做到计时准确。

更重要的是,DS1302可以在很小电流的后备电源(2.5~5.5V电源,再2.5V时耗电小于300nA),而且DS1302

可以编程选择多种充电电流来队后备电源进行慢速充电,可以保证后备电源基本不耗电。

显示驱动采用MAX7219,MAX7219是微处理器和共阴极八段八位LED数码管显示、图条/柱图显示或64点阵显示接口的小型串行输入/输出芯片。

片内包括BCD译码器、多路扫描控制器、字和位驱动器和8×8静态RAM。

外部只需要一个电阻设置所有LED显示器字段电流。

MAX7219和微处理器只需三根导线连接,每位显示数字有一个地址由微处理器写入。

允许使用者选择每位是BCD译码或不译码。

使用者还可选择停机模式、数字亮度控制、从1~8选择扫描位数和对所有LED显示器的测试模式。

显示模块采用普通的共阴极四位一体八段LED数码管。

 

第三章硬件设计

3.1系统硬件概述

3.1.1主控制器AT89C51

ATMEL公司生产的AT89C51单片机采用高性能的静态80C51设计,并

采用先进工艺制造,还带有非易失性Flash程序存储器。

它是一种高性能、低功耗的8位CMOS微处理芯片,市场应用最多。

其主要特点如下:

8KBFlashROM,可以擦除1000次以上,数据保存10年。

●256字节内部RAM;

●电源控制模式;

●时钟可停止和恢复;

●空闲模式;

●掉电模式;

●6个中断源;

●4个中断优先级;

●4个8位I/O口;

●全双工增强型TUAR;

●3个16位定时/计数器:

T0、T1(标准80C51)和增加的T2(捕获和比较)

●全静态工作方式:

0~24MHZ

3.1.2时钟电路DS1302

DS1302的性能特性:

●实时时钟,可对秒、分、时、日、周、月以及带闰年补偿的年进行比较;

●用于高速数据暂存的31*8位RAM;

●最少引脚的串行I/O;

●2.5~5.5V电压工作范围;

●2.5V时耗小于300nA;

●用于时钟或RAM数据读/写的单字节或多字节(脉冲方式)数据传送方式;

●简单的三线接口;

●可选的慢速充电(至Vcc1)的能力。

DS1302在任何数据传送时必须先初始化,把RST脚置为高电平,然后把8位地址和命令字装入移位寄存器,数据在SCLK的上升沿被访问到。

在开始8个时钟周期,把命令字节装入移位寄存器后,另外的时钟周期在读操作时输出数据,在写操作时写入数据。

时钟脉冲的个数在单字节方式下为8+8,在多字节方式下为8+字节数,最大可达248字节数。

如果在传送过程中置RST脚为低电平,则会终止本次数据传送,并且I/O引脚变为高阻态。

上电运行时,在Vcc≥2.5V之前,RST脚必须保持低电平。

只有在SCLK为低电平时,才能将RST置为高电平。

DS1302的控制字如表所示。

控制字节的最高有效位(位7)必须是逻辑1,如果它为0,则不能把数据写入到DS1302中。

位6如果为0,则表示存取日历时钟数据;为1则表示存取RAM数据。

位5~1(A4~A0)指示操作单元的地址。

最低有效位(位0)如果为0,则表示药进行写操作;为1表示进行读操作。

控制字节总是从最低位开始输入/输出。

为了提高对32个地址寻址能力(地址/命令位1~5=逻辑1),可以把时钟/日历或RAM寄存器规定为多字节(burst)方式。

位6规定时钟或RAM,而位0规定读或写。

在时钟/日历寄存器中的地址9~31或RAM寄存器中的地址31不能存储数据。

在多字节方式下,读或写从地址0的位0开始。

必须按数据传送的次序写最先的8个寄存器。

但是,当以多字节方式写RAM时,为了传送数据不必写所有的31字节,不管是否谢了全部31字节,所写的每一字节都将传送至RAM。

表3.1DS1302控制字

DS1302共有12个寄存器,其中有7个寄存器与日历、时钟相关,存放的数据位为BCD码形式。

其日历、时间寄存器及其控制字如上表所示,其中奇数为读操作,偶数为写操作。

时钟暂停:

秒寄存器的位7定义位时钟暂停位。

当它为1时,DS1302停止振荡,进入低功耗的备份方式,通常在对DS1302进行写操作时(如进入时钟调整程序),停止振荡。

当它为0时,时钟将开始启动。

AM-PM/12-24小时方式:

小时寄存器的位7定义为12或24小时方式选择位。

它为高电平时,选择12小时方式。

在此方式下,位5为第二个10小时位(20~23h)。

DS1302的晶振选用32768Hz,电容推荐值为6pF。

因为振荡频率较低,也可以不接电容,对计时精度影响不大。

3.1.3显示驱动MAX7219

●MAX7219和单片计算机连接有三条引线(DIN、CLK、LOAD),采用16位数据串行移位接收方式

●八位LED显示、图条/柱图显示或64点阵显示

●包括BCD译码器、多路扫描控制器、字和位驱动器和8×8静态RAM

●可选择停机模式、数字亮度控制、从1~8选择扫描位数和对所有LED显示器的测试模式

●最多能驱动8位LED显示器

●内部RAM地址01~08H分别对应于DIG0~DIG7。

●扫描界限寄存器(地址0BH):

该寄存器中D0~D3位数据设定值为0~7H,设定值表示显示器动态扫描个数位1~8。

●停机寄存器(地址0CH):

当D0=0时,MAX721处于停机状态;当D0=1时,处于正常工作状态。

●显示测试寄存器(地址0FH):

当D0=0时,MAX7219按设定模式正常工作;当D0=1时,处于测试状态。

在该状态下,不管MAX7219处于什么模式,全部LED将按最大亮度显示。

●亮度寄存器(地址0AH):

亮度可以用硬件和软件两种方法调节亮度寄存器中的D0~D3位可以控制LED显示器的亮度。

MAX7219通过D11~D84位地址位译码,可寻址14个内部寄存器,分别是8个LED显示位寄存器,5个控制寄存器和1个空操作寄存器。

LED显示寄存器由内部8×8静态RAM构成,操作者可直接对位寄存器进行个别寻址,以刷新和保持数据,只要V+超过2V(一般为+5V)。

控制寄存器包括:

译码模式,显示亮度调节,扫描限制(选择扫描位数),关断和显示测试寄存器。

MAX7219的驱动程序首先必须对5个控制寄存器初始设置即初始化,各控制寄存器设置含义如下:

译码模式选择寄存器(地址=F9H);MAX7219有两种译码方式:

B译码方式和不译码方式。

当选择不译码时,8个数据为分别一一对应7个段和小数点位;B译码方式是BCD译码,直接送数据就可以显示。

实际应用中可以按位设置选择B译码或是不译码方式。

扫描限制寄存器:

地址=FBH;用于设置显示的LED个数(1~8),比如当设置为0xX4时,LED0~5显示。

亮度调节寄存器:

地址=FAH;共有16级选择,用于LED显示亮度的强弱设置。

关断模式寄存器:

地址=FCH;有两种模式选择:

一种是关断状态模式(D0=0);一种是正常操作状态(D0=1),通常选择正常操作状态。

显示测试寄存器:

地址=FFH;有两种选择用于设置LED是测试状态还是正常操作状态:

当在测试状态时(D0=1)各位全应亮,一般选择正常操作状态(D0=0)。

3.2主要单元电路的设计

3.2.1显示电路

显示部分采用普通的共阴数码管显示,采用动态扫描,以减少硬件电

表3.2MAX7219引脚功能

 

路。

年月日时分秒星期共需要17位数码显示,考虑到一次扫描17位数码

管显示时会出现闪烁情况,故采用动态扫描,可将数码管数量减少至9位,

也就是两个四位一体八段LED显示数码管和一个一位LED数码管设计时数码管同时扫描,显示时采用串行口输出段码,用MAX7219驱动数码管。

 

图3.2MAX7219主要引脚

3.2.2键盘接口

键盘在单片机系统中是一个很重要的部件。

为了输入数据、查询和控制系统的工作状态,都要用到键盘,键盘是人工干预计算机的主要手段。

键盘可分为编码和非编码键盘两种。

编码键盘采用硬件线线路来实现键盘编码,每按下一个键,键盘能自动生成按键代码,键数较多,而且还具有去抖动功能。

这种键盘使用方便,但硬件较复杂,PC机所用的键盘就属于这种。

非编码键盘仅提供按键开关工作状态,其他工作由软件完成,这种键盘键数较少,硬件简单,一般在单片机应用系统中广泛使用。

此处主要介绍该类非编码键盘及其与MCS—51型单片机的接口。

3.2.3时钟电路

3.2.3.1DS1302工作方式简介及数据操作原理

DS1302可以对年、月、日、星期、时、分、秒进行计时,且具有闰年补偿功能,工作电压宽达2.5~5.5V。

采用三线接口与CPU进行同步通信,并可采用突发方式一次传送多个字节的时钟信号或RAM数据。

DS1302内部有一个33x8的用于临时性存放数据的RAM寄存器。

DS1302是的DS1202升级产品,与DS1202兼容,但增加了主电源/后背电源双电源引脚,同时提供了对后背电源进行涓细电流充电的能力。

DS1302时钟芯片包括实时时钟/日历和31字节的静态RAM。

它经过一个简单的串行接口与微处理器通信。

实时时钟/日历提供秒、分、时、日、周、月和年等信息。

对于小于31天的月和月末的日期自动进行调整,还包括闰年校正的功能。

时钟的运行可以采用24<小>时或带AM/PM的12小时格式。

采用三线接口与CPU进行同步通信,并可采用突发方式一次传送多字节的时钟信号或RAM数据。

DS1302有主电源/后备电源双电源引脚:

Vcc1在单电源与电池供电的系统中提供低电源,并提供低功率的电磁备份;Vcc1在双电池系统中提供主电源。

在这种运行方式中,Vcc1里连接到后备电源,以便在没有主电源的情况下能保存时间信息以及数据。

DS1302由Vcc1或Vcc2中较打大者供电。

当Vcc2>(Vcc1+0.2V)时,Vcc2给DS1302供电;当Vcc2<Vcc1时,DS1302由Vcc1供电。

图3.5DS1302

DS1302在任何数据传送时必须先初始化,把RST脚置为高电平,然后把8位地址和命令字装入移位寄存器,数据在SCLK的上升沿被访问到。

在开始8个时钟周期,把命令字节装入移位寄存器后,另外的时钟周期在读操作时输出数据,在写操作时写入数据。

时钟脉冲的个数在单字节方式下为8+8,在多字节方式下为8+字节数,最大可达248字节数。

如果在传送过程中置RST脚为低电平,则会终止本次数据传送,并且I/O引脚变为高阻态。

上电运行时,在Vcc≥2.5V之前,RST脚必须保持低电平。

只有在SCLK为低电平时,才能将RST置为高电平。

DS1302的控制字如图所示。

控制字节的最高有效位(位7)必须是逻辑1,如果它为0,则不能把数据写入到DS1302中。

位6如果为0,则表示存取日历时钟数据;为1则表示存取RAM数据。

位5~1(A4~A0)指示操作单元的地址。

最低有效位(位0)如果为0,则表示药进行写操作;为1表示进行读操作。

控制字节总是从最低位开始输入/输出。

为了提高对32个地址寻址能力(地址/命令位1~5=逻辑1),可以把时钟/日历或RAM寄存器规定为多字节(burst)方式。

位6规定时钟或RAM,而位0规定读或写。

在时钟/日历寄存器中的地址9~31或RAM寄存器中的地址31不能存储数据。

在多字节方式下,读或写从地址0的位0开始。

必须按数据传送的次序写最先的8个寄存器。

但是,当以多字节方式写RAM时,为了传送数据不必写所有的31字节,不管是否谢了全部31字节,所写的每一字节都将传送至RAM。

DS1302共有12个寄存器,其中有7个寄存器与日历、时钟相关,存放的数据位为BCD码形式。

其日历、时间寄存器及其控制字如下表所示,其中奇数为读操作,偶数为写操作。

表3.3DS1302控制字

时钟暂停:

秒寄存器的位7定义位时钟暂停位。

当它为1时,DS1302停止振荡,进入低功耗的备份方式,通常在对DS1302进行写操作时(如进入时钟调整程序),停止振荡。

当它为0时,时钟将开始启动。

AM-PM/12-24小时方式:

小时寄存器的位7定义为12或24小时方式选择位。

它为高电平时,选择12小时方式。

在此方式下,位5为第二个10小时位(20~23h)。

DS1302的晶振选用32768Hz,电容推荐值为6pF。

因为振荡频率较低,也可以不接电容,对计时精度影响不大。

 

第四章软件设计

4.1程序设计

电子万年历的程序主要包括3个方面的内容:

一是DS1302从单片机中读取数据进行计数,二是利用按键进行时间的调整,三是MAX7219从单片机中读取数据驱动LED数码管显示时间。

AT89C51单片机主要I/O口的分配,P2.0-P2.2分别接MAX7219的DIN,LOAD,CLK三个功能端,P3接查询式按键,P1.0-P1.2分别接DS1302的CLK,IO,RST端。

4.2程序流程图

4.2.1显示驱动程序流程图

图4.1MAX7219显示驱动程序流程图

 

4.2.2时间控制流程图

图4.2DS1302时控流程图

 

第五章程序清单

#include

#include"intrins.h"

#defineuintunsignedchar

#defineuintunsignedint

ucharxingqi,nian,yue,ri,xiaoshi,fen,miao;

ucharnianh,nianl,yueh,yuel,rih,ril,xiaoshih,xiaoshil,fenh,fenl,miaoh,miaol;

uchardd=2;sbitclk=p1^0;

sbitdat=p1^1;sbitrst=p1^2;

sbitA0=ACC^0;sbitA1=ACC^1;

sbitA2=ACC^2;sbitA3=ACC^3;

sbitA4=ACC^4;sbitA5=ACC^5;

sbitA6=ACC^6;sbitA7=ACC^7;

sbitp30=p3^0;

sbitp31=p3^1;

sbitp32=p3^2;

sbitp33=p3^3;

sbitp34=p3^4;

sbitp35=p3^5;

sbitp36=p3^6;

sbitp37=p3^7;

sbitdate=p2^0;

sbitload=p2^1;sbitclkk=p2^2;

ucharbdatabitmsb;

sbitm7=bitmsb^7;

ucharx,y,c;

bitflag=0;

bitflagh=1;

ucharcodetab[]={0xff,//任意数

0x06,/*1*///共阴数码管

0x5B,/*2*/

0x4F,/*3*/

0x66,/*4*/

0x6D,/*5*/

0x7D,/*6*/

0x07,/*7*/

};

ucharcodetab2[]={0x7e,ox30,ox6d,ox7,ox33,

ox5b,ox5f,ox70,ox7f,ox7b};

//max7219,0~9的字库

ucharcodetab1[]={ox00,ox01,ox02,ox03,ox04,ox05,ox06,ox07,

ox08,ox09,ox010,ox11,ox12,ox13,ox14,ox15,ox16,ox17,ox18,ox19,ox20,ox21,ox22,ox23,ox24,ox25,ox26,ox27,ox28,ox29,ox30,ox31,ox32,ox33,ox34,ox35,ox36,ox37,ox38,ox39,ox40,ox41,ox42,ox43,ox44,ox45,ox46,ox47,ox48,ox49,ox50,ox51,ox52,ox53,ox54,ox55,ox56,ox57,ox58,ox59,ox60};

voidsend(void)

{ucharcount;

bitmsb=x;

for(count=0;count<8;count++)

{if(m7)

{clkk=0;

date=1;

-nop-();

clkk=1;

}

else{clkk=0;

date=0;

nop-();

clkk=1;

}

bitmsb<<=1;

}

}

voidwr(void)

{

load=0;

send();

x=y;

send();

lend=1;

}

voidready(void)

{

x=oxfb;//设置扫描限制

y=ox07;

wr();

x=oxf9;//译码模式

y=ox00;

wr();

x=oxfa;//亮度调节

y=oxoc;

wr();

x=oxfc;//关断模式

y=ox01;

wr();

}

voidInputByte(uchardd)//写一个字节到1302中

{uchari;

ACC=dd;

for(i=8;i>0;i--)

{

dat=A0;

clk=1;

clk=0;

ACC=ACC>>=1;

}

}

voidOutputByte(void)//从DS1302中读出i个数据

{

uchari;

dat=1;

for(i=8;i>0;i--)

{ACC=ACC>>1;

A7=dat;

clk=1;

clk=0;

}

dd=ACC;

}

voidWrite(ucharaddr,ucharnum)

{rst=0;

clk=0;

rst=1;

InputByte(addr);//写地址

InputByte(num);//写数据

clk=1;

rst=0;

{rst=0;

clk=0;

rst=1;

InputByte();

clk=1;

rst=0;

}

//初始化设置时间,2008年5月27号,23时58分00秒

voidmain(void)

{uchari;

uintxt=0;

ucharfen1,fen2,fen3,fen4;

p3=oxff;

DisableWP();//非写保护

WriteSec(ox00);//秒

WriteMin(ox58);//分

WriteHr(ox23);//时

WriteDay(ox27);//日

WriteMn(ox05);//月

WriteYs(ox08);//年

WriteWe(ox02);//星期

//7219设置

ready();

for(i=0;i<222;i++);

for(i=0;i<222;i++);

while

(1)

{Read(ox8b);//读星期数据

xingqi=dd;

Read(ox8d);//读年数据

fen1=dd;

fen2=fen1&oxof;

fen3=fen1&oxfo;

fen3>>=4;

nian=fen3*10+fen2;

nianh=nian/10;

nianl=nian%10;

Read(ox89);//读月数据

fen1=dd;

fen2=fen1&oxof;

fen3=fen1&oxfo;

fen3>>4;

yue=fen3*10+fen2;

yueh=yue/10;

yuel=yue%10;

Read(ox87);//读日数据

fen1=dd;

fen2=fen1&oxof;

fen3>>=

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

当前位置:首页 > 解决方案 > 解决方案

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

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