数字电子钟的设计的Proteus软件实现及软硬件仿真.doc

上传人:b****1 文档编号:251289 上传时间:2022-10-07 格式:DOC 页数:18 大小:233KB
下载 相关 举报
数字电子钟的设计的Proteus软件实现及软硬件仿真.doc_第1页
第1页 / 共18页
数字电子钟的设计的Proteus软件实现及软硬件仿真.doc_第2页
第2页 / 共18页
数字电子钟的设计的Proteus软件实现及软硬件仿真.doc_第3页
第3页 / 共18页
数字电子钟的设计的Proteus软件实现及软硬件仿真.doc_第4页
第4页 / 共18页
数字电子钟的设计的Proteus软件实现及软硬件仿真.doc_第5页
第5页 / 共18页
点击查看更多>>
下载资源
资源描述

数字电子钟的设计的Proteus软件实现及软硬件仿真.doc

《数字电子钟的设计的Proteus软件实现及软硬件仿真.doc》由会员分享,可在线阅读,更多相关《数字电子钟的设计的Proteus软件实现及软硬件仿真.doc(18页珍藏版)》请在冰豆网上搜索。

数字电子钟的设计的Proteus软件实现及软硬件仿真.doc

《微机应用系统设计》课程设计

一、设计课题

数字电子钟的设计

二、设计要求

(一)实现基本数字电子钟的设计,要求能够显示时和分;

(二)通过按键有设置闹钟功能;

(三)有整点报时功能;

(四)通过按键设置能够进行分校时;

(五)用proteus画出原理图,说明各个控制信号的作用;

(六)画出程序流程图,编写程序,采用Proteus软件实现软硬件仿真。

三、设计目的

通过数字电子钟这一课程设计的锻炼,理解单片机系统的组成,及以单片机为主的系统设计方法,掌握单片机最小系统、键盘模块、LED数码管显示系统及各种扩展电路的应用,加深对微控制器系列课程的理解。

四、小组分工

五、材料清单

QTYPART-REFSVALUECODE

---------------------

Resistors

---------

5R1-R54k7W4K7

1R61k

1R7200

Capacitors

----------

1C11uF

2C2,C333pF

IntegratedCircuits

-------------------

1U1AT89C51

1U274LS245

Transistors

-----------

1Q1NPN

Miscellaneous

-------------

4ADD,CONFIRM,MODE,

MOVE

1LS1SPEAKER

1RP1RESPACK-8

1X1CRYSTAL

硬件组成单片机复位电路、按键电路、蜂鸣器驱动电路和显示模块电路四大模块。

六、模块功能说明

(一)按键模块:

通过keyscan()函数扫描按键,识别外设P3端口要完成的按键功能。

本次设计因为按键较少并且需要独立控制所以采用了4个独立按键,分别是mode(P3==0XFF)、add(P3==0XFD)、move(P3==0XFB)和confirm(P3==0XF7)。

当按mode键一次为调时,两次为调闹。

通过由add()函数和confirm()函数同时完成,在不同的模式下,完成时间的更改和确定。

硬件方面,本次设计用AT89C51单片机内部定时/计数器T0作为电子表时钟参考;

(二)显示模块:

由函数show()、show1()、show2()、show3()和show4()分别完成正常时间显示、调试模式显示、闹钟设定模式显示、调整位标记显示和闹钟开闭显示程序。

硬件采用共阳方式,外加5V稳压电源供电,通过8个数码管,采用一片74LS245芯片来驱动位码,用P2口进行位选扫描;

(三)响铃模块:

由beep()函数完成,用于闹钟和整点报时的响铃。

硬件是通过NPN三极管放大后驱动蜂鸣器工作,单片机I/O接三极管基极。

整点报时时由zhengdian()函数beep()函数完成,功能是能够在每个整点报时,每次响铃默认10s。

闹钟由alarm_judge()判断函数和beep()函数完成,常规响铃1分钟;

(四)复位模块:

由独立按键RES来完成复位,此功能为AT89C51单片机完成。

七、参数计算

(一)定时器T0

1.方式控制寄存器TMOD

T1

T0

D7

D6

D5

D4

D3

D2

D1

D0

GATE

C/

M1

M0

GATE

C/

M1

M0

TMOD用以设定通用定时/计数器T0和T1工作方式。

GATE位为门控位,GATE=1时,T0、T1分别受INT0、INT1引脚输入电平控制,常用于测量对应正脉冲的宽度;C/用于选择定时、计数功能。

本次设计选择T0做定时器用,工作在方式1,故TMOD=0X01;

2.控制寄存器TCON

T1

T0

D7

D6

D5

D4

D3

D2

D1

D0

TF1

TR1

TF0

TR0

IE1

IT1

IE0

IT0

TR0用于开/关定时器T0,TF0为T0溢出标志位。

3.中断允许控制寄存器IE

D7

D6

D5

D4

D3

D2

D1

D0

EA

/

/

ES

ET1

EX1

ET0

EX0

EA为总中断允许位,ET0为T0中断允许位。

(二)定时器T0初值计算

初值计算公式:

(1)

X—定时器初值

n—定时器位数(方式0:

13位;方式1:

16位;方式2:

8位)

fosc—单片机主频(本次设计取12MHz)

T—机器周期时间

为了获得1s的时钟周期,需要先获得50ms的时钟周期,每20次中断一次,就能完成时间为1s的获得。

选择计时器T0工作在方式1下,fosc=12MHz,T=50ms,带入公式

(1),解得初值X=3CB0H,所以TH0=0X3C,TL0=0XB0。

八、电路及软件流程

(一)系统框图总览

(二)单片机复位电路

(三)按键电路

(四)蜂鸣器驱动电路

(五)显示模块电路

(六)主函数流程图

主函数流程图

(二)定时器T0中断服务程序流程图

定时器T0中断服务程序流程图

(三)闹钟响应程序流程图

闹钟响应程序流程图

(四)键盘扫描程序流程图

键盘扫描程序流程图

九、调试界面

(一)调试校时功能时时,按下mode按钮,通过move按钮调整位置,更改分钟,再按下confirm键确认,将时间调至00-01-00,调试结果时间从00-01-00开始继续计时:

(二)调试闹钟功能时,按mode按钮两下,通过move按钮调整位置,更改分钟,再按下confirm键确认,将时间调至00-06-00,调试结果:

时间不变,继续计时,在00-06-00前几秒开始时闹钟响起,时长1分钟:

(三)调试整点报时功能,调时定于00-59-00,开始等待,默认00-59-50时扬声器开始鸣叫,时延10s后停止:

十、心得体会

附源代码:

//****************头文件及宏定义*******************************

#include

#defineucharunsignedchar

#defineuintunsignedint

//****************软件延时程序*********************************

voiddelay(uintii)

{while(--ii);}

//****************定义数码管驱动码******************************

ucharduan[]={0XC0,0XF9,0XA4,0XB0,0X99,0X92,0X82,0XF8,0X80,0X90,

0XBF,0XFF,0X7F};//段选,0123456789-灭.

ucharwei[]={0X01,0X02,0X04,0X08,0X10,0X20,0X40,0X80};//位选,共阳,从右至左

//****************定义变量**************************************

uchart=0,sec=0,min=0,hour=0; //正常走时时间变量

ucharsec1=0,min1=0,hour1=0;//时间设定值变量

ucharsec2=0,min2=0,hour2=0;//闹钟设定值变量

ucharalarm_en=0;//闹钟开关变量

ucharalarm_flag=0;//闹钟定时到达标志变量

ucharclock_flag=0; //整点报时到达标志变量

ucharp3=0,moshi=0,mov=0;//P3口查询,模式值,调整位

//显示缓冲区,依次为正常、调时、闹钟设定、调整位带点标记

uchartemp[8],temp1[8],temp2[8],temp3[8];

//****************函数声明*************************************

voidinitialize(void);//初始化

voidshow(void);//正常走时显示

voidshow1(void);//时间设定显示

voidshow2(void);//闹钟设定显示

voidshow3(void);//调整位标记

voidshow4(void);//闹钟开关标记

voidkeyscan(void);//键盘扫描

voidadd(void);//调时调闹钟加数程序

voidconfirm(void);//调时确认,闹钟开关

voidalarm_judge(void);//闹钟定时到达判定

voidzhengdian(void); //整点报时判定程序

voidbeep(void);

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

当前位置:首页 > 高中教育 > 初中教育

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

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