单片机实习报告.docx

上传人:b****6 文档编号:7202895 上传时间:2023-01-21 格式:DOCX 页数:31 大小:1.11MB
下载 相关 举报
单片机实习报告.docx_第1页
第1页 / 共31页
单片机实习报告.docx_第2页
第2页 / 共31页
单片机实习报告.docx_第3页
第3页 / 共31页
单片机实习报告.docx_第4页
第4页 / 共31页
单片机实习报告.docx_第5页
第5页 / 共31页
点击查看更多>>
下载资源
资源描述

单片机实习报告.docx

《单片机实习报告.docx》由会员分享,可在线阅读,更多相关《单片机实习报告.docx(31页珍藏版)》请在冰豆网上搜索。

单片机实习报告.docx

单片机实习报告

关于单片机系统综合训练的实习报告

前言

目的与意义:

系统复习理论知识,熟悉单一功能的硬件设计及软件编程。

了解单片机应用系统的开发步骤,综合应用的软件开发。

掌握单片机开发系统的功能(DP150-P),熟练应用Keil51进行软件开发(编程、调试、下载、运行)。

实习要求:

1北京时间显示及调整功能。

2秒表功能。

3倒计时功能。

4正点报时功能。

项目①是基本要求,其它项目为加分项目。

项目②、③各加15分,项目④加10分。

编程语言:

C51、汇编。

汇编程序适当加分。

实习任务:

1.重新完成课程试验的题目。

2.资料准备,复习及熟悉开发系统、keil51;硬件系统熟悉。

3.系统设计、硬件设计、模块分解。

4.详细编程。

5.单元调试。

6.综合调试、运行。

7.撰写实习报告,指导教师检查、提交实习总结报告。

 

主体

1.开发平台简介

KeilC51是美国KeilSoftware公司出品的51系列兼容单片机C语言软件开发系统,与汇编相比,C语言在功能上、结构性、可读性、可维护性上有明显的优势,因而易学易用。

用过汇编语言后再使用C来开发,体会更加深刻。

C51工具包中uVision与Ishell分别是C51forWindows和forDos的集成开发环境(IDE),可以完成编辑、编译、连接、调试、仿真等整个开发流程。

开发人员可用IDE本身或其它编辑器编辑C或汇编源文件。

然后分别由C51及C51编译器编译生成目标文件(.OBJ)。

目标文件可由LIB51创建生成库文件,也可以与库文件一起经L51连接定位生成绝对目标文件(.ABS)。

ABS文件由OH51转换成标准的Hex文件,以供调试器dScope51或tScope51使用进行源代码级调试,也可由仿真器使用直接对目标板进行调试,也可以直接写入程序存贮器如EPROM中。

图1-1多功能电子时钟开发平台Easy-51实物图

注解:

采用STC8951RC(与标准51指令、脚位完全兼容),支持在线串行ISP下载。

供电方式:

USB供电

串口RS232

4个LED发光管

四位数码管

4个独立式键盘(包含外部中断按键)

一个蜂鸣器

一个PS2接口

1602液晶接口(选配件)

128*64液晶接口,单板支持带字库(ST7920)和不带字库(KS0108)两种128*64液晶.(选配件)

DS18B20温度传感器(选配件)

IrDA红外接收头(选配件)

1.1小系统板原理图

图1-2最小系统板原理图

1.2小系统板连线图

1.2.1连线总图

图1-3最小系统板连线图

1.2.2数码显示屏

图1-4数码显示屏

1.2.3按键

图1-5按键

1.2.4LED指示灯

图1-6LED指示灯

1.2.5蜂鸣器

图1-7蜂鸣器

1.3keil使用简介

1.3.1Keil具体使用

(1)点击Project菜单,选择弹出的下拉式菜单中的NewProject,如图。

然后弹出一个标准Windows文件对话窗口,如图。

在“文件名”中输入第一个C程序项目名称,“张洋.c”。

“保存”后的文件扩展名为uv2。

图1-8NewProject菜单

图1-9文件窗口

接下来会弹出如下对话框,让选择处理器,这里选择Atmel/AT89S51

图1-10选取芯片

接下来会问是否把StartupCode加入到工程,选是即可

图1-11是否添加文件窗口

然后右击SourceGroup1,选择AddFilestoGroup'SourceGroup1',然后弹出一个对话框

图1-12添加文件

然后把“张洋.c”加进去,关闭对话框,在SourceGroup1下找到“张洋.c”,打开文件。

图1-13编写源程序

然后对程序进行编译运行,这个项目只是用做学习新建程序项目和编译运行仿真的基本方法,所以使用软件默认的编译设置,它不会生成用于芯片烧写的HEX文件。

编译链接完成以后,点击“OptionsforTarget”,弹出以下活动窗口

图1-14项目选择窗口

在输出选项中选中“创建.HEX文件”,调试选项中选中“U使用”

图1-15选择“创建HEX”文件

图1-16选择“U使用”

点击“确定”,再编译链接一次,生成.hex文件。

1.3.2Keil使用特点

KeilC51软件提供丰富的库函数和功能强大的集成开发调试工具,全Windows界面。

另外重要的一点,只要看一下编译后生成的汇编代码,就能体会到KeilC51生成的目标代码效率非常之高,多数语句生成的汇编代码很紧凑,容易理解。

在开发大型软件时更能体现高级语言的优势。

使用独立的Keil仿真器时,注意事项:

  

*仿真器标配11.0592MHz的晶振,但用户可以在仿真器上的晶振插孔中换插其他频率的晶振。

  *仿真器上的复位按钮只复位仿真芯片,不复位目标系统。

  *仿真芯片的31脚(/EA)已接至高电平,所以仿真时只能使用片内ROM,不能使用片外ROM;但仿真器外引插针中的31脚并不与仿真芯片的31脚相连,故该仿真器仍可插入到扩展有外部ROM(其CPU的/EA引脚接至低电平)的目标系统中使用。

 

2.软件设计

2.1软件系统功能及流程

N

Y

N

Y

N

Y

N

Y

N

Y

图2-1总体流程图

该软件系统主要是完成一个多功能电子时钟,包含有五个功能,北京时间的显示及调整、秒表功能、倒计时功能、整点报时功能、跑表功能。

当MODE<=4时,为功能模块一;当MODE==5时,为功能模块二;当MODE==6时,为功能模块三;当MODE=7时,为功能模块四;当MODE==8时,为功能模块五。

2.2功能模块

该系统有五个功能模块:

1北京时间显示及调整功能;2秒表功能;3倒计时功能;4跑表功能;5正点报时功能。

 

图2-2模块图

 

2.2.1功能模块1

北京时间的显示及调整:

此模块包含5个模式,模式0时显示的为北京时间;模式1为小时的调节;模式2为分钟的调节;模式3显示分秒;模式4可调节分钟;在模式1、2、4中按UP和DN键可对小时和分钟进行调节。

 

N

Y

YY

N

NN

Y

YY

N

NNY

Y

N

YY

NNNY

图2-3模块一流程图

2.2.2功能模块2

秒表功能:

模式5为秒表功能,可显示0—9999s。

在此模块中,按UP键奇数次时,秒表计时,相反偶数次时,秒表暂停;按DN键可对秒表进行清0。

 

YY

N

YY

N

N

Y

 

图2-4模块二流程图

2.2.3功能模块3

倒计时功能:

模式6为倒计时功能,该倒计时最大可定时99分钟。

在此模块中,按UP键可以调整倒计的时间,按DN键可对倒计时进行暂停,倒计时减到0时,会有一次长鸣,用作标志倒计完成。

 

 

N

Y

 

N

Y

 

N

Y

 

图2-5模块三流程图

 

2.2.4功能模块4

整点报时功能:

模式7为整点报时功能,当显示屏上显示“BS.00”,报时功能关闭,显示“BS.01”,报时功能开启。

在此模块中UP键可选择功能的关闭或开启。

 

NN

 

Y

Y

 

图2-6模块四流程图

 

2.2.5功能模块5

跑表功能:

模式8为跑表功能,可显示0—99s。

在此模块中,按UP键奇数次时,跑表计时,相反偶数次时,跑表暂停;按DN键可对跑表进行清0。

 

NN

YY

NN

Y

 

Y

 

图2-7模块五流程图

3.系统操作说明

此系统主要是运用单片机应用系统的开发,和Keil51软件的编程调试,完成一个简单的多功能电子时钟,电子时钟的基本功能是北京时间的显示及调整,此外还有秒表功能、倒计时功能、整点报时功能、跑表功能,共5个功能模块。

其中除第二个功能模块显示屏小数点不闪动外,其他模块时显示屏上中间小数点0.5s亮,0.5秒灭。

3.1功能模块一——北京时间显示及调整

模式0为北京时间(时分)的显示:

打开开关即为模式0,此时LED灯都不亮,在显示屏上前两位显示小时,后两位显示分钟,中间小数点0.5S亮,0.5S灭。

模式1为北京时间时间的调节:

按MODE键1次进入模式1,LED1灯亮,按UP键小时加1,相反按DN键小时减1。

模式2为北京时间分钟的调节:

按MODE键2次进入模式2,LED2灯亮,按UP键分钟加一,相反按DN键分钟减1。

模式3为北京时间(分秒)的显示:

按MODE键3次进入模式3,LED灯都不亮,显示屏上前两位显示分钟,后两位显示秒钟。

模式4为北京时间分钟的调节:

按MODE键4次进入模式4,LED3灯亮,按UP键分钟加1,相反按DN键分钟减1。

3.2功能模块二——秒表功能

按MODE键5次进入模式5,LED4灯亮,第一次按下UP键,秒表启动,开始计时,第二次按下UP键,秒表暂停,记录的是暂停时刻的数字,若再按一次UP键,秒表又继续计时,按DN键可对秒表进行清0,此秒表最大可计时0—9999s。

3.3功能模块三——倒计时功能

按MODE键6次进入模式6,LED1灯亮,按UP键可对分钟加1,进行定时,按下DN键可对倒计时进行暂停,当倒计时完成后,会有一个声音的提醒,此倒计时最大可定时99分钟。

3.4功能模块四——整点报时功能

按MODE键7次进入模式7,LED2灯亮,此时显示屏上显示“BS.00”或“BS.01”,当显示“BS.00”时表示整点报时功能关闭,当北京时间显示整点时不报时;当显示“BS.01”时整点报时功能开始,当北京时间显示整点时报时,并且几点钟响几次。

3.5功能模块五——跑表功能

按MODE键8次进入模式8,LED灯亮,第一次按下UP键,跑表启动,开始计时,第二次按下UP键,跑表暂停,记录的是暂停时刻的数字,若再按一次UP键,跑表又继续计时,按DN键可对秒表进行清0,此跑表最大可计时99s。

4.实习体会及建议

实习体会:

在学习了数字电子技术、电子线路计算机辅助设计的课程设计后,我们对单片机有了初步的了解,在这次单片机系统综合训练的实习中,在老师和同学的帮助下,系统复习了理论知识,熟悉单一功能的硬件设计及软件编程;了解单片机应用系统的开发步骤,综合应用的软件开发;掌握单片机开发系统的功能(DP150-P),对单片机小系统板STC89C51有了更深的认识,知道芯片的结构,掌握了芯片的工作原理和其具体的使用方法,同时也知道了怎样才能把程序正确的下载到单片机中去;熟练应用Keil51进行软件开发,怎样创建工程,添加文件,编写好的程序编译、链接、调试、下载、运行;对Keil51语言有了更好的理解,知道了常用的一些语法功。

在实习过程中也提高了自己分析问题解决问题的能力,对word、photoshop、画图板等软件有了更进一步的了解,这使我在以后的工作中更加得心应手。

实习建议:

在软件设计过程中,可以从实习要求着手,分成几个功能模块完成,先画整体流程图,在各个模块中又画详细的流程图,这样对程序的后期调试很有帮助,

有问题时很容易得到解决。

4.1遇到的主要问题及解决方法

4.1.1北京时间显示及调整

问题描述:

打开开关,进入模式0时,蜂鸣器会响一次。

问题分析及解决办法:

每次打开开关时显示“00.00”,注意到在倒计时模块中,当倒计时完成时,显示“00.00”,此时有一个声音提醒标志,DJ_time=1,所以当开关打开时蜂鸣器也会响一次,为解决这个问题可以再加一个条件MODE==6,这样打开开关时就不会有提醒声音了。

4.1.2秒表

问题描述:

进入第二个模块时,当按下MODE键,模式为5时,发现秒表不是从0开始计时,而是以第一个模式的秒为初值计时;第二位后的小数点和其他模式一样也在闪动;当计时到255s时又开始归零,而不是9999s。

问题分析及解决办法:

1.秒表没有从0开始计时,是因为在定义时第一个模块与第二个模块的显示字符为同一个,为了加以区分,第二个模块的显示数字定义为Sec1,同时可以加个启动标志start_flag1,此时当MODE==5时,显示屏上“00.00”;

2.第二个小数点一直在闪动,是因为没有注意到,其他模式时都有定义if(count<100&&Bit==1)P0|=0x80,意为0.5S中间小数点亮,之后灭,不断循环,此时应加个条件if(Mode!

=5),这个问题就可以解决;

3.计时到255s时归零重新开始,是因为定义的Sec1的类型不够9999那么长,注意到定义unsignedcharSec1=0,把char改为int,此问题即得到解决。

4.1.3倒计时

问题描述:

定好时间后,按下DN键启动倒计时,显示屏没有变化。

解决办法:

开始以为是初始化出了问题,把unsignedcharSec2=0改为Sec2=59,定好时后按下DN键,此时显示屏可显示倒计时,但是减到“00.59”时显示屏又不动了,然后改为staticunsignedcharSec2=59,这时可以减到“00.00”,但是不会停止。

然后检查程序,加一个条件当减到“00.00”时,start_flag2=!

start_flag2,意为当减到0时,自动暂停倒计时。

就此问题的解决方法我觉得除了上述的减为0,暂停倒计时外还有可以选择使用刷新,倒计时过程中一直刷新显示屏,倒计完成时关闭刷新。

4.1.4整点报时

问题描述:

开启报时功能,发现到整点时未报时。

问题分析及解决办法:

检查程序没有错误,检查定义语句,发现只有“P14=1”,而没有定义蜂鸣器I/O口,应加入sbitP14=P1^4,当重新开启整点报时功能时,北京时间显示整点时可以报时。

4.2本系统的特点

1.系统采用KeilC51生成的目标代码,此软件提供丰富的库函数和功能强大的集成开发调试工具,全Windows界面,生成的目标代码效率非常高,容易理解。

2.系统可实现电子钟的五个功能,各个功能模块独立完成,互补影响。

3.倒计时功能模块中,当倒计时减为“00.00”时,蜂鸣器会长鸣一次,用做提醒倒计完成。

4.3可扩展功能

1倒计时分钟的减

功能模块三倒计时功能中,按UP键分钟加1,DN键实现倒计时的启动或暂停。

在这个模块中,没有对分钟的减1,如果定时99分钟,就需要一直得加到99,很不方便,可以再增加模式实现对分钟的减操作。

如果要实现大于99分钟的倒计时,还可增加模式进行操作。

2整点报时可有多种音乐的选择

功能模块四整点报时功能中,显示“BS.01”报时功能开始时,当北京时间到达整点时,几点钟会响几次声音。

可以增加模式做报时音乐的选择,不同的时间会有不同的音乐响起。

3可多段计数的跑表

功能模块五跑表功能中,按UP键可启动或暂停跑表,按DN键对跑表进行清0。

在这个模块中,跑表不具备存储记忆功能,当按下UP键偶数次时,跑表暂停,只可显示暂停那一刻的时间,可以增加模式,实现对多个时间段记录的跑表。

4指示灯

在整个过程中,模式比较多,LED灯作为区分模式的选择标志,在这里自己做的不是很好,在操作时不容易区分模式。

因为LED灯有四个,模式一般有八九个,这时最好选用8421BCD码,如果模式大于16个就得另外想办法。

5此外还可以加几个功能:

如闹钟功能,其中可设置打开或关闭闹钟,有无贪睡功能;显示年、月、日及调整功能,还可显示星期。

 

附录:

源程序代码

#include"reg52.h"

#defineTHCO0xee

#defineTLCO0x0

UnsignedcharcodeDuan[]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,

0x7F,0x6F};//共阴极数码管,0-9段码表

unsignedcharData_Buffer[4]={0,0,0,0};

//四个数码管显示数值,数组变量定义

unsignedcharHour=0,Min=0,Min2=0,Sec=0,Sec2=0,Sec3=0,Mill_sec=0;

unsignedintSec1=0;

bitflag=0;//1分时间到标志

bitBrush_flag=0;

bitstart_flag1=0;//秒表自启动

bitstart_flag2=0;//倒计时开启

bitstart_flag3=0;//跑表自启动

sbitP10=P1^0;//四个数码管的位码口定义

sbitP11=P1^1;

sbitP12=P1^2;

sbitP13=P1^3;

sbitP14=P1^4;//蜂鸣器控制I/O口

sbitK_Mode=P2^0;//按键定义

sbitK_UP=P2^1;

sbitK_DN=P2^2;

sbitLED1=P2^3;//四个指示灯

sbitLED2=P2^4;

sbitLED3=P2^5;

sbitLED4=P2^6;

voiddelay(intn);

unsignedcharZD_time=1;//整点报时

unsignedcharZD_N_flag=0;//整点报时功能开启否

unsignedcharDJ_time=1;//倒计时减到0

unsignedchari;

unsignedcharMode=0;

voidmain()

{

TMOD=0x11;//定时器0初始化

TH0=THCO;

TL0=TLCO;

TR0=1;

ET0=1;

EA=1;

while

(1)

{

if(ZD_time&&ZD_N_flag==1)//整点报时功能开启

{

ZD_time=0;

for(i=0;i

{

P14=0;

delay(100);

P14=1;

delay(100);

}

}

if(DJ_time&&Mode==6)

{

DJ_time=0;

P14=0;

delay(200);

P14=1;

delay(200);

}

if(Brush_flag==1)

{

Brush_flag=0;

if(Mode<=2)

{

Data_Buffer[0]=Hour/10;

Data_Buffer[1]=Hour%10;

Data_Buffer[2]=Min/10;

Data_Buffer[3]=Min%10;

}

elseif(Mode<=4)

{

Data_Buffer[0]=Min/10;

Data_Buffer[1]=Min%10;

Data_Buffer[2]=Sec/10;

Data_Buffer[3]=Sec%10;

}

elseif(Mode==5)

{

Data_Buffer[0]=Sec1/1000;

Data_Buffer[1]=Sec1%1000/100;

Data_Buffer[2]=Sec1%100/10;

Data_Buffer[3]=Sec1%10;

}

elseif(Mode==6)

{

Data_Buffer[0]=Min2/10;

Data_Buffer[1]=Min2%10;

Data_Buffer[2]=Sec2/10;

Data_Buffer[3]=Sec2%10;

}

elseif(Mode==7)

{

Data_Buffer[0]=Sec3/10;

Data_Buffer[1]=Sec3%10;

Data_Buffer[2]=Mill_sec/10;

Data_Buffer[3]=Mill_sec%10;

}

elseif(Mode==8)

{

Data_Buffer[0]=8;

Data_Buffer[1]=5;

Data_Buffer[2]=0;

Data_Buffer[3]=ZD_N_flag;

}

}

}

}

voiddelay(intn)

{

unsignedchari,j;

for(i=0;i

{

for(j=0;j<250;j++)

{

}

}

}

voidtimer0()interrupt1

{

staticunsignedcharBit=0;//静态变量,退出程序后,值保留

staticunsignedcharcount=0,K_count=0,count1=0,count2=0,count3=0;

TH0=THCO;

TL0=TLCO;

count++;

if(count>=200)//秒计时,定时器定时5ms,计200次为一秒

{

count=0;

Sec++;

if(Sec>=60)

{

Sec=0;

Min++;

if(Min>=60)//时间计时

{

Min=0;Hour++;

ZD_time=1;

if(Hour>=24)Hour=0;

}

}

Brush_flag=1;//更新数码管显示

}

Bit++;

if(Bit>=4)Bit=0;

P1|=0x0f;//先关位码

P0=Duan[Data_Buffer[Bit]];//开段码

if(Mode!

=5)

{

if(count<100&&Bit==1)P0|=0x80;}//0.5S中间小数点亮,之后灭,不断循环

switch(Bit)//送位码

{

case0:

P10=0;break;

case1:

P11=0;break;

case2:

P12=0;break;

case3:

P13=0;break;

}

if(start_flag1==1)//秒表开启

{

count1++;

if(count1>=200)

{

count1=0;

Sec1++;

if(Sec1>9999)

Sec1=0;

}Brush_flag=1;

}

if(start_flag2==1)//倒计时开启

{

count2++;

if(count2>=200)

{

count2=0;

if(Sec2<=0)

{

if(Min2<=0){DJ_time=1;start_flag2=!

start_flag2;}

else{Min2--;Sec2=59;}

}

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 高等教育 > 农学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1