单片机实验指导书(自制设备).docVIP

  • 3
  • 0
  • 约1.92万字
  • 约 33页
  • 2018-08-30 发布于贵州
  • 举报
单片机实验指导书(自制设备)

单片机原理与应用技术 实验指导书 吉林化工学院信控分院测控教研室 目 录 TOC \o 1-2 \h \z HYPERLINK \l _Toc 实验一 流水灯程序设计 PAGEREF _Toc \h 4 HYPERLINK \l _Toc 实验二 LED数码管动态描显示实验 PAGEREF _Toc \h 7 HYPERLINK \l _Toc 实验三 外部中断实验 PAGEREF _Toc \h 9 HYPERLINK \l _Toc 实验四 定时/计数器实验 PAGEREF _Toc \h 12 HYPERLINK \l _Toc 实验五 行列式键盘实验 PAGEREF _Toc \h 15 HYPERLINK \l _Toc 实验六 D/A转换实验 PAGEREF _Toc \h 17 HYPERLINK \l _Toc 实验七 A/D转换实验 PAGEREF _Toc \h 19 HYPERLINK \l _Toc 实验八 AT24C02存储器与I2C总线实验 PAGEREF _Toc \h 21 HYPERLINK \l _Toc 实验九 串行口通信实验 PAGEREF _Toc \h 25 HYPERLINK \l _Toc 实验十 DS1302时钟与SPI总线实验 PAGEREF _Toc \h 28 HYPERLINK \l _Toc 实验十一 步进电机驱动实验 PAGEREF _Toc \h 31 HYPERLINK \l _Toc 实验十 直流电机驱动实验 PAGEREF _Toc \h 33 实验一 流水灯程序设计 一.实验目的 1.了解keil软件程序设计与调试方法; 2.掌握I/O接口电平输出控制方法; 3.掌握延时函数程序的设计原理和调试方法。 二.实验要求 编写一个延时函数程序,控制接在P1口的八个发光二极管逐次点亮(即每次中断点亮一个),形成“流水灯”效果。 三.实验电路连线 AT89C51单片机的P1.0~P1.7口接LED显示模块的D0~D7。 四.实验说明 方法1:采用延时函数的流水灯程序。 在单片机中每条语句的执行都是要消耗系统时间的,所以简单的延时程序只需要执行一些语句就可以实现,但这些语句不应该影响到单片机工作状态(例如IO口状态)。 因此延时程序通常都是由一些空循环语句来实现,例如空操作的for语句或者while语句实现,为了能够方便的改变延时时间,通常我们可以为延时函数设置一个传递参数,以便在不同情况下调用产生不同的延时时间。 实验参考程序如下: #includereg51.h #define BYTE unsigned char BYTE IntTimes = 0; BYTE t = 0x01; void Led_Loop() { P1 = ~t; t=t1; if(t==0x00) t = 0x01; } void Delay( int mS) { BYTE I; While(mS--) { for(i=0;i100; i++); } } void main() { while(1) { Led_Loop(); Delay(500); } } 方法2:拓展实验,采用定时计数器的延时流水灯程序。 程序设计思路为:主程序将T0初始化为定时器,工作在方式1,定时时间为100ms。同时将立即数0x01赋值给t,并将t的内容送P1口输出。每当定时时间到,在T0的中断服务程序中完成定时初值的重新赋值,同时将t的内容循环左移一次并从P1口输出。运行如下程序后就可以看到流水灯的效果了。程序设计的参考流程如图 1所示。 (a)主程序流程图 (b)T0中断服务子程序流程图 图 1 流水灯程序流程图 实验参考程序如下: #includereg51.h #define BYTE unsigned char BYTE IntTimes = 0; BYTE t = 0x01; void T0_INT() interrupt 1 { IntTimes++; if(IntTimes = 10) { IntTimes = 0; P1 = ~t; t=t1; if(t==0x00) { t = 0x01; } } TH0 = 0x4c; TL0 = 0x00; } Timer_Init() { TMOD |= 0x01; //T0和T1定时模式,方式一 TH0 = 0x4c; TL0 = 0x00; //设T0初值,50毫秒,晶振:11.0592MHz ET0=1; //开启T0中断

文档评论(0)

1亿VIP精品文档

相关文档