C51程序设计结课报告.docx
《C51程序设计结课报告.docx》由会员分享,可在线阅读,更多相关《C51程序设计结课报告.docx(18页珍藏版)》请在冰豆网上搜索。
C51程序设计结课报告
C51程序设计结课报告
姓名:
学号:
班级:
指导老师:
时间:
目录
1MCS-51系列单片机内部结构和引脚说明1
1.1MCS-51型单片机存储器1
1.2MCS-51型单片机并行输入/输出接口2
1.3MCS-51型单片机的时钟电路与时序2
2KEILC51软件的使用2
2.1建立一个新工程2
3Proteus软件使用7
3.1进入ProteusISIS7
3.2寻找元器件7
3.3画出电路图7
3.4仿真8
4十字交通灯的设计9
4.1设计任务9
4.2画出原理图9
4.3编辑程序9
4.4生成.hex文件13
4.5仿真13
4.5.1烧入.hex文件13
4.5.2仿真结果14
5结课总结14
1MCS-51系列单片机内部结构和引脚说明
在功能上,MCS-51系列单片机有基本型和增强型两类,以芯片型号的末位数字来区分,“1”为基本型,“2”为增强型。
如8051/8751/8031、80C51/87C51/80C31为基本型,而8052/8752/8032、80C52/87C52/80C32为增强型。
MCS-51系列单片机在片内程序存储器的配置上有3种形式,即掩膜ROM、EPROM和片内无程序存储器。
如在基本型中,8051内有4KB的掩膜ROM,8751内有4KB的EPROM,而8031片内无程序存储器,使用时需在单片机外部扩展程序存储器。
另外,属于MCS-51系列的单片机还有8044/8744/8344,这类单片机增加了串行接口单元(SIU),专门负责串行通信管理,使单片机的组网功能大大增强。
8051单片机功能方框图
1.1MCS-51型单片机存储器
MCS-51型单片机的存储器结构有两个重要的特点:
一是把数据存储器和程序存储器严格分开;二是存储器有内外之分,其地址空间、存取指令和控制信号均有区别。
MCS-51型单片机的存储器组织结构有4个物理上相互独立的空间:
片内程序存储器和片外程序存储器,内部数据存储器和片外数据存储器。
但从用户的角度看,实际上存在3个独立的空间。
3个不同的空间用不同的指令和控制信号实现读、写功能操作。
1.2MCS-51型单片机并行输入/输出接口
MCS-51单片机有4个8位并行输入/输出(I/O)接口P0~P3,共32根I/O线。
这4个端口既可以并行输入或输出8位数据,又可以按位使用(每一位均可独立用作输入或输出)。
这些并行端口的每1位都由端口锁存器、逻辑控制电路、输出驱动电路和输入缓冲器组成。
为方便起见,常把4个端口和它的锁存器统称为P0~P3。
1.3MCS-51型单片机的时钟电路与时序
单片机本身就是一个复杂的同步时序电路,为了确保同步工作方式的执行,电路应在唯一的时钟信号控制下严格地按时序进行工作。
、
2KEILC51软件的使用
Keil软件的安装
2.1建立一个新工程
(1)、单击Project菜单,在弹出的下拉菜单中选中NewProject选
(2)、然后选择你要保存的路径,输入工程文件的名字,比如保存到C51目录里,工程文件的名字为suchao如下图所示,然后点击保存。
(3)、这时会弹出一个对话框,要求你选择单片机的型号,你可以根据你使用的单片机来选择,keilc51几乎支持所有的51核的单片机,我这里还是以大家用的比较多的Atmel的89C51来说明,如下图所示,选择89C51之后,右边栏是对这个单片机的基本的说明,然后点击确定.
(4)、完成上一步骤后,屏幕如下图所示
2、编写简单程序
(1)、新建文本文档在下图中,单击“File”菜单,再在下拉菜单中单击“New”选项
此时光标在编辑窗口里闪烁,这时可以键入用户的应用程序了,但笔者建议首先保存该空白的文件,单击菜单上的“File”,在下拉菜单中选中“SaveAs”选项单击,屏幕如下图所示,在“文件名”栏右侧的编辑框中,键入欲使用的文件名,同时,必须键入正确的扩展名。
注意,如果用C语言编写程序,则扩展(.c);
(2)、添加程序文件到工程文件中
回到编辑界面后,单击“Target1”前面的“+”号,然后在“SourceGroup1”上单击右键,弹出如下菜单
选中Test.c,然后单击“Add”屏幕好下图所示
(3)、编写程序
3、调试程序
、
4、生成.HEX文件
单击“Project”菜单,再在下拉菜单中单击“OptionsforTarget‘Target1’”在下图中,单击“Output”中单击“CreateHEXFile”选项,使程序编译后产生HEX代码,供下载器软件使用。
把程序下载到AT89S51单片机中。
3Proteus软件使用
3.1进入ProteusISIS
3.2寻找元器件
3.3画出电路图
通过keilC编译并生成.hex文件。
3.4仿真
双击单片机芯片,弹出如图1.2.18所示的对话框,在ProgramFile选项内添加.hex文件。
4十字交通灯的设计
4.1设计任务
设计一个实时控制的十字交通灯
4.2画出原理图
4.3编辑程序
#include
Unsignedcharcodesegdata[]={0x3f,0x06,0x5b,0x4f,0x66,
0x6d,0x7d,0x07,0x7f,0x6f};
unsignedcharledcode[]={0x0c,0x0c,0x0a,0x21,0x21,0x11};
//**********************0x21东西红灯,南北绿灯
//**********************0x11东西红灯,南北黄灯
//**********************0x0c东西绿灯,南北红灯
//**********************0x0a东西黄灯,南北红灯
unsignedcharsecond;
unsignedcharred,gre,yell;
//unsignedcharkeycnt;
unsignedinttcnt,flag;
//unsignedintk;
voiddeplay10ms(void)
{
unsignedinti,j;
for(i=0;i<4;i++)
for(j=0;j<250;j++);
}
voids0(void)
{
P1=0xfe;
P0=segdata[red/10];
P3=segdata[gre/10];
deplay10ms();
P1=0xfd;
P0=segdata[red%10];
P3=segdata[gre%10];
deplay10ms();
}
voids1(void)
{
P1=0xfe;
P0=segdata[red/10];
P3=segdata[yell/10];
deplay10ms();
P1=0xfd;
P0=segdata[red%10];
P3=segdata[yell%10];
deplay10ms();
}
voids2(void)
{
P1=0xfe;
P3=segdata[red/10];
P0=segdata[gre/10];
deplay10ms();
P1=0xfd;
P3=segdata[red%10];
P0=segdata[gre%10];
deplay10ms();
}
voids3(void)
{
P1=0xfe;
P3=segdata[red/10];
P0=segdata[yell/10];
deplay10ms();
P1=0xfd;
P3=segdata[red%10];
P0=segdata[yell%10];
deplay10ms();
}
voidsegplay(void)
{
switch(flag)
{
case0:
case1:
s0();break;
case2:
s1();break;
case3:
case4:
s2();break;
case5:
s3();break;
}
}
voidyells(void)
{
unsignedchari;
P2=ledcode[flag];
for(i=0;i<10;i++)
{
segplay();
}
P2=ledcode[flag]&0xed;
for(i=0;i<10;i++)
{
segplay();
}
}
voidgres(void)
{
unsignedchari;
P2=ledcode[flag];
for(i=0;i<10;i++)
{
segplay();
}
P2=ledcode[flag]&0xdb;
for(i=0;i<10;i++)
{
segplay();
}
}
voidmain(void)
{
TMOD=0x01;
ET0=1;
EA=1;
TH0=0x3c;
TL0=0xb0;
tcnt=0;
TR0=1;
second=30;
flag=0;
while
(1)
{
red=second;
gre=second-5;
yell=second;
segplay();
switch(flag)
{
case0:
P2=ledcode[flag];break;
case1:
gres();break;
case2:
yells();break;
case3:
P2=ledcode[flag];break;
case4:
gres();break;
case5:
yells();break;
}
}
}
voidt0(void)interrupt1using0
{
tcnt++;
TH0=0x3c;
TL0=0xb0;
if(tcnt==20)
{
tcnt=0;
second--;
if(second==0)
{
second=30;
flag++;
}
if(second==5)
{flag++;}
if(second==10)
{flag++;
}
if(flag==6)
{flag=0;}
}
}
4.4生成.hex文件
4.5仿真
4.5.1烧入.hex文件
4.5.2仿真结果
5结课总结
本学期我们开设了C51这门课程,原本我以为这门课程会是很枯燥的,然而这学期经过老师的精心安排,将许多课本上的知识许多实际中的事情相结合,渐渐地让我对这门课产生了兴趣。
通过一个学期的学习,我才发现C51不仅仅是要学到软件上的知识,还要学到硬件上的知识,于是我认真的学习C51,并在每次做完实验后认真的做实验报告,并且进行了实训,通过实训,让我更熟悉掌握了KeiluVision3,proteusISIS,Protel99SE这些应用程序的运用,让我懂得了如何编写一些简单的程序,还有焊接和程序固化但是在做的过程中还是有不少错误。
这让我认识到以后,要做好一个课程设计,就必须做到:
在设计程序之前,对所用单片机的内部结构有一个系统的了解,知道该单片机内有哪些资源;要有一个清晰的思路和一个完整的的软件流程图;在设计程序时,不能妄想一次就将整个程序设计好,反复修改、不断改进是程序设计的必经之路;要养成注释程序的好习惯,一个程序的完美与否不仅仅是实现功能,而应该让人一看就能明白你的思路,这样也为资料的保存和交流提供了方便;在设计课程过程中遇到问题是很正常德,但我们应该将每次遇到的问题记录下来,并分析清楚,以免下次再碰到同样的问题的课程设计结束了,但是从中学到的知识会让我受益终身。
这也让我认识到,无论做什么事情,只要你足够坚强,有足够的毅力与决心,有足够的挑战困难的勇气,就没有什么办不到的。
最后感谢赵老师对我门的教导.