单片机应用技术实验报告(1) 下载本文

1

实验一 流水灯控制

一、实验目的

1.学会使用KeilC51软件及proteus7.8仿真工具进行程序设计;

2.掌握利用C语言完成80C51单片机的开发设计,完成流水LED灯控制; 3.熟练掌握在计算机上编辑、编译、连接及运行C程序的方法。

二、实验设备

PC微机;

Windows 操作系统;

KeilC51软件及proteus7.8集成环境。

三、实验步骤

1.Proteus下电路设计

+5VC1U130pF19XTAL1P0.0/AD0P0.1/AD1P0.2/AD2P0.3/AD3P0.4/AD4P0.5/AD5P0.6/AD6P0.7/AD7P2.0/A8P2.1/A9P2.2/A10P2.3/A11P2.4/A12P2.5/A13P2.6/A14P2.7/A15P3.0/RXDP3.1/TXDP3.2/INT0P3.3/INT1P3.4/T0P3.5/T1P3.6/WRP3.7/RD393837363534333221222324252627281011121314151617D1LED-REDD2R2330X1CRYSTAL18R6330C230pFXTAL2LED-REDD3R310kR73309RSTR410k293031PSENALEEALED-REDD4R8330+5VLED-REDD5R9330LED-REDD6R5+5V10k12345678R10330P1.0/T2P1.1/T2EXP1.2P1.3P1.4P1.5P1.6P1.7AT89C52LED-REDD7R11330LED-REDD8R12330LED-RED 程序要求设计一个单片机控制流水灯程序,采用延时程序完成8个LED灯点亮效果(可自行设计效果,程序仅供参考)。首先在Proteus环境下,建立以AT89C52单片机为核心的LED控制电路,电路由时钟电路、复位电路及LED控制电路组成。 2.C语言源程序的建立 在KeilC51中设计C程序,首先新建工程名并保存,工程扩展名为**.uv2,并在出现的对话框中选择AT89C52单片机。然后在工程下新建文本文件,保存为*.c的源文件,将*.c文件添加到工程中,并配置好输出。根据电路图要求设计c语言源程序并进行编译,如程序设计无

2

误,则生成了扩展名为*.hex的文件,以便将该文件导入到Proteus中的AT89C52单片机中。如编译未通过,则再次根据编译错误提示对源程序进行修改。

3.在Proteus中导入*.hex文件

运行Proteus软件,在电路图中双击AT89C52,导入上面编译完成的*.hex文件。 4.程序的执行

首先根据提供的程序进行验证,然后按预期在KeilC中自行修改程序,并导入Proteus中进行验证。

四、程序设计

源程序(在KeilC中进行编译) /* */

#include #include #define uchar unsigned char #define uint unsigned int //延时

void Delay(unsigned int t) {

while(--t); }

void main()//主程序 {

uchar i; P0=0x01; while(1) {

for(i=0;i<7;i++) { }

for(i=0;i<7;i++)

P0=_crol_(P0,1); //P0的值向左循环移动 Delay(20000);

名称:8只LED左右来回点亮

说明:程序利用循环移位函数_crol_和_cror_形成来回滚动的效果

3

}

}

{ }

P0=_cror_(P0,1); //P0的值向右循环移动 Delay(20000);

五、实验总结

XXXXXXXXXXX

实验二 按键控制

一、实验目的

1.学会使用KeilC51软件及proteus7.8仿真工具进行程序设计; 2.掌握利用C语言完成80C51单片机的开发设计,完成按键控制; 3.熟练掌握在计算机上编辑、编译、连接及运行C程序的方法。

二、实验设备

PC微机;

Windows 操作系统;

KeilC51软件及proteus7.8集成环境。

三、实验步骤

1.Proteus下电路设计

4

程序要求开关S1和S2分别控制LED1和LED2。(可自行设计效果,程序仅供参考);首先在Proteus环境下,建立以AT89C52单片机为核心的LED控制电路,电路由时钟电路、复位电路及LED控制电路组成。

2.C语言源程序的建立

在KeilC51中设计C程序,首先新建工程名并保存,工程扩展名为**.uv2,并在出现的对话框中选择AT89C52单片机。然后在工程下新建文本文件,保存为*.c的源文件,将*.c文件添加到工程中,并配置好输出。根据电路图要求设计c语言源程序并进行编译,如程序设计无误,则生成了扩展名为*.hex的文件,以便将该文件导入到Proteus中的AT89C52单片机中。如编译未通过,则再次根据编译错误提示对源程序进行修改。

3.在Proteus中导入*.hex文件

运行Proteus软件,在电路图中双击AT89C52,导入上面编译完成的*.hex文件。 4.程序的执行

首先根据提供的程序进行验证,然后按预期在KeilC中自行修改程序,并导入Proteus中进行验证。

四、程序设计

/* 名称:开关控制LED */

#include sbit S1=P1^0; sbit S2=P1^1; sbit LED1=P0^0; sbit LED2=P0^1; //主程序 void main() {

while(1) {

说明:开关S1和S2分别控制LED1和LED2。

if(!S1) //如果检测到低电平,说明按键按下 LED1=0; else LED1=1;

if(!S2) //如果检测到低电平,说明按键按下 LED2=0;

5

else LED2=1; }

}

五、实验总结

XXXXXXXXXXX

实验三 直流电机控制

一、实验目的

1.学会使用KeilC51软件及proteus7.8仿真工具进行程序设计; 2.掌握利用C语言完成80C51单片机的开发设计,完成直流电机控制; 3.熟练掌握在计算机上编辑、编译、连接及运行C程序的方法。

二、实验设备

PC微机;

Windows 操作系统;

KeilC51软件及proteus7.8集成环境。

三、实验步骤

1.Proteus下电路设计

6

程序要求开关S1、S2和S3分别控制电动机正转、反转和停止。(可自行设计效果,程序仅供参考);首先在Proteus环境下,建立以AT89C52单片机为核心的LED控制电路,电路由时钟电路、复位电路及LED控制电路组成。

2.C语言源程序的建立

在KeilC51中设计C程序,首先新建工程名并保存,工程扩展名为**.uv2,并在出现的对话框中选择AT89C52单片机。然后在工程下新建文本文件,保存为*.c的源文件,将*.c文件添加到工程中,并配置好输出。根据电路图要求设计c语言源程序并进行编译,如程序设计无误,则生成了扩展名为*.hex的文件,以便将该文件导入到Proteus中的AT89C52单片机中。如编译未通过,则再次根据编译错误提示对源程序进行修改。

3.在Proteus中导入*.hex文件

运行Proteus软件,在电路图中双击AT89C52,导入上面编译完成的*.hex文件。 4.程序的执行

首先根据提供的程序进行验证,然后按预期在KeilC中自行修改程序,并导入Proteus中进行验证。

四、程序设计

/* 名称:开关控制直流电机 */

说明:S1、S2和S3分别控制电动机正转、反转和停止。

7

8

五、实验总结

XXXXXXXXXXX

实验四 步进电机控制

一、实验目的

1.学会使用KeilC51软件及单片机开发板进行程序设计;

2.掌握利用C语言完成80C51单片机的开发设计,完成步进电机控制; 3.熟练掌握在计算机上编辑、编译、连接及运行C程序的方法。

二、实验设备

PC微机;

Windows 操作系统;

KeilC51软件及单片机开发板。

三、实验步骤

1.步进电机控制电路

9

程序要求控制步进电机工作,原理图见上。 2.硬件连接方法

3.程序的执行

首先根据提供的程序进行验证,然后按预期在KeilC中自行修改程序,并导入单片机开发板中进行验证。

四、程序设计

/* 名称:步进电机控制 */

/*-----------------------------------------------

内容:本程序用于测试4相步进电机常规驱动 使用1相励磁 ------------------------------------------------*/ #include

sbit A1=P1^0; //定义步进电机连接端口 sbit B1=P1^1; sbit C1=P1^2; sbit D1=P1^3;

#define Coil_A1 {A1=1;B1=0;C1=0;D1=0;}//A相通电,其他相断电 #define Coil_B1 {A1=0;B1=1;C1=0;D1=0;}//B相通电,其他相断电 #define Coil_C1 {A1=0;B1=0;C1=1;D1=0;}//C相通电,其他相断电 #define Coil_D1 {A1=0;B1=0;C1=0;D1=1;}//D相通电,其他相断电 #define Coil_OFF {A1=0;B1=0;C1=0;D1=0;}//全部断电 unsigned char Speed;

/*------------------------------------------------

uS延时函数,含有输入参数 unsigned char t,无返回值 unsigned char 是定义无符号字符变量,其值的范围是 0~255 这里使用晶振12M,精确延时请使用汇编,大致延时 长度如下 T=tx2+5 uS

------------------------------------------------*/

10

void DelayUs2x(unsigned char t) { while(--t); }

/*------------------------------------------------

mS延时函数,含有输入参数 unsigned char t,无返回值 unsigned char 是定义无符号字符变量,其值的范围是 0~255 这里使用晶振12M,精确延时请使用汇编 ------------------------------------------------*/ void DelayMs(unsigned char t) { while(t--) {

//大致延时1mS DelayUs2x(245); } }

/*------------------------------------------------ 主函数 ------------------------------------------------*/ main() {

//unsigned int i=64*16; //转2周停止 Speed=5; //调整速度 while(1) {

Coil_A1 //遇到Coil_A1 用{A1=1;B1=0;C1=0;D1=0;}代替 DelayMs(Speed); //改变这个参数可以调整电机转速 ,

//数字越小,转速越大,力矩越小 Coil_B1 DelayMs(Speed); Coil_C1 DelayMs(Speed);

DelayUs2x(245);

11

Coil_D1 DelayMs(Speed); } }

五、实验总结

XXXXXXXXXXX