单片机实验指导书参考.docx
- 文档编号:18601614
- 上传时间:2023-08-20
- 格式:DOCX
- 页数:31
- 大小:515.17KB
单片机实验指导书参考.docx
《单片机实验指导书参考.docx》由会员分享,可在线阅读,更多相关《单片机实验指导书参考.docx(31页珍藏版)》请在冰点文库上搜索。
单片机实验指导书参考
《单片机原理及应用》
实验指导书
编写:
刘义杰
沈阳工学院
机械与运载学院
实验室管理规定
1.实验室采取责任制度,每组设备安排两名学生,两名学生负责责任区内的所有设备和卫生情况。
2.按照学号安排座位,每组设备的两名负责人应保证电脑、实验箱和仿真器等设备的正常运行,出现问题及时向老师汇报。
3.不准坐在实验台上、不准随意踩踏实验台,保护好实验室的桌椅,桌椅损坏及时汇报给老师,防止出现人身伤害。
4.实验室内不准带入食物,更不容许吃小食品。
一经发现取消成绩;
5.实验室电脑不允许玩游戏、观看影音节目。
发现违反者严肃处理。
6.每次课程结束后,应把连接的导线收拾到规定处,把电源开关还原到原来的位置,保证责任区无杂物的情况下,等待检查人员检查后方可离开。
由于操作错误、擅自使用、人为原因导致的损坏,责任区卫生差,上课玩游戏等问题,将根据情况对两名负责人成绩进行扣分处理,严重的可取消成绩。
实验1基本输入输出设计
一、实验目的
1.熟悉C51语言及特点;
2.熟练使用Keiluvision3集成开发环境和仿真调试的使用;
3.学习AT89C51端口的基本输入输出方法。
二、实验说明
本次实验介绍Keiluvision3软件的使用,通过数据传送程序的编写,熟悉C51语言编程方法和仿真调试方法。
三、参考实例
使用C51语言,给单片机的P2口赋值为0X00,并使P3口的特殊功能为P3.2=0,P3.3=0,P3.6=0,要求在Keiluvision3集成开发环境中仿真P2口和P3口的功能,并看到实际的调试结果。
参考程序:
#include
sbita=P3^2;//定义P3口引脚P3.2
sbitb=P3^3;//定义P3口引脚P3.3
sbitc=P3^6;//定义P3口引脚P3.6
voidmain()//主程序开始
{
P2=0x00;//给P2口赋值为00
a=0;b=0;c=0;//P3.2、P3.3、P3.6引脚赋值为0
}//主程序结束
四、实验步骤
1:
双击桌面的Keiluvision图标,或点击开始—程序中的Keiluvision,启动集成开发环境软件。
2:
建立项目文件:
【project】/【newproject】命令建立。
在此对话框中,可选择保存路径,并定义项目名称,然后保存。
保存后,出现下面对话框,在此对话框中,选择CPU的生产厂ATMEL及型号AT89C51。
确定后,出现下面对话框,是否添加启动文件,选择“是”。
3:
建立程序文件,点击【File】/【New】,则会建立一个空白文件text1。
4:
在text1中编写程序。
5:
保存程序文件:
如编写的文件为汇编文件,扩展名要保存为.asm,如编写的程序用C语言,扩展名为.c。
6:
把程序文件添加到项目中。
当项目建立好后,就可以给项目添加程序文件了,即可加C程序,又可加汇编文件。
在桌面左边的项目管理器窗口中,展开Target1,可看到SourceGroup1,右击SourceGroup1,出现下图,选取AddFilestoGroup‘SourceGroup1’,在出现的查找对话框中,查找想添加的文件。
添加后,可在SourceGroup1中查看添加后的程序文件。
7:
设置参数
在项目管理器窗口中,右击Target1,选择OptionsforTarget’Target1’,或点击图标
,出现下图。
Debug标签中设置仿真类型:
软件模拟或硬件仿真。
其余可以默认。
8:
编译连接项目
点击【Project】–【Rebuiltalltargetfiles】或点击图标
进行编译。
9:
调试程序。
点击【Debug】–【start/stopdebugsession】或点击图标
进行调试。
这时候如果出现下图所示连接失败对话框,那么按一下仿真器上的复位按钮,再点击tryagain即可进入调试阶段。
10:
运行程序。
点击【Debug】–【go】或点击图标
全速运行。
也可单步,停止,全速运行,设断点及运行到光标处等方式运行程序。
11:
观察片内外设。
【Peripherals】下可选中断,I/O口,串口及定时器等外设。
五、实验内容
请使用C51语言,给单片机的P0口赋值为0X04,并使P1口的特殊功能为P1.0=0,P1.1=0,P1.3=0,要求在Keiluvision3集成开发环境中仿真P0口和P1口的功能,并看到实际的调试结果。
实验报告内容
1、重复本实验过程,描述主要过程。
2、自己制作使用位操作指令使P0.0、P0.3、P0.5点亮的程序,并加以描述。
3、描述使某输出口点亮二极管必须的元件和所使用的最少语句。
实验2流水灯设计
一、实验目的
1.学习I/O口的使用方法
2.学习Proteus软件的使用方法。
二、实验说明
I/O口作为输出口时,只需根据需要向其写0或写1,就会在其相应的端口上输出低电平或高电平。
当利用I/O口用作输入时,必须先对口的锁存器写“1”,若不先对它写“1”,读入的数据可能是不正确的。
三、实验步骤
1.打开Keiluvision软件,首先建立新文件及建立一个项目。
添加文件,编译,正确后运行程序。
2.在Proteus软件中完成电路设计、调试与仿真
四、参考实例
4个开关分别对应8个LED的亮灭,开关状态由P1口输入,P3口控制LED的状态。
1.电路图:
2流程图及源程序清单:
#include
#defineSWP1//定义开关接至P1
#defineLEDP3//定义LED接至P0
main()//主程序开始
{SW=0xff//设置输入口
while
(1)//无穷循环
LED=SW;//读取开关(P1)状态,输出到LED(P0)
}//主程序结束
3.实验现象:
K0~K7开关的状态,决定发光二极管的点亮或熄灭。
五、实验内容
1、重复本实验过程,描述主要过程。
2、自己制作使用本节指令使P3.1~P3.7点亮的程序,并加以描述。
3、描述使某输出口点亮二极管必须的元件和所使用的最少语句。
实验3LED数码管静态显示设计
一、实验目的
1.学习LED数码管静态显示的设计方法;
2.学习延时子程序的设计方法。
二、实验说明
用P1口和P2口驱动2个LED数码管做静态显示。
延时子程序用于控制LED显示数字的变换。
作为单片机的指令的执行时间是很短的,数量达微秒级,因此,执行LED亮灭的时间使用延时子程序来实现。
C语言延时子程序如下:
voiddelay(unsignedintz)//约为1ms的延时程序,晶振12MHz
{unsignedintx,y;
for(x=0;x for(y=0;y<115;y++); } 三、实验内容 用P1口和P2口驱动2个LED数码管做静态显示0-9,每次显示两个数字,一直循环。 实验4LED数码管动态显示设计 一、实验目的 1.了解“8”字形LED数码管的基础知识和工作原理 2.掌握单片机控制数码管动态显示的工作原理和软、硬件设计方法 二、实验说明 动态显示,也称扫描显示,是将所有数码管的8段即a~dp段都连接在一起,分时使各个数码管的位选端有效,也就是在某一个时刻只能有1个数码管在显示。 由于人眼具有“视觉暂留”作用(通常在20ms左右),因此只要使多个数码管显示的时间间隔较短,人眼一般是感绝不到数码管熄灭的,因此可以形成多个数码管在“静态显示”的假象。 动态显示优点是占用的I/O接口较少,但需要消耗一定的时间。 实验箱的动态数码显示器由6个共阴极LED数码管构成。 单片机的一个I/O口输出显示段码,经由一片74LS245驱动输出给LED管,由另一个I/O口输出位码,经由74LS06输出给LED管。 三、参考实例 以跑马灯的方式将“12345678”数字由右边依次走入6位数的数码管,即“------→“-----1”→“----12”→“---123”→“--1234”→“-12345”→“123456”→“234567”→“345678”→“45678-”→“5678--”→“678---”→“78----”→“8-----”,如此循环不停。 1.电路图 2.流程图及源程序 #include #defineSCANPP0//定义位码由P0输出 #defineSEG7PP1//定义段码由P1输出 charcodeTAB[11]={0x3f,0x06,0x5b,0x4f,0x66,//数字0~4字形符 0x6d,0x7d,0x07,0x7f,0x6f,0x40};//数字5~9及符号(-)字形符 #definecounts8//声明字组数量 chardisp[counts+11]={10,10,10,10,10,10, 1,2,3,4,5,6,7,8,10,10,10,10,10};//------12345678----- voiddelay1ms(int); voidscanner(char);//扫描函数 main() {chari; while (1) for(i=0;i scanner(i);//扫描第i行字组 } voiddelay1ms(intx)//延时函数,时间x×1ms {inti,j; for(i=0;i for(j=0;j<115;j++); } voidscanner(charx)//扫描字组函数 {chari,j,BCD,scan; for(i=0;i<30;i++)//扫描30次i循环 {scan=0xdf;//扫描信号初值11011111 for(j=0;j<6;j++)//扫描6个数字j循环 {SEG7P=0xff;//关闭八段显示器(防止闪动) SCANP=~scan;//输出扫描信号 BCD=disp[x+j];//读取第x组第j个数字的BCD码 SEG7P=TAB[BCD];//输出至八段显示器 delay1ms(4);//延迟4ms scan>>=1;//产生下个扫描信号 } } } 四、实验内容 以跑马灯的方式将“87654321”数字由右边依次走入6位数的数码管,即“------”→“-----8“→“----87”→“---876”→“—8765”→“-87654”→“876543”→“765432”→“654321”→“54321-”→“4321--”→“321---”→“21----”→“1-----”,如此循环不停。 实验5LED点阵显示设计 一、实验目的 3.学习LED点阵显示的设计方法; 4.学习多个点阵模块的设计方法。 二、实验说明 点亮点阵LED中的一个发光二极管的条件是: 对应的行输出高电平,对应的列输出低电平。 三、实验内容 用4块LED点阵模块显示一个对称的菱形。 实验6键盘控制设计 一、实验目的 1.了解独立键盘的基础知识和工作原理 2.掌握单片机控制独立键盘的软、硬件设计方法 二、实验说明 键盘是单片机最常见的人机接口设备,通过键盘人们可以向单片机输入各种操作命令和数据,单片机捕捉到这些按键信息后,由单片机进行相应的处理。 实验箱提供了8个按钮的小键盘,这些按键都是机械弹性开关,可接到单片机的并行口,如果有键按下,则相应输出为低,否则,输出为高。 见下图。 在弹性按键按下和释放的瞬间,有抖动现象,电压波形如下图所示。 因此单片机在检测按键的时候,都要加上去抖操作,如不去抖,则可能会被单片机认为按键多次被按下,造成输入错误。 消除抖动的方法有硬件和软件两种方法,其中使用软件延时的方法比较简单方便,是经常采用的方法。 按键至少要持续100ms,而抖动的时间大概是10ms左右,故延时时间要大于10ms。 即有键按下后,进行大于10ms的延时,防止由于键盘抖动而引起误操作。 三、参考实例 设置一个按键PB1,若原本P1口所连接的LED不亮,按一下PB1,则LED亮;再按一下PB1,则LED不亮,以此类推;当按住不放时,不会改变状态。 1.电路图 2.流程图及源程序 #include sbitPB1=P2^0;//声明PB1接至P2.0 voiddebouncer(void);//声明去抖动函数 main() {P1=0xff;//关闭LED PB1=1;//设置P2.0为输入口 while (1) {if(PB1==0) {debouncer();//调用去抖动函数 P1=~P1;//切换LED为反相 while(PB1! =1);//若仍按住PB1,继续等待 debouncer();//调用去抖动函数 } } } voiddebouncer(void)//去抖动函数 {inti; for(i=0;i<2300;i++);//计数2300次,延迟约20ms } 四、实验内容 设计一个4*4的矩阵键盘,当按下某一个按键时,在LED数码管上显示该按键的键号。 实验7外部中断设计 一、实验目的 1.理解外部中断的作用及基本应用 2.掌握单片机使用外部中断的简单应用系统的设计方法和调试方法 二、实验说明 1.外部中断的初始化设置共有三项内容: 中断总允许即EA=1,外部中断允许即EXi=1(i=0或1),中断方式设置。 中断方式设置一般有两种方式: 电平方式和脉冲方式,本实验选用后者。 中断请求信号由引脚INT0(P3.2)和INT1(P3.3)引入,本实验由INT0(P3.2)引入。 2.中断控制原理: 中断控制是提供给用户使用的中断控制手段。 实际上就是控制一些寄存器,51系列用于此目的的控制寄存器有四个: TCON、IE、SCON及IP。 3.中断响应的过程: 首先中断采样,然后中断查询,最后中断响应。 采样是中断处理的第一步,对于本实验的脉冲方式的中断请求,若在两个相邻周期采样先高电平后低电平则中断请求有效,IE0或IE1置“1”;否则继续为“0”。 所谓查询就是由CPU测试TCON和SCON中各标志位的状态以确定有没有中断请求发生以及是那一个中断请求。 中断响应就是对中断请求的接受,是在中断查询之后进行的,当查询到有效的中断请求后就进行响应一次中断。 三、参考实例 当主程序正常执行时,P1所连接的8个LED将闪烁。 若按INT0按键,则进入中断状态,P1所连接的8个LED将变成单灯左移,而左移3圈后恢复中断前的状态,程序将继续执行8灯闪烁的功能。 1.电路图 2.流程图及源程序 #include #defineLEDP1 voiddelay1ms(int); voidleft(int);//声明单灯左移函数 main() {IE=0x81;//允许INT0中断 IT0=1; LED=0x00; while (1) {delay1ms(250); LED=~LED;//LED反相 } } voidmy_int0(void)interrupt0//INT0中断子程序 {unsignedsaveLED=LED;//存储中断前LED状态 left(3);//单灯左移3圈 LED=saveLED;//写回中断前LED状态 } voiddelay1ms(intx)//延迟函数 {inti,j; for(i=0;i for(j=0;j<115;j++); } voidleft(intx)//单灯左移函数 {inti,j; for(i=0;i {LED=0xfe; for(j=0;j<7;j++) {delay1ms(250); LED=(LED<<1)|0x01;//左移1位后LSB设为1 } delay1ms(250); } } 四、实验内容 (1)当主程序正常执行时,P1所连接的8个LED将闪烁。 (2)若按INT1按键,则进入中断状态,P1所连接的8个LED将变成单灯左移,而左移3圈后恢复中断前的状态,程序将继续执行8灯闪烁的功能。 实验8计数器设计 一、实验目的 1.进一步掌握中断系统的应用 2.理解计数器的基本应用 3.掌握单片机使用计数器时设计应用系统的软、硬件方法。 二、实验说明 80C51内部有两个定时/计数器T0和T1,16位是指定时/计数器内的计数器是16位的,由2个8位计数器组成。 51的定时/计数器为加法计数器,其计数的方法是在初值的基础上,对计数每有一个脉冲做一次加1。 内部计数器起计数器的作用。 外部事件脉冲由P3.4引入定时器T0。 当定时器/计数器对外部事件进行计数时,在每个机器周期对相应引脚进行采样,如在第一个机器周期采样到的是1,而在下一个机器周期采样到的是0,则计数器加1。 也就是说至少要两个机器周期才能确认一个外部脉冲。 为此,外部脉冲的高电平期间和低电平期间都至少要保持一个机器周期,CPU才能确认这个计数脉冲。 也就是说要24个振荡周期才可确认一个脉冲,所以,外来脉冲的频率最高为振荡频率的1/24。 且高电平和低电平的期间都至少要保证一个机器周期才行。 三、参考实例 单次脉冲模块作为T0计数器的输入,每按一次按键,P1口驱动的发光二极管左移一位。 1.电路图 2.流程图及源程序 #include #defineLEDP1 main() {IE=0x82;//开TO中断 TMOD=0x06;//设置计数器T0为Mode2 TH0=0xff;TL0=0xff;//设置T0计数初值 TR0=1;//启动T0 LED=0xfe; while (1);//无穷循环 } voidtimer0(void)interrupt1//T0中断子程序 {LED=(LED<<1)|0x01; if(LED==0xff) LED=0xfe; } 四、实验内容 (1)单次脉冲模块作为T1计数器的输入,T1工作在方式1下。 (2)每按一次按键,P1口驱动的发光二极管左移一位。 实验9定时器设计 一、实验目的 1.理解定时器的基本应用 2.掌握单片机使用定时器时设计应用系统的软、硬件方法。 二、实验说明 定时器有关的寄存器有工作方式寄存器TMOD和控制寄存器TCON。 TMOD用于设置定时器/计数器的工作方式0-3,并确定用于定时还是用于计数。 TCON主要功能是为定时器在溢出时设定标志位,并控制定时器的运行或停止等。 三、参考实例 由P1口驱动8个LED,每隔0.25s,这8个LED分为两组,交替闪烁一次,即高四位亮低四位灭,0.25s后高四位灭低四位亮,如此循环下去。 内部计数器用作定时器时,是对机器周期计数。 每个机器周期的长度是12个振荡器周期。 因为实验系统的晶振是11.0592MHZ,工作于方式1,即16位方式定时器,以此方式定时,则最长的定时时间为: 1/(11.0592/12)*65536*10-6s≈71.11ms 如果要定时更长的时间,则要对定时次数进行计数。 本实例要定时0.25秒,设置定时器本身定时50ms,定时5次,则总长为0.25秒。 1.电路图 2.流程图及源程序 中断子程序 #include #defineLEDP1 #definecount50000//T0(Mode1)的计数值,约0.05s #defineTH_M1(65536-count)/256//T0(Mode1)计数高8位 #defineTL_M1(65536-count)%256//T0(Mode1)计数低8位 intintcount=0;//声明intcount变量,计算T0中断次数 main() {IE=0x82;//启用T0中断 TMOD&=0xf1;TMOD|=0x01;//设置T0为Mode1 TH0=TH_M1;TL0=TL_M1;//设置T0计数值高8位、低8位 TR0=1;//启动T0 LED=0xf0;//右4灯亮 while (1);//无穷循环 } voidtimer0(void)interrupt1//T0中断子程序 {TH0=TH_M1;TL0=TL_M1;//设置T0计数值高8位、低8位 if(++intcount==5)//若T0已中断5次数 {intcount=0;//重新计数 LED^=0xff;//输出相反 } } 3.参考实例接线方法 用8P数据线分别将CPU的P1口接到八位逻辑电平显示模块的JD1E5接口。 四、实验内容 (1)由P1口驱动8个LED,每隔0.25s,这8个LED分为两组,交替闪烁一次,即高四位亮低四位灭,0.25s后高四位灭低四位亮,如此循环下去。 (2)0.25s的间隔时间由定时器T1来实现。 实验10A/D转换设计 一、实验目的 1.掌握A/D转换的基本原理。 2.学习A/D转换器件的使用方法 二、实验说明 本实验是用ADC0804将模拟量转换成数字量并输出,该芯片为8位A/D转换器, 三、参考实例 制作一个简易数字电压表 P0口接4位一体共阳极数码管,输出段码,P2口控制数码管的位选,P1口接ADC0804的数据线,P3口接ADC0804控制信号线。 模拟电压由线性电位器POT-HG通过5V电压提供。 四、实验内容 设计相关程序,并用Proteus进行仿真
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 单片机 实验 指导书 参考