简易数字钟设计
- 格式:doc
- 大小:3.76 MB
- 文档页数:17
信息与电气工程学院
课程设计说明书(2014 /2015 学年第二学期)
课程名称:单片机课程设计
题目:简易数字钟设计
专业班级:
学生姓名:
学号:
指导教师:
设计周数:2周
设计成绩:
2015年6 月25 日
1、课程设计目的
(1)综合利用所学单片机知识完成一个单片机应用系统设计并在实验室实现,从而加深对单片机软硬知识的理解,获得初步的应用经验。
(2)学习A T89C51定时/计数器的原理及基本应用。
(3)掌握多为数码管动态显示方法。
(4)掌握Keil uVision2 IDE的使用方法。【包括项目文件的建立,给项目添加程序件,
编译、连接项目,形成目标文件,运行调试观察结果,多文件的处理,仿真环境的设置。】
(5)掌握Keil C51的调试技巧。【包括如何设置和删除断点,如何查看和修改寄存器的内容,如何观察和修改变量,如何观察存储器区域,并行口的使用,定时器/计数器的使用,串行口的使用,外中断的使用。】
(6)掌握PROTEUS软件使用过程。
2、简易数字钟的要求及软硬件的分析
2.1简易数字钟的设计要求
利用电子电路构成一个简易数字钟,该数字钟电路主要由C51单片机、4位共阳极数码管、时计数、分计数器、蜂鸣器、LED灯、NPN型和PNP型三极管、按键、若干电阻和导线组成。其中电路系统的分计数器采用60进制,时计数器采用24进制,。译码器显示电路将时、分计数器的输出状态通过三个两位共阳数码管显示出来。整点报时电路根据计时系统的输出状态产生一个脉冲信号,用蜂鸣器输出。相对机械钟而言,数字钟能达到准确计时,并显示小时、分钟,同时通过不同按键的不同功能对该数字钟进行小时和分钟调整,也可通过按键来接她通蜂鸣器来发出响声。
2.2数字钟的软件分析
2.1.1数字钟软件的系统分析
系统的软件设计也是工具系统功能的设计。单片机软件的设计主要包括执行软件(完成各种实质性功能)的设计和监控软件的设计。单片机的软件设计通常要考虑以下几个方面的问题:(1)根据软件功能要求,将系统软件划分为若干个相对独立的部分,设计出合理的总体结构,使软件开发清晰、简洁和流程合理;
(2)培养良好的编程风格,如考虑结构化程序设计、实行模块化、子程序化。既便于调试、链接,又便于移植和修改;
(3)建立正确的数学模型,通过仿真提高系统的性能,并选取合适的参数;
(4)绘制程序流程图;
(5)合理分配系统资源;
(6)为程序加入注释,提高可读性,实施软件工程;
(7)注意软件的抗干扰设计,提高系统的可靠性。
系统软件设计流程图这次的数字电子钟设计用到很多子程序,它们的流程图如下所示。主程序是先开始,然后启动定时器,定时器启动后在进行按键检测,检测完后,就可以显示时间。
按键处理是先检测秒按键是否按下,秒按键如果按下,秒就加 1,如果没有按下,就检测分按键是否按下,分按键如果按下,分就加1,如果没有按下,就检测时按键是否按下,时按键如果按下,时就加1,如果没有按下,就把时间显示出来。
2.2.2 简易数字钟程序
#include
#define uchar unsigned char
#define uint unsigned int
sbit k1 = P3^5; //按键1
sbit k2 = P3^4; //按键2
sbit k3 = P3^3; //按键3
sbit k4 = P3^2; //按键4
sbit LED = P1^0; //LED显示
sbit beep = P3^6; //蜂鸣器
int m1 = 0, m2 = 0, m3 = 0, m4 = 0; //数码管要显示的数字
int time_n = 0; //1s时间到标志位
int smg_n = 0; //位选控制哪个数码管闪
int xz_flg = 0; //选择键是否被按下
int shi = 0, fen = 0; miao = 0;
int zd_flg = 0; //整点标志
char duan[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xff};//段选编码0~9~null; //----------------------------------------------------- //本文件函数 void System_Init();//初始化函数
void Smg_Scan(); //数码管动态扫描
void Delay_1ms(uint z); //延时函数
void Blink(uint wei); //数码管闪烁函数
void Key_Scan(); //按键扫描函数
void Bao_Shi(); //整点报时
/**********************************************************************************/ void main()
{
System_Init();
while(1)
{
Smg_Scan();
Key_Scan();
Bao_Shi();
}
} /**********************************初始化子函数 void System_Init() //初始化函数
{ TMOD = 0X01; //定时器0 工作方式1
TH0 = 0X4C; //定时50000us
TL0 = 0X00;
EA = 1;
ET0 = 1;
TR0 = 1;
} /************************************延时子函数
void Delay_1ms(uint z) //1ms延时函数
{