单片机电子表课程设计.docx
《单片机电子表课程设计.docx》由会员分享,可在线阅读,更多相关《单片机电子表课程设计.docx(23页珍藏版)》请在冰豆网上搜索。
单片机电子表课程设计
烟台南山学院
《单片机原理与接口技术》课程设计
题目:
数字电子表设计
学院(系):
自动化工程学院
年级专业:
电气技术4班
学号:
************
*******
*******
课程设计任务书
学生姓名:
毕天华专业班级:
电气技术4班
指导教师:
田敬成工作单位:
自动化工程学院
题目:
基于51单片机的数字电子表的设计
初始条件:
1.运用所学的单片机原理与接口技术知识和数字电路知识;
2.51单片机应用开发系统一套;
3.PC机及相关应用软件;
要求完成的主要任务:
1.完成数字电子表的设计和调试。
2.要求采用四位八段数码管显示时间和日期,并且可以用按键修改时间和日期。
3.撰写课程设计说明书。
4.课程设计说明书要求:
引言、设计要求、系统结构、原理设计、各个模块的设计与实现、软件设计、调试过程、收获、体会及总结、参考文献、电路图和源程序。
说明书使用A4打印纸计算机打印或手写,用Protel等绘图软件绘制电子线路图纸。
时间安排:
第1天下达课程设计任务书和日程安排,根据任务书查找资料;
第2~3天完成方案论证,单片机系统的设计;
第4~6天参考有关文献,完成程序的编写;
第7~10天调试硬件系统和软件程序;
第11~12天结果分析整理、撰写课程设计报告,验收和答辩。
指导教师签名:
年月日
系主任(或责任教师)签名:
年月日
基于单片机数字电子表的设计
摘要
随着电子技术的发展,计算机在现代科学技术的发展中起着越来越重要的
作用。
多媒体技术、网络技术、智能信息处理技术、自适用控制技术、数据挖掘与处理技术等都离不开计算机。
本课程设计是基单片机原理与接口技术的简单应用。
运用所学的单片机原理和接口技术知识完成数字电子表的设计。
电子表已成为人们日常生活中必不可少的必需品,广泛用于个人家庭以及办公室等公共场所,给人们的生活、学习、工作、娱乐带来极大的方便。
由于数字集成电路技术的发展和采用了先进的石英技术,使电子表具有走时准确、性能稳定、携带方便等优点,它还用于计时、自动报时及自动控制等各个领域。
尽管目前市场上已有现成的电子表集成电路芯片出售,价格便宜、使用也方便,但鉴于电子表电路的基本组成包含了数字电路的主要组成部分,因此进行电子表的设计是必要的,用C语言设计电子表显示程序,要求根据输入程序显示电子表画面。
研究电子表及扩大其应用,有着非常现实的意义。
关键词
LED,定时/计器数,C语言,调试,运行。
前言…………………………………………………………………………………………5
第一章数字电子表的设计要求与设计方案…………………………6
1.1课程设计的目的………………………………………………………………6
1.2要求完成的主要任务…………………………………………………………6
1.3设计方案…………………………………………………………………………6
第二章数字电子表的硬件设计……………………………………………8
2.1电子表的硬件框图……………………………………………………………8
2.2输入、输出显示电路设计……………………………………………………9
2.3系统总电路图…………………………………………………………………9
第三章数字电子表的软件设计……………………………………………10
3.1主程序流程图…………………………………………………………………10
3.2中断程序设计…………………………………………………………………10
3.3显示处理程序设计……………………………………………………………12
3.4电子表主程序设计……………………………………………………………13
第四章数字电子表的安装与调试………………………………………17
4.1硬件调试………………………………………………………………………17
4.2软件调试………………………………………………………………………17
4.3调试过程………………………………………………………………………17
第五章设计体会与小结………………………………………………………18
5.1总结设计体会与心得………………………………………………………18
附录…………………………………………………………………………………………19
参考文献…………………………………………………………………………………21
前言
单片机课程设计是电子技术学习中非常重要的一个环节,是将理论知识和实践能力相统一的一个环节,是真正锻炼学生能力的一个环节。
在生活中,数字电子表的优点受到人们的欢迎,在很多场合得到了广泛的应用。
《单片原理及应用》是一门技术性、应用性很强的学科,实践教学是它的一个极为重要的环节。
不论是硬件扩展、接口应用还是编程方法、程序调试,都离不开实验教学。
如果不在切实认真地抓好学生的实践技能的锻炼上下功夫,单凭课堂理论课学习,势必出现理论与实践脱节的局面。
任随书本上把单片机技术介绍得多么重要、多么实用多么好用,同学们仍然会感到那只是空中楼阁,离自己十分遥远,或者会感到对它失去兴趣,或者会感到它高深莫测无从下手,这些情况都会令课堂教学的效果大打折扣。
本次仿真设计的目的就是让同学们在理论学习的基础上,通过完成一个涉及MCS—52单片机都种资源应用并具有综合功能的数字电子表的设计与编程应用,使学生不但能够将课堂上学到的理论知识与实际应用结合起来,而且能够对电子电路、电子元器件、印制电路板等方面的知识进一步加深认识,同时在软件编程、排版调试、相关仪器设备的使用技能等方面得到较全面的锻炼和提高,为今后能够独立进行某些单片机应用系统的开发设计工作打下一定的基础。
该电子时钟不但具有定时作用还有温度采集作用。
定时部分可以显示时、分、秒,月,日,而且用按键还可以实现时间和日期的调整。
在这次单片机课程设计中,同学们完成了单片机数据采集与定时系统的硬件电路设计。
本次综合实践是在此基础上,完成该系统的软件设计与调试。
待仿真成功后,再将程序烧写入单片机中。
第一章数字电子表的设计要求与设计方案
1.1课程设计的目的
(1)巩固,加深和扩大单片机应用的知识面,提高综合及灵活运用所学知识解决工业控制的能力;
(2)培养针对课题需要,选择和查阅有关手册,图标及文献资料的自学能力,提高组成系统,编程,调试的动手能力;
(3)通过对课题设计方案的分析,选择,比较,熟悉单片机用系统开发,研制的过程,软件硬件设计的方法,内容及步骤。
1.2要求完成的主要任务:
(1)成数字电子表的设计和调试。
(2)要求采用四位八段数码管显示时间和日期,并且可以用按键修改时间和日期。
1.3设计方案
(1)系统结构
整个电子时钟系统电路可分为五大部分:
中央处理单元(CPU)、电源电路部分、显示部分、键盘输入部分。
(2)显示部分
显示部分是整个电子时钟最为重要的部分,它为时间的显示的显示,共需要8位LED显示器。
采用动态显示方式,所谓动态显示方式是时间(或温度)数字在LED上一个一个逐个显示,它是通过位选端控制在哪个LED上显示数字,由于这些LED数字显示之间的时间非常的短,使的人眼看来它们是一起显示时间数字的,并且动态显示方式所用的接口少,节省了CPU的管脚。
由于端口的问题以及动态显示方式的优越性,在此设计的连接方式上采用共阴级接法。
显示器LED有段选和位选两个端口,首先说段选端,它由LED八个端口构成,通过对这八个端口输入的不同的二进制数据使得它的时间显示也不同,从而可以得到我们所要的时间显示。
(3)实现数字时钟
原理为:
在单片机内部存储器设三个字节分别存放时钟的时、分、秒信息。
利用定时器与软件结合实现1秒定时中断,没产生一次中断,存储器内相应的秒值加1:
;若秒值达到60,则将其清零,并将相应的分字节值加1若分值;若分值达到60,则清零分字节,并将时字节值加1;若时值达到24,则将时字节清零。
该方案具有硬件电路简单的特点。
但由于每次执行程序时,定时器都要重新赋初值,所以该时钟精度不高。
第二章数字电子表的硬件设计
2.1电子表的硬件框图
电子表电路的核心是AT89C52单片机,其内部带有4KB的FlashROM,无需外扩程序存储器;电子表没有大量的运算和暂存数据,现有的128B片内RAM已满足要求,也不必外扩片外RAM。
系统配备6位LED显示,采用单片机的并行口作为键盘,显示器接口电路。
利用P0口作为8位LED显示的位选口,其中,P0.0~P0.7分别对应为LED0~LED7,P1口则作为段选口,P2口的低3位为键盘输入口,对应0~2行,P0口同时用作键盘的扫描口由于采用公阴极数码管,因此P0口输出低电平选中相应的位,而P1口输出高电平点亮相应的段。
2.2输入、输出显示电路设计
2.3系统总电路图
第三章数字电子表的软件设计
3.1主程序流程图
在编程,首先进行了初始化,定义程序的入口地址以及中断的入口地址,自主程序开始定义了一组固定单元用来存储计数的时、分、秒,在显示初值之后,进入主循环。
在主程序中,对不同的按键进行扫描,实现秒表,时间调整,复位清零等功能。
系统总流程图如下图:
/**************************************************************/
/*3.2中断程序设计*/
/*************************************************************/
voidtime1_isr(void)interrupt3using0//定时器1中断;定时器1用来动态扫描
{
staticunsignedcharnum;
TH1=0xF8;//重入初值
TL1=0xf0;
switch(num){
case0:
P2=0;P0=StrTab[num];break;//分别调用缓冲区的值进行扫描
case1:
P2=1;P0=StrTab[num];break;
case2:
P2=2;P0=StrTab[num];break;
case3:
P2=3;P0=StrTab[num];break;
case4:
P2=4;P0=StrTab[num];break;
case5:
P2=5;P0=StrTab[num];break;
case6:
P2=6;P0=StrTab[num];break;
case7:
P2=7;P0=StrTab[num];break;
default:
break;
}
num++;//扫描8次,使用8个数码管
if(num==8)
num=0;
}
voidtim(void)interrupt1using1//定时器0中断
{
staticunsignedcharcount;//定义内部静态变量
TH0=0xd8;//重新赋值
TL0=0xf0;
count++;
switch(count)
{
case0:
case20:
case40:
case60:
case80:
Displaypro();//隔一定时间调用显示处理
break;
default:
break;
}
if(count==100)
{
count=0;
second++;//秒加1
if(second==60)
{
second=0;
minute++;//分加1
if(minute==60)
{
minute=0;
hour++;//时加1
if(hour==24)
{hour=0;
day++;
if((day==28)&&(month=2))
{day=1;month++;}
if((month<=7)&&(month!
=2))
if((month%2==1)&&(day=31))
{day=1;month++;}
if(month>7)
if(month%2==0)
{month++;day=1;}
}
}
}
}
}
/**************************************************************/
/*3.3显示处理程序设计*/
/**************************************************************/
voidDisplaypro(void)
{if(!
KEY2)//按键1去抖以及动作
{
if(!
KEY2)
delay(40000);
t++;}
if(t%2==0)
{if(!
KEY1)//按键1去抖以及动作
{
if(!
KEY1)
delay(40000);
{hour++;if(hour==24)hour=0;}
}
if(!
KEY3)//按键1去抖以及动作
{
if(!
KEY3)
delay(40000);
{
minute++;if(minute==60)minute=0;
}
}
if(!
KEY4)//按键去抖以及动作
{
delay(15000);
if(!
KEY4)
{if(minute>=1)
minute--;
Displaypro();
}
}
i=hour;j=minute;k=second;}
if(t%2==1)
{i=month;j=day;k=0;}
StrTab[0]=tab[i/10];//显示小时十位
StrTab[1]=tab[i%10];//显示小时个位
StrTab[2]=0x40;//显示"-"
StrTab[3]=tab[j/10];//显示分钟十位
StrTab[4]=tab[j%10];//显示分钟个位
StrTab[5]=0x40;//显示"-"
StrTab[6]=tab[k/10];//显示秒钟十位
StrTab[7]=tab[k%10];//显示秒钟个位
}
/**************************************************************/
/*3.4电子表主程序设计主函数*/
/**************************************************************/
main()//主函数
{
TMOD|=0x01;//定时器010msin12Mcrystal用于计时
TH0=0xd8;//初值
TL0=0xf0;
ET0=1;
TR0=1;
TMOD|=0x10;//定时器1用于动态扫描
TH1=0xF8;//初值
TL1=0xf0;
ET1=1;
TR1=1;
EA=1;//总中断允许
if(t%2==0)
{while
(1)//主循环
{if(!
KEY1)//按键1去抖以及动作
{if(!
KEY1)
delay(40000);
{hour++;if(hour==24)hour=0;//正常时间小时加1
Displaypro();
}
}
if(!
KEY3)//按键去抖以及动作
{
delay(20000);
if(!
KEY3)
{minute++;if(minute==60)minute=0;//分加1
Displaypro();
}
}
if(!
KEY4)//按键去抖以及动作
{
delay(15000);
if(!
KEY4)
{if(minute>=1)
minute--;
Displaypro();
}
}
}
}
if(t%2==1)
{
{while
(1)//主循环
{
if(!
KEY1)//按键1去抖以及动作
{delay(20000);
if(!
KEY1)
{
month++;if(month==13)month=1;//正常时间小时加1
Displaypro();
}
}
if(!
KEY3)//按键去抖以及动作
{
delay(20000);
if(!
KEY3)
{
day++;if((day==29)&&(month==2))day=1;
if((month<=7)&&(month!
=2))
{if(month%2==1)
if(day==32)
day=1;
if(month%2==0)
if(day==31)
day=1;}
if(month>7)
{if(month%2==0)
if(day==32)
day=1;
if(month%2==1)
if(day==31)
day=1;
}
Displaypro();
}
}
}
}
}
}
第四章数字电子表的安装与调试
4.1硬件调试
单片机基础电路包括电源,单片机,外部时钟振荡电路,复位电路和外部接口电路。
调试过程注意一下几点:
1.检查电源是否完好。
2.单片机电源要连接正确,并且保证AT89C52的P1口输出高电平。
3.如果使用P0口做I/O口,要接上拉电阻。
4.2软件调试
在硬件调试完毕的基础上,需要进一步完善程序,也就是进入软件调试阶段。
在本次设计中,软件调试的主要部分是时钟子程序的调试,在硬件调试阶段,已经将时钟程序调试完毕了,只需在主程序中调用即可。
具体步骤:
通过Keil软件编写程序,烧写AT89C52芯片中,在上电的情况下,8个LED数码管显示的是01-01-00,当按键S2有按下的时候,启动时钟,当再次检测到按键S2按下时,就会显示月日;当按键S1有按下的时候,时进行加1操作;当按键S3有按下的时候,分进行加1操作;当按键S4有按下的时候,分进行减1操作;通过S1,S2,S3,S4的配合调节,可以显示当前正确的时间和日期,达到了设计要求的目的。
4.3调试过程
1.硬件调试完成后,将编写好的程序烧写在AT89C52芯片中,在上电的情况下,8个LED数码管显示的是01-01-00,然后调节S1,S2,S3,则初步达到了设计的要求,但是当调节分的时候调的超过了当前的时间,则需要重新按下60次S3,经过考虑后,添加了一段分钟减一程序,相应的增加按键S4;当时间调超过后,可以按下S4进行减操作,大大方便了时间校正的操作。
2.在调试的过程中,按下按键时,LED显示都会闪烁一下,理想的应该是要调节时间或日期时,所要调节的值的LED会闪烁,这一点在调试的过程中没能实现。
第五章设计体会与小结
5.1总结设计体会与心得
本次做的电子表是以单片机(AT89C52)为核心,结合相关的元器件(共阴极LED数码显示器、锁存/译码等),再配以相应的软件,达到实现时钟日期显示的功能,也具有显示和时钟、日期的校准,以及多路开关定时输出等功能,在软件调试的过程中,遇到了很多困难,第一次是只实现了时间的调试,未能实现日期的显示,后来经过调试后达到了日期显示的效果,唯一有一点遗憾的是按键按下去之后总会闪烁一下,但整体上这次单片机的课程设计自我感觉还是很完美的,经过自己的努力制作出了数字电子表,第一次做编写单片机的程序能有成功,也让自己对单片机有了更大的兴趣。
通过这次的设计使我认识到我对单片机方面的知识知道的太少了,对于书本上的很多知识还不能灵活运用,有很多我们需要掌握的知识在等着我去学习,我会在以后的学习生活中弥补我所缺少的知识。
本次的设计使我从中学到了一些很重要的东西,那就是如何从理论到实践的转化,怎样将我所学到的知识运用到我以后的工作中去。
在大学的课堂的学习只是在给我们灌输专业知识,而我们应把所学的用到我们现实的生活中去,此次的电子时钟设计给我奠定了一个实践基础,我会在以后的学习、生活中磨练自己,使自己适应于以后的竞争。
通过两周的学习,我对单片机的硬件设计,软件设计掌握,对硬件电路的工作原理有了新一层的理解。
这是我第一次编写单片机的程序,通过把课本上的理论与生活中的实际问题结合起来,使我学到很多东西。
把程序拆分成几部分一一进行编写、调试,在编程中出现问题时,严格谨慎,仔细分析、调试,一定会从中发现错误,克服困难。
附录
一.部分源程序
在软件设计的章节中,已经介绍了中断程序设计,显示处理程序设计,电子表主程序设计,在此附录中介绍头文件,端口定义,以及延时函数等内容;
#include//包含头文件,一般情况不需要改动,头文件包含特殊功能寄存器的定义
sbitKEY1=P3^0;//定义端口参数
sbitKEY2=P3^1;
sbitKEY3=P3^2;
sbitKEY4=P3^3;
sbitLED=P1^2;//定义指示灯参数
codeunsignedchartab[]=
{0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};//共阴数码管0-9
unsignedcharStrTab[8];//定义缓冲区
unsignedcharminute=00,hour=00,second=00;//定义并且初始化值00:
00:
00
unsignedcharmonth=01,day=01,t=1,j,i,k;//定义变量并设置月日初值
voiddelay(unsignedintcnt)//延时函数
{
while(--cnt);
}
二.系统硬件原理图
1.LED显示电路图
2.仿真电路图
参考文献
[1]、曹巧媛,单片机原理及应用[M],北京:
电子工业出版社。
[2]、赵秀珍,单永磊,单片微型计算机原理及其应用[M],北京:
中国水利水电出版社。
[3]、张毅刚,修林成,胡振江,MCS-51单片机应用设计[M],哈尔滨:
哈尔滨工业大学出版社。
[4]、李华,MCS-51系列单片机实用接口技术[M],北京:
北京航空航天大学出版社。
[5]、陈景初,单片机应用系统设计与实践[M],北京:
北京航空航天大学出版社。
[6]、马家辰,MCS-51单片机原理与接口技术[M],哈尔滨:
哈尔滨工业大学出版社。
本科生课程设计成绩评定表
姓名
段纪伟
性别
男
专业、班级
自动化1072班
课程设计题目:
数字电子表课程设计
课程设计答辩或质疑记录:
1.在硬件方面,单片机的什么口作为输出的?
答:
单片机的P0口作为输出,P0.0~P0.7对应显示小时,分钟,秒钟。
2.时间和日期之间的转换是怎么实现的?
答:
通过key2实现,给变量t初值1,当按下key2时,t=2,t%2=0,此时显示时间,当再次按下key2,则t=3,t%2=1,此时显示日期,如此循