高校内部C语言单片机实验讲义.doc

上传人:本田雅阁 文档编号:2080527 上传时间:2019-02-10 格式:DOC 页数:50 大小:7.01MB
返回 下载 相关 举报
高校内部C语言单片机实验讲义.doc_第1页
第1页 / 共50页
高校内部C语言单片机实验讲义.doc_第2页
第2页 / 共50页
高校内部C语言单片机实验讲义.doc_第3页
第3页 / 共50页
亲,该文档总共50页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述

《高校内部C语言单片机实验讲义.doc》由会员分享,可在线阅读,更多相关《高校内部C语言单片机实验讲义.doc(50页珍藏版)》请在三一文库上搜索。

1、微机原理与应用实验讲义刘涛 陈亮中国计量学院信息学院目 录实验1:keil开发环境介绍单片机内部存储器调用操作1实验2:清零、拆字、拼字程序及数据区传送子程序7实验3:P1口亮灯实验、P1口转弯灯实验9实验4:单片机定时器实验11实验5:单片机计数器实验13实验6:单片机串行口实验14实验7:工业顺序控制实验18实验8:8255PA口控制PB口、8255控制交通灯20实验9:单片机键盘输入、数码管显示实验22实验10:单片机D/A转换实验30实验11:单片机总线控制1602液晶32实验12:单片机设计简易计算器36实验1:keil开发环境介绍单片机内部存储器调用操作一、实验目的1.进行keil

2、开发环境的熟悉和调试;2.能够初步进行一个简单程序的调试二、实验设备及器材启东单片机综合实验箱,计算机等三、实验内容熟悉keil的开发环境,并进行一个简单的程序调试,在keil的串行调试窗口显示“Hello World!”四、实验步骤使用C语言肯定要使用到C编译器,以便把写好的C程序编译为机器码,这样单片机才能执行编写好的程序。KEIL uVISION2是众多单片机应用开发软件中优秀的软件之一,它支持众多不同公司的MCS51架构的芯片,它集编辑,编译,仿真等于一体,同时还支持,PLM,汇编和C语言的程序设计,它的界面和常用的微软VC+的界面相似,界面友好,易学易用,在调试程序,软件仿真方面也有

3、很强大的功能。因此很多开发51应用的工程师或普通的单片机爱好者,都对它十分喜欢。以上简单介绍了KEIL51软件,要使用KEIL51软件,必需先要安装它。KEIL51是一个商业的软件,对于我们这些普通爱好者可以到KEIL中国代理周立功公司的网站上下载一份能编译2K的DEMO版软件,基本可以满足一般的个人学习和小型应用的开发。(安装的方法和普通软件相当这里就不做介绍了)图11启动时的屏幕接着按下面的步骤建立您的第一个项目:(1)点击Project菜单,选择弹出的下拉式菜单中的New Project,如图12。接着弹出一个标准Windows文件对话窗口,如图13,用法技巧也不是这里要说的,以后的章节

4、中出现类似情况将不再说明。在文件名中输入您的第一个C程序项目名称,这里我们用test,只要符合Windows文件规则的文件名都行。保存后的文件扩展名为uv2,这是KEIL uVision2项目文件扩展名,以后我们可以直接点击此文件以打开先前做的项目。图12New Project菜单 图13文件窗口(2)选择所要的单片机,这里我们选择常用的Ateml公司的AT89C51。此时屏幕如图14所示。AT89C51有什么功能、特点呢?不用急,看图中右边有简单的介绍,稍后的章节会作较详细的介绍。完成上面步骤后,我们就可以进行程序的编写了。(3)首先我们要在项目中创建新的程序文件或加入旧程序文件。如果你没有

5、现成的程序,那么就要新建一个程序文件。在KEIL中有一些程序的Demo,在这里我们还是以一个C程序为例介绍如何新建一个C程序和如何加到您的第一个项目中吧。点击图15中1的新建文件的快捷按钮,在2中出现一个新的文字编辑窗口,这个操作也可以通过菜单FileNew或快捷键Ctrl+N来实现。好了,现在可以编写程序了,光标已出现在文本编辑窗口中,等待我们的输入了。第一程序嘛,写个简单明了的吧。下面是经典的一段程序:i nclude i nclude void main(void)SCON = 0x50; /串口方式1,允许接收TMOD = 0x20; /定时器1定时方式2TCON = 0x40; /设

6、定时器1开始计数TH1 = 0xE8; /11.0592MHz 1200波特率TL1 = 0xE8;TI = 1;TR1 = 1; /启动定时器while(1)printf (Hello World!n); /显示Hello World图14选取芯片图15新建程序文件 这段程序的功能是不断从串口输出Hello World!字符,我们先不管程序的语法和意思吧,先看看如何把它加入到项目中和如何编译试运行。(4)点击图15中的3保存新建的程序,也可以用菜单FileSave或快捷键Ctrl+S进行保存。因是新文件所以保存时会弹出类似图13的文件操作窗口,我们把第一个程序命名为test1.c,保存在项目

7、所在的目录中,这时你会发现程序单词有了不同的颜色,说明KEIL的C语法检查生效了。如图16鼠标在屏幕左边的Source Group1文件夹图标上右击弹出菜单,在这里可以做在项目中增加减少文件等操作。我们?quot;Add File to Group Source Group 1弹出文件窗口,选择刚刚保存的文件,按ADD按钮,关闭文件窗,程序文件已加到项目中了。这时在Source Group1文件夹图标左边出现了一个小+号说明,文件组中有了文件,点击它可以展开查看。图16把文件加入到项目文件组中 (5)C程序文件已被我们加到了项目中了,下面就剩下编译运行了。这个项目我们只是用做学习新建程序项目和

8、编译运行仿真的基本方法,所以使用软件默认的编译设置,它不会生成用于芯片烧写的HEX文件,如何设置生成HEX文件就请看下面的第三课。我们先来看图17吧,图中1、2、3都是编译按钮,不同是1是用于编译单个文件。2是编译当前项目,如果先前编译过一次之后文件没有做动编辑改动,这时再点击是不会再次重新编译的。3是重新编译,每点击一次均会再次编译链接一次,不管程序是否有改动。在3右边的是停止编译按钮,只有点击了前三个中的任一个,停止按钮才会生效。在4中可以看到编译的错误信息和使用的系统资源情况等,以后我们要查错就靠它了。6是有一个小放大镜的按钮,这就是开启关闭调试模式的按钮,它也存在于菜单DebugSta

9、rtStop Debug Session,快捷键为Ctrl+F5。图17编译程序(6)进入调试模式,软件窗口样式大致如图18所示。图中1为运行,当程序处于停止状态时才有效,2为停止,程序处于运行状态时才有效。3是复位,模拟芯片的复位,程序回到最开头处执行。按4我们可以打开5中的串行调试窗口,这个窗口我们可以看到从51芯片的串行口输入输出的字符,这里的第一个项目也正是在这里看运行结果。这些在菜单中也有,这里不再一一介绍大家不妨找找看,其它的功能也会在后面的课程中慢慢介绍。首先按4打开串行调试窗口,再按运行键,这时就可以看到串行调试窗口中不断的打?quot;Hello World!。这样就完成了您

10、的第一个C项目。最后我们要停止程序运行回到文件编辑模式中,就要先按停止按钮再按开启关闭调试模式按钮。然后我们就可以进行关闭KEIL等相关操作了。到此为止,初步学习了一些KEIL uVision2的项目文件创建、编译、运行和软件仿真的基本操作方法。其中一直有提到一些功能的快捷键的使用,的确在实际的开发应用中快捷键的运用可以大大提高工作的效率,建议大家多多使用,还有就是对这里所讲的操作方法举一反三用于类似的操作中。 图18调试运行程序 实验2:清零、拆字、拼字程序及数据区传送子程序一、实验目的掌握汇编语言设计和调试方法,熟悉键盘操作。二、实验内容(1)把2000H-20FFH的内容清零。(2)把2

11、000H的内容拆开,高位送2001H低位,低位送2002H低位,2001H、2002H高位清零,一般本程序用于把数据送显示缓冲区时用。(3)把2000H、2001H的低位分别送入2002H高低位,一般本程序用于把显示缓冲区的数据取出拼装成个字节。(4)把R2、R3源RAM区首址内的R6、R7字节数据传送到R4、R5目的RAM区。三、程序框图(2)拆字程序框图(1)清零程序框图(4)数据区传送程序框图(3)拼字程序框图四、实验步骤(1)用连续或单步方式运行程序,检查2000-20FF中执行程序前后的内容变化。(2)用连续或单步方式运行程序,检查20002002H中内容变化情况。(3)单步或用断点

12、方式运行程序,检查2002H内容变化情况。(4)在R2、R3中输入源首址(例如0000H),R4、R5中输入目的地址(例如2000H), R6、R7中输入字节数(例如1FFFH),运行程序,检查0000-1FFFH中内容是否和2000-3FFFH中内容完全致。实验3:P1口亮灯实验、P1口转弯灯实验一、实验目的(1)学习P1口的使用方法;(2)学习延时子程序的编写。二、实验设备及器材启东单片机综合实验箱,计算机等三、实验内容(1)P1口亮灯实验:P1作为输出口,接八只发光二极管,编写程序,使发光二极管循环点亮。P1口对准双向口,每一位都可独立地定义为输出线或输入线。本实验中延时子程序采用指令循

13、环来实现,机器周期(12/6MHz)*指令所需机器周期数*循环次数,在系统时间允许的情况下可以采用此方法。(2)P1口转弯灯实验:P1.0开关接5V时,右转弯灯闪亮,P1.1开关接5V时左转弯灯闪亮, P1.O、P1.1开关同时接5V或接地时,转弯灯均不闪亮。四、程序框图图2-1 p1口亮灯实验程序框图图2-1 p1口转弯灯实验程序框图五、实验电路图2-3 P1口亮灯实验电路图图2-4 P1口转弯灯实验电路图六、实验步骤(1)P1口亮灯实验:P1.O-P1.7用插针连至L1-L8,运行程序后,观察发光二极管闪亮移位情况。(2)P1口转弯灯实验:P1.0接K1 P1.1接K2 P1.4-P1.7

14、接L1 L5 L9 L13连续运行本程序,应看到转弯灯正确闪亮,在用单步方式调试本程序时需修改延时子程序,(例可把延时程序第一个字节改成返回指令22H),以便观察。七、思考改变延时常数,使发光二极管闪亮时间改变。修改程序,使发光二极管闪亮移位方向改变。实验4:单片机定时器实验一、实验目的熟悉51定时/计数功能,掌握初始化编程方法。二、实验设备及器材计算机、实验箱或自制实验板三、实验内容把定时器0外部输入的脉冲进行计数,并送显示器显示。四、程序框图五、实验电路五、实验步骤P3.4依次接T0-T7或单步脉冲输出孔,执行程序,观察数码管上计数脉冲的速度及个数。 实验5:单片机计数器实验一、实验目的学

15、习51单片机内部定时计数器使用方法。二、实验设备及器材计算机、实验箱或自制实验板三、实验内容51单片机内部定时计数器T0,按计数器模式工作于方式1,对P34(T0)引脚进行计数。将其数值按二进制数在P1口驱动LED灯上显示出来。四、实验电路连线P10 - LED0 P11 - LED1 P12 - LED2 P13 - LED3 P14 - LED4 P15 - LED5 P16 - LED6P17 - LED7 - T0(P34)单次脉冲五、实验说明本实验中内部计数器起计数器的作用。外部事件计数脉冲由T0(P34)脚引入定时器T0。单片机在每个机器周期采样一次输入波形,因此单片机至少需要两个

16、机器周期才能检测到一次跳变,这就要求被采样电平至少维持一个完整的机器周期,以保证电平在变化之前即被采样。同时这就决定了输入波形的频率不能超过机器周期频率。开始设置T0工作方式(方式1、计数模式)开始计数计数,输出计数值六、参考程序框图实验6:单片机串行口实验一、实验目的1.掌握8051串行口方式0工作方式及编程方法。2.掌握利用串行口扩展I/O通道的方法。二、实验设备及器材启东单片机综合实验箱,导线,数码管,74ls164等。三、实验内容利用8051串行口和串行输入并行输出移位寄存器74LS164,扩展一个8位输出通道,用于驱动一个数码显示器,在数码显示器上循环显示8031串行口输出的09这1

17、0个数字。串行口工作在方式0时,可通过外接移位存储器实现串并行转换。在这种方式下,数据为8位,只能从RXD端输入输出,TXD端总是输出移位同步时钟信号,其波特 率固定为晶振频率1/12。由软件置位串行控制寄存器(SCON)的REN后才能启动串行接收,在CPU将数据写入SBUF寄存器后,立即启动发送。待8位数据输完后,硬件将SCON寄存器的TI位置1,TI必须由软件清零。四、实验线路五、 参考程序清单#include #define LEDLen 6unsigned char volatile OUTBIT; / 位控制口unsigned char volatile OUTSEG; / 段控制口

18、unsigned char volatile IN ; / 键盘读入口#pragma locate(OUTBIT = 0x8002) / 定义各端口的地址#pragma locate(OUTSEG = 0x8004)#pragma locate(IN = 0x8001)#pragma interrupt(Sio_int=0x200c)/ 定义串口中断向量unsigned char LEDBufLEDLen; / 显示缓冲unsigned char RCVBUF,HasRcv;unsigned char const LEDMAP = / 八段管显示码 0x3f, 0x06, 0x5b, 0x4f

19、, 0x66, 0x6d, 0x7d, 0x07, 0x7f, 0x6f, 0x77, 0x7c, 0x39, 0x5e, 0x79, 0x71;void Delay(unsigned char CNT) unsigned char i; while (CNT- !=0) for (i=100; i !=0; i-);void DisplayLED() unsigned char i, j, k; unsigned char Pos; unsigned char LED; Pos = 0x20; / 从左边开始显示 for (i = 0; i = 1; / 显示下一位 unsigned cha

20、r const KeyTable = / 键码定义 0x16, 0x15, 0x14, 0xff, 0x13, 0x12, 0x11, 0x10, 0x0d, 0x0c, 0x0b, 0x0a, 0x0e, 0x03, 0x06, 0x09, 0x0f, 0x02, 0x05, 0x08, 0x00, 0x01, 0x04, 0x07;unsigned char TestKey() OUTBIT = 0; / 输出线置为0 return (IN & 0x0f); / 读入键状态 (高四位不用)unsigned char GetKey() unsigned char Pos; unsigned

21、char i; unsigned char j; unsigned char k; i = 6; Pos = 0x20; / 找出键所在列 do OUTBIT = Pos; Pos = 1; k = IN & 0x0f; while (-i != 0) & (k = 0); / 键值 = 列 X 4 + 行 if (k != 0) i *= 4; if (k & 2) i += 1; else if (k & 4) i += 2; else if (k & 8) i += 3; OUTBIT = 0; do Delay(10); while (TestKey(); / 等键释放 return(

22、KeyTablei); / 取出键码 else return(0xff);void Sio_int() if(sp_stat & 0x40) / RI位是否为1? RCVBUF = sbuf_rx; HasRcv = 1; void main() ioc1 = 0x20; / P2.0设为TXD功能 sp_con = 0x09; / 串口模式1,允许接收 baud_rate = 0x9b; / 波特率 2400BPS 6MHz baud_rate = 0x80; int_mask1 = 0x00; / 禁止RI和TI中断 int_mask = 0x40; / 允许串口中断(0x200C) Ha

23、sRcv = 0; LEDBuf0 = 0xff; LEDBuf1 = 0xff; LEDBuf2 = 0xff; LEDBuf3 = 0xff; LEDBuf4 = 0x00; LEDBuf5 = 0x00; enable() ; / 允许中断 while (1) if(!HasRcv) DisplayLED(); / 显示 if (TestKey() / 如果有键按下 sbuf_tx = GetKey(); / 则用串口输出 else HasRcv = 0; / 已收到数据 LEDBuf5 = LEDMAPRCVBUF & 0x0f; / 显示低4位 LEDBuf4 = LEDMAPRCV

24、BUF / 0x10; / 显示高4位 实验7:工业顺序控制实验一、实验目的掌握工业顺序控制程序的简单编程,中断的使用。二、实验预备知识 在工业控制中,象冲压、注塑、轻纺、制瓶等生产过程,都是一些继续生产过程,按某种顺序有规律地完成预定的动作,对这类继续生产过程的控制称顺序控制,倒注塑机工艺过程大致按“合模注射延时开模产伸产退”顺序动作,用单片机最易实现。三、实验内容 8032P1.0-P1.6控制注塑机的七道工序,现模拟控制七只发光二极管的点亮,低电平有效,设定每道工序时间转换为延时,P3.4为开工启动开关,高电平启动。P3.3为外部故 障输入模拟开关,低电平报警,P1.7为报警声音输出,设

25、定6道工序只有一位输出,第七道工序三位有输出。四、程序框图五、实验电路六、实验步骤按实验电路图接好连线。执行程序,把K1接到电平,观察发光二极管点亮情况,确定工序执行是否正常,然后把K2置为低电平,看是否有声音报警,恢复中断1,报警停,又从刚才报警时一道程序执行下去。可用单步、单步跟踪,非全速断点、全速断点、连续执行功能调试软件,直到符合自己程序设计要求为止。实验8:8255PA口控制PB口、8255控制交通灯一、实验目的掌握单片机系统中扩展外围芯片的方法,了解8255芯片的结构及编程方法。二、实验内容用8255PA口作开关量输入口,PB口作输出口。(2)8255控制交通灯三、程序框图(1)

26、8255Pa口控制PB口四、实验电路(1)8255Pa口控制PB口(2) 8255控制交通灯五、实验步骤(1)8255Pa口控制PB口:8255PA口接K1-K8,PB口接L1-L8运行程序,按Kl-K8,观察L1-L8发光二极管是否对应点亮。(2) 8255控制交通灯8255PA0-PA7 PB0-PB3接发光二极管L15-L13、L11-L9、L7-L5、L3-L1。 执行程序,初始状态为四个路口的红灯全亮之后,东西路口的绿灯亮,南北路口的红灯亮,东西路口方向通车,延时一段时间后东西路口的绿灯熄灭,黄灯开始闪烁,闪烁若干次后,东西路口红灯亮,而同时南北路口的绿灯亮,南北路口方向开始通车,延

27、时一段时间后,南北路口的绿灯熄灭,黄灯开始闪烁,闪烁若干次后,再切换到东西路口方向,之后重复以上过程。实验9:单片机键盘输入、数码管显示实验一、实验目的掌握51系统中键盘和显示器的接口方法。掌握中断的使用方法。了解c51的编辑,编译方法。二、实验内容(1)用AT89S51的并行口P1接44矩阵键盘,以P1.0P1.3作输入线,以P1.4P1.7作输出线;在数码管上显示每个按键的“0F”序号。(2)44矩阵键盘识别处理:每个按键有它的行值和列值,行值和列值的组合就是识别这个按键的编码。矩阵的行线和列线分别通过两并行接口和CPU通信。每个按键的状态同样需变成数字量“0”和“1”,开关的一端(列线)

28、通过电阻接VCC,而接地是通过程序输出数字“0”实现的。键盘处理程序的任务是:确定有无键按下,判断哪一个键按下,键的功能是什么;还要消除按键在闭合或断开时的抖动。两个并行口中,一个输出扫描码,使按键逐行动态接地,另一个并行口输入按键状态,由行扫描值和回馈信号共同形成键编码而识别按键,通过软件查表,查出该键的功能。三、程序清单#include unsigned char code table=0x3f,0x06,0x5b,0x4f, 0x66,0x6d,0x7d,0x07, 0x7f,0x6f,0x77,0x7c, 0x39,0x5e,0x79,0x71; unsigned char temp;

29、 unsigned char key; unsigned char i,j; void main(void) while(1) P3=0xff; P3_4=0; temp=P3; temp=temp & 0x0f; if (temp!=0x0f) for(i=50;i0;i-) for(j=200;j0;j-); temp=P3; temp=temp & 0x0f; if (temp!=0x0f) temp=P3; temp=temp & 0x0f; switch(temp) case 0x0e: key=7; break; case 0x0d: key=8; break; case 0x0b

30、: key=9; break; case 0x07: key=10; break; temp=P3; P1_0=P1_0; P0=tablekey; temp=temp & 0x0f; while(temp!=0x0f) temp=P3; temp=temp & 0x0f; P3=0xff; P3_5=0; temp=P3; temp=temp & 0x0f; if (temp!=0x0f) for(i=50;i0;i-) for(j=200;j0;j-); temp=P3; temp=temp & 0x0f; if (temp!=0x0f) temp=P3; temp=temp & 0x0f

31、; switch(temp) case 0x0e: key=4; break; case 0x0d: key=5; break; case 0x0b: key=6; break; case 0x07: key=11; break; temp=P3; P1_0=P1_0; P0=tablekey; temp=temp & 0x0f; while(temp!=0x0f) temp=P3; temp=temp & 0x0f; P3=0xff; P3_6=0; temp=P3; temp=temp & 0x0f; if (temp!=0x0f) for(i=50;i0;i-) for(j=200;j0

32、;j-); temp=P3; temp=temp & 0x0f; if (temp!=0x0f) temp=P3; temp=temp & 0x0f; switch(temp) case 0x0e: key=1; break; case 0x0d: key=2; break; case 0x0b: key=3; break; case 0x07: key=12; break; temp=P3; P1_0=P1_0; P0=tablekey; temp=temp & 0x0f; while(temp!=0x0f) temp=P3; temp=temp & 0x0f; P3=0xff; P3_7=

33、0; temp=P3; temp=temp & 0x0f; if (temp!=0x0f) for(i=50;i0;i-) for(j=200;j0;j-); temp=P3; temp=temp & 0x0f; if (temp!=0x0f) temp=P3; temp=temp & 0x0f; switch(temp) case 0x0e: key=0; break; case 0x0d: key=13; break; case 0x0b: key=14; break; case 0x07: key=15; break; temp=P3; P1_0=P1_0; P0=tablekey; temp=temp & 0x0f; while(temp!=0x0f) temp=P3; temp=temp & 0x0f; 实验10:单片机D/A转换实验

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

当前位置:首页 > 其他


经营许可证编号:宁ICP备18001539号-1