洛阳理工学院课程设计报告
洛阳理工学院
单片机课程设计
题 目: 姓 名: 学 号:专业班级:指导老师:
洛阳理工学院课程设计报告
目录
摘要 .................................................................................................................................................. 2
1.课设要求 .................................................................................................................................... 3
2. 硬件电路设计及相关组件的应用 .............................................................................................. 3
2.1所需器件 ........................................................................................................................... 3
2.2部分组件相关介绍............................................................................................................ 3
3. 模块划分及实现方式.................................................................................................................. 5
3.1 微处理器............................................................................................................................ 5
3.2 显示电路 .......................................................................................................................... 5
3.3 按键电路............................................................................................................................ 5
3.4 复位电路............................................................................................................................ 5
3.5 闹铃电路 .......................................................................................................................... 6
4.硬件设计 .................................................................................................................................... 6
4.1硬件电路的总体框图设计 ................................................................................................. 6
4.2硬件电路原理图设计 ......................................................................................................... 7
4.3 实物图................................................................................................................................ 7
5.软件设计 ....................................................................................................................................... 8
5.1 主程序设计........................................................................................................................ 8
5.11显示函数 ................................................................................................................... 8
5.12蜂鸣器函数 ............................................................................................................... 9
5.13 修改函数 .................................................................................................................. 9
6. 课设总结 ................................................................................................................................... 12
参考文献 ........................................................................................................................................ 12
1
洛阳理工学院课程设计报告
摘要
本设计是电子万年历。具备三个功能:能显示:年、月、日、时、分、秒及星期信息,并具有可调整日期和时间功能。 我选用的是单片机STC89C52来实现电子万年历的功能。该电子万年历能够成功实现时钟运行,调整,显示年月日时分秒等信息。
该电子万年历使用12MHZ晶振与单片机STC89C52相连接,通过软件编程的方法实现了以24小时为一个周期,同时显示小时、分钟和秒的要求。利用单片机定时器及计数器产生定时效果通过编程形成数字钟效果,再利用数码管动态扫描显示单片机内部处理的数据。同时通过端口读入当前外部控制状态来改变程序的不同状态,实现不同功能。
电子万年历设计与制作可采用数字电路实现,也可以采用单片机来完成。若用数字电路完成,所设计的电路相当复杂,大概需要十几片数字集成块,其功能也主要依赖于数字电路的各功能模块的组合来实现,焊接的过程比较复杂,成本也非常高。若用单片机来设计制作完成,由于其功能的实现主要通过软件编程来完成,这样一来就降低了硬件电路的复杂性,从而使得其成本降低,更适合我们大学生自主研发。所以在该设计与制作中我选用了单片机STC89C52,它是低功耗、高性能的CMOS型8位单片机。片内带有4KB的Flash存储器,且允许在系统内改写或用编程器编程。另外, 单片机STC89C52的指令系统和引脚与8051完全兼容,片内有128B 的RAM、32条I/O口线、2个16位定时计数器、5个中断源、一个全双工串行口等。
因此,采用单片机STC89C52原理制作的电子万年历,不仅仅在原理上能够成功实现计时等功能,也更经济,更适用,更符合我们实际生活的需要,对我们大学生来说也更加有用。
2
洛阳理工学院课程设计报告
1.课设要求
本设计是电子万年历。具备三个功能:能显示:年、月、日、时、分、秒及星期信息,并具有可调整日期和时间功能。利用单片机定时器及计数器产生定时效果通过编程形成数字钟效果,再利用数码管动态扫描显示单片机内部处理的数据。同时通过端口读入当前外部控制状态(按键)来改变程序的不同状态,实现
40引脚双列直插式集成电路芯片,引脚分布请参照----单片机引脚图如图所示:
STC89C52是标准的
3
洛阳理工学院课程设计报告
1.电源
Vcc(引脚号40),芯片电源,接+5V;Vss(引脚号20),电源接地端。
2.晶振
XTAL1(引脚号18)内部振荡电路反相放大器的输入端,是外接晶振的一个引脚。当采用外部振荡器时,此引脚接地。
XTAL2(引脚号19)内部振荡器的反相放大器输出端,是外接晶振的另一端。当采用外部振荡器时,此引脚接外部振荡源。
3. I/O线
(1)P0口(引脚号32~39):单片机的双向数据总线和低8位地址总线。在访问外部存储器时实现分时操作,先用作地址总线,在ALE信号的下降沿,地址被锁存;然后用作为数据总线。它也可以用作双向输入/输出口。P0口能驱动8个LSTTL负载。
(2)P1口(引脚号1~8):准双向输入/输出口,它能驱动4个LSTTL负载。
(3)P2口(引脚号21~28):准双向输入/输出口。在访问外部存储器时,用作高8位地址总线。P2口能驱动4个LSTTL负载。
(4)P3口(引脚号10~17):准双向输入/输出口,它能驱动4个LSTTL负载。P3口的每一引脚还有另外一种功能:
P3.0——RXD:串行口输入端
P3.1——TXD:串行口输出端
P3.2——
:外部中断0中断请求输入端
P3.3——
:外部中断1中断请求输入端
P3.4——T0:定时器/计数器0外部输入端
P3.5——T1:定时器/计数器1外部输入端
P3.6——
:外部数据存储器写选通信号
P3.7——
:外部数据存储器读选通信号
4
洛阳理工学院课程设计报告
3. 模块划分及实现方式
3.1 微处理器
在设计过程中使用12MHZ晶振与单片机 STC89C52相连接,通过软件编程的方法实现了以24小时为一个周期同时显示小时,分钟和秒的要求,该定时闹钟设有九个按键,使之具备了校时、定时功能。利用单片机定时器及计数器产生定时效果通过编程形成数字钟效果,再利用数码管动态扫描显示单片机内部处理的数据。同时通过端口读入当前外部控制状态来改变程序的不同状态,实现不同功能。
3.2 显示电路
就时钟而言,通常可采用液晶显示或数码管显示。根据实验器材使用的是数码管显示 利用动态扫描
3.3 按键电路
由于我设计的是电子万年历,需要实现多种功能的显示,并要能够切换显示和调节年月日,因此,在设计过程中按键的设计就显得尤为重要。
在设计过程中我一共采用了4个按键,尽量在小的空间
里实现最多的功能。其中R1键是年月日与时间显示切换键,
R3键按下一次就能够更换一次显示位。在调整显示环境下R2
键是显示调整位的的加1键,R4键是实现确认/调数,按一下
进入调数模式再摁一下表示确认。按键电路如图所示:
3.4 复位电路 单片机的复位有上电复位和按钮手动复位两种。这次课设采用上电复位的
5
洛阳理工学院课程设计报告
上电复位是利用电容充电来实现的,即上电瞬间RST端的电位与VCC相同,随着充电电流的减少,RST的电位逐渐下降。
图中的R是施密特触发器输入端的一个
10K?下拉电阻,时间常数为
10×10-6×10×103=100ms。只要VCC的上
升时间不超过1ms,振荡器建立时间不超过
10ms,这个时间常数足以保证完成复位操
作。上电复位所需的最短时间是振荡周期建
立时间加上2个机器周期时间,在这个时间
内RST的电平应维持高于施密特触发器的下
阈值。
3.5 闹铃电路
当数码管显示的时间和设定的闹钟时间相等时,蜂鸣器发声持续一段时间。
4.硬件设计
4.1硬件电路的总体框图设计
6
洛阳理工学院课程设计报告
4.2硬件电路原理图设计
该万年历是以单片机STC89C52为核心来完成的。
在硬件电路中采用P0口作为2个四位液晶显示电路的驱动接口,这是由于P0口输出驱动电路工作处于开漏状态,它的驱动能力强,故只需外接上拉电阻便可以把LED数码管点亮。因为共阴的LED数码管它的驱动电流是分开的,在单片机进行动态扫描的时候不会影响彼此的电流,故该电路中的8位LED数码管均用共阴极的数码管。8位LED数码管的位选线分别由相应的P2. 0~P2. 7控制,而将其相应的段选线并联在一起,由一个8位的I/O口控制,即P0口。P1口与4个按键相连,以成功实现万年历校时的功能。电路原理图如图所示:
4.3 实物图
7
洛阳理工学院课程设计报告
5.软件设计
5.1 主程序设计
设计主要函数为初始化函数、中断函数、键盘扫描、延时函数、显示函数、蜂鸣器函数、主函数。
5.11显示函数
本系统使用共阴极数码管显示。选码由P0口输出高电平有效。
代码:
void show(struct shijian t) // 显示函数;
{
int i;
P2=0x7f;//显示时,年,分
i=t.hour/10;
if((temp==0x00)&&(confirm==1)) P0=(a[i]+0x80);
else
P0=a[i];
delay(10);
P2=0xbf;
i=t.hour%10;
if(temp==0x01&&confirm==1) P0=a[i]+0x80;
else
P0=a[i];
delay(10);
P2=0xdf;//显示-
P0=a[10];
delay(10);
P2=0xef;//显示分,月,秒
i=t.minute/10;
if(temp==0x03&&confirm==1) P0=a[i]+0x80;
else
P0=a[i];
delay(10);
P2=0xf7;
i=t.minute%10;
if(temp==0x04&&confirm==1) P0=a[i]+0x80;
else
P0=a[i];
delay(10);
8
洛阳理工学院课程设计报告
P2=0xfb;//显示-?
P0=a[10];
delay(10);
P2=0xfd;//显示秒,日,毫秒
i=t.second/10;
if(temp==0x06&&confirm==1) P0=a[i]+0x80; else
P0=a[i];
delay(10);
P2=0xfe;
i=t.second%10;
if(temp==0x07&&confirm==1) P0=a[i]+0x80; else
P0=a[i];
delay(10);
}
5.12蜂鸣器函数
void fengming() //蜂鸣器;
{
uint i;
settime=t1;
for(i=0;i<200;i++)
{
p10=!p10;
delay(20);
}
}
5.13 修改函数
struct shijian set0(struct shijian t)//修改时分秒;定时 {
switch(temp)
{
case 0x00:
{
if(t.hour/10==2) t.hour-=30; t.hour+=10;
break;
}
case 0x01:
{
if(t.hour%10==9) t.hour-=10;
9
洛阳理工学院课程设计报告
t.hour+=1;
if(t.hour/10==2&&(t.hour/10)>4) t.hour-=(t.hour%10); break;
}
case 0x03:
{
if(t.minute/10==5) t.minute-=60;
t.minute+=10;
break;
}
case 0x04:
{
if(t.minute%10==9) t.minute-=10;
t.minute+=1;
//if(t.minute/10==6) t.minute=60;
break;
}
case 0x06:
{
if(t.second/10==5) t.second-=60;
t.second+=10;
break;
}
case 0x07:
{
if(t.second%10==9) t.second-=10;
t.second+=1;
//if(t.second/10==6) t.second-=(t.second%10); break;
}
default:break;
}
return t;
}
void set1()//修改年月日
{
//TR1=0;
switch(temp)
{
case 0x00:
{
if(year.hour/10==9) year.hour-=100;
year.hour+=10;
10
洛阳理工学院课程设计报告
break;
}
case 0x01:
{
if(year.hour%10==9) year.hour-=10;
year.hour+=1;
break;
}
case 0x03:
{
if(year.minute/10==1) year.minute-=20;
year.minute+=10;
break;
}
case 0x04:
{
if(year.minute%10==9) year.minute-=10;
year.minute+=1;
if(year.minute/10==1&&(year.minute/10)>2)
year.minute-=(year.minute%10);
break;
}
case 0x06:
{
if(year.second/10==3) year.second-=40;
year.second+=10;
break;
}
case 0x07:
{
if(year.second%10==9) year.second-=10;
year.second+=1;
if(year.minute==2)
{
if(!((nian%4==0&&nian%100!=0)||(nian%400==0))) if(year.second==28){year.second=20;}
else
if(year.second==29){year.second=20;}
}
else
if((year.minute==1)||(year.minute==3)||(year.minute==5)||(year.minute==7)||(year.minute==8)||(year.minute==10)||(year.minute==12))
{
if((year.second/10==3)&&(year.second/10)>1)
11
洛阳理工学院课程设计报告
year.second=31;
}
else
{
if(year.second/10==3)
year.second=30;
}
break;
}
default:break;
}
}
6. 课设总结 通过这一周的课程设计,我学到了不少的知识。把以前没有学好的模拟电路的知识进行了补充和加强。这使我受益很大。加深了我对于单片机和数字电路的认识,相信在以后的学习和工作中碰到这些基础的元器件我会更加得心应手。通过查阅大量的资料,我获得了以前在课堂上学不到的东西,我想这对于以后的毕业设计,或者工作也好,都是很有帮助的。我很认真地对待这个过程中的每一个细节,希望自己能做得更好。希望今后还有这样的机会,能够让我学到更多的知识。在此次的设计过程中,更进一步地熟悉了芯片的结构及掌握了各芯片的工作原理和其具体的使用方法。
在这次的设计及制作中当然也遇到了一些问题
1. 自己设计的电路图和提供的器件不同。不过问题不大,后来从新画了个
电路图、修改了一下代码。
2. 提供的器件有些不太了解使用方法,在询问同学后明白了正确使用的方
法。
3. 电路焊接好后却出现数字显示不完全的现象,后来用表进行检测发现接
触不良造成的,最后又从新焊接了接点。
参考文献
[1]张鑫,华臻,陈书谦.单片机原理及应用[M].北京:电子工业出版社,2005.
[2]李朝清.单片机原理及接口技术[M].北京:航空航天大学出版社,1994.
[3]周勇,付大鹏,刘刚强.新型家用密码锁的研究[J].机械,2002,29(赠刊)
[4]李珍,付植桐.单片机原理与应用技术[M].北京:清华大学出版社,2003
12
洛阳理工学院课程设计报告
[5] 瞿贵荣.实用电子密码锁[J].家庭电子.2000,第三期:77-82
[6] 杨茂涛.一种电子密码锁的实现[J].福建电脑.2004,第九期:44-49
[7] 张俊谟.单片机中级教程—原理与应用[M].北京:北京航空航天大学出版社,1999:66-77
[8] 肖洪兵.跟我学用单片机[M].北京:北京航空航天大学出版社,2002:88-9
13
重庆电力高等专科学校计算机科学系实训报告一、实训任务:1、看实训要求,计划出自己实训所要用元件,在网上查找资料。2、思考仿真原理图…
实验6基于命令行窗口的日历查询程序综合性实验1引言11实验目的1了解程序开发环境调试工具的使用2掌握小型系统的开发过程学会用C语言…
设计题目电子万年历设计任务与要求1显示年月日时分秒及星期信息2具有可调整日期和时间功能3增加闰年计算功能方案比较方案一系统分为主控…
河南城建学院C语言程序设计课程设计说明书设计题目万年历专业计算机科学与技术班级设计人员张宁博杨文利郭秀丽指导教师张星魏新红张芳芳计…
洛阳理工学院课程设计报告洛阳理工学院单片机课程设计题目姓名学号专业班级指导老师洛阳理工学院课程设计报告目录摘要21课设要求32硬件…
C语言课程设计报告万年历设计人贾伟涛学号20xx010912班级13电信应电班指导老师张伟日期20xx年6月9日内容提要通过大一下…
C语言课程设计报告设计名称C语言课程设计专业班级姓名学号指导教师实习时间成绩目录一设计目的2二设计内容3三详细设计说明4四软件使用…
课程设计评分表课程设计题目:万年历设计C语言课程设计之万年历实验报告分享者:##一、实验题目:万年历设计二、试验时间:20##年1…
哈尔滨工程大学实验报告实验名称电子系统设计实验班级20xx0822学号20xx082228姓名王嘉博实验时间成绩指导教师李北明实验…
xxxxx毕业论文设计开题报告题目基于年历设计学院电气工程学院年级xxx级专业电子信息工程姓名宋飞学号20xx588693指导教师…