write_1302(0x8e,0x00);//允许写,禁止写保护
write_1302(0x8a,temp);//向DS1302内写周寄存器8aH写入调整后的周数据BCD码 write_1302(0x8e,0x80);//打开写保护
write_1602com(yh+0x0e);//因为设置液晶的模式是写入数据后,指针自动加一,所以需
要光标回位
break;
case 5:ri--;
if(ri==0)
ri=31;
write_nyr(9,ri);
write_1302(0x8e,0x00);//允许写,禁止写保护
write_1302(0x86,temp);//向DS1302内写日期寄存器86H写入调整后的日期数据BCD码 write_1302(0x8e,0x80);//打开写保护
write_1602com(yh+10);//因为设置液晶的模式是写入数据后,指针自动加一,所以需要光
标回位
break;
case 6:yue--;
if(yue==0)
yue=12;
write_nyr(6,yue);
write_1302(0x8e,0x00);//允许写,禁止写保护
write_1302(0x88,temp);//向DS1302内写月份寄存器88H写入调整后的月份数据BCD码 write_1302(0x8e,0x80);//打开写保护
write_1602com(yh+7);//因为设置液晶的模式是写入数据后,指针自动加一,所以需要光标
回位
break;
20
case 7:nian--; if(nian==-1)
nian=99; write_nyr(3,nian);
temp=(nian)/10*16+(nian);//十进制转换成DS1302要求的DCB码
write_1302(0x8e,0x00);//允许写,禁止写保护
write_1302(0x8c,temp);//向DS1302内写年份寄存器8cH写入调整后的年份数据BCD码 write_1302(0x8e,0x80);//打开写保护
write_1602com(yh+4);//因为设置液晶的模式是写入数据后,指针自动加一,所以需要光标
回位 }
//-------------------------------
void init() //定时器、计数器设置函数 {
21
break; }
}
}
}
TMOD=0x11; //指定定时/计数器的工作方式为3 TH0=0; //定时器T0的高四位=0 TL0=0; //定时器T0的低四位=0 EA=1; //系统允许有开放的中断 ET0=1; //允许T0中断
TR0=1; //开启中断,启动定时器
}
//*******************主函数************************** void main() { lcd_init(); //调用液晶屏初始化子函数 ds1302_init(); //调用DS1302时钟的初始化子函数 init(); //调用定时计数器的设置子函数
delay(80); buzzer=1; while(1) //无限循环下面的语句: {
keyscan(); //调用键盘扫描子函数 }
}
void timer0() interrupt 1 //取得并显示日历和时间 {
//读取秒时分周日月年七个数据(DS1302的读寄存器与写寄存器不一样):BCD_Decimal(read_1302(0x81)); fen = BCD_Decimal(read_1302(0x83)); shi = BCD_Decimal(read_1302(0x85)); ri = BCD_Decimal(read_1302(0x87)); yue = BCD_Decimal(read_1302(0x89)); nian=BCD_Decimal(read_1302(0x8d));
week=BCD_Decimal(read_1302(0x8b));
//显示温度、秒、时、分数据:
write_sfm(8,miao);//秒,从第二行第8个字后开始显示(调用时分秒显示子函数)
write_sfm(5,fen);//分,从第二行第5个字符后开始显示
22
miao =
write_sfm(2,shi);//小时,从第二行第2个字符后开始显示 //显示日、月、年数据:
write_nyr(9,ri);//日期,从第二行第9个字符后开始显示
write_nyr(6,yue);//月份,从第二行第6个字符后开始显示 }
write_nyr(3,nian);//年,从第二行第3个字符后开始显示 write_week(week);
【参考文献】:
杨欣荣等.《智能仪器原理、设计与发展》.中南大学出版社,2003 孙传友等.《感测技术基础》. 电子工业出版社,2001
王福瑞等.《单片微机测控系统设计大全》.北京航空航天大学出版社,1999 李朝青编.《单片机原理及接口技术》(简明修订版).北京航空航天大学出版社,1998 冯克.《MCS-51单片机实用子程序及其应用实例》.黑龙江科学技术出版社,1990
其他参考资料:《单片机与嵌入式系统应用》、《实用测试技术》、《自动化仪表》、《传感器世界》、《测控技术》、《电子技术应用》等。
23
实习设计心得体会
经过两周的实验课程设计,让我收获颇丰。
首先,让我明白的是,不论做任何事情,要首先从基础开始做起。一个人要是没有基础,犹如没有根基的房屋,是无法建造出完美的房子。于是,我从基础开始。
基于对单片机的了解,我们在实验的第一天边开始了解一个新的实验系统,keil51实验系统。在滕老师的帮助下,我们初步了解了系统的使用,对系统有了初步的了解。在现在我们考试了一些初步的实验仪器的使用。先从基础的实验开始,我依次将YB-51-A实验板配套学习演示程序中的程序依次看看了解下运行程序程序的写作跟完成步骤。最先完成的是点亮一个发光灯。这个程序很简单,程序代码就几句话,但是却说明了整个实验的步骤。再在老师的帮助下,学习了如何将实验程序烧录到单片中,通过生成HEX十六进制文件,烧录到单片机中从而是程序代码得到执行。
第二天,明确实验目的。完成一项任务,必须了解自习需要做什么,自己会什么,还有什么不会,将工作细分,从而将工程一步步完成。
在第二天,去认定目标,做“实时日历时钟显示系统的制作”这个实验。这个实验需要用到51单片机系统,设置,获取,实时的日历时钟信息并通过LED显示出来。并能够进行长时间的记录,并且存储的时间信息在掉电情况下能长期保存。初始的时间信息要求用户用键盘输入。了解了目标,下面的行动将会更会有目标性。
第三天,查阅详细资料,系统由主控制器AT89S51、时钟芯片DS1302、串口显示电路及键扫描电路组成。于是,我需要AT89S51以及 DS1302,、串口显示电路及键扫描电路组成,等一系列专业的详细的资料。在百度的帮助下找了很多资料,但是资料是零碎的,不完整的,且学习的效果很差,由于型号不同,或者系统与我们的实验不相同直接导致今天的实验没有很大的进步。
第四天。在第三天的失败情况下,我决定再从实验要求开始自己找起,将YB-51-A实验板配套学习演示程序中的程序一个个修改并生成HEX文件并烧录演示。在一个个实验的修改演示过程中虽然看似与实验无关,但是,我却进一步了解了系统的原理。蜂鸣器发声,流水灯,跑马灯,驱动继电器,液晶屏显示程序,中断演示程序等等的实验,让我对单片机的运行了解的更好了。中午实验一直做到了下午一点才去结束。
第五天。虽然了解了实验,但是要单独完成一个实验,确实是一个很难的项目。和朋友一起寻找程序,找到一大堆但是却仍然无果。返回,实验目录,发现了里面还有一个实验板,跟这个实验的时钟芯片的DS1302实验程序。详细观察实验程序,并且烧录入单片机,得到了这个实验程序。显示时间,日
24
历程序。但是这个程序的初始时间不对。而我们的实验目标要求实验能够从键盘中或单片机上修改实验初始化时间。这个程序的难点瞬间全部集中在这里。将程序中的每一个程序都细细学习一遍,了解每一个子程序的作用,区分设置程序跟子程序,最终找到了程序的设计方法,以及设计程序的设置变量的位置。再次修改后,得到程序最终结果,交给藤老师查看。藤老师又给我了新的目标,让我利用KEY1 KEY2 KEY3 KEY4 设置实验初始化时间。
由于第六天,星期六,星期天,而我作为一个考研人,辅导班都开始上课了,冲刺辅导班。不得不向老师请假。同时在这两天时间我也在思考这个实验设计方法。最终,认为实验中只需要将程序的时间变量设为可以通过KEY键改变函数值的参数变量,与按键函数综合起来整理一下。但是这两天辅导班的上课时间安排紧,最终没有将程序再次修改。
第八天,周一,早上八点到实验室再次修改实验,再次学习实验按键的设计方法。
在下来的几天,我经过实验,查阅资料发现语言还是有障碍,C语言的功底不好,导致语言上书写不下来程序。是基本功的原因。我在实践中再次发现基础的重要性。
通过十几天的实验,使我不仅仅最单片机的系统有了整体的了解,更让我了解了实验的一般步骤,实验需要了解你需要做什么,会什么,还需要做什么才能达到你的目标。同时也很感谢学校和老师给我们安排了这次单片机课程设计,让我真正感受到的是合作的重要性,以及在实验过程中细心检查每一个步骤,不能有一丝的马虎大意。而且,理论知识确实很重要,一些问题都是由于基础知识掌握不好才出现的。
25