单片机89C51简易自动打铃系统

课程设计报告

课程名称:单片机原理及应用课程设计

设计题目: 简易自动打铃系统 系 别: 专 业:班 级:学生姓名: 学 号: 起止日期:

随着科学技术的飞速发展,单片机应用的范围越来越广,本设计正是基于STC89C52型单片机为核心,加上适当的外围部件,设计而成的简易自动打铃系统。

简易自动打铃系统的设计以STC89C52单片机芯片和8255芯片的拓展I/0引脚为核心部件,用中断系统进行时间设置,数码管显示当前时间并辅以必要的电路,构成了本系统。根据设计要求,该简易自动打铃系统可以进行计时和显示,设置当前时间,实现定点打铃等功能。该设计简单、实用、操作便捷。 关键字:单片机;自动定点打铃;设置时间;中断

设计要求 .................................................................................................................................... 4 1. 方案论证与对比 ..................................................................................................................... 4 1.1方案一:采用时钟芯片和键盘实现功能 . ................................................................. 4 1.2方案二:采用中断定时实现功能 . ............................................................................. 5 1.3方案比较 . ..................................................................................................................... 5 2. 单元电路设计与论证 ............................................................................................................. 5 2.1中断和复位电路设计[2] ............................................................................................. 5 2.2电源电路设计 . ............................................................................................................. 6 2.3单片机、I/O拓展........................................................................................................ 6 2.4打铃电路设计 . ............................................................................................................. 8 2.5数码管电路设计 . ......................................................................................................... 8 3系统软件工作流程图 ............................................................................................................. 9 3.1主程序工作流程 . ......................................................................................................... 9 3.2读秒显示子程序 . ....................................................................................................... 10 3.3中断服务子程序 . ....................................................................................................... 10 3.4时间设定子程序 . ....................................................................................................... 11 4. 系统功能实际测试 ............................................................................................................... 12 4.1程序实际编译测试 . ................................................................................................... 12 4.2系统实际测试 . ........................................................................................................... 12 4.3 软件调试步骤 ........................................................................................................... 12 4.4子程序调试步骤 . ....................................................................................................... 13 4.5调试结果 . ................................................................................................................... 13 4.6系统误差及性能分析 . ............................................................................................... 13 5. 设计总结 ............................................................................................................................... 14 6. 详细仪器清单 ....................................................................................................................... 15 7. 致谢 ..................................................................................................................................... 16 参考文献 .................................................................................................................................. 17 附录 .......................................................................................................................................... 18 附录1. 详细程序 . ............................................................................................................. 18 附录2. 整体电路图 . ......................................................................................................... 23

简易自动打铃系统设计

设计要求

1. 基本计时和显示功能(12小时制)。

2. 可设置当前时间(包括上下午标志,时、分的数字显示)。

3. 能实现基本打铃功能,规定:上午7:30早自习:打铃5秒、停2秒、再

打铃5秒。下午10:30熄灯铃:打铃5秒、停2秒、再打铃5秒。

1. 方案论证与对比

1.1方案一:采用时钟芯片和键盘实现功能

方案一原理框图如图1-1所示:

图 1-1 采用时钟芯片和键盘实现功能

该系统用DS1302[1]对时、分、秒计时和设置打铃时间,采用三线串行数据传输接口与STC89C52进行同步通信,用矩阵键盘来设置时间值,并通过8255芯片读入设置值,最后通过89C52单片机芯片综合控制,把当前时间送到数码管显示,到点把信号送入蜂鸣器,实现打铃。

1.2方案二:采用中断定时实现功能

方案二原理框图如图1-2所示:

图 1-2 采用中断定时实现功能

该系统以STC89C52单片机为核心部件,用8255做I/O拓展芯片,数码管接8255的PA 、PB 引脚,蜂鸣器与单片机的P3.4口相连,外加INT0和INT1中断。该系统因为使用定时器中断实现计时和中断按钮实现调试大大节省了设计的复杂程度,数码管显示当前时间。

[1]

1.3方案比较

2. 单元电路设计与论证

2.1中断和复位电路设计[2]

利用按键实现中断电路如图2-1所示:

图 2-1 中断和复位电路图

2.2电源电路设计

利用USB 接口供电,电路图如2-2所示:

图 2-2 电源电路图

2.3单片机、I/O拓展

STC89C52RC [7]是一个低功耗,高性能CMOS 8位单片机,片内含8k Bytes ISP(In-system programmable)的可反复擦写1000次的Flash 只读程序存储器,器件采用ATMEL 公司的高密度、非易失性存储技术制造,兼容标准MCS-51(单片微型计算机)指令系统及80C51引脚结构,芯片内集成了通用8位中央处理器和ISP Flash存储单元,功能强大的微型计算机的STC89C52可为许多嵌入式控制应用系统提供高性价比的解决方案。STC89C52具有如下特点:40个引脚,8k Bytes Flash片内程序存储器,256 bytes的随机存取数据存储器(RAM ),32

个外部双向输入/输出(I/O)口,5个中断优先级2层中断嵌套中断,2个16位可编程定时/计数器,2个全双工串行通信口,看门狗(WDT )电路,片内时钟振荡器。 主要特性如下: ●与MCS-51 兼容

●8k 可反复擦写(>1000次)Flash ROM ●全静态工作:0Hz~24MHz

●三级程序存储器锁定 ●256*8位内部RAM ●32可编程I/O线

●2个16位可编程定时/计数器 ●5个中断源

●可编程串行通道 ●低功耗的空闲和掉电模式

I/O拓展采用8255芯片,晶振采用12M ,单片机用89C52,电路如图2-3[3]所示:

图 2-3 主控电路图

2.4打铃电路设计

图2-4打铃电路图

[3]

2.5数码管电路设计

8255的PA 口控制数码管的位选,低电平有效,PB 口做为段选输出,接1K 欧姆的限流电阻。如图2-5[4]所示:

图 2-5 数码管电路图

3系统软件工作流程图

3.1主程序工作流程

主程序首先设置8255模式,并打开中断0,设置中断为边沿触发模式,然后在死循环中顺序执行读秒显示子程序,按键扫秒子程序,打铃判断子程序。主程序流程图[5]如图3-1所示,主程序见附录一:

图 3-1 主函数流程图

3.2读秒显示子程序

此子程序[1]为本设计的核心之一,首先初始化定时器T0,设置T0为工作方式1,其初始值为3CB0H (既每次溢出定时50ms ),并对其循环20次,然后把时间加1s ,并送入显示缓冲区等待显示,子程序流程图如图3-2所示:

图 3-2 T0中断计时程序流程图

3.3中断服务子程序

此子程序是为调时时服务的,首先初始化定时器T1,设置T1为工作方式1,其初始值为3CB0H (既每次溢出定时50ms ),并对其循环8次,然后使数码管被选中的调时位闪烁,子程序流程图如图3-3所示:

图 3-3 T1中断服务程序流程图

3.4时间设定子程序

时间设定模块的设计要点是按键的去抖处理与“一键多态”

[6]

的处理。即

只涉及2个键完成了6位时间参数的设定。“一键多态”即多种功能的实现思想史,根据按键时刻的系统状态,决定按键采取何种动作,即何种功能。

图 3-4 键盘扫描子程序流程图

4. 系统功能实际测试

4.1程序实际编译测试

在Keil C51编译环境下编译通过,0警告,0错误。

4.2系统实际测试

实际效果如图4-2所示,达到设计要求。

图4-2实物图

4.3 软件调试步骤

1、打开软件后, 在Project 菜单中选择New Project命令,打开一个新项目。保存此项目,输入工程文件名后,并保存工程文件的目录。

2、为项目文件选择一个目标器件,即选择8051的类型。在Data base 列表框中选择“ATML 89C52”,确定。

3、上述设置好后,创建源程序文件并输入程序代码。输入好代码后点击“文

件/保存”。

4、把源文件添加到项目中,用鼠标指在目标工作区的目标1,点击右键在弹出的菜单中选择添加文件到源代码组,在弹出的添加文件框中,选择需要添加到项目中的文件。

5、开始编译,对项目文件进行编译。若没有错误后进行硬件调试。

4.4子程序调试步骤

子程序调试应一个模块一个模块地进行,首先单独调试各功能子程序,检查程序是否能够实现预期的功能,接口电路的控制是否正常等;最后逐步将各子程序连接起来进行总调试。故调试步骤[7]如下: A、蜂鸣器的调试

调试方法:先把打铃程序下载到单片机,让蜂鸣器发声,看是否在正确的时间内实现打铃。

B 、数码管程序调试

正确的显示时间是整个程序的关键之一。调试方法:先把程序下载到单片机,让数码管显示,是否正确的显示时间的变化。

C 、键盘调时序

正确的显示所调的时间是整个程序的关键之一。调试方法:先把键盘程序和显示程序下载到单片机,让数码管显示,是否正确的所调时间的变化。

4.5调试结果

实现计时和显示功能(12小时制),可设置当前时间(包括上下午标志,时、分的数字显示),能实现打铃功能,上午7:30早自习:打铃5秒、停2秒、再打铃5秒,下午10:30熄灯铃:打铃5秒、停2秒、再打铃5秒。

4.6系统误差及性能分析

经测试该简易自动打铃系统在一天内会出现时间误差,该误差主要是由于晶振自身的误差所造成的。另外在中断的过程中,只会在第一次计时时产生时间的偏移,而它所产生累积误差很小,可以忽略[7]。

5. 设计总结

通过这次课程设计,我们得到了很多收获和体会,懂得了团队合作的重要性和必要性,以及工程设计的大体过程。第一,巩固和加深了对单片机基本知识和理解,提高了综合运用所学知识的能力。第二,增强了根据课程需要选学参考资料,查阅手册,图表和文献资料的自学能力。通过独立思考,深入研究有关问题,学会自己分析解决问题的方法。第三,通过实际方案的分析比较,设计计算,安装调试等环节,初步掌握了简单使用电路的分析方法和工程设计方法。第四,在这次课程设计过程中,光有理论知识是不够的,还必须懂一些实践中的知识。所以在课程设计的实践中,我们应将实验课与课堂教学结合起来,锻炼自己的理论联系实际的能力与实际动手能力。第五,掌握了比较常用的仪器的使用方法,提高了动手能力。第六,培养了严谨的工作作风和科学态度。

总体来说这些知识是对我们大学生来说十分宝贵的实践经验,是无法在课堂上获得的,是现今社会最重视的同时也是我们最需要提高的部分。

6. 详细仪器清单

7. 致谢

经过近几天的课程设计,我们组的成员都充分认识到理论知识和实践结合的重要性。经过两年多的理论基础的学习,我们成功的将理论运用如实践,并成功的运用单片机,以前只是在路上看见那些交通灯,但是并没有认真的研究交通灯的内部控制原理,还有单片机上那些芯片的功能和引脚图平常也不是常接触,通过这次城市道口交通灯控制系统设计让我清楚如果想做一个产品该怎样思考。在设计中,组员之间的相互配合和分工是尤其重要的,同时整个团队的合作意识是本次设计成功的关键因素。 此次课程设计持续的时间长,对组员的耐心是一种极大的考验,同时学校的支持力度也应该加强,而不应该对学生的提问表示不解,对有些程序的编写要及时的给予指导,当然学生也要积极的配合老师的工作,努力将自己所学的知识尽可能的运用到对方案的设计中去。感谢老师的细心指导、和伙伴之间的配合。

参考文献

[1] 张鑫. 单片机原理及应用[M].北京:电子工业出版社,2005.8. [2] 邱关源、罗先觉. 电路[M].北京:高等教育出版社,2006.5.

[3] 康光华. 电子技术基础. 数字部分[M].北京:高等教育出版社,2006.1. [4] 康光华. 电子技术基础. 模拟部分[M].北京:高等教育出版社,2006.1.

[5] 祁伟, 杨亭. 单片机C51程序设计教程与实验[M].北京:北京航空航天大学出版社,2006. [6] 楼然苗. 李光飞. 单片机课程设计指导[M].北京:北京航空航天大学出版社,2007.4 [7] 单片机学习网www.mcustudy.com

附录

附录1. 详细程序

#include "reg52.h"

#include

#define PA XBYTE[0xD1FF] /*PA口地址*/ #define PB XBYTE[0xD2FF] /*PB口地址*/ #define PC XBYTE[0xD5FF] /*PC口地址*/ #define CON XBYTE[0xD7FF] /*控制字地址*/ #define uchar unsigned char Code Char dis_7[14]={0xA0,0xBB,0x62,0x2A,0x39,0x2C,0x24,0xBA,0x20,0x28,0xff,0x7f,0x30,0x70};

/* 共阳LED 段码表 "0" "1" "2" "3" "4" "5" "6" "7" "8" "9" " 不亮" "-" "A" "P"*/

code char scan_con[8]={0xDF,0xEF,0xF7,0xFB,0xFD,0xFE,0xBF,0x7f}; // 列扫描控制字

data char disdata[8]={0x08,0x05,0x09,0x02,0x0b,0x00,0x01,0x0d};//计时单元数据初值, 共6个

data char dis[8]={0x00,0x00,0x00,0x00,0x00,0x00,0x0a,0x00};//显示单元数据, 共6个数据

data char con1s=0x00,con04s=0x00,con=0x00,con05s=0x00,d=0x00;//1秒定时用 sbit key0=P3^2; //移位键 sbit key1=P3^3; // 加一 sbit BEEP=P2^0; //蜂鸣器接口 /****************/ //1毫秒延时程序// /***************/ delay1ms(int t) { int i,j;

for(i=0;i

for(j=0;j

/***********/ //扫描程序// /**********/ scan() {

char k;

for(k=0;k

{

CON=0X89;

PB=dis_7[dis[k]];PA=scan_con[k];delay1ms(1);PA=0xff; } }

/*****************/ //键盘调时程序//

/******************/ keyscan() {

EA=0; if(key0==0) {

delay1ms(10); while(key0==0); if(dis[con]==10)

{dis[7]=dis[con];dis[con]=dis[6];dis[6]=dis[7];} con++;TR0=0;ET0=0;TR1=1;ET1=1; if(con>=6) {con=0;TR1=0;ET1=0;TR0=1;ET0=1;} }

if(con>=0) {

if(key1==0) {

delay1ms(10); while(key1==0); d=con+2; disdata[d]++;

if(disdata[d]>=14) {disdata[d]=0;} dis[con]=disdata[d];dis[6]=0x0a; } } EA=1; }

/************/ // 打铃程序 / /*************/ Play1() {

uchar i,t;

for(i=0;i

BEEP=~BEEP; delay1ms(t); }

BEEP=1; }

Play2()

{ BEEP=1; } bell()

{if((disdata[0]==0x00||disdata[0]==0x01||disdata[0]==0x02||disdata[0]==0x03||disdata[0]==0x04)

&&disdata[1]==0x00&&disdata[2]==0x00&&disdata[3]==0x03&&disdata[5]==0x07&&disdata[6]==0x00&&disdata[7]==0x0c||(disdata[0]==0x00||disdata[0]==0x01

||disdata[0]==0x02||disdata[0]==0x03||disdata[0]==0x04)&&disdata[1]==0x00&&disdata[2]==0x00&&disdata[3]==0x03&&disdata[5]==0x00&&disdata[6]==0x01&&disdata[7]==0x0d) { Play1();}

if((disdata[0]==0x05||disdata[0]==0x06)&&disdata[1]==0x00&&disdata[2]==0x00&&disdata[3]==0x03&&disdata[5]==0x07&&disdata[6]==0x00&&disdata[7]==0x0c

||(disdata[0]==0x05||disdata[0]==0x06)&&disdata[1]==0x00&&disdata[2]==0x00&&disdata[3]==0x03&&disdata[5]==0x00&&disdata[6]==0x01&&disdata[7]==0x0d) {Play2();}

if(((disdata[0]==0x07||disdata[0]==0x08||disdata[0]==0x09)&&disdata[1]==0x00||(disdata[0]==0x00||disdata[0]==0x01)&&disdata[1]==0x01)

&&disdata[2]==0x00&&disdata[3]==0x03&&disdata[5]==0x07&&disdata[6]==0x00&&disdata[7]==0x0c||((disdata[0]==0x07||disdata[0]==0x08||disdata[0]==0x09)&&disdata[1]==0x00

||(disdata[0]==0x00||disdata[0]==0x01)&&disdata[1]==0x01)&&disdata[2]==0x00&&disdata[3]==0x03&&disdata[5]==0x00&&disdata[6]==0x01&&disdata[7]==0x0d) {Play1();} }

/************/ //初始化程序// /*************/ clearmen() { int i;

for(i=0;i

{

dis[i]=disdata[i];

}

TH0=0x3C;TL0=0xB0;// ;50MS 定时初值(T0计时用)

TH1=0x3C;TL1=0xB0;// ;50MS 定时初值(T1计时用)

TMOD=0X01;ET0=1;ET1=1;TR1=0;TR0=1;EA=1;

}

/**********/

//主程序//

/*********/

main()

{

clearmen();

while(1)

{

scan();

keyscan();

bell() ;

}

}

/********************/

//1秒中断处理程序 //

/*******************/

void time_intt0(void) interrupt 1

{

ET0=0;TR0=0;TH0=0x3C;TL0=0xB0;TR0=1;

con1s++;

con05s=con1s%10;

if(con05s==0)

{

disdata[4]--;

if( disdata[4]==9)

{disdata[4]=11;}

if(con1s==20)

{

con1s=0x00;

disdata[0]++;

if(disdata[0]>=10)

{

disdata[0]=0;disdata[1]++;

if(disdata[1]>=6)

{

disdata[1]=0;disdata[2]++;

if(disdata[2]>=10)

{

disdata[2]=0;disdata[3]++;

if(disdata[3]>=6)

{

disdata[3]=0;disdata[5]++;

if(disdata[5]>=10)

{

disdata[5]=0;disdata[6]++;

}

if(disdata[6]==1 )

{

if(disdata[5]==2)

{

disdata[5]=0;disdata[6]=0;disdata[7]++; if(disdata[7]==14)

{ disdata[7]=12;}

}

}

}

}

}

}

}

dis[0]=disdata[2];dis[1]=disdata[3];dis[3]=disdata[5];

dis[4]=disdata[6];dis[2]=disdata[4];dis[5]=disdata[7];

}

ET0=1;

}

/********************/

//0.4秒闪烁中断程序 //

/*******************/

void time_intt1(void) interrupt 3

{

EA=0;TR1=0;TH1=0x3C;TL1=0xB0;TR1=1;

con04s++;

if(con04s==8)

{

con04s=0x00;

dis[7]=dis[con];dis[con]=dis[6];dis[6]=dis[7];

}

EA=1;

}

附录2. 整体电路图

课程设计报告

课程名称:单片机原理及应用课程设计

设计题目: 简易自动打铃系统 系 别: 专 业:班 级:学生姓名: 学 号: 起止日期:

随着科学技术的飞速发展,单片机应用的范围越来越广,本设计正是基于STC89C52型单片机为核心,加上适当的外围部件,设计而成的简易自动打铃系统。

简易自动打铃系统的设计以STC89C52单片机芯片和8255芯片的拓展I/0引脚为核心部件,用中断系统进行时间设置,数码管显示当前时间并辅以必要的电路,构成了本系统。根据设计要求,该简易自动打铃系统可以进行计时和显示,设置当前时间,实现定点打铃等功能。该设计简单、实用、操作便捷。 关键字:单片机;自动定点打铃;设置时间;中断

设计要求 .................................................................................................................................... 4 1. 方案论证与对比 ..................................................................................................................... 4 1.1方案一:采用时钟芯片和键盘实现功能 . ................................................................. 4 1.2方案二:采用中断定时实现功能 . ............................................................................. 5 1.3方案比较 . ..................................................................................................................... 5 2. 单元电路设计与论证 ............................................................................................................. 5 2.1中断和复位电路设计[2] ............................................................................................. 5 2.2电源电路设计 . ............................................................................................................. 6 2.3单片机、I/O拓展........................................................................................................ 6 2.4打铃电路设计 . ............................................................................................................. 8 2.5数码管电路设计 . ......................................................................................................... 8 3系统软件工作流程图 ............................................................................................................. 9 3.1主程序工作流程 . ......................................................................................................... 9 3.2读秒显示子程序 . ....................................................................................................... 10 3.3中断服务子程序 . ....................................................................................................... 10 3.4时间设定子程序 . ....................................................................................................... 11 4. 系统功能实际测试 ............................................................................................................... 12 4.1程序实际编译测试 . ................................................................................................... 12 4.2系统实际测试 . ........................................................................................................... 12 4.3 软件调试步骤 ........................................................................................................... 12 4.4子程序调试步骤 . ....................................................................................................... 13 4.5调试结果 . ................................................................................................................... 13 4.6系统误差及性能分析 . ............................................................................................... 13 5. 设计总结 ............................................................................................................................... 14 6. 详细仪器清单 ....................................................................................................................... 15 7. 致谢 ..................................................................................................................................... 16 参考文献 .................................................................................................................................. 17 附录 .......................................................................................................................................... 18 附录1. 详细程序 . ............................................................................................................. 18 附录2. 整体电路图 . ......................................................................................................... 23

简易自动打铃系统设计

设计要求

1. 基本计时和显示功能(12小时制)。

2. 可设置当前时间(包括上下午标志,时、分的数字显示)。

3. 能实现基本打铃功能,规定:上午7:30早自习:打铃5秒、停2秒、再

打铃5秒。下午10:30熄灯铃:打铃5秒、停2秒、再打铃5秒。

1. 方案论证与对比

1.1方案一:采用时钟芯片和键盘实现功能

方案一原理框图如图1-1所示:

图 1-1 采用时钟芯片和键盘实现功能

该系统用DS1302[1]对时、分、秒计时和设置打铃时间,采用三线串行数据传输接口与STC89C52进行同步通信,用矩阵键盘来设置时间值,并通过8255芯片读入设置值,最后通过89C52单片机芯片综合控制,把当前时间送到数码管显示,到点把信号送入蜂鸣器,实现打铃。

1.2方案二:采用中断定时实现功能

方案二原理框图如图1-2所示:

图 1-2 采用中断定时实现功能

该系统以STC89C52单片机为核心部件,用8255做I/O拓展芯片,数码管接8255的PA 、PB 引脚,蜂鸣器与单片机的P3.4口相连,外加INT0和INT1中断。该系统因为使用定时器中断实现计时和中断按钮实现调试大大节省了设计的复杂程度,数码管显示当前时间。

[1]

1.3方案比较

2. 单元电路设计与论证

2.1中断和复位电路设计[2]

利用按键实现中断电路如图2-1所示:

图 2-1 中断和复位电路图

2.2电源电路设计

利用USB 接口供电,电路图如2-2所示:

图 2-2 电源电路图

2.3单片机、I/O拓展

STC89C52RC [7]是一个低功耗,高性能CMOS 8位单片机,片内含8k Bytes ISP(In-system programmable)的可反复擦写1000次的Flash 只读程序存储器,器件采用ATMEL 公司的高密度、非易失性存储技术制造,兼容标准MCS-51(单片微型计算机)指令系统及80C51引脚结构,芯片内集成了通用8位中央处理器和ISP Flash存储单元,功能强大的微型计算机的STC89C52可为许多嵌入式控制应用系统提供高性价比的解决方案。STC89C52具有如下特点:40个引脚,8k Bytes Flash片内程序存储器,256 bytes的随机存取数据存储器(RAM ),32

个外部双向输入/输出(I/O)口,5个中断优先级2层中断嵌套中断,2个16位可编程定时/计数器,2个全双工串行通信口,看门狗(WDT )电路,片内时钟振荡器。 主要特性如下: ●与MCS-51 兼容

●8k 可反复擦写(>1000次)Flash ROM ●全静态工作:0Hz~24MHz

●三级程序存储器锁定 ●256*8位内部RAM ●32可编程I/O线

●2个16位可编程定时/计数器 ●5个中断源

●可编程串行通道 ●低功耗的空闲和掉电模式

I/O拓展采用8255芯片,晶振采用12M ,单片机用89C52,电路如图2-3[3]所示:

图 2-3 主控电路图

2.4打铃电路设计

图2-4打铃电路图

[3]

2.5数码管电路设计

8255的PA 口控制数码管的位选,低电平有效,PB 口做为段选输出,接1K 欧姆的限流电阻。如图2-5[4]所示:

图 2-5 数码管电路图

3系统软件工作流程图

3.1主程序工作流程

主程序首先设置8255模式,并打开中断0,设置中断为边沿触发模式,然后在死循环中顺序执行读秒显示子程序,按键扫秒子程序,打铃判断子程序。主程序流程图[5]如图3-1所示,主程序见附录一:

图 3-1 主函数流程图

3.2读秒显示子程序

此子程序[1]为本设计的核心之一,首先初始化定时器T0,设置T0为工作方式1,其初始值为3CB0H (既每次溢出定时50ms ),并对其循环20次,然后把时间加1s ,并送入显示缓冲区等待显示,子程序流程图如图3-2所示:

图 3-2 T0中断计时程序流程图

3.3中断服务子程序

此子程序是为调时时服务的,首先初始化定时器T1,设置T1为工作方式1,其初始值为3CB0H (既每次溢出定时50ms ),并对其循环8次,然后使数码管被选中的调时位闪烁,子程序流程图如图3-3所示:

图 3-3 T1中断服务程序流程图

3.4时间设定子程序

时间设定模块的设计要点是按键的去抖处理与“一键多态”

[6]

的处理。即

只涉及2个键完成了6位时间参数的设定。“一键多态”即多种功能的实现思想史,根据按键时刻的系统状态,决定按键采取何种动作,即何种功能。

图 3-4 键盘扫描子程序流程图

4. 系统功能实际测试

4.1程序实际编译测试

在Keil C51编译环境下编译通过,0警告,0错误。

4.2系统实际测试

实际效果如图4-2所示,达到设计要求。

图4-2实物图

4.3 软件调试步骤

1、打开软件后, 在Project 菜单中选择New Project命令,打开一个新项目。保存此项目,输入工程文件名后,并保存工程文件的目录。

2、为项目文件选择一个目标器件,即选择8051的类型。在Data base 列表框中选择“ATML 89C52”,确定。

3、上述设置好后,创建源程序文件并输入程序代码。输入好代码后点击“文

件/保存”。

4、把源文件添加到项目中,用鼠标指在目标工作区的目标1,点击右键在弹出的菜单中选择添加文件到源代码组,在弹出的添加文件框中,选择需要添加到项目中的文件。

5、开始编译,对项目文件进行编译。若没有错误后进行硬件调试。

4.4子程序调试步骤

子程序调试应一个模块一个模块地进行,首先单独调试各功能子程序,检查程序是否能够实现预期的功能,接口电路的控制是否正常等;最后逐步将各子程序连接起来进行总调试。故调试步骤[7]如下: A、蜂鸣器的调试

调试方法:先把打铃程序下载到单片机,让蜂鸣器发声,看是否在正确的时间内实现打铃。

B 、数码管程序调试

正确的显示时间是整个程序的关键之一。调试方法:先把程序下载到单片机,让数码管显示,是否正确的显示时间的变化。

C 、键盘调时序

正确的显示所调的时间是整个程序的关键之一。调试方法:先把键盘程序和显示程序下载到单片机,让数码管显示,是否正确的所调时间的变化。

4.5调试结果

实现计时和显示功能(12小时制),可设置当前时间(包括上下午标志,时、分的数字显示),能实现打铃功能,上午7:30早自习:打铃5秒、停2秒、再打铃5秒,下午10:30熄灯铃:打铃5秒、停2秒、再打铃5秒。

4.6系统误差及性能分析

经测试该简易自动打铃系统在一天内会出现时间误差,该误差主要是由于晶振自身的误差所造成的。另外在中断的过程中,只会在第一次计时时产生时间的偏移,而它所产生累积误差很小,可以忽略[7]。

5. 设计总结

通过这次课程设计,我们得到了很多收获和体会,懂得了团队合作的重要性和必要性,以及工程设计的大体过程。第一,巩固和加深了对单片机基本知识和理解,提高了综合运用所学知识的能力。第二,增强了根据课程需要选学参考资料,查阅手册,图表和文献资料的自学能力。通过独立思考,深入研究有关问题,学会自己分析解决问题的方法。第三,通过实际方案的分析比较,设计计算,安装调试等环节,初步掌握了简单使用电路的分析方法和工程设计方法。第四,在这次课程设计过程中,光有理论知识是不够的,还必须懂一些实践中的知识。所以在课程设计的实践中,我们应将实验课与课堂教学结合起来,锻炼自己的理论联系实际的能力与实际动手能力。第五,掌握了比较常用的仪器的使用方法,提高了动手能力。第六,培养了严谨的工作作风和科学态度。

总体来说这些知识是对我们大学生来说十分宝贵的实践经验,是无法在课堂上获得的,是现今社会最重视的同时也是我们最需要提高的部分。

6. 详细仪器清单

7. 致谢

经过近几天的课程设计,我们组的成员都充分认识到理论知识和实践结合的重要性。经过两年多的理论基础的学习,我们成功的将理论运用如实践,并成功的运用单片机,以前只是在路上看见那些交通灯,但是并没有认真的研究交通灯的内部控制原理,还有单片机上那些芯片的功能和引脚图平常也不是常接触,通过这次城市道口交通灯控制系统设计让我清楚如果想做一个产品该怎样思考。在设计中,组员之间的相互配合和分工是尤其重要的,同时整个团队的合作意识是本次设计成功的关键因素。 此次课程设计持续的时间长,对组员的耐心是一种极大的考验,同时学校的支持力度也应该加强,而不应该对学生的提问表示不解,对有些程序的编写要及时的给予指导,当然学生也要积极的配合老师的工作,努力将自己所学的知识尽可能的运用到对方案的设计中去。感谢老师的细心指导、和伙伴之间的配合。

参考文献

[1] 张鑫. 单片机原理及应用[M].北京:电子工业出版社,2005.8. [2] 邱关源、罗先觉. 电路[M].北京:高等教育出版社,2006.5.

[3] 康光华. 电子技术基础. 数字部分[M].北京:高等教育出版社,2006.1. [4] 康光华. 电子技术基础. 模拟部分[M].北京:高等教育出版社,2006.1.

[5] 祁伟, 杨亭. 单片机C51程序设计教程与实验[M].北京:北京航空航天大学出版社,2006. [6] 楼然苗. 李光飞. 单片机课程设计指导[M].北京:北京航空航天大学出版社,2007.4 [7] 单片机学习网www.mcustudy.com

附录

附录1. 详细程序

#include "reg52.h"

#include

#define PA XBYTE[0xD1FF] /*PA口地址*/ #define PB XBYTE[0xD2FF] /*PB口地址*/ #define PC XBYTE[0xD5FF] /*PC口地址*/ #define CON XBYTE[0xD7FF] /*控制字地址*/ #define uchar unsigned char Code Char dis_7[14]={0xA0,0xBB,0x62,0x2A,0x39,0x2C,0x24,0xBA,0x20,0x28,0xff,0x7f,0x30,0x70};

/* 共阳LED 段码表 "0" "1" "2" "3" "4" "5" "6" "7" "8" "9" " 不亮" "-" "A" "P"*/

code char scan_con[8]={0xDF,0xEF,0xF7,0xFB,0xFD,0xFE,0xBF,0x7f}; // 列扫描控制字

data char disdata[8]={0x08,0x05,0x09,0x02,0x0b,0x00,0x01,0x0d};//计时单元数据初值, 共6个

data char dis[8]={0x00,0x00,0x00,0x00,0x00,0x00,0x0a,0x00};//显示单元数据, 共6个数据

data char con1s=0x00,con04s=0x00,con=0x00,con05s=0x00,d=0x00;//1秒定时用 sbit key0=P3^2; //移位键 sbit key1=P3^3; // 加一 sbit BEEP=P2^0; //蜂鸣器接口 /****************/ //1毫秒延时程序// /***************/ delay1ms(int t) { int i,j;

for(i=0;i

for(j=0;j

/***********/ //扫描程序// /**********/ scan() {

char k;

for(k=0;k

{

CON=0X89;

PB=dis_7[dis[k]];PA=scan_con[k];delay1ms(1);PA=0xff; } }

/*****************/ //键盘调时程序//

/******************/ keyscan() {

EA=0; if(key0==0) {

delay1ms(10); while(key0==0); if(dis[con]==10)

{dis[7]=dis[con];dis[con]=dis[6];dis[6]=dis[7];} con++;TR0=0;ET0=0;TR1=1;ET1=1; if(con>=6) {con=0;TR1=0;ET1=0;TR0=1;ET0=1;} }

if(con>=0) {

if(key1==0) {

delay1ms(10); while(key1==0); d=con+2; disdata[d]++;

if(disdata[d]>=14) {disdata[d]=0;} dis[con]=disdata[d];dis[6]=0x0a; } } EA=1; }

/************/ // 打铃程序 / /*************/ Play1() {

uchar i,t;

for(i=0;i

BEEP=~BEEP; delay1ms(t); }

BEEP=1; }

Play2()

{ BEEP=1; } bell()

{if((disdata[0]==0x00||disdata[0]==0x01||disdata[0]==0x02||disdata[0]==0x03||disdata[0]==0x04)

&&disdata[1]==0x00&&disdata[2]==0x00&&disdata[3]==0x03&&disdata[5]==0x07&&disdata[6]==0x00&&disdata[7]==0x0c||(disdata[0]==0x00||disdata[0]==0x01

||disdata[0]==0x02||disdata[0]==0x03||disdata[0]==0x04)&&disdata[1]==0x00&&disdata[2]==0x00&&disdata[3]==0x03&&disdata[5]==0x00&&disdata[6]==0x01&&disdata[7]==0x0d) { Play1();}

if((disdata[0]==0x05||disdata[0]==0x06)&&disdata[1]==0x00&&disdata[2]==0x00&&disdata[3]==0x03&&disdata[5]==0x07&&disdata[6]==0x00&&disdata[7]==0x0c

||(disdata[0]==0x05||disdata[0]==0x06)&&disdata[1]==0x00&&disdata[2]==0x00&&disdata[3]==0x03&&disdata[5]==0x00&&disdata[6]==0x01&&disdata[7]==0x0d) {Play2();}

if(((disdata[0]==0x07||disdata[0]==0x08||disdata[0]==0x09)&&disdata[1]==0x00||(disdata[0]==0x00||disdata[0]==0x01)&&disdata[1]==0x01)

&&disdata[2]==0x00&&disdata[3]==0x03&&disdata[5]==0x07&&disdata[6]==0x00&&disdata[7]==0x0c||((disdata[0]==0x07||disdata[0]==0x08||disdata[0]==0x09)&&disdata[1]==0x00

||(disdata[0]==0x00||disdata[0]==0x01)&&disdata[1]==0x01)&&disdata[2]==0x00&&disdata[3]==0x03&&disdata[5]==0x00&&disdata[6]==0x01&&disdata[7]==0x0d) {Play1();} }

/************/ //初始化程序// /*************/ clearmen() { int i;

for(i=0;i

{

dis[i]=disdata[i];

}

TH0=0x3C;TL0=0xB0;// ;50MS 定时初值(T0计时用)

TH1=0x3C;TL1=0xB0;// ;50MS 定时初值(T1计时用)

TMOD=0X01;ET0=1;ET1=1;TR1=0;TR0=1;EA=1;

}

/**********/

//主程序//

/*********/

main()

{

clearmen();

while(1)

{

scan();

keyscan();

bell() ;

}

}

/********************/

//1秒中断处理程序 //

/*******************/

void time_intt0(void) interrupt 1

{

ET0=0;TR0=0;TH0=0x3C;TL0=0xB0;TR0=1;

con1s++;

con05s=con1s%10;

if(con05s==0)

{

disdata[4]--;

if( disdata[4]==9)

{disdata[4]=11;}

if(con1s==20)

{

con1s=0x00;

disdata[0]++;

if(disdata[0]>=10)

{

disdata[0]=0;disdata[1]++;

if(disdata[1]>=6)

{

disdata[1]=0;disdata[2]++;

if(disdata[2]>=10)

{

disdata[2]=0;disdata[3]++;

if(disdata[3]>=6)

{

disdata[3]=0;disdata[5]++;

if(disdata[5]>=10)

{

disdata[5]=0;disdata[6]++;

}

if(disdata[6]==1 )

{

if(disdata[5]==2)

{

disdata[5]=0;disdata[6]=0;disdata[7]++; if(disdata[7]==14)

{ disdata[7]=12;}

}

}

}

}

}

}

}

dis[0]=disdata[2];dis[1]=disdata[3];dis[3]=disdata[5];

dis[4]=disdata[6];dis[2]=disdata[4];dis[5]=disdata[7];

}

ET0=1;

}

/********************/

//0.4秒闪烁中断程序 //

/*******************/

void time_intt1(void) interrupt 3

{

EA=0;TR1=0;TH1=0x3C;TL1=0xB0;TR1=1;

con04s++;

if(con04s==8)

{

con04s=0x00;

dis[7]=dis[con];dis[con]=dis[6];dis[6]=dis[7];

}

EA=1;

}

附录2. 整体电路图


相关文章

  • 智能定时器毕业设计
  • 毕 业 设 计 (论 文) 课题名称: 基于51单片机的智能定时控制器系统设计 指导教师: 系 别:专 业: 应用电子技术 班 级: 10电子(2)班 姓 名: 毕业设计(论文)任务书 课题名称 基于51单片机的智能定时控制器系统设计 课题 ...查看


  • 基于51单片机的可调歌音乐盒设计
  • 本科学年论文 学 院 物理电子工程学院 专 业 电子科学与技术 年 级 2009级 姓 名 张家义 论文题目 基于51单片机的音乐播放器设计 指导教师 仓玉萍 职称 讲师 成 绩 2012年6月5日 目 录 摘要 ............. ...查看


  • 蔬菜大棚温度控制器设计
  • 辽 宁 工 业 大 学 单片机原理及接口技术 课程设计(论文) 题目: 蔬菜大棚温度控制器设计 院(系): 专业班级: 学 号: 学生姓名: 指导教师: (签字) 起止时间:2015.06.22-2015.7.05 课程设计(论文)任务及评 ...查看


  • 最新电子信息工程毕业论文题目参考
  • 1. 家庭防盗报警系统 2. 单片机实现单步进电机及8位流水灯控制的设计 3. 篮球竞赛计时系统 4. 单片机89C51在直流调速控制系统中的应用 5. 八路数字抢答器 6. 基于51机的直流电机设计 7. 基于51单片机的步进电机控制系统 ...查看


  • 89c51抢答器制作
  • 郑州科技学院 本科课程设计论文 题 目 专 业 姓 名 学 号 指导老师 郑州科技学院信息工程学院 二〇一四年 摘要 ............................................................. ...查看


  • 工业PC机技术的发展前景及应用实例
  • 科技信息○百家争鸣○SCIENCE&TECHNOLOGYINFORMATION2008年第24期 工业PC机技术的发展前景及应用实例 刘陆平 (江西交通职业技术学院江西 南昌 330013) 摘要:计算机控制技术是计算机的一个重要应 ...查看


  • 基于单片机的水位报警器
  • 水位报警器 摘 要 目前,国内许多水文站监测水位和降雨量仍采用人工方法.该方法不但存在测量的人身安全问题,而且还存在数据测量难准确.监测实时性不强等问题.为了实时准确监测水位及降雨量,设计了一套单片机控制的水位与降雨量监测系统.本系统以感应 ...查看


  • 基于单片机的各种制作的毕业论文
  • 以下是相应的题目供大家参考:(大家也可以提供题目) ·基于51单片机的多路温度采集控制系统 ­ .基于单片机的万年历(及电子闹钟) .基于单片机的自动寻迹小车 .基于的单片机的GPS 全球定位系统 .基于单片机的16*16点阵屏汉字显示系统 ...查看


  • 基于单片机的智能台灯设计
  • 摘要 89C51是一种带4K字节闪烁可编程可擦除只读存储器(FPEROM-Falsh Programmable and Erasable Read Only Memory)的低电压,高性能CMOS8位微处理器,俗称单片机.89C2051是一 ...查看


热门内容