(管理流程图)多功能时钟流程图
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
这样我们可以把程序对应地分成以下三个任务模块。
这个流程就可以作为主流程(main()函数),当然,A、B、C三框内部的流程仍有待于细化。
三.详细设计
A框内部要处理的事务见第一部分:功能确认。在此,为了完成时钟调整功能,我们可以定义Key_2为小时调整键,Key_3为分钟调整键,每次按下键,小时数或分钟数加1。当然,当用户没有按键的时候,我们还得经常保持显示屏上的时间刷新。
{
case KEY_1:
TR1=0;
status=CLOCK;//回到时钟显示状态
break;
case KEY_2:
TR1=!TR1;//定时器1暂停、继续
break;
case KEY_3:
TR1=0;//秒表复位
miaobiao_sec=0;
ms_10=0;
break;
case NO_KEY://无按键操作//
key_process_set_dingshi();//处理设置定时状态下的按键和显示//
break;
case MIAOBIAO_RUN:
key_process_miaobiao_run();//处理秒表状态下的按键和显示//
break;
}
if(
(hour==dingshi_time.hour)//定时响铃//
}STATE;
STATE status;
typedef struct//定时时间的数据结构//
{
uchar hour;
uchar min;
}DINGSHI_TIME;//C语言中的结构体知识
DINGSHI_TIME dingshi_time;
#define NO_KEY-1//定义一下方便使用
#define KEY_11
show_miaobiao();
break;
}
}
其他函数说明:
/***********检测按键动作函数*************/
intget_key()
{
uchar d;
if(!k1)
{
for(d=0;d<50;d++);
if(!k1)
{
while(!k1);
return(KEY_1);
}
}
if(!k2)
sbit k2=P3^3;
sbit k3=P3^4;
sbit sound=P2^3;//蜂鸣器定义
sfr ZIXING=0x80;//p0口输出字形
sfr ZIWEI=0xa0;//P2口输出字位
typedef enum//枚举类型:3种状态//
{
CLOCK,
SET_RING1,
MIAOBIAO_RUN,
{
for(d=0;d<50;d++);
if(!k2)
{
while(!k2);
return(KEY_2);
}
}
if(!k3)
{
for(d=0;d<50;d++);
if(!k3)
{
while(!k3);
return(KEY_3);
}
}
else return NO_KEY;
}
2012年1月4日
A框:时钟状态下的处理流程:
B框要处理的功能是设置定时闹铃的事务,这里需要预设闹铃时间,同样可以定义Key_2为小时预设键,Key_3为分钟预设键,而Key_1则负责状态切换,当我们预设好时间之后,按下Key_1,就算完成了闹铃预设,让系统离开当前状态,转到秒表状态上去。
B框:设置闹铃状态下的处理流程:
多功能时钟流程图
一.功能确认
时钟功能:
1.时钟显示小时和分钟
2.用户可以通过按键调整时钟的时间
3.无论当前时钟是否在前台显示,时钟始终是运行的。
定时闹铃功能:
1.用户可以通过按键设置闹铃时间(小时和分钟),设置完成后可以按确定键退出设置。
2.当系统时钟的时间等于预设的闹铃时间时,系统蜂鸣器响5秒钟。
&&(min==dingshi_time.min)
&&(sec<5))
)
sound=0;
elsesound=1;
}
}
秒表状态处理函数样例:
/********秒表运行状态按键处理及显示*********/
void key_process_miaobiao_run()
{
switch(get_key())
3.用户可以设置两个闹铃。
秒表功能:
1.用户可以通过按键进入秒表功能,也可以退出秒表状态。
2.秒表高2位显示秒,低2位显示百分之一秒。
3.可以通过按键暂停、(继续)运行秒表,可以通过按键对秒表清零。
二.状态分析及模块分割
根据以上的分析,系统共有三个大的功能:时钟、设置定时、秒表,各个功能之间可以通过按键来切换,且各个功能内部仍需要使用按键来处理,故可以考虑将系统定义为三个状态(status):时钟状态、设置定时状态、秒表状态。显然,同一个按键在不同状态下的功能是不一样的。这样,在某种状态下,按下某个按键,代表唯一确定的含义。这种处理方法可以称为“状态—按键”法。
#define KEY_22
#define KEY_33
主程序:
Main()
{
//一些初始化的工作,如状态赋初值,寄存器设置等
while(1) //程序循环
{
switch(status)
{
case CLOCK:
key_process_clock();Fra Baidu bibliotek//处理时钟状态下的按键和显示//
break;
case SET_RING1:
uchar code ziwei[]={0x10,0x20,0x40,0x80};
uchar *h,*m;
uchar hour=12,min=0,sec=0,h_ding,m_ding,count=0,ms_50,ms_10,miaobiao_sec;
sbit dp=P0^7;
sbit k1=P3^2;//3个按键定义
C框要处理的是秒表的功能,这里可以定义Key_2为启动/暂停键,Key_3为复位清零键,而Key_1依然负责状态切换,用户如果按下Key_1,就让系统离开秒表状态,转到时钟状态上去。
C框:设置秒表状态下的处理流程:
四.代码框架
全局定义:
uchar code zixing[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};
这个流程就可以作为主流程(main()函数),当然,A、B、C三框内部的流程仍有待于细化。
三.详细设计
A框内部要处理的事务见第一部分:功能确认。在此,为了完成时钟调整功能,我们可以定义Key_2为小时调整键,Key_3为分钟调整键,每次按下键,小时数或分钟数加1。当然,当用户没有按键的时候,我们还得经常保持显示屏上的时间刷新。
{
case KEY_1:
TR1=0;
status=CLOCK;//回到时钟显示状态
break;
case KEY_2:
TR1=!TR1;//定时器1暂停、继续
break;
case KEY_3:
TR1=0;//秒表复位
miaobiao_sec=0;
ms_10=0;
break;
case NO_KEY://无按键操作//
key_process_set_dingshi();//处理设置定时状态下的按键和显示//
break;
case MIAOBIAO_RUN:
key_process_miaobiao_run();//处理秒表状态下的按键和显示//
break;
}
if(
(hour==dingshi_time.hour)//定时响铃//
}STATE;
STATE status;
typedef struct//定时时间的数据结构//
{
uchar hour;
uchar min;
}DINGSHI_TIME;//C语言中的结构体知识
DINGSHI_TIME dingshi_time;
#define NO_KEY-1//定义一下方便使用
#define KEY_11
show_miaobiao();
break;
}
}
其他函数说明:
/***********检测按键动作函数*************/
intget_key()
{
uchar d;
if(!k1)
{
for(d=0;d<50;d++);
if(!k1)
{
while(!k1);
return(KEY_1);
}
}
if(!k2)
sbit k2=P3^3;
sbit k3=P3^4;
sbit sound=P2^3;//蜂鸣器定义
sfr ZIXING=0x80;//p0口输出字形
sfr ZIWEI=0xa0;//P2口输出字位
typedef enum//枚举类型:3种状态//
{
CLOCK,
SET_RING1,
MIAOBIAO_RUN,
{
for(d=0;d<50;d++);
if(!k2)
{
while(!k2);
return(KEY_2);
}
}
if(!k3)
{
for(d=0;d<50;d++);
if(!k3)
{
while(!k3);
return(KEY_3);
}
}
else return NO_KEY;
}
2012年1月4日
A框:时钟状态下的处理流程:
B框要处理的功能是设置定时闹铃的事务,这里需要预设闹铃时间,同样可以定义Key_2为小时预设键,Key_3为分钟预设键,而Key_1则负责状态切换,当我们预设好时间之后,按下Key_1,就算完成了闹铃预设,让系统离开当前状态,转到秒表状态上去。
B框:设置闹铃状态下的处理流程:
多功能时钟流程图
一.功能确认
时钟功能:
1.时钟显示小时和分钟
2.用户可以通过按键调整时钟的时间
3.无论当前时钟是否在前台显示,时钟始终是运行的。
定时闹铃功能:
1.用户可以通过按键设置闹铃时间(小时和分钟),设置完成后可以按确定键退出设置。
2.当系统时钟的时间等于预设的闹铃时间时,系统蜂鸣器响5秒钟。
&&(min==dingshi_time.min)
&&(sec<5))
)
sound=0;
elsesound=1;
}
}
秒表状态处理函数样例:
/********秒表运行状态按键处理及显示*********/
void key_process_miaobiao_run()
{
switch(get_key())
3.用户可以设置两个闹铃。
秒表功能:
1.用户可以通过按键进入秒表功能,也可以退出秒表状态。
2.秒表高2位显示秒,低2位显示百分之一秒。
3.可以通过按键暂停、(继续)运行秒表,可以通过按键对秒表清零。
二.状态分析及模块分割
根据以上的分析,系统共有三个大的功能:时钟、设置定时、秒表,各个功能之间可以通过按键来切换,且各个功能内部仍需要使用按键来处理,故可以考虑将系统定义为三个状态(status):时钟状态、设置定时状态、秒表状态。显然,同一个按键在不同状态下的功能是不一样的。这样,在某种状态下,按下某个按键,代表唯一确定的含义。这种处理方法可以称为“状态—按键”法。
#define KEY_22
#define KEY_33
主程序:
Main()
{
//一些初始化的工作,如状态赋初值,寄存器设置等
while(1) //程序循环
{
switch(status)
{
case CLOCK:
key_process_clock();Fra Baidu bibliotek//处理时钟状态下的按键和显示//
break;
case SET_RING1:
uchar code ziwei[]={0x10,0x20,0x40,0x80};
uchar *h,*m;
uchar hour=12,min=0,sec=0,h_ding,m_ding,count=0,ms_50,ms_10,miaobiao_sec;
sbit dp=P0^7;
sbit k1=P3^2;//3个按键定义
C框要处理的是秒表的功能,这里可以定义Key_2为启动/暂停键,Key_3为复位清零键,而Key_1依然负责状态切换,用户如果按下Key_1,就让系统离开秒表状态,转到时钟状态上去。
C框:设置秒表状态下的处理流程:
四.代码框架
全局定义:
uchar code zixing[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};