设为首页 加入收藏

TOP

可编程作息时间控制器设计(一)
2018-12-15 14:08:40 】 浏览:294
Tags:可编程 作息时间 控制器 设计

1.基本要求

要求用DS1302设计单片机作息时间控制器,实现以下功能:

1.基本功能

①实时显示当前时间(数码管显示小时.分钟,小数点闪烁作为秒提示);

②能修改当前时钟

根据作息时间按时打铃;

可以修改作息时间。

2. 扩展功能

  自行扩展功能,如秒表,音乐铃声,通讯功能等

2 方案设计

2.1 系统分析

根据系统功能要求,可将系统组成结构分成四大部分:单片机控制中心、键盘接口、时钟显示和声音报时,如下图为系统的组成结构图。其中,单片机控制中心是核心。MCU根据按键输入,可切换不同的显示模式或设置不同的参数。时钟显示完成北京时间或秒表时钟的信息。声音报时可完成闹铃的提示。

 
   

 

 

2.2 器件选择

2.2.1微处理器

市场上微处理器种类很多。这里,选取微处理器从多方面考:成本低、性能高、能够满足功能要求等等。

这里,选取STC89C51芯片。因为其功能与普通51芯片相同,其价格非常低廉、程序空间大、资源较丰富、在线下载非常方便。同时,使用该芯片,编程上亦可采用所熟悉的KEIL软件,使课程设计非常简单。

2.2.2显示器

常见的显示器件LED数码管和LCD液晶器件。

LED数码管能够显示数字和部分字符,价格便宜,硬件电路、软件编程均非常简单,而且使用动态扫描技术可节省大量硬件成本。

LCD液晶显示器件,显示字迹清晰、能够显示数字、字符和汉字,但价格比LED非常高,编程复杂,软硬件调试都比较花时间。

系统显示主要还是数字,根据这两种显示器件的特性,选取LED数码管器件。由于系统要求显示小时和分钟,采用四位数码管显示即可。

2.2.3按键

按键是用来设置北京时间或闹钟时间或启动秒表等功能的。这里采用普通按键即可,选用原则:以最少的按键,实现尽可能多的功能。所以这里,设置三个按键:模式键、UP键、DOWN键。

2.2.4闹铃

 

选用最常见,亦最常用的声音提示方式——蜂鸣器。

3、软件设计

3.1 操作功能设计

根据系统功能描述,可以将功能大致分成三类:北京时间功能、闹铃功能、秒表功能。

系统设有四个数码管,三个按键。采用菜单式人机对话,便于操作。所以可分成多种菜单,功能键切换菜单,UPDOWN键设置时间。

菜单设计如下:

菜单1:北京显示:显示格式为:小时.分钟(如:09.50,为950分)

菜单2:修改北京时间的小时:显示格式为:00.小时(如00.14,为北京时间的小时设为14点)                                        

菜单3:修改北京时间的分钟:显示格式为:00.分钟(如00.34,为北京时间的分钟设为34分)

菜单4:修改闹铃时间的小时:显示格式为:00.小时(如00.14,为闹铃时间的小时设为14点)

菜单5:修改闹铃时间的分钟:显示格式为:00.分钟(如00.34,为闹铃时间分钟设为34分)

 

菜单6:秒表功能:显示格式为:秒百分秒(如1290为当前秒表计时到12900毫秒),在此种菜单下,UP键设为用来启动/停止秒表、DOWN键设为用来暂停秒表。

 

  程序参考清单

#include<reg52.h>

#define uchar unsigned char;

#define uint unsigned int;

//四盏灯

sbit P13 = P1^3;

sbit P35 = P3^5;

sbit P36 = P3^6;

sbit P37 = P3^7;

//beep

sbit beep = P1^1;

 

uchar position;   

uchar tt;  

static uchar second; 

static uchar minute;

static uchar hour;  

static uchar set_second; 

static uchar set_minute;

static uchar set_hour;

static uchar t_mode;

//-----------------秒表-------------------------------------

 

void XS(int xs,int xm); 

void set_miaobiao();

int n=0,m=0,s=0;

 static char d1,d2,d3,d4;

//-------------------------------------------------------

 

uchar code table[]=

{0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};//0--9

uchar beepTimes[23][2]=

{{6,50},{7,0},{7,25},{8,20},{8,30},{9,15},{9,25},{10,10},{10,30},{11,15},{11,25},{12,10},{13,20},{13,30},{14,15},{14,25},{15,10},{16,30},{17,0},{17,50},{18,0},{21,30},{23,0}};

 

sbit smg_q = P2^4; 

sbit smg_b = P2^5;

sbit smg_s = P2^6;

sbit smg_g = P2^7;

 

sbit mode=P2^0; //按键定义

sbit up=P2^1;

sbit down=P2^2;

sbit ent=P3^2;

 

 //函数声明

void keyscan();

void setMinutes() ;

void setHours();

void display(unsigned char hour,unsigned char minute);

void delay(unsigned int timer); 

void init();

void dongtaiTime();

void N_clock();

void MyClock();

void set_clock_m();

void set_clock_h();

void nao();

void setBeepTime();

void setClock();

 

 

/***********************************************************

主函数

***********************************************************/

void main()

{

init();

while(1)

{  

dongtaiTime();

if(mode==0)  

首页 上一页 1 2 3 4 5 下一页 尾页 1/5/5
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇C#操作xml文件:使用XmlDocument .. 下一篇STM32 SIM800C SIM868 连接OneNet..

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目