单片机原理与应用 课程设计与实现
实训报告
专业 : 自动化 年级/班级:
姓名 :
实训时间 :
实训地点 :
指导教师 :
一、 实训题目:基于51单片机电子时钟设计
设计要求:(1)可设定时间;
(2)可显示当时时间;
(3)每小时振铃响一次,并且振铃铃声响次数与时间一致。
二、 实训目的:
(1). 学习8051定时器时间计时处理、按键扫描及LED数码管显示的设计方法。
(2). 设计任务及要求 利用实验平台上6个LED数码管, 设计带有闹铃功能的数字时钟。
三、 所用器件工作原理及控制方法:
1.89s52
AT89S52是一种低功耗、高性能CMOS 8位微控制器,使用 ATMEL 公司高密度非易失性存储器技术制造,与工业80C51产品指令和引脚完全兼容。并具有以下标准功能: 8k字节Flash,256字节RAM,32 位I/O 口线,看门狗定时器,2 个数据指针,三个16 位定时器/计数器,一个6向量2级中断结构,全双工串行口,片内晶振及时钟电路。另外,AT89S52 可降至0Hz 静态逻辑操作,支持2种软件可选择节电模式。空闲模式下,CPU停止工作,允许RAM、定时器/计数器、串口、中断继续工作。掉电保护方式下,RAM内容被保存,振荡器被冻结,单片机一切工作停止,直到下一个中断或硬件复位为止。
2.定时
软件方法,利用单片机本身的定时计数功能,节省成本,提高稳定性。
3.显示
采用LED8段数码管,具有耗电低、配置灵活、线路简单、安装方便、耐转动、价格低廉且寿命长等优点。
4.74LS244
74LS244为3态8位缓冲器,一般用作总线驱动器。74LS244没有锁存的功能。地址锁存器就是一个暂存器,它根据控制信号的状态,将总线上地址代码暂存起来。8086/8088数据和地址总线采用分时复用操作方法,即用同一总线既传输数据又传输地址。
5.简介
当微处理器与存储器交换信号时,首先由CPU发出存储器地址,同时发出允许锁存信号ALE给锁存器,当锁存器接到该信号后将地址/数据总线上的地址锁存在总线上,随后才能传输数据。
74ls244图例
锁存器是一个很普通的时序电路。一般的,它在时钟上升沿或者下降沿来的时候锁存输入,然后产生输出,在其他的时候输出都不跟随输入变化,这就是所谓边缘触发的D触发器。
通常用作单片机的地址锁存器的芯片有74LS373、8282、74LS273、74HC373等。
用途
它主要用于三态输出,作为地址驱动器、时钟驱动器、总线驱动器和定向发送器等。其真值表如下:74Ls244真值表
74LS244真值表:
L表示低电平
H表示高电平
X表示不定状态
Z表示高阻态
74Ls244技术参数
四、 软硬件设计
1. 显示模块
(1) 硬件设计
(2) 流程图
(3) 软件设计
void led_dispiay( )
{
wx_0=0;wx_1=0; //小时位选 ledbit=smg[time1s/10]; //十位显示 wx_1=1;
delay();
wx_1=0;
ledbit=smg[time1s%10]; //个位显示 wx_0=1;
delay();
wx_0=0;
wx_2=0;wx_3=0; //分钟显示 ledbit=smg[time1f/10]; //十位显示 wx_3=1;
delay();
wx_3=0;
ledbit=smg[time1f%10]; //个位显示 wx_2=1;
delay();
wx_2=0;
wx_4=0;wx_5=0; //分钟显示 ledbit=smg[time1x/10]; //十位显示 wx_5=1;
delay();
wx_5=0;
ledbit=smg[time1x%10]; //
wx_4=1;
delay();
wx_4=0;
}
2. 定时模块
(1) 流程图
(2) 软件设计
void time1() interrupt 1
{
time50ms++;
if(time50ms==20) //
{
time50ms=0;
time1s++;
if( time1s==60)
{
time1s=0;
time1f++;
if(time1f==60)
{
time1f=0;
time1x++;
if(time1x==24)
{
time1x=0;
}
}
}
}
TH0=0x3c;
TL0=0xb0;
} 个位显示 计数20个50ms为1s
3. 键盘控制模块
(1) 硬件设计
(2) 流程图
(3) 软件设计
void shezhi_diaplay()
{
if(1)
{
if(yiwei==0)
delayms(66);
if(yiwei==0)
{
TR0=0;
++num;
}
/*..................秒调整......................*/ if(num==1&jia==0)
delayms(70);
if(num==1&jia==0)
time1s++;
if(num==1&sub==0)
delayms(70);
if(num==1&sub==0)
time1s--;
// led_dispiay( ); /*..................分钟调整......................*/ if(num==2&jia==0)
delayms(70);
if(num==2&jia==0)
time1f++;
if(num==2&sub==0)
delayms(70);
if(num==2&sub==0)
time1f--;
//led_dispiay( ); /*..................小时调整......................*/
if(num==3&jia==0)
delayms(70);
if(num==3&jia==0)
time1x++;
if(num==3&sub==0)
delayms(70);
if(num==3&sub==0)
time1x--;
// led_dispiay( ); if(num>=4)
{
num=0;
TR0=1;
}
}
}
4. 总设计电路图
五、 实训总结:
经过两周的单片机课程设计,我组基本完成课题要求。虽然还是存在很多不足,但是功能上基本达标。时钟显示功能,精确度完全可以满足日常生活显示时间的需要;调时功能,方便快捷。硬件设施合乎要求,软件设计可以配合硬件实现要求功能。但是由于时间比较短,出现部分不足:初期时钟不显示数字,经检查是由于硬件连接不完善,存在漏焊,虚焊和错焊等问题。不过,我们相信,如果时间充足,将软件改进,我们完全可以很好实现所有功能。
另外,在本次设计的过程中,我们发现很多的问题,虽然以前没有做过这样的设计但通过这次设计我学会了很多东西,单片机课程设计重点就在于软件算法的设计,需要有很巧妙的程序算法,虽然以前写过几次程序,但我们觉的写好一个程序并不是一件简单的事,比如写一个程序看其功能很少认为编写程序简单,但到编的时候才发现一些细微的知识或低级错误经常犯做不到最后常常失败,所以有些东西只有学精弄懂并且要细心才行,只学习理论有些东西是很难理解的,更谈不上掌握。
从这次的课程设计中,我们真正的意识到,在以后的学习中,要理论联系实际,把我们所学的理论知识用到实际当中,学习单机片机更是如此,程序只有在经常的练习的过程中才能提高,我想这就是我们在这次课程设计中的最大收获。最后非常感谢王老师的悉心指导!
六、 附件:
附1:程序代码
#include <reg52.h>
#include <intrins.h> //有_nop_的头文件
/***********变量定义*********************************************/
#define uchar unsigned char
#define uint unsigned int
void shezhi_display(void);
void led_display(uchar m);
void zhengdian(void);
void delay(void);
void delayms(uchar ms);
uchar time1s=0,time50ms; //定时1s计数器
uchar time1f=0,time1x=0;
uchar a,b,k,m,num=0;
#define ledbit P0 //P0.0-P0.7--A~G
extern uchar code smg[]= { //共阳极0-9显示代码
//-0-----1-----2-----3-----4-----5-----6-----7-----8---9-- 0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F };
sbit wx_0=P2^0;
sbit wx_1=P2^1;
sbit wx_2=P2^2;
sbit wx_3=P2^3;
sbit wx_4=P2^4; // 数码管位选
sbit wx_5=P2^5;
sbit zd=P1^4;
sbit shezhi=P1^1;
sbit jia=P1^2;
sbit sub=P1^5;
sbit yiwei=P1^0;
void init () //对应定时器和外部中断1;
{
TMOD = 0x01; //T0T1方式控制
TH0=0x3c;
TL0=0xb0; //计时50ms
EA=1; //开全局中断
ET0=1; //开定时中断0
TR0=1;
}
void delay(void) //延时函数,延时约0.6ms
{
unsigned char j;
for(j=0;j<200;j++);
}
void delayms(uchar ms)
{
uchar i;
while(ms--)
for(i=0;i<200;i++);
}
/*************** *******************************************
/函数名:led_display()
/功能 :数码管显示数据,驱动芯片74LS244
/输入 :dat ---8位数据
/输出 :无
/说明 :输入十进制数。
/********************************************************/ void led_dispiay( )
{
wx_0=0;wx_1=0; //小时位选 ledbit=smg[time1s/10]; //十位显示
wx_1=1;
delay();
wx_1=0;
ledbit=smg[time1s%10]; //个位显示
wx_0=1;
delay();
wx_0=0;
wx_2=0;wx_3=0; //分钟显示 ledbit=smg[time1f/10]; //十位显示
wx_3=1;
delay();
wx_3=0;
ledbit=smg[time1f%10]; //个位显示
wx_2=1;
delay();
wx_2=0;
wx_4=0;wx_5=0; //分钟显示
ledbit=smg[time1x/10]; //十位显示
wx_5=1;
delay();
wx_5=0;
ledbit=smg[time1x%10]; //个位显示
wx_4=1;
delay();
wx_4=0;
}
/***************定时中断**********************************/ void time1() interrupt 1
{
time50ms++;
if(time50ms==20) //计数20个50ms为1s
{
time50ms=0;
time1s++;
if( time1s==60)
{
time1s=0;
time1f++;
if(time1f==60)
{
time1f=0;
time1x++;
if(time1x==24)
{
time1x=0;
}
}
}
}
TH0=0x3c;
TL0=0xb0;
}
void shezhi_diaplay()
{
if(1)
{
if(yiwei==0)
delayms(66);
if(yiwei==0)
{
TR0=0;
++num;
}
/*..................秒调整......................*/ if(num==1&jia==0)
delayms(70);
if(num==1&jia==0)
time1s++;
if(num==1&sub==0)
delayms(70);
if(num==1&sub==0)
time1s--;
// led_dispiay( ); /*..................分钟调整......................*/ if(num==2&jia==0)
delayms(70);
if(num==2&jia==0)
time1f++;
if(num==2&sub==0)
delayms(70);
if(num==2&sub==0)
time1f--;
//led_dispiay( ); /*..................小时调整......................*/ if(num==3&jia==0)
delayms(70);
if(num==3&jia==0)
time1x++;
if(num==3&sub==0)
delayms(70);
if(num==3&sub==0)
time1x--;
// led_dispiay( ); if(num>=4)
{
num=0;
TR0=1;
}
}
}
void zhengdian(void)
{
if(time1s==0&time1f==0)
{
uchar k;
for(k=0;k<5;k++)
{
zd=0;
delayms(10);
delayms(10);
delayms(10);
delayms(10);
zd=1;
delayms(10);
}
}
}
/*********************主程序***********************/
void main()
{
init();//初始化
while(1)
{
shezhi_diaplay( );
led_dispiay( );//显示
// zhengdian( ); }
}
附2:
实物图:
正面
背面
使用仪器:
硬件:万用表一个,焊锡丝若干,烙铁一个
PC机一台,下载线一个
软件:KEIL软件,protel软件,下载程序软件。
参考文献
[1]王明亮.关于中国学术期刊标准化数据库系统工程的进展.http://www./pch/wml.txt/980810-2.html.
[2] 彭伟 .单片机C语言程序设计实训100例——基于8051+Proteus仿真(工学版),电子工业出版社, 2009/6/1
[3] 谢宜仁. 单片机硬件接口电路及实例解析. 电子工业出版社,2009/4/1.
[4] 谢维成,杨加国 主编,董秀成 主审,单片机原理与应用及C51程序设计。清华大学出版社.2006/8/1
[5]童诗白,华成英主编,模拟电子技术基础,高等教育出版社,2006/5.
[6]李朝青编著.单片机原理及接口技术(第3版) 北京航空航天大学出版社.2005/5.
基于单片机电子时钟的设计绪论单片机自20世纪70年代问世以来以其极高的性能价格比受到人们的重视和关注应用很广发展很快单片机体积小重…
科技创新实践[数字时钟设计][用AT89S52单片机设计电子时钟的实验报告]目录单片机的个性化电子钟设计报告1一、设计背景1二、作…
单片机电子时钟的设计目录1引言12设计任务与要求221设计题目222设计要求23系统的功能分析与设计方案331系统的主要功能332…
电子时钟实验报告全部代码在文档末尾51单片机LCD1602液晶显示屏平台下编程实现可直接编译运行目录一实验目的1二实验要求2三实验…
第一部分设计任务和要求11单片机课程设计内容利用STC89C51单片机和LCD1602电子显示屏实现电子时钟可由按键进行调时和12…
JINGCHUUNIVERSITYOFTECHNOLOGY单片机原理及应用课程设计报告题目电子时钟专业电气工程及其自动化班级20x…
第一部分设计任务和要求11单片机课程设计内容利用STC89C51单片机和LCD1602电子显示屏实现电子时钟可由按键进行调时和12…
基于单片机电子时钟的设计绪论单片机自20世纪70年代问世以来以其极高的性能价格比受到人们的重视和关注应用很广发展很快单片机体积小重…
单片机课程设计电子钟一实现功能1能够实现准确计时以数字形式显示时分秒的时间2小时以24小时计时形式分秒计时为60进位能够调节时钟时…
电子时钟实验报告全部代码在文档末尾51单片机LCD1602液晶显示屏平台下编程实现可直接编译运行目录一实验目的1二实验要求2三实验…
一6该课程设计是利用MCS51单片机内部的定时计数器中断系统以及行列键盘和LED显示器等部件设计一个单片机电子时钟设计的电子时钟通…