51单片机实验报告.doc

上传人:w****2 文档编号:6464238 上传时间:2020-02-27 格式:DOC 页数:30 大小:911KB
返回 下载 相关 举报
51单片机实验报告.doc_第1页
第1页 / 共30页
51单片机实验报告.doc_第2页
第2页 / 共30页
51单片机实验报告.doc_第3页
第3页 / 共30页
点击查看更多>>
资源描述
单片机与接口技术实验报告信息工程学院 2016年9月辽东学院信息技术学院单片机与接口技术实验报告姓名: 王瑛 学号: 0913140319 班级: B1403 专业: 网络工程 层次: 本科 2016年9月目 录实验题目:实验环境的初识、使用及调试方法(第一章)实验题目:单片机工程初步实验(第二章)实验题目:基本指令实验(第三章)4实验题目:定时器/计数器实验(第五章)4实验题目:中断实验(第六章)4实验题目:输入接口实验(第八章)4实验题目:I/O口扩展实验(第九章)4实验题目:串行通信实验(第十一章)4实验题目:A/D,D/A转换实验(第十七章)4实验题目:实验环境的初识、使用及调试方法实验实验类型: 验证性 实验课时: 1 时间:2016年10月24日一、 实验内容和要求了解单片机的基础知识了解51单片机的组成和工作方法掌握项目工程的建立、编辑、编译和下载的过程方法熟练单片机开发调试工具和方法二、 实验结果及分析单片机最小系统的构成: Keil集成开发环境:STC-ISP:实验题目:单片机工程初步实验实验类型: 验证性 实验课时: 1 时间:2016 年10 月24 日一、 实验内容和要求点亮一个LED小灯程序下载到单片机中二、实验结果及分析1、点亮一个LED小灯点亮LED小灯的程序:#include /包含特殊功能寄存器定义的头文件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-ISP,端口为上一步查到的端口,其余选项改成如图所示:打开程序文件下载后当软件显示“已加密”就表示程序下载成功了,如下图所示:3、 心得体会 通过对单片机的初步学习和认识,我了解到了单片机的工作流程,还有通过自己编写单片机的程序,也让我对单片机的学习有了更大的兴趣,虽然过程中遇到了些许的困难,但这也让自己意识到还有很多不足,通过接下来的学习,希望对单片机的课程有更加深入的了解。实验题目:基本指令实验实验类型: 验证性 实验课时: 2 时间:2016年 11月 1日1、 实验内容和要求了解单片机的硬件基础知识 LED灯闪烁的程序二、实验结果及分析1、去耦电容 电容有缓冲和稳定的作用,有了这个电容,可以说我们的电压和电流就会很稳定了,不会产生大的波动。2、74HC138三八译码器 在我们设计单片机电路的时候,单片机的 IO 口数量是有限的,有时并满足不了我们的设计需求,比如我们的 STC89C52 一共有 32 个 IO 口,但是我们为了控制更多的器件,就要使用一些外围的数字芯片,这种数字芯片由简单的输入逻辑来控制输出逻辑,比如 74HC138三八译码器。如图所示。3、LED灯闪烁的程序#includesbit LED = P00;sbit ADDR0 = P10;sbit ADDR1 = P11;sbit ADDR2 = P12;sbit ADDR3 = 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+); /延时三、心得体会 做好一件事的前提条件是你对自己所要做的事情有充分的了解和认识,做好完全的准备才能够有保证将这件事做好,学习也是如此,想要做好一个程序,就要将他的工作过程以及条件搞清楚才能将程序编好编清楚。实验题目:定时器/计数器实验实验类型: 验证性 实验课时: 3 时间:2016年11月 8 日一、实验内容和要求学习和了解单片机中的定时器、及其寄存器学习数码管的相关知识编写数码管的静态显示的相关程序二、实验结果及分析1、数码管数码管示意图: 数码管结构图:2、数码管静态显示的程序#include sbit ADDR0 = P10;sbit ADDR1 = P11;sbit ADDR2 = P12;sbit ADDR3 = P13;sbit ENLED = P14;void main() ENLED = 0; ADDR3 = 1; ADDR2 = 0; ADDR1 = 0; ADDR0 = 0; P0 = 0xF9; while (1);三、心得体会 通过这次实验课,我对定时器有了更加深刻的了解,也让我知道了对教材应该更熟悉,因为教材是基础的,只有把基础搞好了才能够进行其他层次的学习。有时候也可以通过软件的仿真来验证书上的一些理论性的东西。实现自己想要的效果。实验题目:中断实验实验类型: 验证性 实验课时: 4 时间:2016年 11月15 日一、实验内容和要求复习C语言中的数组、if语句和switch语句学习数码管的动态显示相关知识掌握单片机中断系统二、实验结果及分析1、数码管的动态显示程序(switch语句)#include 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, 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%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+; P0=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 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,0xFF;unsigned char flagls = 0; void main()unsigned char i = 0;unsigned int cnt = 0;unsigned long sec = 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/10000%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 = LedBuff3; 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月 22 日一、实验内容和要求掌握函数调用、函数形式参数和实际参数的相关知识学习单片机中按键的相关知识编写简易加法计算器程序二、实验结果及分析1、按键独立按键原理图:矩阵按键原理图:按键的扫描程序:#include 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_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; 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; i4; i+) for (j=0; j4; j+) if (backupij != KeyStaij) if (backupij != 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 = (keybufkeyout0 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; i4; i+) if (keybufkeyouti & 0x0F) = 0x00) KeyStakeyouti = 0; else if (keybufkeyouti & 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; 三、心得体会 用户与单片机之间的信息交互需要依赖于两类设备:输入设备和输出设备。通过这节实验课的学习,让我对单片机输入接口有了更深入的了解,巩固了书上学到的知识,熟悉了操作。实验题目:I/O口扩展实验实验类型: 验证性 实验课时: 6 时间: 2016年11月29日一、实验内容和要求了解单片机I/O口、上下拉电阻的结构28BYJ-48型步进电机二、实验结果及分析1、I/O口结构2、28BYJ-48型步进电机#include unsigned long beats = 0; void StartMotor(unsigned long angle);void main() EA = 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, 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口的使用,学会了延时子程序的编写和使用。通过对单片机的深入学习,我也发现通过单片机能过实现很多自己想要的功能,我们不能过只拘泥于课本知识,要结合实际的学习,这也让我对学习单片机的兴趣更加浓厚。实验题目:串行通信实验实验类型: 验证性 实验课时: 7 时间: 2016年 12月 6 日一、实验内容和要求了解单片机串行通信的知识掌握RS-232通信接口、USB转串口通信串口通信的应用和实例二、实验结果及分析1、单片机之间UART通信示意图2、 串口数据发送示意图3、串口通信应用程序#include sbit PIN_RXD = P30; 义sbit PIN_TXD = P31; bit RxdOrTxd = 0; bit RxdEnd = 0; bit TxdEnd = 0; unsigned char RxdBuf = 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; TMOD |= 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 unsigned char cnt = 0; if (RxdOrTxd) cnt+; if (cnt = 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 = 1; if (PIN_RXD) RxdBuf |= 0x80; 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、 实验结果及分析1、PCF8591 原理图2、PCF8591 基准与对外接口原理图3、A/D转换程序#include 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 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(10); 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); LcdShowStr(12, 1, str); unsigned char GetADCValue(unsigned char chn) unsigned char val; I2CStart(); if (!I2CWrite(0x481) I2CStop(); return 0; I2CWrite(0x40|chn); I2CStart(); I2CWrite(0x488); 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 (tmr300ms = 30) tmr300ms = 0; flag300ms = 1; 4、D/A转换程序#include unsigned char T0RH = 0; unsigned char T0RL = 0; void ConfigTimer0(unsigned int ms);extern void KeyScan();extern void KeyDriver();extern void I2CStart();extern void I2CStop();extern bit I2CWrite(unsigned char dat);void main() EA = 1; ConfigTimer0(1); while (1) KeyDriver(); void SetDACOut(unsigned char val) I2CStart(); if (!I2CWrite(0x481) I2CStop(); return; I2CWrite(0x40); I2CWrite(val); I2CStop();void KeyAction(unsigned char keycode) static unsigned char volt = 0; if (keycode = 0x26) if (volt 0) volt-; SetDACOut(volt*255/25); void ConfigTimer0(unsigned int ms) unsigned long tmp; tmp = 11059200 / 12; tmp = (tmp * ms) / 1000; tmp = 65536 - tmp; tmp = tmp + 28; T0RH = (unsigned char)(tmp8); T0RL = (unsigned char)tmp; TMOD &= 0xF0; TMOD |= 0x01; TH0 = T0RH; TL0 = T0RL; ET0 = 1; TR0 = 1; void InterruptTimer0() interrupt 1 TH0 = T0RH; TL0 = T0RL; KeyScan(); 3、 心得体会 51单片机带有多通道A/D转换器,通过这些转换器可以使单片机操作模拟量,显示和检测电压、电流等信号。学习时有许多概念需要理解,虽然有些困难,但是通过实验课的学习,让我对这些概念也有了更好的理解,也让自己知道了哪些地方知识有欠缺,需要继续学习。
展开阅读全文
相关资源
相关搜索

当前位置:首页 > 管理文书 > 工作总结


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!