MCS51 单片机最小系统设计.docx
- 文档编号:11329057
- 上传时间:2023-02-27
- 格式:DOCX
- 页数:18
- 大小:247.70KB
MCS51 单片机最小系统设计.docx
《MCS51 单片机最小系统设计.docx》由会员分享,可在线阅读,更多相关《MCS51 单片机最小系统设计.docx(18页珍藏版)》请在冰豆网上搜索。
MCS51单片机最小系统设计
MCS-51单片机最小系统设计
第一部分课程设计任务书
一、课程设计题目
MCS-51单片机最小系统设计
二、课程设计时间
一周
三、课程设计提交方式
提交打印课程设计报告
四、设计要求
(1)掌握AT89C51实验开发系统中的实验模块原理,利用Proteus画出电路原理图,使用C语言进行程序编写,利用Keil进行程序的调试;
(2)设计一个电子数码钟,实现24小时时间显示与调节;
(3)利用七段数码管进行时分秒的显示;
(4)设计三个功能键,第一个键选择时、分、秒调节,第二个和第三个键进行时间加减调节;
(6)写出完整的设计任务书;
第二部分课程设计报告
一、单片机发展概况
单片机是在一块硅片上集成了各种部件的微型计算机。
随着大规模集成电路技术的发展,可以将中央处理器(CPU)、数据存储器(RAM)、程序存储器(ROM)定时器计数器以及输入/输出(I/O)接口电路等主要计算机部件,集成在一块电路芯片上。
虽然单片机只是一个芯片,但从组成和功能上,都已具有了微机系统的含义。
由于单片机能独立执行内部程序,所以又称它为微型控制器(Microcontroller)。
单片机自从问世以来,性能在不断的提高和完善,它不仅能够满足很多应用场合的需要,而且具有集成度高、功能强、速度快、体积小使用方便、性能可靠、价格低廉等特点。
因此,在工业控制、智能仪器仪表、数据采集和处理、通信、智能接口、商业营销等领域得到广泛的应用,并且正在逐步取代现有的多片微机应用系统。
单片机的潜力越来越被人们所重视,所以更扩大了单片机的应用范围,也进一步促进了单片机技术的发展,单片机的发展史大致可分为三个阶段。
第一阶段(1976-1978):
初级单片机微处理阶段。
该时期的单片机具有8位CPU,并行I/O端口、8位时序同步计数器,寻址范围4KB,但是没有串行口。
第二阶段(1978-1982):
高性能单片机微机处理阶段,该时期的单片机具有I/O串行端口,有多级中断处理系统,15位时序同步技术器,RAM、ROM容量加大,寻址范围可达64KB。
第三阶段(1982-至今)位单片机微处理改良型及16位单片机微处理阶段。
二、MCS-51单片机系统简介
AT89C51是一种带4K字节闪烁可编程可擦除只读存储器(FPEROM—FalshProgrammableandErasableReadOnlyMemory)的低电压,高性能CMOS8位微处理器,俗称单片机。
AT89C2051是一种带2K字节闪烁可编程可擦除只读器的单片机。
单片机的可擦除只读存储器可以反复擦除100次。
该器件采用ATMEL高密度非易失存储器制造技术制造,与工业标准的MCS-51指令集和输出管脚相兼容。
由于将多功能8位CPU和闪烁存储器组合在单个芯片中,ATMEL的AT89C51是一种高效微控制器,AT89C2051是它的一种精简版本。
AT89C51单片机为很多嵌入式控制系统提供了一种灵活性高且价廉的方案。
单片机内部结构图为如图
三、设计思想
(1)根据功能要求选取所需的元件,绘制硬件电路图;
(2)根据功能要求绘制程序流程图;
(3)设置各功能模块,绘制流程图;
(4)根据流程图编写程序,并进行模拟仿真;
四、硬件电路设计
五、软件设计框图
主程序流程图
定时器中断流程图
按键检测流程图
时间显示过程流程图
六、程序源代码
#include
unsignedcharcode
table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x40,0x00};
unsignedcharflag,temp,t0,temp,hour,min,sec;
/********延时*******/
voiddelay()
{
unsignedcharx,y;
for(x=15;x>0;x--)
for(y=100;y>0;y--);
}
/***********初始化***********/
voidinit()
{
temp=0;
hour=0;
min=0;
sec=0;
TMOD=0x01;
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
EA=1;
ET0=1;
TR0=1;
}
/************显示************/
voiddisplay(hour,min,sec)
{
P2=0xfe;
P0=table[hour/10];
delay();
P2=0xfd;
P0=table[hour%10];
delay();
P2=0xfb;
P0=table[10];
delay();
P2=0xf7;
P0=table[min/10];
delay();
P2=0xef;
P0=table[min%10];
delay();
P2=0xdf;
P0=table[10];
delay();
P2=0xbf;
P0=table[sec/10];
delay();
P2=0x7f;
P0=table[sec%10];
delay();
P0=table[11];
}
/**********主函数***********/
voidmain()
{
init();
while
(1)
{
P3=0xff;
flag=P3;
while(flag==0xef)
{
delay();
flag=P3;
while(flag==0xef)
{
temp++;
if(temp==4)
temp=0;
while(flag==0xef)
{EA=0;
flag=P3;
display(hour,min,sec);
}
}
}
if(temp==0)
{
EA=1;
display(hour,min,sec);
}
else
{
P3=0xff;
flag=P3;
while(flag==0xdf||flag==0xbf)
{
delay();
flag=P3;
while(flag==0xdf||flag==0xbf)
{
flag=P3;
if(temp==1)
{
switch(flag)
{
case0xdf:
{
hour++;
if(hour==24)
hour=0;
}
break;
case0xbf:
{
hour--;
if(hour==-1)
hour=23;
}
break;
}
}
if(temp==2)
{
switch(flag)
{
case0xdf:
{
min++;
if(min==60)
min=0;
}
break;
case0xbf:
{
min--;
if(min==-1)
min=59;
}
}
}
if(temp==3)
{
switch(flag)
{
case0xdf:
{
sec++;
if(sec==60)
sec=0;
}
break;
case0xbf:
{
sec--;
if(sec==-1)
sec=59;
}
}
}
while(flag==0xdf||flag==0xbf)
{
flag=P3;
display(hour,min,sec);
}
}
}
P2=0xfb;
P0=table[10];
delay();
P2=0xdf;
P0=table[10];
delay();
P2=0xbf;
P0=table[sec/10];
delay();
P2=0x7f;
P0=table[sec%10];
delay();
switch(temp)
{
case1:
{
P2=0xf7;
P0=table[min/10];
delay();
P2=0xef;
P0=table[min%10];
delay();
P2=0xbf;
P0=table[sec/10];
delay();
P2=0x7f;
P0=table[sec%10];
delay();
if(t0<=10)
{
P2=0xfe;
P0=table[hour/10];
delay();
P2=0xfd;
P0=table[hour%10];
delay();
}
else
{
P2=0xfe;
P0=table[11];
delay();
P2=0xfd;
P0=table[11];
delay();
}
}
break;
case2:
{
P2=0xfe;
P0=table[hour/10];
delay();
P2=0xfd;
P0=table[hour%10];
delay();
P2=0xbf;
P0=table[sec/10];
delay();
P2=0x7f;
P0=table[sec%10];
delay();
if(t0<10)
{
P2=0xf7;
P0=table[min/10];
delay();
P2=0xef;
P0=table[min%10];
delay();
}
else
{
P2=0xf7;
P0=table[11];
delay();
P2=0xef;
P0=table[11];
delay();
}
}
break;
case3:
{
P2=0xfe;
P0=table[hour/10];
delay();
P2=0xfd;
P0=table[hour%10];
delay();
P2=0xf7;
P0=table[min/10];
delay();
P2=0xef;
P0=table[min%10];
delay();
if(t0<10)
{
P2=0xbf;
P0=table[sec/10];
delay();
P2=0x7f;
P0=table[sec%10];
delay();
}
else
{
P2=0xbf;
P0=table[11];
delay();
P2=0x7f;
P0=table[11];
delay();
}
}
break;
}
}
}
}
/************定时器设定***********/
voidtimer0()interrupt1
{
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
t0++;
if(t0==20)
{
t0=0;
sec++;
if(sec==60)
{
sec=0;
min++;
if(min==60)
{
min=0;
hour++;
if(hour==24)
{
hour=0;
}
}
}
}
}
七、结束语
通过这短短一周的实践,我感觉到自己从课本上学到的理论知识和实践仍有很大的差距。
遇到了不少问题,花费了很多的时间。
这让我重新反思我们的学习,深刻领悟到我们这个专业动手,实践的重要性。
这次的课程设计,让我学到了很多书本上学不到的东西,学到了实际应用时,是取用成本的最小化,做设计不仅要考虑大的方面,小的方面也必须做到完美。
同时,更加深刻的掌握了AT89C51的使用,还有七段数码管,按键的应用。
完成本次课程设计的过程,是一个从无到有的过程,开始时很迷茫,慢慢的变得烦躁,但是最后做完的的时候有一种很强烈的成就感。
八、参考文献
1.张鑫.单片机原理及应用(第二版).电子工业出版社
2.郭天祥.51单片机C语言教程.电子工业出版社
3.谭浩强.C程序设计(第二版).清华大学出版社
4欧阳斌林.单片机原理及应用.中国水利水电出版社
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- MCS51 单片机最小系统设计 单片机 最小 系统 设计