1、51单片机实验报告94890单片机与接口技术实验报告信息工程学院 2016年9月辽东学院信息技术学院单片机与接口技术实验报告姓名: 王瑛 学号: 0913140319 班级: B1403 专业: 网络工程 层次: 本科 2016年9月实验题目:实验环境的初识、使用及调试方法(第一章)实验题目:单片机工程初步实验(第二章)实验题目:基本指令实验(第三章)4实验题目:定时器/计数器实验(第五章)4实验题目:中断实验(第六章)4实验题目:输入接口实验(第八章)4实验题目:I/O口扩展实验(第九章)4实验题目:串行通信实验(第十一章)4实验题目:A/D,D/A转换实验(第十七章)4实验题目:实验环境的
2、初识、使用及调试方法实验实验类型: 验证性 实验课时: 1 时间:2016年10月24日一、实验内容和要求了解单片机的基础知识了解51单片机的组成和工作方法掌握项目工程的建立、编辑、编译和下载的过程方法熟练单片机开发调试工具和方法二、实验结果及分析单片机最小系统的构成: Keil集成开发环境:STC-ISP:实验题目:单片机工程初步实验实验类型: 验证性 实验课时: 1 时间:2016 年10 月24 日一、实验内容和要求点亮一个LED小灯程序下载到单片机中二、实验结果及分析1、点亮一个LED小灯点亮LED小灯的程序:#include /包含特殊功能寄存器定义的头文件sbit LED = P0
3、0; 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,端口为上一步查到的端口,其余选项改
4、成如图所示:打开程序文件下载后当软件显示“已加密”就表示程序下载成功了,如下图所示:三、心得体会 通过对单片机的初步学习和认识,我了解到了单片机的工作流程,还有通过自己编写单片机的程序,也让我对单片机的学习有了更大的兴趣,虽然过程中遇到了些许的困难,但这也让自己意识到还有很多不足,通过接下来的学习,希望对单片机的课程有更加深入的了解。实验题目:基本指令实验实验类型: 验证性 实验课时: 2 时间:2016年 11月 1日一、实验内容和要求了解单片机的硬件基础知识 LED灯闪烁的程序二、实验结果及分析1、去耦电容 电容有缓冲和稳定的作用,有了这个电容,可以说我们的电压和电流就会很稳定了,不会产生
5、大的波动。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() /vo
6、id为函数类型 unsigned int i = 0; /定义一个无符号整型变量i,赋初始值为0 ENLED = 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 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
8、; P0 = 0xF9; while (1);三、心得体会 通过这次实验课,我对定时器有了更加深刻的了解,也让我知道了对教材应该更熟悉,因为教材是基础的,只有把基础搞好了才能够进行其他层次的学习。有时候也可以通过软件的仿真来验证书上的一些理论性的东西。实现自己想要的效果。实验题目:中断实验实验类型: 验证性 实验课时: 4 时间:2016年 11月15 日一、实验内容和要求复习C语言中的数组、if语句和switch语句学习数码管的动态显示相关知识掌握单片机中断系统二、实验结果及分析1、数码管的动态显示程序(switch语句)#include sbit ADDR0 = P10;sbit ADDR
9、1 = 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; un
10、signed 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; Le
11、dBuff4 = 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=LedBuff
12、3; 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,0xA
13、4,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 =
14、 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; A
15、DDR1 = 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
16、= LedBuff4; else if (i = 5) ADDR2 = 1; ADDR1 = 0; ADDR0 = 1; i+; P0 = LedBuff5; 三、心得体会 通过在实验课的学习,了解到了51单片机中中断的概念以及中断处理系统的工作原理。学习知识也应该经常复习。也让我感受到他是一门综合性实践性较强的课程,也是我体会到要想综合运用所学的理论知识、提高设计能力,还需增加实际操作的环节。 实验题目:输入接口实验实验类型: 验证性 实验课时: 5 时间:2016年 11月 22 日一、实验内容和要求掌握函数调用、函数形式参数和实际参数的相关知识学习单片机中按键的相关知识编写简易加法计算器
17、程序二、实验结果及分析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;uns
18、igned 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
19、 = 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 unsi
20、gned 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; keybufkey
21、out2 = (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; b
22、reak; 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日一、实验内容和要求了
23、解单片机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
24、 * 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
25、= index & 0x07; beats-; else P1 = P1 | 0x0F; 三、心得体会 通过本次实验课学会了I/O口的使用,学会了延时子程序的编写和使用。通过对单片机的深入学习,我也发现通过单片机能过实现很多自己想要的功能,我们不能过只拘泥于课本知识,要结合实际的学习,这也让我对学习单片机的兴趣更加浓厚。实验题目:串行通信实验实验类型: 验证性 实验课时: 7 时间: 2016年 12月 6 日一、实验内容和要求了解单片机串行通信的知识掌握RS-232通信接口、USB转串口通信串口通信的应用和实例二、实验结果及分析1、单片机之间UART通信示意图2、 串口数据发送示意图3、串口
26、通信应用程序#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
27、_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() interrup
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1