单片机课程设计设计(论文)电子钟设计_第1页
单片机课程设计设计(论文)电子钟设计_第2页
单片机课程设计设计(论文)电子钟设计_第3页
单片机课程设计设计(论文)电子钟设计_第4页
单片机课程设计设计(论文)电子钟设计_第5页
已阅读5页,还剩17页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、摘 要单片机应用技术是目前应用最为广泛的一项计算机控制技术。本设计充分利用单片机的内部资源,结合基本的功能电路完成基本的电子钟设计。电子钟时间可以调整,可以用于定时,有基本的温度测量电路可以实时地测量当前的温度并用于显示。时间信息用六位数码管显示,温度信息用两位数码管显示,独立键盘用于时间的调整和定时,蜂鸣器用于定时。关键词:单片机 电子钟 数码管 温度测量目 录摘 要i第1章设计说明11.1设计目的1 1.2 设计任务.11.3原理描述21.2.1原理框图21.2.2系统原理2第2章硬件设计22.1数码管驱动电路32.2键盘接口电路3第3章软件设计43.1软件仿真43.2软件设计53.2.1

2、程序流程图53.2.2程序调试63.2.3源程序设计7结论19参考文献20第1章 设计说明1.1 设计目的 单片机原理及应用是一门技术性、应用性很强的学科,实践教学是它的一个极为重要的环节。不论是硬件扩展、接口应用还是编程方法、程序调试,都离不开实验教学。如果不在切实认真地抓好学生的实践技能的锻炼上下功夫,单凭课堂理论课学习,势必出现理论与实践脱节,学习与应用脱节的局面。任随书本上把单片机技术介绍得多么重要、多么实用、多么好用,同学们仍然会感到那只是空中楼阁,离自己十分遥远,或者会因此而对它失去兴趣,或者会感到它高深莫测无从下手,这些情况都会令课堂教学的效果大打折扣。本次仿真设计的目的就是让同

3、学们在理论学习的基础上,通过完成一个涉及mcs-51单片机多种资源应用并具有综合功能的小系统目标板的设计与编程应用,使学生不但能够将课堂上学到的理论知识与实际应用结合起来,而且能够对电子电路、电子元器件、印制电路板等方面的知识进一步加深认识,同时在软件编程、排错调试、焊接技术、相关仪器设备的使用技能等方面得到较全面的锻炼和提高,为今后能够独进行某些单片机应用系统的开发设计工作打下一定的基础。1.2 设计任务单片机是一门技术性、应用性很强的学科,实践教学是它的一个极为重要的环节。不论是硬件扩展、接口应用还是编程方法、程序调试,都离不开实验教学。如果不在切实认真地抓好学生的实践技能的锻炼上下功夫,

4、单凭课堂理论课学习,势必出现理论与实践脱节,学习与应用脱节的局面。本设计充分利用单片机的内部资源,结合基本的电路模块实现数字电子钟的设计和实时温度的采集。基本要求如下:(1)24小时计时功能用6位led显示器显示时、分、秒。(2) 时间调整功能用功能移位键、功能加键和功能减键实现时间的调整。(3) 闹铃功能用定闹键配合功能移位键、功能加键和功能减键三个按键设定闹铃,并用蜂鸣器实现响铃功能。(4) 环境温度采集与显示功能选用温度传感器ds18b20采集环境温度,并用2位led显示器显示环境温度。在这里我们只考虑采集室内温度,即零度以上的温度。1.3 原理描述1.3.1 原理框图本设计的总图原理框

5、图如图1-1所示:显示模块mcu按键温度采集闹铃图1-1 系统总体框图1.3.2 系统原理c51单片机作为微处理器mcu,是系统设计的核心部分。显示模块为八位的数码管,前六位用于时间的显示,后两位显示当前的温度值。按键部分位5个独立的按键,用于时间的调整和定时。温度采集模块的核心部件是数字温度传感器ds1820。闹铃部分用蜂鸣器来实现。系统的工作原理是单片机的内部定时器模拟时钟信号,作为时间信息传给数码管的前六位,同时单片机一定的时间间隔分别采集温度传感器的温度信息并送至数码管的后两位和扫描键盘,若发现某个键盘被按下,则作出相应的处理。定时时间到时,蜂鸣器发出响声,响1分钟后自动停止。第2章

6、硬件设计硬件电路主要包括数码管驱动电路、温度采集电路、键盘接口电路、稳压电路和蜂鸣器驱动电路。系统电路原理图如图2-1所示:图2-1 系统原理图2.1 数码管驱动电路本设计用的数码管为lg5641bh,是四位一体的共阳极红色数码管。数码管采用动态扫描的方式显示。寄存器74ls244用与数码管的位选信号的控制,移位寄存器74ls164用于段信号的产生,即若要某一位数码管点亮,需要74ls244产生该位的选通信号同时需要74ls164产生一定的段点亮信号。这些信号都是有单片机控制产生的。本设计使用的数码管是共阳极的,要点亮某一位数码管,需要74ls244产生一个高电平的位选通信号,同时74ls16

7、4的八个输出引脚输出对应的数码管编码信号。2.2 键盘接口电路具体接口如图2-2-1所示图2-2-1 按键接口第一个按键用于时间的调整,接在了单片机的外部中断0端,按键信号的产生由外部中断源产生,把时间调整键设为外部中断是因为,调整时间的时候时间不应该仍在走动,而中断正好符合这一特点。其余四个键盘分别接单片机的p2.4p2.7口,用扫描的方式检测按键是否被按下。具体的操作如下:调整时间:settime用于调整时间,hour用于“时”的设定,minute用于“分”的设定,最后ok用于确认设定有效。定时:clocking用于定时,hour用于“时”的设定,minute用于“分”的设定,最后ok用于

8、确认设定有效。第3章 软件设计3.1 软件仿真仿真软件使用的是proteus,使用该软件仿真系统可以将程序代码加载进单片机内,实现较好的仿真效果。加载的文件要以.hex为后缀的文件。加载的方法是在单片机上双击,打开edit component对话框,在program file项选择要加载的文件,加载完单击对话框右侧的ok键即可。加载完文件以后,就可以进行系统仿真了。仿真的方法是分别单击软件界面左下方的 可以开启仿真、单步执行、暂停仿真和停止仿真。系统仿真图如图3-1所示图3-1 系统仿真图3.2 软件设计3.2.1 程序流程图程序流程图图3-2-1所示:初始化开始读温度信息显示温度、时间是否定

9、时蜂鸣器响显示温度、时间是否定时是否否是图3-2 程序流程图3.2.2 闹铃设置子程序的设计闹钟的设置时通过k5键的按下次数来判断。当单片机检测到k5键按下一次时则进入闹钟设置界面,光标并自动跳到秒设置位置,可以对秒进行设置,当k5键一次按下2、3、4次时,则分别进入到闹钟的时、分、开关的设置。3.2.3 程序调试编译软件使用keil软件,调试的基本步骤为:新建一个工程命名并保存、新建一个源程序文件命名并保存、将源文件添加进工程、向源文件中输入源程序、编译调试。若出现什么错误,修改后重新编译,直至最后没有错误为止。用keil软件调试程序的界面如图3-2-2所示:图3-2-2 软件调试界面3.2

10、.4 源程序设计源程序如下/*电子钟设计源程序*/#include/*位定义*/sbit bee=p22;sbit dq=p21;sbit r=p20;sbit k2=p24;/按键sbit k3=p25;sbit ok=p26;sbit ring=p27;bit mark1,mark2;/*数码管编码*/char hour,minute,second,a,clockh,clockmin,aa;char code table=0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90;/*函数原型声明*/void display_hour(char);v

11、oid display_minute(char);void display_second(char);void display_temp(char);void display(char,char,char,char);void chu_shi_hua();void clocking();void delay(int);unsigned char templow_byte,temphi_byte;unsigned char ow_reset(void);unsigned char read_bit(void);void write_bit(char bitval);unsigned char r

12、ead_byte(void);void write_byte(char val);void wendu();/main函数/void main()char choice;chu_shi_hua();while(1)wendu();if(ring=0)delay(100);if(ring=0)choice=1; /定时键按下,则定时 else choice=0;switch(choice)case 0:display(hour,minute,second,a);break;case 1: clocking();/*函数名:display(char hour,char minute,char se

13、cond,char a)*调用:display_hour(hour)、display_minute(minute)、display_second(second) display_temp(a)*作用:显示时间信息和温度信息*/void display(char hour,char minute,char second,char a)display_hour(hour); display_minute(minute);display_second(second);display_temp(a);if(hour=clockh&minute=clockmin) /闹钟bee=0;delay(100)

14、;bee=1;/*函数名:display_hour(char hour)*调用:delay()*作用:显示时*/void display_hour(char hour) /显示时char h1,h2;h1=hour/10;h2=hour%10;r=0;r=1;sbuf=tableh1;while(!ti);p1=0x01;delay(20);p1=0;ti=0;r=0;r=1;sbuf=tableh2;while(!ti);p1=0x02;delay(20);p1=0;ti=0;/*函数名:display_minute(char minute) *调用:delay()*作用:显示分*/void

15、 display_minute(char minute) /显示分char min1,min2;min1=minute/10;min2=minute%10;r=0;r=1;sbuf=tablemin1;while(!ti);p1=0x04;delay(20);p1=0;ti=0;r=0;r=1;sbuf=tablemin2;while(!ti);p1=0x08;delay(20);p1=0;ti=0;/*函数名:display_second(char second)*调用:delay()*作用:显示秒*/void display_second(char second) /显示秒char sec

16、1,sec2;sec1=second/10;sec2=second%10;r=0;r=1;sbuf=tablesec1;while(!ti);p1=0x10;delay(20);p1=0;ti=0;r=0;r=1;sbuf=tablesec2;while(!ti);p1=0x20;delay(20);p1=0;ti=0;/*函数名:display_temp(char a)*调用:delay()*作用:显示温度*/void display_temp(char a) /显示温度char shi,ge;shi=a/10;ge=a%10;r=0;r=1;sbuf=tableshi; /向发送缓冲器sb

17、uf中写数据while(!ti); /直到发送完8位数据p1=0x40;delay(20);p1=0;ti=0;r=0;r=1;sbuf=tablege;while(!ti);p1=0x80;delay(20);p1=0;ti=0;/*函数名:chu_shi_hua() *调用:*作用:初始化一些参数*/void chu_shi_hua() /初始化函数sm0=0; /串行口设置为工作方式0sm1=0;aa=0;mark1=1;mark2=1;hour=12;minute=0;second=30;clockh=0;clockmin=0;k2=1; /键盘读之前先置1k3=1;ok=1;tmod

18、=0x01;th0=(65535-50000)/256;tl0=(65535-50000)%256;ea=1;et0=1;tr0=1;ex0=1;it0=0; /外部中断0为电平触发方式px0=1; /外部中断为高优先级中断/*函数名:settime()*调用:*作用:中断函数,用于调整时间*/void settime() interrupt 0 /调整时间函数while(ok) display_hour(hour); display_minute(minute);if(k2=0)delay(100);if(k2=0)while(!k2);delay(100);while(!k2);hour+

19、;if(hour=24)hour=0;if(k3=0)delay(100);if(k3=0)while(!k3);delay(100);while(!k3);minute+;if(minute=60)minute=0;/*函数名:timer0()*调用:*作用:中断函数,用于模拟时间信息*/void timer0() interrupt 1 /定时器0中断函数th0=(65535-50000)/256;tl0=(65535-50000)%256;aa+;if(aa=20)aa=0;second+;if(second=60)second=0;mark1=0;if(mark1=0)mark1=1;

20、minute+;if(minute=60)minute=0;mark2=0;if(mark2=0)mark2=1;hour+;if(hour=24)hour=0;/*函数名:clocking()*调用:display_hour(clockh)、display_minute(clockmin)*作用:用于定时*/void clocking() /定时函数while(ok) display_hour(clockh); display_minute(clockmin);if(k2=0)delay(100);if(k2=0)while(!k2);delay(100);while(!k2);clockh

21、+;if(clockh=24)clockh=0;if(k3=0)delay(100);if(k3=0)while(!k3);delay(100);while(!k3);clockmin+;if(clockmin=60)clockmin=0;/温度采集函数/延时函数void delay(int us)int s;for(s=0;sus;s+);/复位函数unsigned char ow_reset(void)unsigned char presence;dq=0;delay(29);dq=1;delay(3);presence=dq;delay(25);return(presence);/读位函数unsigned char read_bit(void)unsigned char i;dq=0;dq=1;for(i=0;i3;i+);return(dq);/写位函数void write_bit(char bitval)dq=0;if(bitval=1)dq=1;delay(5);dq=1;/读字节unsigned char read_byte(void)unsigned char i;unsigned char value=0;for(i=0;i8;i+)if(read_bit()value|=0x

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论