实验(8课时用)单片机实验指导书_第1页
实验(8课时用)单片机实验指导书_第2页
实验(8课时用)单片机实验指导书_第3页
实验(8课时用)单片机实验指导书_第4页
实验(8课时用)单片机实验指导书_第5页
已阅读5页,还剩25页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、单片机原理及应用单片机原理及应用实验指导书实验指导书计算机科学与技术系2012 年 8 月目录目录 实验一:实验一:流水灯实验流水灯实验.1实验二:实验二:中断实中断实与与定时器中断实验定时器中断实验.4实验实验三三:串行口实验:串行口实验.9实验实验四四:矩阵式键盘输入识别:矩阵式键盘输入识别.13实验实验五五:LCDLCD 循环显示设计循环显示设计.19实验指导1实验一:流水灯实验流水灯实验一、一、实验目的:实验目的:通过对 P3 口地址的操作控制 8 位 LED 流水点亮,从而认识单片机的存储器。二、二、实验原理图实验原理图实验参考电路图如下:三、三、参考实验程序参考实验程序/流水灯实验

2、#include /包含单片机寄存器的头文件sfr x=0 xb0; /P3 口在存储器中的地址是 b0H, 通过 sfr 可定义 8051 内核单片机 /的所有内部 8 位特殊功能寄存器,对地址 x 的操作也就是对 P1 口的操作实验指导2/*函数功能:延时一段时间*/void delay(void) unsigned char i,j; for(i=0;i250;i+) for(j=0;j250;j+) ; /利用循环等待若干机器周期,从而延时一段时间 /*函数功能:主函数 */void main(void) while(1) x=0 xfe; /第一个灯亮 delay(); /调用延时函

3、数 x=0 xfd; /第二个灯亮 delay(); /调用延时函数 x=0 xfb; /第三个灯亮 delay(); /调用延时函数 x=0 xf7; /第四个灯亮 delay(); /调用延时函数x=0 xef; /第五个灯亮 delay(); /调用延时函数x=0 xdf; /第六个灯亮 delay(); /调用延时函数实验指导3x=0 xbf; /第七个灯亮 delay(); /调用延时函数x=0 x7f; /第八个灯亮 delay(); /调用延时函数 四、四、实验思考题:实验思考题:1.修改程序使 LED 灯为 18 灯亮27 灯亮36 灯亮45 灯亮,再将 LED灯亮的顺序倒过来

4、既:45 灯亮36 灯亮27 灯亮18 灯亮,连续运行。2.设计一个八位二进制加法计数器,要求用八个流水灯显示加法器的结果,灯亮表示 1,灯灭表示 0,实现从 0000 00001111 1111 的加法过程。调试后的程序代码:调试后的程序代码: 实验指导4实验二:中断与定时计数器实验中断与定时计数器实验第一部分第一部分 中断实验中断实验一、一、实验目的:实验目的:通过对 P3.2、P3.3 引脚的电平控制,实现外部中断处理,从而控制输出口P1 的输出效果变化。二、二、实验原理图实验原理图实验参考电路图如下:三、三、参考实验程序参考实验程序/用外中断 0 的中断方式进行数据采集和处理实验指导5

5、#include#includevoid init();void delay(unsigned int);void main()init();while(1)P1 = 0 xff;delay(100);P1 = 0 x00;delay(100);void init()EA = 1;IT0 = 0;IT1 = 0;EX0 = 1;EX1 = 1;void delay(unsigned int n)unsigned int i,j;for(i=0;in;i+)for(j=0;j110;j+);void aa() interrupt 0unsigned char tmp = 0 xfe;unsign

6、ed int i=0;P1 = tmp;delay(100);i = 7;while(i-)tmp = _crol_(tmp,1);P1 = tmp;delay(100);/delay(500);实验指导6i=7;while(i-)tmp = _cror_(tmp,1);P1 = tmp;delay(100);/ delay(500);void bb() interrupt 2P1 = 0 xf0;delay(500);P1 = 0 x0f;delay(500);四、四、实验思考题:实验思考题:根据指导书中提供的原理图,自行设计一个外部中断实验,要求:1.两个外部中断全部用上;2.实验能体现不

7、同中断优先级的中断源的相应情况;3.不同中断处理程序能输出不同的响应效果实验指导7第二部分第二部分 :定时器中断实验一、一、实验目的:实验目的:通过使用定时器 T0 的中断来控制 P2.0 引脚的的 LED 的灯闪烁,要求闪烁时间 2S,既亮 1 S,灭 1 S。二、二、实验原理图实验原理图实验参考电路图如下(注释,下图只有 D1 等闪烁,既亮 1 S,灭 1 S):三、三、参考实验程序参考实验程序/用定时器 T0 的中断实现长时间定时,单片机晶体振荡器周期为 12MHZ, 机器/周期为 1us#include / 包含 51 单片机寄存器定义的头文件sbit D1=P20; /将 D1 位定

8、义为 P2.0 引脚unsigned char Countor; /设置全局变量,储存定时器 T0 中断次数/*函数功能:主函数*/实验指导8void main(void) EA=1; /开总中断ET0=1; /定时器 T0 中断允许 TMOD=0 x01; /使用定时器 T0 的模式 2TH0=(65536-15536)/256; /定时器 T0 的高 8 位赋初值TL0=(65536-15536)%256; /定时器 T0 的高 8 位赋初值TR0=1; /启动定时器 T0Countor=0; /从 0 开始累计中断次数while(1)/无限循环等待中断 ; /*函数功能:定时器 T0 的

9、中断服务程序*/void Time0(void) interrupt 1 using 0 /“interrupt”声明函数为中断服务函数 /其后的 1 为定时器 T0 的中断编号;0 表示使用第 0 组工作寄存器 Countor+; /中断次数自加 1if(Countor=20) /若累计满 20 次,即计时满 1s D1=D1; /按位取反操作,将 P2.0 引脚输出电平取反Countor=0; /将 Countor 清 0,重新从 0 开始计数 TH0=(65536-15536)/256; /定时器 T0 的高 8 位重新赋初值TL0=(65536-15536)%256; /定时器 T0

10、的高 8 位重新赋初值 实验指导9 四、四、实验思考题:实验思考题:修改程序使用定时器 T1 的中断方式来控制 P2.0 、P2.1 引脚的 LED 灯分别以 200mshe 800ms 的周期闪烁调试后的程序代码:调试后的程序代码: 实验指导10实验三:串行口实验一、一、实验目的:实验目的:本实验要求单片机 U1 通过其串行口 TXD 向计算机发送一个数据“oxab” 。利用集成电路 MAX232 将单片机的输出信号转化成计算机能够识别的信号。针对发送的实例,再设计一个单片机接受计算机送出数据的过程二、二、实验原理图实验原理图单片机发送数据实验参考电路图如图(1):图(1)单片机接受数据实验

11、参考电路图如下:图(2)三、三、参考实验程序参考实验程序/单片机向 PC 发送数据#include /包含单片机寄存器的头文件unsigned char code Tab =0 xFE,0 xFD,0 xFB,0 xF7,0 xEF,0 xDF,0 xBF,0 x7F;实验指导11/流水灯控制码,该数组被定义为全局变量/*函数功能:向 PC 发送一个字节数据*/void Send(unsigned char dat) SBUF=dat; while(TI=0) ; TI=0;/*函数功能:延时约 150ms*/ void delay(void) unsigned char m,n; for(m

12、=0;m200;m+) for(n=0;n250;n+) ; /*函数功能:主函数*/void main(void) unsigned char i; TMOD=0 x20; /TMOD=0010 0000B,定时器 T1 工作于方式 2 SCON=0 x40; /SCON=0100 0000B,串口工作方式 1实验指导12 PCON=0 x00; /PCON=0000 0000B,波特率 9600 TH1=0 xfd; /根据规定给定时器 T1 赋初值 TL1=0 xfd; /根据规定给定时器 T1 赋初值 TR1=1; /启动定时器 T1 while(1) for(i=0;i8;i+) /

13、模拟检测数据 Send(Tabi); /发送数据 i delay(); /150ms 发送一次数据 四、四、实验思考题:实验思考题:根据参考原理图图(2)设计一个单片机接受计算机送出数据的过程。调试后的程序代码:调试后的程序代码: 实验指导13实验指导14实验四:矩阵式键盘输入识别一、一、实验目的:实验目的:设计一个 4X4 的矩阵键盘,键盘的号码 015,要求编写出一个键盘输入扫描程序,要求单片机能根据键盘排列顺序,能将按下去键盘号正确识别出来,并采用两个数码管分别键盘号码的个位和十位。二、二、实验原理图实验原理图实验参考电路图如下:三、三、参考实验程序参考实验程序#include /包含

14、51 单片机寄存器定义的头文件sbit P14=P14; sbit P15=P15; 实验指导15sbit P16=P16; sbit P17=P17; unsigned char code Tab =0 xc0,0 xf9,0 xa4,0 xb0,0 x99,0 x92,0 x82,0 xf8,0 x80,0 x90; /数字 09的段码unsigned char keyval; /*函数功能:数码管动态扫描延时*/void led_delay(void) unsigned char j;for(j=0;j200;j+) ; /*函数功能:按键值的数码管显示子程序*/ void displa

15、y(unsigned char k) P2=0 xbf; P0=Tabk/10; led_delay(); P2=0 x7f; P0=Tabk%10; led_delay(); /*函数功能:软件延时子程序实验指导16*/ void delay20ms(void) unsigned char i,j;for(i=0;i100;i+) for(j=0;j60;j+) ; /*函数功能:主函数*/ void main(void) EA=1; ET0=1; TMOD=0 x01; TH0=(65536-500)/256; TL0=(65536-500)%256; TR0=1; keyval=0 x0

16、0; while(1) display(keyval); /*函数功能:定时器 0 的中断服务子程序,进行键盘扫描,判断键位实验指导17*/ void time0_interserve(void) interrupt 1 using 1 TR0=0; P1=0 xf0; if(P1&0 xf0)!=0 xf0) delay20ms(); if(P1&0 xf0)!=0 xf0) P1=0 xfe; if(P14=0) keyval=1; if(P15=0) keyval=2; if(P16=0) keyval=3; if(P17=0) keyval=4; P1=0 xfd; i

17、f(P14=0) keyval=5; if(P15=0) keyval=6; if(P16=0) keyval=7; if(P17=0) keyval=8; 实验指导18 P1=0 xfb; if(P14=0) keyval=9; if(P15=0) keyval=10; if(P16=0) keyval=11; if(P17=0) keyval=12; P1=0 xf7; if(P14=0) keyval=13; if(P15=0) keyval=14; if(P16=0) keyval=15; if(P17=0) keyval=16; TR0=1; TH0=(65536-500)/256;

18、 TL0=(65536-500)%256; 四、四、实验思考题:实验思考题:修改实验电路图和实验程序和设计电路,改成静态显示调试后的程序代码:调试后的程序代码:实验指导19 实验指导20实验五:LCD 循环显示设计一、一、实验目的:实验目的:采用 1602 型 LCD 循环显示字符串“Welcome to Heifei Normal University” 。其中 LCD 显示模式为:16*2 显示、5*7 点阵、8 位数据口;显示开、有光标开且光标闪烁;光标右移,字符不移。二、二、实验原理图实验原理图实验参考电路图如下:实验指导21三、三、参考实验程序参考实验程序/用 LCD 循环右移显示

19、Welcome to Heifei Normal University #include /包含单片机寄存器的头文件#include /包含_nop_()函数定义的头文件sbit RS=P20; /寄存器选择位,将 RS 位定义为 P2.0 引脚sbit RW=P21; /读写选择位,将 RW 位定义为 P2.1 引脚sbit E=P22; /使能信号位,将 E 位定义为 P2.2 引脚sbit BF=P07; /忙碌标志位, ,将 BF 位定义为 P0.7 引脚unsigned char code string = Welcome to Heifei Normal University ;

20、实验指导22/*函数功能:延时 1ms(3j+2)*i=(333+2)10=1010(微秒),可以认为是 1 毫秒*/void delay1ms() unsigned char i,j; for(i=0;i10;i+) for(j=0;j33;j+) ; /*函数功能:延时若干毫秒入口参数:n*/ void delay(unsigned char n) unsigned char i;for(i=0;in;i+) delay1ms(); /*函数功能:判断液晶模块的忙碌状态返回值:result。result=1,忙碌;result=0,不忙*/ unsigned char BusyTest(v

21、oid) bit result;RS=0; /根据规定,RS 为低电平,RW 为高电平时,可以读状态实验指导23 RW=1; E=1; /E=1,才允许读写 _nop_(); /空操作 _nop_(); _nop_(); _nop_(); /空操作四个机器周期,给硬件反应时间 result=BF; /将忙碌标志电平赋给 resultE=0; return result; /*函数功能:将模式设置指令或显示地址写入液晶模块入口参数:dictate*/void WriteInstruction (unsigned char dictate) while(BusyTest()=1); /如果忙就等待

22、 RS=0; /根据规定,RS 和 R/W 同时为低电平时,可以写入指令 RW=0; E=0; /E 置低电平(根据表 8-6,写指令时,E 为高脉冲, / 就是让 E 从 0 到 1 发生正跳变,所以应先置0 _nop_(); _nop_(); /空操作两个机器周期,给硬件反应时间 P0=dictate; /将数据送入 P0 口,即写入指令或地址 _nop_(); _nop_();实验指导24 _nop_(); _nop_(); /空操作四个机器周期,给硬件反应时间 E=1; /E 置高电平 _nop_(); _nop_(); _nop_(); _nop_(); /空操作四个机器周期,给硬件

23、反应时间 E=0; /当 E 由高电平跳变成低电平时,液晶模块开始执行命令 /*函数功能:指定字符显示的实际地址入口参数:x*/ void WriteAddress(unsigned char x) WriteInstruction(x|0 x80); /显示位置的确定方法规定为80H+地址码x /*函数功能:将数据(字符的标准 ASCII 码)写入液晶模块入口参数:y(为字符常量)*/ void WriteData(unsigned char y) while(BusyTest()=1); RS=1; /RS 为高电平,RW 为低电平时,可以写入数据 RW=0; E=0; /E 置低电平(根据表 8-6,写指令时,E 为高脉冲,实验指导25 / 就是让 E 从 0 到 1 发生正跳变,所以应先置0 P0=y; /将数据送入 P0 口,即将数据写入液晶模块 _nop_(); _nop_(); _nop_(); _nop_(); /空操作四个机器周期,给硬件反应时间 E=1; /E 置高电平 _nop_(); _nop_(); _nop_(); _nop_(); /空操作四个机器周期,给硬件反应时间 E=0; /当 E 由高电平跳变成低电平时,液晶模块开始执行命令 /*函数功能:对

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论