××大学××学院××系××课程设计报告
按键调整时间 开始 按键设置闹钟 开始 K2=0 NO K2=0 NO YES 从DS1302中获取的小时值加1 YES 当前小时值加1 并保存 K3=0 NO K3=0 NO YES 从DS1302中获取的分钟值加1 YES 当前分钟值加1 并保存 NO 返回 K1=0 YES 时钟启动
图11 键盘调时流程图
4.设计总结
在这学期的课程设计中,在收获知识的同时,还收获了阅历,收获了成熟,在此过程中,我们通过查找大量资料,请教老师,以及不懈的努力,不仅培养了独立思考、动手操作的能力,在各种其它能力上也都有了提高。更重要的是,在实验课上,我们学会了很多学习的方法。而这是日后最实用的,受益匪浅。要面对社会的挑战,只有不断的
7
××大学××学院××系××课程设计报告
学习、实践。在这次设计过程中,体现出自己单独设计模具的能力以及综合运用知识的能力,体会了学以致用、突出自己劳动成果的喜悦心情,从中发现自己平时学习的不足和薄弱环节,从而加以弥补。在此感谢××,××, ××老师,他们一丝不苟的作风一直是我工作、学习中的榜样;老师循循善诱的教导和不拘一格的思路给予我无尽的启迪。同时,对给过我帮助的所有同学和各位指导老师表示忠心的感谢!
5.参考文献
[1]楼然苗,李光飞.51系列单片机设计实例[M].北京:北京航空航天大学出版社,2003.88-100 [2]李群芳,黄建.单片机微型计算机与接口技术[M].北京:电子工业出版社,2001.70-82 [3]李朝青.单片机原理接口技术(第三版)[M].北京:北京航空航天大学出版社,2005,1-320 [4]赵嘉蔚.单片机原理与接口技术[M].北京:清华大学出版社,2010.2-26 [5]赵小安.MCS-51单片机原理及应用[M].天津:天津大学出版社,2001.3-35
[6]欧伟明,周春临,翟遂春.电子信息系统设计[M].西安:西安电子科技大学出版,2005,54
8
××大学××学院××系××课程设计报告
附录:程序代码
#include
#define uchar unsigned char #define uint unsigned int
sbit K1 = P3^0; sbit K2 = P3^1; sbit K3 = P3^2; sbit K4 = P3^3;
sbit P2_5 = P2^5; sbit P2_6 = P2^6; sbit P2_7 = P2^7;
sbit RST = P1^7; sbit IO = P2^3; sbit SCLK = P1^3; bit K1_FLAG = 0; 未按下时,该位为0 bit flag;
uchar code table[]={ 0x3f,0x06,0x5b,0x4f,0x66, 0x6d,0x7d,0x07,0x7f,0x6f}; uchar disp_buf[8]; uchar time_buf[7];
期、年
//定义K1键 //定义K2键 //定义K3键 //定义K4键
//定义按键标志位,当按下K1键时,该位置1,K1键
//定义显示缓冲区
//DS1302时间缓冲区,存放秒、分、时、日、月、星
9
××大学××学院××系××课程设计报告
uchar time_hour[10]; uchar time_min[10]; uchar temp[2]; uchar t0;
//用来存放设置时的小时、分钟的中间值
//定时器标志变量
/***********************函数声明********************************/ void dula(void); void wela(void);
//段选 //位选
//打开蜂鸣器
//关闭蜂鸣器
void ON_Buzzer(void); void OFF_Buzzer(void); void ON_Relay(void); void OFF_Relay(void); void Delay(uchar i);
//打开继电器 //关闭继电器
//延时
void Write_byte(uchar inbyte); //写一个字节 uchar Read_byte(void);
//读一个字节
//向DS1302写入地址和数据
void Write_ds1302(uchar address, uchar indata);
uchar Read_ds1302(uchar addr); //根据给定的地址读数据 void init_ds1302(void); void init_timer0(void); void Key_Process(void); void Key_Clock(void); void get_time(void);
//DS1302初始化 //定时器初始化
//按键检测并作出响应
//按键设置闹钟时间
//获取时间(进制转换)
//时间显示 //日历显示
void Time_Display(void);
void Date_Display(void);
/***************************主函数************************************/ void main() {
uint i = 0; uint j; P0 = 0;
P2 = 0; init_ds1302();
10
//设置闹钟数
××大学××学院××系××课程设计报告
init_timer0(); while(1) { get_time(); //读取当前时间 if(K1 == 0)
//若K1键按下
{ Delay(5); //延时10ms去抖
if(K1 == 0) { while(!K1); //等待K1键释放
K1_FLAG = 1;
//K1键标志位置1,以便进行时钟调整 }
}
if(K1_FLAG == 1) Key_Process(); //若K1_FLAG为1,则进行走时调整 Time_Display(); if(K4 == 0) { Delay(5); if(K4 == 0) { while( !K4); Key_Clock();
time_hour[i] = temp[0]; time_min[i] = temp[1]; i++; if(K4 == 0) { Delay(5); if(K4 == 0)
{
11