单片机实验指导书.docx
《单片机实验指导书.docx》由会员分享,可在线阅读,更多相关《单片机实验指导书.docx(54页珍藏版)》请在冰豆网上搜索。
单片机实验指导书
《单片机原理及应用》
实验指导书
目录
实验一指示灯/开关控制器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数据位