单片机实验报告册剖析.docx

上传人:b****7 文档编号:25435321 上传时间:2023-06-08 格式:DOCX 页数:16 大小:184.31KB
下载 相关 举报
单片机实验报告册剖析.docx_第1页
第1页 / 共16页
单片机实验报告册剖析.docx_第2页
第2页 / 共16页
单片机实验报告册剖析.docx_第3页
第3页 / 共16页
单片机实验报告册剖析.docx_第4页
第4页 / 共16页
单片机实验报告册剖析.docx_第5页
第5页 / 共16页
点击查看更多>>
下载资源
资源描述

单片机实验报告册剖析.docx

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

单片机实验报告册剖析.docx

单片机实验报告册剖析

电子科技大学成都学院

实验报告册

 

课程名称:

单片机实验

姓名:

陈强

学号:

1240720119

院系:

微电子技术系

专业:

电子科学与技术

教师:

林国伟

 

2015年6月2日

实验二LED流水灯

一、实验目的:

1.掌握并口的使用

2.掌握移位指令的使用

二、实验原理和内容:

实验原理:

1.共阳LED

(1)位移指令左移<<右移>>

(2)循环移位指令_crol_(A,B),_cror_(A,B)函数,在头文件intrins.h中

实验内容:

实现LED灯左右流水显示效果

三、实验步骤:

1.创建工程;2.编写程序;3.调试程序;4.下载验证

四、实验数据和结果:

1、功能:

此程序实现的是LED左右流水灯的显示效果。

将P0口的某位依次变为低电平时,由于编程中运用的intrins.h中的_crol_(A,B),_cror_(A,B)函数,所以就能够实现循环移动。

2、程序:

#include

#include

#defineucharunsignedchar

#defineuintunsignedint

voidDelay(uintdel)

{

uinti,j;

for(i=0;i

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

;

}

voidMain()

{

uchari;

P0=0xff;//关闭所有LED

while

(1)

{

P0=0xfe;

for(i=0;i<8;i++)

{

Delay(100);

P0=_crol_(P0,1);

}

P0=0x7f;

for(i=0;i<8;i++)

{

Delay(100);

P0=_cror_(P0,1);

}

}

}

五、实验总结:

通过此实验的学习,我掌握了实现流水灯的原理,也掌握了对intrins.h这个C51头文件的内部函数的运用,即如何使用循环移位指令等指令。

在此编程的过程中,我最开始没有运用intrins.h下的循环位移指令,所以程序中的语句比较多。

但是后来对程序进行了改进,使用了循环位移指令,使得程序中的语句更加简洁明了。

而且,实现同一个功能可以有很多种编程方法,我们需要在这个过程中不断地摸索,不断地学习,以此找到更加简单的方法。

实验四:

数码管显示

一、实验目的:

1.掌握LED数码管显示

2.掌握数组使用

二、实验原理和内容:

实验原理:

1.LED8段显示器

2.共阴极数码管电路图

 

(1)LED静态显示方式

静态显示就是当显示器显示某个字符时,相应的段(发光二极管)恒定地导通或截止,直到显示另一个字符为止。

静态显示器的亮度较高,这种显示方式编程容易,管理也较简单,但占用I/O口线资源较多。

在显示位数较多的情况下,一般都采用动态显示方式。

(2)LED动态显示方式

在多位LED显示时,将所有位的段选线并联在一起,由一个8位I/O口控制。

而共阴(或共阳)极公共端K分别由相应的I/O线控制,实现各位的分时选通。

因人眼的视觉暂留时间为0.1s(100ms),所以显示间隔要受到此条件的约束。

实验内容:

用8位LED数码管显示自己学号

三、实验步骤:

1.创建工程;2.编写程序;3.调试程序;4.下载验证

四、实验数据和结果:

1.功能:

此实验中,实现的是8位LED数码管上同时显示学号后8位,即40720119.

2.程序:

#include

#defineucharunsignedchar

#defineuintunsignedint

ucharcodetable[]={0x66,0x3f,0x07,0x5b,0x3f,0x06,0x06,0x6f};

ucharcodeLED[8]={0,1,2,3,4,5,6,7};

voidDelay(uintm)

{

uinti,j;

for(i=m;i>0;i--)

for(j=100;j>0;j--);

}

voidMain(void)

{

uchari=0;

while

(1)

{

P0=table[i];

P2=LED[i];

Delay

(1);

i++;

if(i==8)

i=0;

P0=0x00;

}

}

 

五、实验总结:

在这个实验当中,从最开始的单个数码管显示,一直到最后的学号显示。

其实这个实验是一个相对比较简单的实验,只需要利用单片机的I/O口输出相应的信号,选通要点亮的数码管,同时输出字段驱动的控制字,就可以显示相应的数字或字母。

但是,数码管的位选是通过74HC138连接,所以在实验前必须要先了解三八译码器的工作原理。

当然,程序虽然比较简单,但是还是很需要耐心与细心。

 

实验八定时器/计数器使用

一、实验目的:

1.掌握定时函数使用

2.学习配置工作模式寄存器TMOD、控制器寄存器TCON

二、实验原理和内容:

实验原理:

1.MCS-51单片机定时/计数器的工作原理

2.模式控制寄存器TMOD

3.控制寄存器TCON

实验内容:

根据课堂要求内容进行实验

三、实验步骤:

1.创建工程;2.编写程序;3.调试程序;4.下载验证

四、实验数据和结果:

1.功能:

用8位数码管的后两位进行显示结果的显示,显示的结果是数由0定时到59。

2.程序:

#include

#defineuintunsignedint

#defineucharunsignedchar

unsignedchari=200;

unsignedintnum=0;

ucharcodetable[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};

voidDelay(uintm)

{

uinti,j;

for(i=m;i>0;i--)

for(j=100;j>0;j--);

}

voidmain()

{

TMOD=0x10;

TH1=0xee;

TL1=0x00;

EA=1;

ET1=1;

TR1=1;

while

(1)

{

P0=0x00;

P2=7;

P0=table[num%10];

Delay

(1);

P0=0x00;

P2=6;

P0=table[num/10];

Delay

(1);

if(num==60)

num=0;

}

}

voidT1_int(void)interrupt3

{

TH1=0xee;

TL1=0x00;

i--;

if(i<=0)

{num=num+1;

i=200;

}

}

五、实验总结:

通过这次实验的学习,对于上学期所学的单片机所学的部分知识得到了回顾,更加深层次的了解了定时器和计数器的工作原理,初学单片机时不会计算初值,对于一些指令也不够熟悉,但是通过此次实验的学习,使得这些问题都得到了解决。

 

实验九:

点阵LED显示

一、实验目的:

1.掌握8*8-LED点阵的结构原理

2.掌握8*8-LED点阵的使用

二、实验原理和内容:

实验原理:

1.8X8点阵LED等效电路

8X8点阵LED工作原理说明:

8X8点阵共需要64个发光二极管组成,且每个发光二极管是放置在行线和列线的交叉点上,当对应的某一列置0电平,某一行置1电平,则相应的二极管就亮;一根竖柱:

对应的列置0,而行则采用扫描的方法来实现。

一根横柱:

对应的行置1,而列则采用扫描的方法来实现。

LP00~LP07图1-8,P2.0~P2.7图A-H。

实验内容:

显示心形和自己姓名拼音首字母

三、实验步骤:

1.创建工程;2.编写程序;3.调试程序;4.下载验证

四、实验数据和结果:

1、功能:

用8*8点阵显示自己姓名的首字母

2、程序:

#include

#defineuintunsignedint

#defineucharunsignedchar

ucharcodetableP2[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};

ucharcodetableP0[]={0x00,0x00,0x3E,0x41,0x41,0x41,0x22,0x00};//点阵结果显示C

voidDelay(uintm)

{

uinti,j;

for(i=m;i>0;i--)

for(j=100;j>0;j--);

}

voidmain()

{

uinti=0;

while

(1)

{

for(i=0;i<8;i++)

{

P0=0x00;

P2=tableP2[i];

P0=tableP0[i];

Delay

(1);

}

}

}

五、实验总结:

在这个实验中,我学会了8*8点阵LED的工作原理,也了解了点阵LED的扫描方式。

但是在编程的过程当中,由于不太清楚它的扫描顺序,所以在定义数组的时候出现了错误而导致没有得到想要的结果,尽管自己试着修改了很多次,但是还是没有调试出来L的显示。

但是后来在老师的帮助下,我才能完成这个实验的任务。

实验十:

矩阵按键

一、实验目的:

1.掌握矩阵键盘原理

2.矩阵式键盘的按键识别方法

二、实验原理和内容:

实验原理:

在键盘中按键数量较多时,为了减少I/O口的占用,通常将按键排列成矩阵形式。

在矩阵式键盘中,每条水平线和垂直线在交叉处不直接连通,而是通过一个按键加以连接。

矩阵式键盘的按键识别方法:

扫描法,线反法

扫描法:

又称为逐行(或列)扫描查询法,是一种最常用的按键识别方法。

   

(1)判断键盘中有无键按下:

将全部行线置低电平,然后检测列线的状态。

只要有一列的电平为低,则表示键盘中有键被按下,而且闭合的键位于低电平线与4根行线相交叉的4个按键之中。

若所有列线均为高电平,则键盘中无键按下。

    

(2)判断闭合键所在的位置:

在确认有键按下后,即可进入确定具体闭合键的过程。

其方法是:

依次将行线置为低电平,即在置某根行线为低电平时,其它线为高电平。

在确定某根行线位置为低电平后,再逐行检测各列线的电平状态。

若某列为低,则该列线与置为低电平的行线交叉处的按键就是闭合的按键。

线反法:

先找按下的按键在那一行(或列),然后在找在那一列(或行),从而可以找到按下按键的具体位置。

2.实验内容:

编写按键扫描程序,识别按键。

三、实验步骤:

1.创建工程;2.编写程序;3.调试程序;4.下载验证

四、实验数据和结果:

1、功能:

在矩阵键盘中,当按下相应的按键时,数码管会显示对应的数字。

2、程序:

#include

#defineGPIO_DIGP0

#defineGPIO_KEYP1

sbitLSA=P2^0;

sbitLSB=P2^1;

sbitLSC=P2^2;

unsignedcharcodeDIG_CODE[]={

0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,

0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};//0、1、2、3、4、5、6、7、8、9、A、b、C、d、E、F的显示码

unsignedcharKeyValue;

//用来存放读取到的键值

voidDelay10ms();//延时10ms

voidKeyDown();//检测按键函数

voidmain(void)

{

LSA=0;//给一个数码管提供位选

LSB=0;

LSC=0;

while

(1)

{

KeyDown();

GPIO_DIG=DIG_CODE[KeyValue];

}

}

voidKeyDown(void)

{

chara=0;

GPIO_KEY=0x0f;

if(GPIO_KEY!

=0x0f)//读取按键是否按下

{

Delay10ms();//延时10ms进行消抖

if(GPIO_KEY!

=0x0f)//再次检测键盘是否按下

{

//测试列

GPIO_KEY=0Xf0;

switch(GPIO_KEY)

{

case(0Xe0):

KeyValue=0;break;

case(0Xd0):

KeyValue=1;break;

case(0Xb0):

KeyValue=2;break;

case(0X70):

KeyValue=3;break;

}

//测试行

GPIO_KEY=0X0f;

switch(GPIO_KEY)

{

case(0X0e):

KeyValue=KeyValue;break;

case(0X0d):

KeyValue=KeyValue+4;break;

case(0X0b):

KeyValue=KeyValue+8;break;

case(0X07):

KeyValue=KeyValue+12;break;

}

while((a<50)&&(GPIO_KEY!

=0x0f))//检测按键松手检测

{

Delay10ms();

a++;

}

}

}

}

voidDelay10ms(void)

{

unsignedchara,b,c;

for(c=1;c>0;c--)

for(b=38;b>0;b--)

for(a=130;a>0;a--);

}

五、实验总结:

通过这个实验的学习,我了解了矩阵键盘的按键识别方法。

这是本门科目的最后一个实验,也是相对其他实验而言是相对较难的一个实验。

所以在编程的过程遇到了不少的困难,但是在老师和同学们的帮助下还是成功的完成了这个实验,得到了想得到的结果。

在这门科目的学习当中,我明白了自己在编程方面比较薄弱,对于单片机的工作原理也不是足够的了解,对之前所学习的一些知识的遗忘程度比较严重。

所以,在以后的时间里,我会查漏补缺,会利用课余时间复习并掌握更多知识,使自己的专业知识更加扎实,以达到自我提升的目的。

并且此门科目让我,让我明白了仔细的重要性,在程序运行的过程当中是不允许任何问题出现的。

所以,以后不管是工作还是学习,我一定会加倍仔细,让工作和学习更加完美。

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

当前位置:首页 > 医药卫生 > 基础医学

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

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