单片机课程设计报1
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
单片机课程设计报告基于单片机的数字钟
班级:自动111
姓名:汪利庆
学号:112207201125
指导老师:章红
设计时间:21013年6月
目录
1、引言 (2)
2、课程设计目的 (3)
3、课程设计题目描述和要求 (3)
4、设计总体思路和程序设计总流程 (4)
5、程序设计细节 (5)
6、总结与收获 (15)
单片机课程设计正文
一、引言
现代社会科技飞速发展,人们生活节奏加快,时间就是金钱,时间就是生命。时间对人们来说总是那么宝贵,工作的忙碌性和繁杂性容易使人忘记当前的时间。忘记了要做的事情,当事情不是很重要的时候,这种遗忘无伤大雅。但是,一旦重要事情,一时的耽误可能酿成大祸。
20世纪末,电子技术得到飞速发展,各类电子产品相继出现在市场,电子产品主要朝着CMOS化、低功耗、小体积、大容量、高性能、低价格和外围电路内装化等几个方面发展。数字化电子产品已渗入到人类生活的方方面面。
单片计算机即单片微型计算机(Single-Chip Microcomputer ),是集CPU ,RAM ,ROM ,定时,计数和多输入输出口于一体的微控制器。它体积小,成本低,功能强,广泛应用于智能产品和工业自动化上。而52 单片机是51单片机的升级版,功能更强大。单片机应用的重要意义还在于,它从根本上改变了传统的控制系统设计思想和设计方法。从前必须由模拟电路或数字电路实现的大部分功能,现在已能用单片机通过软件方法来实现了。这种软件代替硬件的控制技术也称为微控制技术,是传统控制技术的一次革命。
基于以上发展与现实需要本次设计课题就是基于单片机的设计-----基于单片机的多功能数字钟。数字钟是采用数字电路实现对时,分,秒,数字显示的计时装置,广泛用于个人家庭,车站, 码头办公室等公共场所,成为人们日常生活中不可少的必需品,由于数字集成电路的发展和石英晶体振荡器的广泛应用,使得数字钟的精度,远远超过老式钟表, 钟表的数字化给人们生产生活带来了极大的方便,而且大大地扩展了钟表原先的报时功能。诸如定时自动报警、按时自动打铃、时程序自动控制、定时广播、自动起闭路灯、定时开关烘箱、通断动力设备、甚至各种定时电气的自动启用等,所有这些,都是以钟表数字化为基础的。因此,研究数字钟及扩大其应用,有着非常现实的意义。
二、课程设计目的:
1、巩固和加深对单片机原理知识的理解和运用;
2、进一步提高学生综合运用所学知识的能力;
3、培养学生综合分析问题、发现问题和解决问题的能力
三、课程设计题目描述和要求:
1、方案论证 确定总体电路原理图。
2、元器件选择 设计PCB图 或用万能电路实验板搭线 。
3、绘制程序流程图 编写C语言源程序。
4、安装调试 实现数字时钟的基本功能 即能正确显示时、分、秒 可调整时间 秒闪功能
四、设计总体思路和程序设计总流程思路:
1、总体思路:
用51单片机、端口扩展芯片8522、6个七段码显示器等主要元件实现逐步实现多功能电子钟的计时、调时、闹钟、秒表等功能模块
2、硬件的连接图:
3、程序设计总流程:
五、程序设计细节:
1、计时部分:
设置计时器0工作与方式1计时模式,并设置计时初值N=50000,使每次中断时间为50ms,再设置全局变量在循环中实现分表记录秒,分,时。
void time0_int(void) interrupt 1 { TH0=(65536-50000)/256; TL0=(65536-50000)%256; timer=timer+1; if(timer>=20) { second=second+1;
timer=0;
if(second==60)
{ minute=minute+1;
second=0;
if(minute==60)
{ hour=hour+1;
minute=0;
if(hour==24)
{hour=0;}
}
2、检查和读出键值部分:
键值设为全局变量key,首先通过置行全为0检查列是否全为1判断是否有按键按下,在通过延时消再检测消震动,如有键按下着在逐行输入0检测哪一行不为1,最后行值作为高四位列值作为底四位赋值给keyt,通过keyt值与键值代码比较得出键值。void keyscan()
{ unsigned char code_h,code_l,i1,i2;
P1=0x00;
code_l=PC8255;
code_l=code_l&0x0f;
if(code_l!=0x0f)
{ dl_ms();
code_l=PC8255;
code_l=code_l&0x0f;
if(code_l!=0x0f)
{ code_h=0x0e;
for(i1=0;i1<4;i1++)
{ P1=code_h;
code_l=PC8255;
code_l=code_l&0x0f;
if(code_l==0x0f)
{
code_h=(code_h<<1)|0x01;
}
else break;
}
}
code_h=code_h<<4;
keyt=code_h|code_l;
for(i2=0;i2<16;i2++)
{ if(keyt==keytable[i2])
key=i2;
}
}
}