单片机实验报告册剖析.docx
- 文档编号:25435321
- 上传时间:2023-06-08
- 格式:DOCX
- 页数:16
- 大小:184.31KB
单片机实验报告册剖析.docx
《单片机实验报告册剖析.docx》由会员分享,可在线阅读,更多相关《单片机实验报告册剖析.docx(16页珍藏版)》请在冰豆网上搜索。
单片机实验报告册剖析
电子科技大学成都学院
实验报告册
课程名称:
单片机实验
姓名:
陈强
学号:
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--); } 五、实验总结: 通过这个实验的学习,我了解了矩阵键盘的按键识别方法。 这是本门科目的最后一个实验,也是相对其他实验而言是相对较难的一个实验。 所以在编程的过程遇到了不少的困难,但是在老师和同学们的帮助下还是成功的完成了这个实验,得到了想得到的结果。 在这门科目的学习当中,我明白了自己在编程方面比较薄弱,对于单片机的工作原理也不是足够的了解,对之前所学习的一些知识的遗忘程度比较严重。 所以,在以后的时间里,我会查漏补缺,会利用课余时间复习并掌握更多知识,使自己的专业知识更加扎实,以达到自我提升的目的。 并且此门科目让我,让我明白了仔细的重要性,在程序运行的过程当中是不允许任何问题出现的。 所以,以后不管是工作还是学习,我一定会加倍仔细,让工作和学习更加完美。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 单片机 实验 报告 剖析
![提示](https://static.bdocx.com/images/bang_tan.gif)