版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、微机综合实践实验报告姓名:孙晓东 班级:1011* 学号:1120122*2015年1月1日实验一实验名称:8051单片机P1口输入输出应用试验实验目的:学习8051单片机P1口作为双向I/O口的使用方法,采用循环指令编写延时子程序。了解弱电控制强电的基本原理,采用单片机P1口实现继电器开关控制。实验环境:Keil调试环境、VW调试软件伟福单片机开发试验系统(Digital LAB 51)实验内容:(1)采用8051单片机的P1口作为输出口,外接8只发光二极管,编写程序使二极管循环点亮。(2)从P1.0输出不同频率的方波信号,经放大器滤波后驱动扬声器发声,声音的频率由延时程序控制。实验总结:(
2、1)流程图:开始灯灭Index=0NIndex<8?YIndex对应灯亮Index+(1)C语言实验程序注解:#include<reg51.h> /引用库void delay()unsigned int i; for(i=0;i<20000;i+) /N次循环亮灯 void main()unsigned char index;unsigned char LED;while(1) /开始循环点亮程序LED=1; /首先从右1灯起始亮for(index=0;index<8;index+) P1=LED; /二进制数LED为1的位对应灯亮LED<<=1; /
3、LED左移1位,从右往左依次点亮一位delay(); /亮灯延时(2)流程图:开始第一次响铃、延时第二次响铃、延时 N次循环持续发声(2)C语言程序注解:#include<reg51.h>/引用库程序51sbit Speaker=P10;void Delay()unsigned char i;for(i=0;i<50;i+); /响铃50次循环程序void main()while(1) / 第i+1次循环响铃开始Speaker=0; /第一次铃响delay(); /第一次延时Speaker=0; /第二次铃响delay(); /第二次延时心得体会:开始先一步步跟着老师熟悉了软
4、件环境以及编译运行等步骤。第一次输入程序,出现了很多不该有的错误,导致出现灯不亮等不理想的结果,经过对连线的检查和软件的错误指向,把错误的地方一一查找出来,改正后得到了二极管循环点亮的效果。发声的实验让我明白了简单声调音乐的原理,比如生日蛋糕里面点亮莲花蜡烛时的生日快乐歌。这次试验只要求得到一个持续的发声音调,但通过输入已有的音乐程序代码,还是得到了具体的音乐兰花草,让我感到了浓浓的乐趣。通过这次试验,使我更加深入的了解了单片机是如何控制二极管的以及简单程序的编写,加强了我们的实际动手操作能力。 实验二实验名称:8段数码管的静态显示实验目的:(1)学习在单片机系统中扩展简单I/o接口
5、的方法;(2)学习数据输出程序的设计方法;(3)了解数据锁存的概念和方法。实验环境:Keil调试环境、VW调试软件伟福单片机开发试验系统(Digital LAB 51)实验内容:在实验板上用74LS244作为输出口,用8根线的排线分别连接P2和J17输出口,制一个LED显示模块。码显示器由7段条形LED组成,加一位小数点,共有8段。相应LED电平为“0”时灯灭,为“1”时灯亮。流程图:开始定义8段数码管显示码定义变量i取i的最后一位并显示i+程序注解:#include<reg52.h>code unsigned char LEDMAP=0xC0,0xF9,0xA4,0xB0,0x9
6、9,0x92,0x82,0xF8,0x80,0x90,0x88,0x83,0xC6,0xA1,0x86,0x8E; /*16进制数的数码管显示定义*/TIME_1S() /延时1S的程序unsigned int i;for(i=0;i<32780;i+)main()unsigned int i;while(1) P2=LEDMAPi&0x0f; /取i的最后一位16进制数并显示i+; /i自加1,循环显示16进制数TIME_1S(); /延时1S 心得体会: 这次试验要比第一次的实验难,在改写代码这一环节我们就遇到了很大的困难。这次试验我使用了汇编语言的程序代码。由于
7、参考代码没有给出F的字型码,因此“F”无法显示出来。通过对其他16进制数与8段数码管亮灭情况的对照,我最终找出了“F”对应的字型码为”08EH”,进过实验检验结果正确,可以实现1F所有16进制数的静态显示。这次试验证明汇编语言在编程中的重要性,而且从这次的实验中我发现了自己汇编语言的功底还是有待提高,以后的日子里还需努力。 实验三实验名称: 8段数码管动态显示实验实验目的:(1)了解8段数码管动态显示的原理(2)了解用总线方式控制数码管显示实验内容:连接仿真器至计算机,使用Keil软件编写程序,编译成功后载入仿真器,利用实验系统提供的显示电路,动态显示数据实验环境: Keil调试环境
8、、VW调试软件伟福单片机开发试验系统(Digital LAB 51)流程图:开始定义i,并赋初值0取i至i+7的最后一位16进制数并将其转换为八段管值依次显示在8位数码管上i自增1,观察数字移动效果程序注解:#include<reg51.h>#define LEDLen 8unsigned char LEDBufLEDLen; /显示缓冲xdata unsigned char OUTBIT _at_ 0x0001; /位控制口xdata unsigned char OUTSEG _at_ 0x0000; /段控制口code unsigned char LEDMAP=0xfC,0x6
9、0,0xda,0xf2,0x66,0xb6,0xbe,0xe0,0xfe,0xf6,0xee,0x3e,0x9c,0x7a,0x9e,0x8e; /16进制数的数码管显示定义void Delay(unsigned char CNT) /延时程序unsigned char i;while(CNT-!=0) for(i=100;i!=0;i-);void DisplayLED() /显示程序unsigned char i,j;unsigned char Pos;unsigned char LED;Pos=0x80; /从左边开始显示for(i=0;i<LEDLen;i+) OUTBIT=0;
10、 /关所有八段管 LED=LEDBufi; OUTSEG=LED; /取对应16进制数的八段管值 OUTBIT=Pos; /显示一位八段管 Delay(1); Pos>>=1; /显示下一位八段管 OUTBIT=0; /关所有八段管void main() unsigned char i=0; unsigned char j; while(1) LEDBuf0=LEDMAPi&0x0f; /*“与”实现取i的最后一位,并将其赋为八段管值*/LEDBuf1=LEDMAP(i+1)&0x0f; /*“与”实现取i+1后一位,并将其赋为八段管值*/LEDBuf2=LEDMA
11、P(i+2)&0x0f; /*以下到i+7同理*/ LEDBuf3=LEDMAP(i+3)&0x0f; LEDBuf4=LEDMAP(i+4)&0x0f; LEDBuf5=LEDMAP(i+5)&0x0f; LEDBuf6=LEDMAP(i+6)&0x0f;LEDBuf7=LEDMAP(i+7)&0x0f; i+; /*i自增1 ,造成数字循环移动的效果*/for(j=0;j<200;j+) DisplayLED(); /显示转化后的八段管值 心得体会: 本次试验最后的结果是数码管8个数字依次向左移动。得到结果后老师问我们这是否是程序应有的
12、结果。我认真研究了程序后,发现并未如此。程序显示, 8位数码管实际只有1位显示数字,显示完成后下一次开始显示,这一位暂停显示。但是程序中延时部分时间过短,整个过程变化过快,导致无法分辨变化过程,也就是8个数字依次向左移动的结果。实验四实验名称:键盘显示实验实验目的:通过学习键盘扫描和LED8段数码管显示器的工作原理,掌握键盘和显示器的接口方法和编程方法。实验环境: Keil调试环境、VW调试软件伟福单片机开发试验系统(Digital LAB 51)实验内容:在上一个实验的基础上,利用实验提供的键盘扫描电路和显示电路,实现键盘扫描和数码显示,把按键输入的键值在8位数码管上显示出来。流程图:开始定
13、义8段数码管显示码和定义键码行线全部输出0读入列值取出键码,显示数字程序注解:#define LEDLen 6xdata unsigned char OUTBIT _at_ 0x01; /位控制口xdata unsigned char OUTSEG _at_ 0x00; /段控制口xdata unsigned char WRITEOUT _at_ 0x02; /列输出地址xdata unsigned char READIN _at_ 0x02; /行读入地址unsigned char LEDBufLEDLen; /显示缓冲code unsigned char LEDMAP=0xfc,0x60,
14、0xda,0xf2,0x66, 0xb6,0xbe,0xe0,0xfe,0xf6, 0xee,0x3e,0x9c,0x7a,0x9e,0x8e; /八段管显示码void Delay(unsigned char CNT)unsigned char i; while(CNT-!=0) for(i=100;i!=0;i-);void DisplayLED()unsigned char i,j; unsigned char Pos; unsigned char LED; Pos=0x20; / 从左边开始显示 for(i=0;i<LEDLen;i+) OUTBIT=0; /关所有八段管 LED=
15、LEDBufi; OUTSEG=LED; OUTBIT=Pos; /显示一位八段管 Delay(1); Pos>>=1; /显示下一位 code unsigned char KeyTable=0x00,0x04,0x08,0x0c,0x10,0x14, 0x01,0x05,0x09,0x0d,0x11,0x15, 0x02,0x06,0x0a,0x0e,0x12,0x16, 0x03,0x07,0x0b,0x0f,0x13,0x17; /键码定义unsigned char TestKey()WRITEOUT=0; /输出线置为0 return(READIN&0xf0); /
16、读入键状态(低四位不用)unsigned char GetKey()unsigned char Pos; unsigned char i; unsigned char k; i=0; Pos=0x80; /找出键所在列 doWRITEOUT=Pos; Pos>>=1; k=READIN&0xf0; while(+i!=6)&&(k=0); if(k!=0) if(k&0x10) /第一行 i=i-1; if(k&0x20) /第二行 i=i+5; if(k&0x40) /第三行 i=i+11; if(k&0x80) /第四行
17、i=i+17; WRITEOUT=0; do Delay(10);while(TestKey(); /等键释放 return(KeyTablei); /取出键码 else return(0xff);void main()LEDBuf0=0xfc; LEDBuf1=0xfc; LEDBuf2=0xfc; LEDBuf3=0xfc; LEDBuf4=0xfc; LEDBuf5=0xfc; while(1) DisplayLED(); if(TestKey() LEDBuf5=LEDMAPGetKey()&0x0f; 心得体会:在微机原理与接口技术课程中,我就已经学习了用扫描法和反转法查找键盘按下值的应用原理。这次实验的原理也是一样的,使用反转法,即查找由行、列不同组合得到的二进制数(键码)来对应相应的按键位置,这些在流程图中已经给出。通过本次实验,我更进一步了解了键盘的工作原理,对计算机有了更深的认识。建议与意见:此次为期两个下午的实验课,使我在
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026年上海中医药大学单招职业技能考试题库及答案解析(夺冠系列)
- 2026年河北石油职业技术大学单招综合素质考试题库附答案解析
- 基于神经网络的语音识别
- 房屋打包委托协议书
- 房屋提前退房协议书
- 房屋整租间合同范本
- 房屋电梯移交协议书
- 房屋竞买协议书范本
- 房屋置换居间协议书
- 房屋裂缝修补协议书
- 检测劳务外包合同范本
- 【MOOC】《奥运裁判教你学规则(排球篮球)》(西南交通大学)章节期末慕课答案
- 2025年青马工程试题题库及答案
- 2025年统编版语文四年级上册月考语文第五六单元测试卷模拟练习(含答案)
- 2025年在线助教合同协议
- 小学数学单元测试卷典型题目解析
- 塔吊工程质量管理制度
- 拆除工程施工应急预案
- 耳的检查教学课件
- 太阳能光伏项目监理实施细则
- 广州中考道法真题题型专练04-四、“小论文”类
评论
0/150
提交评论