
《单片机与接口技术》课程实验指导书2018
《单片机与接口技术》课程实验指导书 2018

目录实验一点亮第一个LED实验实验二LED流水灯实验实验三独立按键实验6实验四定时器实验9实验五8*8LED点阵实验11实验六矩阵按键实验15实验七串行通信实验.19附录:烧写软件使用说明21
—1— 目 录 实验一 点亮第一个 LED 实验.1 实验二 LED 流水灯实验.3 实验三 独立按键实验.6 实验四 定时器实验.9 实验五 8*8LED 点阵实验. 11 实验六 矩阵按键实验.15 实验七 串行通信实验.19 附录:烧写软件使用说明.21

实验一 点亮第一个LED实验一、实验目的(1)熟悉C51编程环境;(2)熟悉实验箱结构,硬件连线:(3)会查看实验箱硬件连线图;(4)利用C51编程,控制单片机输出引脚点亮LED:二、实验电路如图1所示,根据实验箱LED和单片机引脚接口图,选择一个LED,利用程序控制其点亮。AXRP7RP20/SDAP21/SCLP22P23HvcRP91K8P24P25/WR7P26/RDP27/LCDED8图1:LED接口图三、实验内容编写程序,控制LED指示灯D1~D8中的一个点亮。-1-
—1— 实验一 点亮第一个 LED 实验 一、实验目的 (1)熟悉 C51 编程环境; (2)熟悉实验箱结构,硬件连线; (3)会查看实验箱硬件连线图; (4)利用 C51 编程,控制单片机输出引脚点亮 LED; 二、实验电路 如图 1 所示,根据实验箱 LED 和单片机引脚接口图,选择一个 LED,利用程序控制其点 亮。 图 1:LED 接口图 三、实验内容 编写程序,控制 LED 指示灯 D1~D8 中的一个点亮

四、参考程序/********************************************************************点亮第一个LED实验实现现象:下载程序后D1~D8中的一个指示灯点亮********************************************************************#include“reg52.h”//此文件中定义了单片机的一些特殊功能寄存器sbitled=P2°0;//将单片机的P2.0端口定义为1ed,根据自已确定的LED定义该接口/*********************************************************************函数名: main*函数功能:主函数********************************************************************voidmainOwhile(1)(1ed=0://P2.0端口设置为低电平11五、实验思考题1、如果要控制多个LED同时点亮,程序应如何改动?2、试着实现LED的点亮与熄灭?-21
—2— 四、参考程序 /******************************************************************* * 点亮第一个 LED 实验 实现现象:下 载程序后 D1~D8 中的一个指示灯点亮 ********************************************************************/ #include "reg52.h" //此文件中定义了单片机的一些特殊功能寄存器 sbit led=P2^0; //将单片机的 P2.0 端口定义为 led,根据自己确定的 LED 定义该接口 /******************************************************************** * 函 数 名 : main * 函数功能 : 主函数 ********************************************************************/ void main() { while(1) { led=0; //P2.0 端口设置为低电平 } } 五、实验思考题 1、如果要控制多个 LED 同时点亮,程序应如何改动? 2、试着实现 LED 的点亮与熄灭?

实验二LED流水灯实验一、实验目的(1)学会使用延时函数及其延时时间的计算;(2)掌握LED灯循环点亮的控制方法:二、实验电路如图1所示,根据实验箱LED和单片机引脚接口图,实现LED流水灯循环点亮效果。三、实验内容利用C51编程实现LED流水灯循环点亮效果。四、参考程序*********************************************************************LED流水灯实验*实现现象:下载程序后LED呈现流水灯效果进行左移右移滚动********************************************************************#include"reg52.h"//此文件中定义了单片机的一些特殊功能寄存器#include<intrins.h)//因为要用到左右移函数,所以加入这个头文件typedef unsigned intul6://对数据类型进行声明定义typedef unsigned char u8:#define led P2//将P2口定义为1ed后面就可以使用1ed代替P2口*********************************************************************函数名: delay*函数功能:延时函数,i=l时,大约延时10us-3-
—3— 实验二 LED 流水灯实验 一、实验目的 (1)学会使用延时函数及其延时时间的计算; (2)掌握LED灯循环点亮的控制方法; 二、实验电路 如图 1 所示,根据实验箱 LED 和单片机引脚接口图,实现 LED 流水灯循环点亮效果。 三、实验内容 利用 C51 编程实现 LED 流水灯循环点亮效果。 四、参考程序 /******************************************************************** * LED 流水灯实验 *实现现象:下载程序后 LED 呈现流水灯效果进行左移右移滚动 ********************************************************************/ #include "reg52.h" //此文件中定义了单片机的一些特殊功能寄存器 #include //因为要用到左右移函数,所以加入这个头文件 typedef unsigned int u16; //对数据类型进行声明定义 typedef unsigned char u8; #define led P2 //将 P2 口定义为 led 后面就可以使用 led 代替 P2 口 /******************************************************************** * 函 数 名 : delay * 函数功能 : 延时函数,i=1 时,大约延时 10us

********************************************************************void delay (ul6 i)while(i--) ;1/*********************************************************************函数名: main*函数功能:主函数********************************************************************voidmainO(u8 i;led=0xfe:delay(50000)://大约延时450mswhile(1)(/*for(i=0;i<8;i++)tP2=~(0x01<<i)://将1右移i位,然后将结果取反赋值到P2口delay(50000);//大约延时450ms1*///将led左移一位for(i=0:i<7:i++)t4-
—4— ********************************************************************/ void delay(u16 i) { while(i-); } /******************************************************************** * 函 数 名 : main * 函数功能 : 主函数 ********************************************************************/ void main() { u8 i; led=0xfe; delay(50000); //大约延时 450ms while(1) { /* for(i=0;i<8;i++) { P2=~(0x01<<i); //将 1 右移 i 位,然后将结果取反赋值到 P2 口 delay(50000); //大约延时 450ms } */ for(i=0;i<7;i++) //将 led 左移一位 {

led= crol(led,1):delay(50000)://大约延时450ms1)//将led右移一位for(i=0;i<7;i++)tled=_cror_(led,1):delay(50000)://大约延时450ms111五、实验思考题1、尝试不用_crol_函数和_cror_(函数实现循环移位?2、试着改变发光管的移动速度?-5-
—5— led=_crol_(led,1); delay(50000); //大约延时 450ms } for(i=0;i<7;i++) //将 led 右移一位 { led=_cror_(led,1); delay(50000); //大约延时 450ms } } } 五、实验思考题 1、尝试不用_crol_()函数和_cror_()函数实现循环移位? 2、试着改变发光管的移动速度?

实验三独立按键实验一、实验目的(1)学习单片机输入输出的控制方法(2)掌握按键和LED的控制;(3)掌握键盘的延时去抖概念和编程实现;二、实验电路KIK4RXDTXDP32/CS1P33/CS2图2:独立按键接口电路结合图2的独立按键接口和图1的LED接口,实现利用一个按键控制一个LED灯点亮和熄灭的方法。三、实验内容(1)查看实验箱硬件连线图,确定LED、按键和单片机引脚的连接:(2)编写c51程序,实现利用按键控制相应LED灯的亮灭:四、参考程序/*********************************************************************独立按键实验*实现现象:下载程序后按下K1按键可以对D1小灯状态取反。-6-
—6— 实验三 独立按键实验 一、实验目的 (1)学习单片机输入输出的控制方法; (2)掌握按键和LED的控制; (3)掌握键盘的延时去抖概念和编程实现; 二、实验电路 图 2:独立按键接口电路 结合图 2 的独立按键接口和图 1 的 LED 接口,实现利用一个按键控制一个 LED 灯点亮和 熄灭的方法。 三、实验内容 (1)查看实验箱硬件连线图,确定 LED、按键和单片机引脚的连接; (2)编写 c51 程序,实现利用按键控制相应 LED 灯的亮灭; 四、参考程序 /******************************************************************** * 独立按键实验 * 实现现象:下载程序后按下 K1 按键可以对 D1 小灯状态取反

********************************************************************#include"reg52.h"//此文件中定义了单片机的一些特殊功能寄存器typedef unsigned int ul6://对数据类型进行声明定义typedef unsigned char u8;sbitkl=P31://定义P31口是klsbit led=P2°0://定义P20口是led/*********************************************************************函数名: delay*函数功能:延时函数,i=1时,大约延时10us********************************************************************void delay(ul6 i)while(i--);1/*********************************************************************函数名: keypros*函数功能:按键处理函数,判断按键K1是否按下********************************************************************voidkeypros(if (kl==0)//检测按键K1是否按下(delay(1000)://消除抖动一般大约10msif (kl==0)//再次判断按键是否按下t-7-
—7— ********************************************************************/ #include "reg52.h" //此文件中定义了单片机的一些特殊功能寄存器 typedef unsigned int u16; //对数据类型进行声明定义 typedef unsigned char u8; sbit k1=P3^1; //定义 P31 口是 k1 sbit led=P2^0; //定义 P20 口是 led /******************************************************************** * 函 数 名 : delay * 函数功能 : 延时函数,i=1 时,大约延时 10us ********************************************************************/ void delay(u16 i) { while(i-); } /******************************************************************** * 函 数 名 : keypros * 函数功能 : 按键处理函数,判断按键 K1 是否按下 ********************************************************************/ void keypros() { if(k1==0) //检测按键 K1 是否按下 { delay(1000); //消除抖动 一般大约 10ms if(k1==0) //再次判断按键是否按下 {

led=led;//led状态取反while(!kl);//检测按键是否松开11/*********************************************************************函数名:main:主函数*函数功能********************************************************************voidmainOtwhile(1)keyprosO://按键处理函数11五、实验思考题如果将去抖动及等待按键释放的功能取消,程序的运行情况将会如何?-8-
—8— led=~led; //led 状态取反 } while(!k1); //检测按键是否松开 } } /******************************************************************** * 函 数 名 : main * 函数功能 : 主函数 ********************************************************************/ void main() { while(1) { keypros(); //按键处理函数 } } 五、实验思考题 如果将去抖动及等待按键释放的功能取消,程序的运行情况将会如何?