单片机实验指导书.docx

上传人:b****5 文档编号:30157184 上传时间:2023-08-05 格式:DOCX 页数:54 大小:947.86KB
下载 相关 举报
单片机实验指导书.docx_第1页
第1页 / 共54页
单片机实验指导书.docx_第2页
第2页 / 共54页
单片机实验指导书.docx_第3页
第3页 / 共54页
单片机实验指导书.docx_第4页
第4页 / 共54页
单片机实验指导书.docx_第5页
第5页 / 共54页
点击查看更多>>
下载资源
资源描述

单片机实验指导书.docx

《单片机实验指导书.docx》由会员分享,可在线阅读,更多相关《单片机实验指导书.docx(54页珍藏版)》请在冰豆网上搜索。

单片机实验指导书.docx

单片机实验指导书

 

《单片机原理及应用》

实验指导书

 

目录

实验一指示灯/开关控制器1

实验二流水灯实验3

实验三16×16LED点阵显示实验6

实验四中断扫描法阵列式键盘实验8

实验五查询式键盘实验11

实验六定时器输出PWM实验13

实验七电子琴模拟实验15

实验八直流电动机控制实验20

实验九RS232串口通信实验21

实验十DAC0832并行DA转换实验23

实验十一ADC0809并行AD转换实验26

实验十二SRAM外部数据存储器扩展实验28

实验十三I2C总线实验30

实验十四电子万年历时钟实验35

实验十五温度传感器温度控制实验36

 

实验一指示灯/开关控制器

一、实验目的

1.熟悉Proteus仿真软件,掌握单片机原理图的绘图方法。

2.熟悉使用Keil编译软件,熟悉简单汇编语言及C语言的编程与调试方法。

二、实验说明

输入电路是在P1口外接8只开关,输出电路是在P2口外接8只发光二极管组成。

此外还包括时钟电路和复位电路。

程序启动后,8只发光二极管先整体闪烁3次,(即亮—灭—亮—灭—亮—灭,间隔时间为0.5秒)。

然后根据开关状态控制对应发光二极管的亮灯状态,即开关闭合相应灯亮,反之则相反。

实现开关对应发光二极管一对一控制。

三、实验内容及步骤

1、熟悉Proteus仿真软件,了解软件的结构组成与功能。

2、熟悉使用Keil编译软件,了解软件的结构组成与功能。

3、理解Proteus与Keil联合的仿真原理。

4、理解单片机程序控制原理,实现指示灯/开关控制器的预期功能。

5、在ISIS中绘制电路原理图。

6、打开Keil仿真软件,首先建立本实验的项目文件,新建文件录入程序,进行编译,直到编译无误。

7、将Keil编译生成的HEX文件下载到Proteus中51单片机,运行观察仿真结果,检查程序与电路的正确性。

四、流程图及源程序

1.源程序清单:

汇编:

ORG0000H

START:

MOVA,90H

MOV0A0H,A

SJMPSTART

END

C语言:

#include

main()

{unsignedcharLED=0;

while

(1)

{LED=P1;

P2=LED;

}

}

2.流程图

 

五、思考题

1、分析IO口工作原理。

2、分析P2口什么状态时发光二极管会点亮。

六、实验电路图

 

实验二流水灯实验

一、实验目的

1、学习P1口的使用方法

2、学习延时子程序的编写和使用

二、实验说明

P1口是准双向口,它作为输出口时与一般的双向口使用方法相同。

由准双向口结构可知当P1口用作输入口时,必须先对口的锁存器写“1”,若不先对它写“1”,读入的数据是不正确的。

三、实验内容及步骤

实验

(一):

用P1口做输出口,接八位逻辑电平显示,程序功能使发光二极管从右到左轮流循环点亮。

1、使用单片机最小应用系统。

关闭该模块电源,用扁平数据线连接单片机P1口与八位逻辑电平显示模块JD10。

2、用串行数据通信线连接计算机与仿真器,把仿真器插到模块的锁紧插座中,请注意仿真器的方向:

缺口朝上。

3、打开Keil仿真软件,首先建立本实验的项目文件,接着添加“P1口输出.ASM”源程序,进行编译,直到编译无误。

4、进行软件设置,选择硬件仿真,选择串行口,设置波特率为38400。

5、打开模块电源和总电源,点击开始调试按钮,点击RUN按钮运行程序,观察发光二极管显示情况。

发光二极管单只从右到左轮流循环点亮。

实验

(二):

用P1.0、P1.1作输入接两个拨断开关,P1.2、P1.3作输出接两个发光二极管。

程序读取开关状态,并在发光二极管上显示出来。

1、用导线分别连接单片机最小应用系统的P1.0、P1.1到两个拨断开关,P1.2、P1.3到两个发光二极管。

2、打开“P1_B.ASM”源程序,编译无误后,全速运行程序,拨动拨断开关,观察发光二极管的亮灭情况。

向上拨为点亮,向下拨为熄灭。

3、也可以把源程序编译成可执行文件,把可执行文件用ISP烧录器烧录到89S52/89S51芯片中运行。

四、流程图及源程序

 

 

2.源程序

(一)实验一

ORG0

Loop:

mova,#0FEh

movr2,#8

Output:

movP1,a

rla

AcallDelay

djnzr2,Output

LjmpLoop

Delay:

movr6,#0

movr7,#0

DelayLoop:

;延时程序

djnzr6,DelayLoop

djnzr7,DelayLoop

ret

end

(二)实验二

KeyLeftBITP1.0;定义

KeyRightBITP1.1

LedleftBITP1.2

LedRightBITP1.3

ORG0

SETBKeyLeft;欲读先置一

SETBKeyRight

Loop:

Movc,keyleft

MovLEDLeft,c

MOVC,KeyRight

MovLEDRIGHt,c

LJMPLoop

END

五、思考题

(1)对于本实验延时子程序

Delay:

MOVR6,0

MOVR7,0

DelayLoop:

DJNZR6,DelayLoop

DJNZR7,DelayLoop

RET

本模块使用12MHz晶振,粗略计算此程序的执行时间为多少?

六、实验电路图

 

实验三16×16LED点阵显示实验

一、实验目的

1、了解16×16矩阵LED显示的基本原理和功能。

2、掌握16×16矩阵LED和单片机的硬件接口和软件设计方法。

二、实验说明

汉字显示屏广泛应用与汽车报站器,广告屏等。

实验介绍一种实用的汉字显示屏的制作,考虑到电路元件的易购性,采用了16×16的点阵模块;汉字显示的原理我们以UCDOS中文宋体字库为例,每一个字由16行16列的点阵组成显示。

即国标汉字库中的每一个字均由256点阵来表示。

我们可以把每一个点理解为一个像素,而把每一个字的字形理解为一幅图像。

所以在这个汉字屏上不仅可以显示汉字,也可以显示在256像素范围内的任何图形。

我们以显示汉字“大”为例,来说明其扫描原理:

在UCDOS中文宋体字库中,每一个字由16行16列的点阵组成显示。

如果用8位的AT89C51单片机控制,由于单片机的总线为8位,一个字需要拆分为2个部分。

一般我们把它拆分为上部和下部,上部由8*16点阵组成,下部也由8*16点阵组成。

在本例中单片机首先显示的是左上角的第一列的上半部分,即第0列的p00---p07口。

方向为p00到p07,显示汉字“大”时,p05点亮,由上往下排列,为p0.0灭,p0.1灭,p0.2灭p0.3灭,p0.4灭,p0.5亮,p0.6灭,p0.7灭。

即二进制00000100,转换为16进制为04h.。

上半部第一列完成后,继续扫描下半部的第一列,为了接线的方便,我们仍设计成由上往下扫描,即从p27向p20方向扫描,从上图可以看到,这一列全部为不亮,即为00000000,16进制则为00h。

然后单片机转向上半部第二列,仍为p05点亮,为00000100,即16进制04h。

这一列完成后继续进行下半部分的扫描,p21点亮,为二进制00000010,即16进制02h.依照这个方法,继续进行下面的扫描,一共扫描32个8位,可以得出汉字“大”。

三、实验内容及步骤

1、单片机最小应用系统的P0,P3口分别接16×16点阵单元的JD15,JD14,最小系统的P1.0,P1.1,P1.2,P1.3分别接点阵模块的A,B,C,D;J21的两个短路帽打在VCC处。

2、用串行数据通信线连接计算机与仿真器,把仿真器插到模块的锁紧插座中,请注意仿真器的方向:

缺口朝上。

3、打开KeiluVision2仿真软件,首先建立本实验的项目文件,接着添加“1616点阵.ASM”源程序,进行编译,直到编译无误。

4、全速运行程序,点阵显示轮流显示八个汉字。

5、也可以把源程序编译成可执行文件,把可执行文件用ISP烧录器烧录到89S52/89S51芯片中运行。

四、源程序

五、原理图

 

实验四中断扫描法阵列式键盘实验

一、实验目的

1、掌握行列式键盘的工作原理

2、掌握中断编程方法

二、实验说明

显示方式采用P2口外接七段共阴极数码管显示;行列式键盘的行列输入通过P1口实现,其中P1.0~P1.3行为线,P1.4~P1.7为列线,通过74HC4002四或非门实现中断请求,中断采用INT0电平触发方式,键盘扫描码通过数码管实时显示出来。

三、实验内容及步骤

1、在Proteus中绘制电路原理图。

2、在Keil中编写C51程序,并使之编译通过。

3、在Proteus中加载程序,观察仿真结果。

四、源程序

#include

charled_mod[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,

0x7f,0x6f,0x77,0x7c,0x58,0x5e,0x79,0x71};//led字模

charkey_buf[]={0x11,0x21,0x41,0x81,0x12,0x22,0x42,0x82,

0x14,0x24,0x44,0x84,0x18,0x28,0x48,0x88};//键值

#defineuintunsignedint

#defineucharunsignedchar

voidinit();

voidkey_scan();

bitint1_flag;

charkey=0,k=0;

voidmain(){

P2=0x00;

P1=0xf0;

init();

while

(1){

if(int1_flag){

P2=led_mod[k];

}

}

int1_flag=0;

}

voidinit(){//初始化程序

IE=0xff;

IP=0x04;//外中断1为高中断优先级

TCON=0x05;

int1_flag=0;

P1=0xf0;//P1端开始初始化为低四位全为1,高四位全为1

}

voidkey_scan()interrupt2//中断程序

{

uintt;

chari;

ucharkeycode,scancode,flag=0xff;

int1_flag=1;

t=5000;

while(t--);

if(INT1==1)return;

EX1=0;//关键盘中断

scancode=0xf7;

while(scancode!

=0xff){

P1=scancode;//扫描码为11110111,即开始扫描P1.3所在的行

keycode=P1;//读出数据,看是否是该行上某列键盘被按下

if((keycode&0xf0)!

=0xf0)break;//如果被按下的键在该行中,则退出

scancode=(keycode>>1)|0xf0;//否刚继续扫描P1.2所在的行,以此循环直到扫描到被按下的键

}

keycode=~keycode;//方便读数

key=keycode;//传给全局变量KEY;

P1=0xf0;

for(i=0;i<16;i++){

if(key_buf[i]==key){k=i;}

}

EX1=1;

return;

}

五、原理图

 

 

实验五查询式键盘实验

一、实验目的

掌握查询式键盘的接口和编程方法。

二、实验内容

本实验提供了8个按键的小键盘,如果有键按下,则相应输出为低电平,否则输出为高电平。

MCU判断有键按下后,要有一定的延时,防止由于键盘抖动而引起误操作。

编写一个程序,能读出键盘操作的编号,并在数码显示器上显示。

三、实验电路

本实验所需电路请参见系统原理图的第一部分和独立式键盘电路。

四、实验程序参考框图

 

(a)主程序框图

 

(b)键盘扫描子程序框图

五、实验步骤

1、把7279阵列式键盘的J9四只短路帽打在上方,J10打在VCC处,用8P排线将JD7和八位动态数码显示的JD11相连,JD8和JD12相连,查询式键盘的JD3和最小系统的P1口相连。

2、用串行数据通信线连接计算机与仿真器,把仿真器插到模块的锁紧插座中,请注意仿真器的方向:

缺口朝上。

3、打开KeiluVision2仿真软件,首先建立本实验的项目文件,接着添加“查询式键盘.ASM”源程序,进行编译,直到编译无误。

4、全速运行,键盘上按下某个键,观察数显是否与该键号一致,键号从左至右为0~7。

5、也可以把源程序编译成可执行文件,把可执行文件用ISP烧录器烧录到89S52/89S51芯片中运行。

六、思考题

1、程序如何确保每按一次键,只处理一次。

七、原理图

 

实验六定时器输出PWM实验

一、实验目的

1、了解脉宽调制(PWM)的原理

2、学习用PWM输出模拟量

3、熟悉51系列单片机的延时程序

二、实验说明

PWM是单片机上常用的模拟量输出方法,通过外接的转换电路,可以将脉冲的占空比变成电压。

程序中通过调整占空比来调节输出模拟电压。

占空比是制脉冲中高电平与低电平的宽度比。

三、实验内容及步骤

P1.0输出PWM信号接转换电路,转换电压值送数字电压表显示。

1、选用89C51最小应用系统模块,用导线将P1.0接到PWM转换电压输入端,电压输出接电压表“+”端,电压表“-”端接地。

2、用串行数据通信线连接计算机与仿真器,把仿真器插到模块的锁紧插座中,请注意仿真器的方向:

缺口朝上。

3、打开KeiluVision2仿真软件,首先建立本实验的项目文件,接着添加“PWM.ASM”源程序,进行编译,直到编译无误。

4、全速运行程序,观察电压表显示值,并做记录,程序默认是占空比5:

5的PWM。

修改源程序LOOP程序段两次给累加器A的赋值,改为①“MOVA,#1”②“MOVA,#9”,重新编译后运行,记录电压表显示值,这是占空比1:

9的PWM。

同样,用户可做占空比9:

1的PWM,并做记录。

比较三种PWM信号转换电压的大小,与理论值相比较。

5、也可以把源程序编译成可执行文件,把可执行文件用ISP烧录器烧录到89S52/89S51芯片中运行。

四、流程图及源程序

1.源程序清单:

;输出50%(5:

5)占空比PWM

;输出10%(1:

9)占空比PWM

;输出90%(9:

1)占空比PWM

ORG20H

OUTPUTBITP1.0

LOOP:

CLROUTPUT

MOVA,#5

CALLDELAY

SERBOUTPUT

MOVA,#5

CALLDELAY

LJMPLOOP

DELAY:

MOVR0,#0

DLOOP:

DJNZR0,DLOOP

DJNZACC,DLOOP

RET

END

2.流程图

 

五、思考题

1、分析PWM转换电路的原理。

2、改变延时子程序R0的值,观察转换电压如何改变。

六、实验电路图

 

实验七电子琴模拟实验

一、实验目的

1、了解单片机系统发声原理

2、进一步熟悉定时器编程方法

二、实验说明

1、利用定时器,可以发出不同频率的脉冲,不同频率的脉冲经喇叭驱动电路放大滤波后,就会发出不同的音调。

2、定时器按设置的定时参数产生中断,这一次中断发出脉冲低电平,下一次反转发出脉冲高电平。

由于定时参数不同,就发出了不同频率的脉冲。

本实验中当有键按下,会发出连续脉冲,直到按键松开,才停止发音。

发完后继续检测键盘,如果键还按下,继续发音。

各音阶标称频率值:

音阶

1

2

3

4

5

6

7

频率(HZ)

261.1

293.7

329.6

349.2

392.0

440.0

493.9

三、实验内容及步骤

利用实验仪上提供的键盘,使数字键1、2、3、4、5、6、7作为电子琴按键,按下即发出相应的音调。

用P3.2口发出音频脉冲,驱动喇叭。

1、单片机最小应用系统的P1口接查询式键盘,单片机INT0口接扬声器的SP+,SP-接GND,扬声器的J19打在23处,P1口接查询式键盘的JD3口

2、用串行数据通信线连接计算机与仿真器,把仿真器插到模块的锁紧插座中,请注意仿真器的方向:

缺口朝上。

3、打开KeiluVision2仿真软件,首先建立本实验的项目文件,接着添加“电子琴.ASM”源程序,进行编译,直到编译无误。

4、全速运行程序,按查询式键盘的1~7键,扬声器发出高低不同的声音。

5、也可以把源程序编译成可执行文件,把可执行文件用ISP烧录器烧录到89S52/89S51芯片中运行。

(ISP烧录器的使用查看附录二)

四、流程图及源程序

 

1.流程图

 

定时中断程序框图

 

2.源程序:

PulseBIT10h;脉冲

ToneHighequ30h;高音调

ToneLowequ31h;低音调

 Toneequ32h;音调

 Speaker BIT P3.2

ljmpStart

org000bh

Timer0Int:

;定时中断

pushPSW

clrTR0

movTH0,ToneHigh

movTL0,ToneLow

setbTR0

movC,Pulse

movSpeaker,C

CPLPulse

popPSW

reti

ToneTable:

dw64578,64686,64778,64821

DW64898,64968,65029

TestKey:

MOVP1,#0FFH

MOVA,P1;读入键状态

ret

KeyTable:

DB0FEH,0FDH,0FBH,0F7H;键值表

DB0EFH,0DFH,0BFH,07FH

GetKey:

MOVR6,#10

ACALLDELAY

MOVA,P1

CJNEA,#0FFH,K01;确有键按下

LJMPMLOOP

K01:

MOVR3,#8;8个键

MOVR2,#0;键码

MOVB,A;暂存键值

MOVDPTR,#K0TAB

K02:

MOVA,R2

MOVCA,@A+DPTR;从键值表中取键值

CJNEA,B,K04;键值比较

MOVA,R2;得键码

RET

K04:

INCR2;不相等,到继续访问键值表

MOVA,#0FFH;键值不在键值中,即多键同时按下

LJMPMLOOP

Delay:

;延时子程序

movr7,#0

DelayLoop:

djnzr7,DelayLoop

djnzr6,Delay

ret

Start:

movsp,#70h

movTMOD,#01;Timer

movIE,#82h;EA=1,IT0=1

movTone,#0

MLoop:

callTestKey

jzMLoop

callGetKey

movb,a

jzMLoop;=0,<1

anla,#8

jnzMLoop;>7

decb

mova,b

rla;a=a*2

movb,a

movdptr,#ToneTable

movca,@a+dptr

movToneHigh,a

movTH0,a

mova,b

inca

movca,@a+dptr

movToneLow,a

movTL0,a

setbTR0

movP1,#OFFH

Wait:

mova,P1

CJNEA,#OFFH,WAIT

MOVR6,#10

ACALLDELAY

clrTR0

ljmpMLoop

end

五、思考题

1、请思考实验是怎样在硬件与软件上实现发声的?

2、本程序中断子程序的调用是怎样进行的?

 

六、电路图

 

实验八直流电动机控制实验

一、实验目的

1、学习用PWM输出模拟量驱动直流电机

2、熟悉直流电动机的工作特性。

二、实验说明

PWM是单片机上常用的模拟量输出方法,用占空比不同的脉冲驱动直流电机转动,从而得到不同的转速。

程序中通过调整输出脉冲的占空比来调节直流电机的转速。

使用光电测速元件测速,当它与圆盘上的空位相靠近时,光电元件输出低电平,当它与没对空时时,光电元件输出高电平。

圆盘转动一周时则产生12个脉冲,直流电机转动时,光电元件输出连续的脉冲信号,单片机记录其脉冲信号,就可以测出直流电机的转速。

另外增加显示电路,可把电机的转速显示出来。

本实验使用6V直流电机。

运行速度设置为40转/秒,经过若干秒后,直流电机转速慢慢下降到运行速度,以设定的速度运行。

三、实验内容及步骤

1、把7279阵列式键盘的J9四只短路帽打在上方,J10打在VCC处2,用8P排线将JD7和八位动态数码显示的JD11相连,JD8和JD12相连。

2、最小系统的1.0口接电机单元的Control口,最小系统的INT0接电机单元的PulseOut。

3、用串行数据通信线连接计算机与仿真器,把仿真器插到模块的锁紧插座中,请注意仿真器的方向:

缺口朝上。

4、打开KeiluVision2仿真软件,首先建立本实验的项目文件,接着添加“直流电机程序.ASM”源程序,进行编译,直到编译无误。

5、全速运行程序。

直流电机顺时针旋转,第三个数码显示P最后两位显示电机转速,观察直流电机转速,若干秒后,直流电机转速慢慢下降到以程序设定的速度运行(程序设定为40转/S左右)。

6、也可以把源程序编译成可执行文件,把可执行文件用ISP烧录器烧录到89S52/89S51芯片中运行。

(ISP烧录器的使用查看附录二)

五、实验电路图

 

实验九RS232串口通信实验

一、实验目的

1、了解80C51串行口的工作原理以及发送的方式。

2、了解PC机通讯的基本要求。

二、实验说明

80C51串行口经232电平转换后,与PC机串行口相连。

PC机使用串口调试应用程序V2.2.exe,实现上位机与下位机的通讯。

本实验使用查询法接收和发送资料。

上位机发出指定字符,下位机收到后返回原字符。

波特率设为4800。

三、实验内容及步骤

1、单片机最小应用系统的RXD、TXD分别接232总线串行口的RXD、TXD,平行九孔串行线插入232总线串行口。

232总线串行口的J12两只短路帽打到232处端。

2、打开串口调试V2.2.exe应用程序,选择下列属性:

波特率——4800数据位

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 医药卫生 > 基础医学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1