51单片机实验报告_第1页
51单片机实验报告_第2页
51单片机实验报告_第3页
51单片机实验报告_第4页
51单片机实验报告_第5页
已阅读5页,还剩43页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、单片机与接口技术实验报告信息工程学院 2016年9月辽东学院信息技术学院单片机与接口技术实验报告姓名: 王瑛 学号: 0913140319 班级: b1403 专业: 网络工程 层次: 本科 2016年9月目 录实验题目:实验环境的初识、使用及调试方法(第一章)实验题目:单片机工程初步实验(第二章)实验题目:基本指令实验(第三章)4实验题目:定时器/计数器实验(第五章)4实验题目:中断实验(第六章)4实验题目:输入接口实验(第八章)4实验题目:i/o口扩展实验(第九章)4实验题目:串行通信实验(第十一章)4实验题目:a/d,d/a转换实验(第十七章)444 / 48实用精品文档实验题目:实验环

2、境的初识、使用及调试方法实验实验类型: 验证性 实验课时: 1 时间:2016年10月24日一、 实验内容和要求了解单片机的基础知识了解51单片机的组成和工作方法掌握项目工程的建立、编辑、编译和下载的过程方法熟练单片机开发调试工具和方法二、 实验结果及分析单片机最小系统的构成: keil集成开发环境:stc-isp:实验题目:单片机工程初步实验实验类型: 验证性 实验课时: 1 时间:2016 年10 月24 日一、 实验内容和要求点亮一个led小灯程序下载到单片机中二、实验结果及分析1、点亮一个led小灯点亮led小灯的程序:#include <reg52.h> /包含特殊功能寄

3、存器定义的头文件sbit led = p00; sbit addr0 = p10; /sbit必须小写,p必须大写sbit addr1 = p11;sbit addr2 = p12;sbit addr3 = p13;sbit enled = p14;void main() enled = 0; addr3 = 1; addr2 = 1; addr1 = 1; addr0 = 0; led = 0; /点亮小灯 while (1); /程序停止 2、程序下载 首先,我们要把硬件连接好,把板子插到我们的电脑上,打开设备管理器查看所使用的com 口,如图所示:然后 stc 系列单片的下载软件stc-

4、isp,端口为上一步查到的端口,其余选项改成如图所示:打开程序文件下载后当软件显示“已加密”就表示程序下载成功了,如下图所示:3、 心得体会 通过对单片机的初步学习和认识,我了解到了单片机的工作流程,还有通过自己编写单片机的程序,也让我对单片机的学习有了更大的兴趣,虽然过程中遇到了些许的困难,但这也让自己意识到还有很多不足,通过接下来的学习,希望对单片机的课程有更加深入的了解。实验题目:基本指令实验实验类型: 验证性 实验课时: 2 时间:2016年 11月 1日1、 实验内容和要求了解单片机的硬件基础知识 led灯闪烁的程序二、实验结果及分析1、去耦电容 电容有缓冲和稳定的作用,有了这个电容

5、,可以说我们的电压和电流就会很稳定了,不会产生大的波动。2、74hc138三八译码器 在我们设计单片机电路的时候,单片机的 io 口数量是有限的,有时并满足不了我们的设计需求,比如我们的 stc89c52 一共有 32 个 io 口,但是我们为了控制更多的器件,就要使用一些外围的数字芯片,这种数字芯片由简单的输入逻辑来控制输出逻辑,比如 74hc138三八译码器。如图所示。3、led灯闪烁的程序#include<reg52.h>sbit led = p00;sbit addr0 = p10;sbit addr1 = p11;sbit addr2 = p12;sbit addr3 =

6、 p13;sbit enled = p14; void main() /void为函数类型unsigned int i = 0; /定义一个无符号整型变量i,赋初始值为0enled = 0;addr3 = 1;addr2 = 1;addr1 = 1;addr0 = 0;while(1)led = 0; /点亮小灯for(i = 0; i<=3000; i+); /延时led = 1; /熄灭小灯for(i = 0; i<=3000; i+); /延时三、心得体会 做好一件事的前提条件是你对自己所要做的事情有充分的了解和认识,做好完全的准备才能够有保证将这件事做好,学习也是如此,想要

7、做好一个程序,就要将他的工作过程以及条件搞清楚才能将程序编好编清楚。实验题目:定时器/计数器实验实验类型: 验证性 实验课时: 3 时间:2016年11月 8 日一、实验内容和要求学习和了解单片机中的定时器、及其寄存器学习数码管的相关知识编写数码管的静态显示的相关程序二、实验结果及分析1、数码管数码管示意图: 数码管结构图:2、数码管静态显示的程序#include <reg52.h>sbit addr0 = p10;sbit addr1 = p11;sbit addr2 = p12;sbit addr3 = p13;sbit enled = p14;void main() enle

8、d = 0; addr3 = 1; addr2 = 0; addr1 = 0; addr0 = 0; p0 = 0xf9; while (1);三、心得体会 通过这次实验课,我对定时器有了更加深刻的了解,也让我知道了对教材应该更熟悉,因为教材是基础的,只有把基础搞好了才能够进行其他层次的学习。有时候也可以通过软件的仿真来验证书上的一些理论性的东西。实现自己想要的效果。实验题目:中断实验实验类型: 验证性 实验课时: 4 时间:2016年 11月15 日一、实验内容和要求复习c语言中的数组、if语句和switch语句学习数码管的动态显示相关知识掌握单片机中断系统二、实验结果及分析1、数码管的动态

9、显示程序(switch语句)#include <reg52.h>sbit addr0 = p10;sbit addr1 = p11;sbit addr2 = p12;sbit addr3 = p13;sbit enled = p14;unsigned char code ledchar = 0xc0, 0xf9, 0xa4, 0xb0, 0x99, 0x92, 0x82, 0xf8, 0x80, 0x90, 0x88, 0x83, 0xc6, 0xa1, 0x86, 0x8e;unsigned char ledbuff6 = 0xff, 0xff, 0xff, 0xff, 0xff

10、, 0xff;void main() unsigned char i = 0; unsigned int cnt = 0; unsigned long sec = 0; enled = 0; addr3 = 1; tmod = 0x01; th0 = 0xfc; tl0 = 0x67; tr0 = 1; while (1) if (tf0 = 1) tf0 = 0; th0 = 0xfc; tl0 = 0x67; cnt+; if (cnt >= 1000) cnt = 0; sec+; ledbuff0 = ledcharsec%10; ledbuff1 = ledcharsec/10

11、%10; ledbuff2 = ledcharsec/100%10; ledbuff3 = ledcharsec/1000%10; ledbuff4 = ledcharsec/10000%10; ledbuff5 = ledcharsec/100000%10; switch (i) case 0: addr2=0; addr1=0; addr0=0; i+; p0=ledbuff0; break; case 1: addr2=0; addr1=0; addr0=1; i+; p0=ledbuff1; break; case 2: addr2=0; addr1=1; addr0=0; i+; p

12、0=ledbuff2; break; case 3: addr2=0; addr1=1; addr0=1; i+; p0=ledbuff3; break; case 4: addr2=1; addr1=0; addr0=0; i+; p0=ledbuff4; break; case 5: addr2=1; addr1=0; addr0=1; i=0; p0=ledbuff5; break; default: break; 2、中断系统程序(if.else语句)#include <reg52.h>sbit addr0 = p10;sbit addr1 = p11;sbit addr2

13、 = p12;sbit addr3 = p13;sbit enled = p14;unsigned char code ledchar = 0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e;unsigned char ledbuff6 = 0xff,0xff,0xff,0xff,0xff,0xff;unsigned char flagls = 0; void main()unsigned char i = 0;unsigned int cnt = 0;unsigned long sec

14、 = 0;enled = 0;addr3 = 1;tmod = 1;th0 = 0x01;tl0 = 0xfc;tl0 = 0x67;tr0 = 1;while (1)if (tf0 =1)tf0 = 0;th0 = 0xfc;tl0 = 0x67;cnt +;if (cnt >=1000)cnt = 0;sec+;ledbuff0 = ledcharsec%10;ledbuff1 = ledcharsec/10%10;ledbuff2 = ledcharsec/100%10;ledbuff3 = ledcharsec/1000%10;ledbuff4 = ledcharsec/1000

15、0%10;ledbuff5 = ledcharsec/100000%10; if (i = 0) addr2 = 0; addr1 = 0; addr0 = 0; i+; p0 = ledbuff0; else if (i = 1) addr2 = 0; addr1 = 0; addr0 = 1; i+; p0 = ledbuff1; else if (i = 2) addr2 = 0; addr1 = 1; addr0 = 1; i+; p0 = ledbuff2; else if (i = 3) addr2 = 0; addr1 = 1; addr0 = 1; i+; p0 = ledbu

16、ff3; else if (i = 4) addr2 = 1; addr1 = 0; addr0 = 0; i+; p0 = ledbuff4; else if (i = 5) addr2 = 1; addr1 = 0; addr0 = 1; i+; p0 = ledbuff5; 三、心得体会通过在实验课的学习,了解到了51单片机中中断的概念以及中断处理系统的工作原理。学习知识也应该经常复习。也让我感受到他是一门综合性实践性较强的课程,也是我体会到要想综合运用所学的理论知识、提高设计能力,还需增加实际操作的环节。 实验题目:输入接口实验实验类型: 验证性 实验课时: 5 时间:2016年 11

17、月 22 日一、实验内容和要求掌握函数调用、函数形式参数和实际参数的相关知识学习单片机中按键的相关知识编写简易加法计算器程序二、实验结果及分析1、按键独立按键原理图:矩阵按键原理图:按键的扫描程序:#include <reg52.h>sbit addr0 = p10;sbit addr1 = p11;sbit addr2 = p12;sbit addr3 = p13;sbit enled = p14;sbit key_in_1 = p24;sbit key_in_2 = p25;sbit key_in_3 = p26;sbit key_in_4 = p27;sbit key_out

18、_1 = p23;sbit key_out_2 = p22;sbit key_out_3 = p21;sbit key_out_4 = p20;unsigned char code ledchar = 0xc0, 0xf9, 0xa4, 0xb0, 0x99, 0x92, 0x82, 0xf8, 0x80, 0x90, 0x88, 0x83, 0xc6, 0xa1, 0x86, 0x8e;unsigned char keysta44 = 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1;void main() unsigned char i, j;

19、unsigned char backup44 = 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1; ea = 1; enled = 0; addr3 = 1; addr2 = 0; addr1 = 0;addr0 = 0; tmod = 0x01; th0 = 0xfc; tl0 = 0x67; et0 = 1; tr0 = 1; p0 = ledchar0; while (1) for (i=0; i<4; i+) for (j=0; j<4; j+) if (backupij != keystaij) if (backupij !=

20、 0) p0 = ledchari*4+j; backupij = keystaij; void interrupttimer0() interrupt 1 unsigned char i; static unsigned char keyout = 0; static unsigned char keybuf44 = 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff ; th0 = 0xfc; tl0 = 0x67; keybufkeyout0 = (k

21、eybufkeyout0 << 1) | key_in_1; keybufkeyout1 = (keybufkeyout1 << 1) | key_in_2; keybufkeyout2 = (keybufkeyout2 << 1) | key_in_3; keybufkeyout3 = (keybufkeyout3 << 1) | key_in_4; for (i=0; i<4; i+) if (keybufkeyouti & 0x0f) = 0x00) keystakeyouti = 0; else if (keybufkeyo

22、uti & 0x0f) = 0x0f) keystakeyouti = 1; keyout+; keyout = keyout & 0x03; switch (keyout) case 0: key_out_4 = 1; key_out_1 = 0; break; case 1: key_out_1 = 1; key_out_2 = 0; break; case 2: key_out_2 = 1; key_out_3 = 0; break; case 3: key_out_3 = 1; key_out_4 = 0; break; default: break; 三、心得体会 用

23、户与单片机之间的信息交互需要依赖于两类设备:输入设备和输出设备。通过这节实验课的学习,让我对单片机输入接口有了更深入的了解,巩固了书上学到的知识,熟悉了操作。实验题目:i/o口扩展实验实验类型: 验证性 实验课时: 6 时间: 2016年11月29日一、实验内容和要求了解单片机i/o口、上下拉电阻的结构28byj-48型步进电机二、实验结果及分析1、i/o口结构2、28byj-48型步进电机#include <reg52.h>unsigned long beats = 0; void startmotor(unsigned long angle);void main() ea =

24、1; tmod = 0x01; th0 = 0xf8; tl0 = 0xcd; et0 = 1; tr0 = 1; startmotor(360*2+180); while (1);void startmotor(unsigned long angle) ea = 0; beats = (angle * 4076) / 360; ea = 1;void interrupttimer0() interrupt 1 unsigned char tmp; static unsigned char index = 0; unsigned char code beatcode8 = 0xe, 0xc,

25、0xd, 0x9, 0xb, 0x3, 0x7, 0x6 ; th0 = 0xf8; tl0 = 0xcd; if (beats != 0) tmp = p1; tmp = tmp & 0xf0; tmp = tmp | beatcodeindex; p1 = tmp; index+; index = index & 0x07; beats-; else p1 = p1 | 0x0f; 三、心得体会 通过本次实验课学会了i/o口的使用,学会了延时子程序的编写和使用。通过对单片机的深入学习,我也发现通过单片机能过实现很多自己想要的功能,我们不能过只拘泥于课本知识,要结合实际的学习

26、,这也让我对学习单片机的兴趣更加浓厚。实验题目:串行通信实验实验类型: 验证性 实验课时: 7 时间: 2016年 12月 6 日一、实验内容和要求了解单片机串行通信的知识掌握rs-232通信接口、usb转串口通信串口通信的应用和实例二、实验结果及分析1、单片机之间uart通信示意图2、 串口数据发送示意图3、串口通信应用程序#include <reg52.h>sbit pin_rxd = p30; 义sbit pin_txd = p31; bit rxdortxd = 0; bit rxdend = 0; bit txdend = 0; unsigned char rxdbuf

27、= 0; unsigned char txdbuf = 0; void configuart(unsigned int baud);void starttxd(unsigned char dat);void startrxd();void main() ea = 1; configuart(9600); while (1) while (pin_rxd); startrxd(); while (!rxdend); starttxd(rxdbuf+1); while (!txdend); void configuart(unsigned int baud) tmod &= 0xf0; t

28、mod |= 0x02; th0 = 256 - (11059200/12)/baud; void startrxd() tl0 = 256 - (256-th0)>>1); et0 = 1; tr0 = 1; rxdend = 0; rxdortxd = 0; void starttxd(unsigned char dat) txdbuf = dat; tl0 = th0; et0 = 1; tr0 = 1; pin_txd = 0; txdend = 0; rxdortxd = 1; void interrupttimer0() interrupt 1 static unsig

29、ned char cnt = 0; if (rxdortxd) cnt+; if (cnt <= 8) pin_txd = txdbuf & 0x01; txdbuf >>= 1; else if (cnt = 9) pin_txd = 1; else cnt = 0; tr0 = 0; txdend = 1; else if (cnt = 0) if (!pin_rxd) rxdbuf = 0; cnt+; else tr0 = 0; else if (cnt <= 8) rxdbuf >>= 1; if (pin_rxd) rxdbuf |= 0

30、x80; cnt+; else cnt = 0; tr0 = 0; if (pin_rxd) rxdend = 1; 三、心得体会 这次实验让我初步了解了串口通信的原理,掌握单片机串口波特率的设置方法,掌握单片机串口查询方式程序的设计方法,单片机一般充当控制器的角色,通过串口发送一定格式的数据来控制与之相连设备的动作,同时设备也会反馈回来一些自己的状态信息给单片机,也知道了许多串口通信在生活中的应用实例。实验题目:a/d,d/a转换实验实验类型: 验证性 实验课时: 8 时间: 2016年12月13 日一、实验内容和要求掌握a/d和d/a的基本概念a/d和d/a的输入和输出2、 实验结果及分析

31、1、pcf8591 原理图2、pcf8591 基准与对外接口原理图3、a/d转换程序#include <reg52.h>bit flag300ms = 1; unsigned char t0rh = 0; unsigned char t0rl = 0; void configtimer0(unsigned int ms);unsigned char getadcvalue(unsigned char chn);void valuetostring(unsigned char *str, unsigned char val);extern void i2cstart();extern

32、 void i2cstop();extern unsigned char i2creadack();extern unsigned char i2creadnak();extern bit i2cwrite(unsigned char dat);extern void initlcd1602();extern void lcdshowstr(unsigned char x, unsigned char y, unsigned char *str);void main() unsigned char val; unsigned char str10; ea = 1; configtimer0(1

33、0); initlcd1602(); lcdshowstr(0, 0, "ain0 ain1 ain3"); while (1) if (flag300ms) flag300ms = 0; val = getadcvalue(0); valuetostring(str, val); lcdshowstr(0, 1, str); val = getadcvalue(1); valuetostring(str, val); lcdshowstr(6, 1, str); val = getadcvalue(3); valuetostring(str, val); lcdshows

34、tr(12, 1, str); unsigned char getadcvalue(unsigned char chn) unsigned char val; i2cstart(); if (!i2cwrite(0x48<<1) i2cstop(); return 0; i2cwrite(0x40|chn); i2cstart(); i2cwrite(0x48<<1)|0x01); i2creadack(); val = i2creadnak(); i2cstop(); return val;void valuetostring(unsigned char *str,

35、unsigned char val) val = (val*25) / 255; str0 = (val/10) + '0' str1 = '.' str2 = (val%10) + '0' str3 = 'v' str4 = '0' void configtimer0(unsigned int ms) unsigned long tmp; tmp = 11059200 / 12; tmp = (tmp * ms) / 1000; tmp = 65536 - tmp; tmp = tmp + 12; t0rh = (unsigned char)(tmp>>8); t0rl = (unsigned char)tmp; tmod &= 0xf0; tmod |= 0x01; th0 = t0rh; tl0 = t0rl; et0 = 1; tr0 = 1; void interrupttimer0() interrupt 1 static unsigned char tmr300ms = 0; th0 = t0rh; tl0 = t0rl; tmr300ms+;if (tmr300

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论