单片机原理及指导应用实验资料报告材料

上传人:沈*** 文档编号:100701658 上传时间:2022-06-03 格式:DOC 页数:60 大小:601KB
收藏 版权申诉 举报 下载
单片机原理及指导应用实验资料报告材料_第1页
第1页 / 共60页
单片机原理及指导应用实验资料报告材料_第2页
第2页 / 共60页
单片机原理及指导应用实验资料报告材料_第3页
第3页 / 共60页
资源描述:

《单片机原理及指导应用实验资料报告材料》由会员分享,可在线阅读,更多相关《单片机原理及指导应用实验资料报告材料(60页珍藏版)》请在装配图网上搜索。

1、word单片机原理与应用实验报告 2017/2018学年第1学期系别计算机学院专业 软件工程班级 17软件工程班 某某 XXXXXX学号8888888888 授课教师*60 / 60实验一:流水灯实验1实验目的1学习编译和仿真环境使用2学习P3口的使用方法3学习延时子程序的编写2实验容1通过对P3口地址的操作控制8位LED流水点亮,从而认识单片机的接口;2通过改变并行口输出电平控制LED灯的点亮与否,通过延时程序控制亮灯时间。3实验运行结果图4源代码/流水灯实验#include /包含单片机存放器的头文件sfr x=0xb0; /P3口在存储器中的地址是b0H,通过sfr可定义8051核单片机

2、 /的所有部8位特殊功能存放器,对地址x的操作也就是对P1口的操作/*函数功能:延时一段时间*/void delay(void) unsigned char i,j; for(i=0;i255i+) for(j=0;j255j+) ; /利用循环等待假如干机器周期,从而延时一段时间 /*函数功能:主函数*/void main(void) while(1) x=0xfe; /第一个灯亮 delay(); /调用延时函数 x=0xfd; /第二个灯亮 delay(); /调用延时函数 x=0xfb; /第三个灯亮 delay(); /调用延时函数 x=0xf7; /第四个灯亮 delay(); /

3、调用延时函数x=0xef; /第五个灯亮 delay(); /调用延时函数x=0xdf; /第六个灯亮 delay(); /调用延时函数x=0xbf; /第七个灯亮 delay(); /调用延时函数x=0x7f; /第八个灯亮 delay(); /调用延时函数 实验二:中断实验1实验目的1熟悉51单片机中断初始化编程方法。2掌握51单片机外部中断源的设计使用。3中断处理应用程序的设计与调试技巧。2实验容通过对、引脚的电平控制,实现外部中断处理,从而控制输出口P1的输出效果变化。3实验运行结果图4源代码/用外中断0的中断方式进展数据采集和处理#include /包含51单片机存放器定义的头文件s

4、bit S=P32; /将S位定义为,/*函数功能:主函数*/void main(void) EA=1; /开放总中断 EX0=1; /允许使用外中断 IT0=1; /选择负跳变来触发外中断P1=0xff;while(1) ; /无限循环,防止程序跑飞 /*函数功能:外中断T0的中断服务程序*/void int0(void) interrupt 0 using 0 /外中断0的中断编号为0 P1=P1; /每产生一次中断请求,P1取反一次。/用外中断0的中断方式进展数据采集和处理#include /包含51单片机存放器定义的头文件#define uchar unsigned charvoid

5、Delay(unsigned int i)uchar j;for(;i0;i-)for(j=0;j125;j+);/sbit S=P32; /将S位定义为,/*函数功能:主函数*/void main(void) uchar display9=0xff,0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f;unsigned int a;while(1) EA=1; /开放总中断 EX0=1; /允许使用外中断EX1=1; IT0=1; /选择负跳变来触发外中断IT1=1;IP=0;for(a=0;a9;a+)Delay(500);P1=displaya; /*函数功能:

6、外中断T0的中断服务程序*/void int0_isr(void) interrupt 0 using 1 /外中断0的中断编号为1 uchar n; for(n=0;n10;n+) p1=0x0f;Delay(500);P1=0xf0;Delay(500); void int1_isr (void) interrupt 2 using 2 uchar n; for(n=0;n10;n+) p1=0xff;Delay(500);P1=0;Delay(500); 实验三:定时器/计数器实验1实验目的1熟悉51单片机中断初始化编程方法2熟悉51单片机定时计数器的初始化编程方法3掌握定时计数器的应用

7、2实验容通过使用定时器T0的中断来控制引脚的的LED的灯闪烁,要求闪烁时间2S,既亮1 S,灭1 S。3实验运行结果图4源代码#include / 包含51单片机存放器定义的头文件sbit D1=P14; /将D1位定义为引脚unsigned char Countor; /设置全局变量,储存定时器T0中断次数/*函数功能:主函数*/void main(void) EA=1; /开总中断ET0=1; /定时器T0中断允许TMOD=0x01; /使用定时器T0的模式2TH0=(65536-15536)/256; /定时器T0的高8位赋初值TL0=(65536-15536)%256; /定时器T0的

8、高8位赋初值TR0=1; /启动定时器T0Countor=0; /从0开始累计中断次数while(1)/无限循环等待中断 ; /*函数功能:定时器T0的中断服务程序*/void Time0(void) interrupt 1 using 0 /interrupt声明函数为中断服务函数 /其后的1为定时器T0的中断编号;0表示使用第0组工作存放器 Countor+; /中断次数自加1if(Countor=20) /假如累计满20次,即计时满1s D1=D1; /按位取反操作,将引脚输出电平取反Countor=0; /将Countor清0,重新从0开始计数 TH0=(65536-15536)/25

9、6; /定时器T0的高8位重新赋初值TL0=(65536-15536)%256; /定时器T0的高8位重新赋初值 实验四:串行口实验1实验目的1掌握单片机的串行口的工作原理2掌握单片机串行口收发数据的方法2实验容本实验要求单片机U1通过其串行口TXD向单片机U2发送数据。单片机U1的P1口接8个开关,U2的P1口接8个发光二极管。U1设置为只能发送不能接收,U1读入P1口的8个开关状态后,通过串行口发送到U2,U2将接收到的数据送入P1口,由P1口上连接的8个发光二极管显示8个开关的状态。3实验运行结果图4源代码/*发送单片机的发送程序*/#include /包含存放器的头文件/*向PC发送一

10、个字节数据*/void Send(unsigned char date) SBUF=date; while(TI=0); TI=0;/*延时约150ms*/ void delay(void) unsigned char m,n; for(m=0;m200;m+) for(n=0;n250;n+) ; /*函数功能:主函数*/void main(void) unsigned char temp; TMOD=0x20; /定时器T1工作于方式2 SCON=0x40; /串口工作方式1 PCON=0x00; /波特率9600 TH1=0xfd; /根据规定给定时器T1赋初值 TL1=0xfd; /根

11、据规定给定时器T1赋初值 TR1=1; /启动定时器T1 P1=0xff;/读取P1端口数据 while(1) temp=P1; Send(temp); /发送数据i delay(); /50ms发送一次检测数据 /*接收单片机的接收程序*/#include /包含单片机存放器的头文件/*接收一个字节数据*/ unsigned char Receive(void) unsigned char date; while(RI=0) ; /只要接收中断标志位RI没有被置“1 /等待,直至接收完毕RI=1 RI=0; /为了接收下一帧数据,需将RI清0 date=SBUF; /将接收缓冲器中的数据存于

12、dat return date;/*主函数*/void main(void) TMOD=0x20; /定时器T1工作于方式2 SCON=0x50; /SCON=0101 0000B,串口工作方式1,REN=1 PCON=0x00; /PCON=0000 0000B,波特率9600 TH1=0xfd; /根据规定给定时器T1赋初值 TL1=0xfd; /根据规定给定时器T1赋初值 TR1=1; /启动定时器T1 REN=1; /允许接收 while(1) P1=Receive(); /将接收到的数据送P1口显示 实验五:输入接口实验1实验目的1掌握共阴极、共阳极LED的使用方法2掌握矩阵键盘输入

13、扫描和识别程序编写2实验容设计一个4X4的矩阵键盘,键盘的015,要求编写出一个键盘输入扫描程序,要求单片机能根据键盘排列顺序,能将按下去键盘号正确识别出来,并采用两个数码管分别键盘的个位和十位。3实验运行结果图4源代码#include /包含51单片机存放器定义的头文件sbit P14=P14; sbit P15=P15; sbit P16=P16; sbit P17=P17; unsigned char code Tab =0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90; /数字09的段码unsigned char keyval; /*函

14、数功能:数码管动态扫描延时*/void led_delay(void) unsigned char j;for(j=0;j200;j+) ; /*函数功能:按键值的数码管显示子程序*/ void display(unsigned char k) P2=0xbf; P0=Tabk/10; led_delay(); P2=0x7f; P0=Tabk%10; led_delay(); /*函数功能:软件延时子程序*/ void delay20ms(void) unsigned char i,j;for(i=0;i100;i+) for(j=0;j60;j+) ; /*函数功能:主函数*/ void

15、main(void) EA=1; ET0=1; TMOD=0x01; TH0=(65536-500)/256; TL0=(65536-500)%256; TR0=1; keyval=0x00; while(1) display(keyval); /*函数功能:定时器0的中断服务子程序,进展键盘扫描,判断键位*/ void time0_interserve(void) interrupt 1 using 1 TR0=0; P1=0xf0; if(P1&0xf0)!=0xf0) delay20ms(); if(P1&0xf0)!=0xf0) P1=0xfe; if(P14=0) keyval=1;

16、 if(P15=0) keyval=2; if(P16=0) keyval=3; if(P17=0) keyval=4; P1=0xfd; if(P14=0) keyval=5; if(P15=0) keyval=6; if(P16=0) keyval=7; if(P17=0) keyval=8; P1=0xfb; if(P14=0) keyval=9; if(P15=0) keyval=10; if(P16=0) keyval=11; if(P17=0) keyval=12; P1=0xf7; if(P14=0) keyval=13; if(P15=0) keyval=14; if(P16=

17、0) keyval=15; if(P17=0) keyval=16; TR0=1; TH0=(65536-500)/256; TL0=(65536-500)%256; 实验六:LCD循环显示实验1实验目的1掌握单片机驱动显示屏的方法2掌握LCD1602的使用方法2实验容采用1602型LCD循环显示字符串“Wele to Heifei Normal University。其中LCD显示模式为:16*2显示、5*7点阵、8位数据口;显示开、有光标开且光标闪烁;光标右移,字符不移。3实验运行结果图4源代码#include /包含单片机存放器的头文件#include /包含_nop_()函数定义的头文

18、件sbit RS=P20; /存放器选择位,将RS位定义为引脚sbit RW=P21; /读写选择位,将RW位定义为引脚sbit E=P22; /使能信号位,将E位定义为引脚sbit BF=P07; /忙碌标志位,将BF位定义为引脚unsigned char code string =Wele to China ; /*函数功能:延时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*/

19、 void delay(unsigned char n) unsigned char i;for(i=0;in;i+) delay1ms(); /*函数功能:判断液晶模块的忙碌状态返回值:result。result=1,忙碌;result=0,不忙*/ unsigned char BusyTest(void) bit result;RS=0; /根据规定,RS为低电平,RW为高电平时,可以读状态 RW=1; E=1; /E=1,才允许读写 _nop_(); /空操作 _nop_(); _nop_(); _nop_(); /空操作四个机器周期,给硬件反响时间 result=BF; /将忙碌标志电

20、平赋给resultE=0; return result; /*函数功能:将模式设置指令或显示地址写入液晶模块入口参数:dictate*/void WriteInstruction (unsigned char dictate) while(BusyTest()=1); /如果忙就等待 RS=0; /根据规定,RS和R/W同时为低电平时,可以写入指令 RW=0; E=0; /E置低电平(根据表8-6,写指令时,E为高脉冲, / 就是让E从0到1发生正跳变,所以应先置0 _nop_(); _nop_(); /空操作两个机器周期,给硬件反响时间 P0=dictate; /将数据送入P0口,即写入指令

21、或地址 _nop_(); _nop_(); _nop_(); _nop_(); /空操作四个机器周期,给硬件反响时间 E=1; /E置高电平 _nop_(); _nop_(); _nop_(); _nop_(); /空操作四个机器周期,给硬件反响时间 E=0; /当E由高电平跳变成低电平时,液晶模块开始执行命令 /*函数功能:指定字符显示的实际地址入口参数:x*/ void WriteAddress(unsigned char x) WriteInstruction(x|0x80); /显示位置确实定方法规定为80H+地址码x /*函数功能:将数据(字符的标准ASCII码)写入液晶模块入口参数

22、:y(为字符常量)*/ void WriteData(unsigned char y) while(BusyTest()=1); RS=1; /RS为高电平,RW为低电平时,可以写入数据 RW=0; E=0; /E置低电平(根据表8-6,写指令时,E为高脉冲, / 就是让E从0到1发生正跳变,所以应先置0 P0=y; /将数据送入P0口,即将数据写入液晶模块 _nop_(); _nop_(); _nop_(); _nop_(); /空操作四个机器周期,给硬件反响时间 E=1; /E置高电平 _nop_(); _nop_(); _nop_(); _nop_(); /空操作四个机器周期,给硬件反响

23、时间 E=0; /当E由高电平跳变成低电平时,液晶模块开始执行命令 /*函数功能:对LCD的显示模式进展初始化设置*/void LcdInitiate(void) delay(15); /延时15ms,首次写指令时应给LCD一段较长的反响时间 WriteInstruction(0x38); /显示模式设置:162显示,57点阵,8位数据接口delay(5); /延时5msWriteInstruction(0x38);delay(5);WriteInstruction(0x38);delay(5);WriteInstruction(0x0f); /显示模式设置:显示开,有光标,光标闪烁delay

24、(5);WriteInstruction(0x06); /显示模式设置:光标右移,字符不移delay(5);WriteInstruction(0x01); /清屏幕指令,将以前的显示容去除delay(5); void main(void) /主函数 unsigned char i; LcdInitiate(); /调用LCD初始化函数 delay(10); while(1) WriteInstruction(0x01);/清显示:清屏幕指令 WriteAddress(0x00); / 设置显示位置为第一行的第5个字 i = 0;while(stringi != 0)/ 显示字符WriteDat

25、a(stringi);i+;delay(150); for(i=0;i4;i+) delay(250);实验七:简易计算器设计实验1实验目的1学会将单片机的输入、输出和部定时计数器等功能综合应用2掌握各局部功能综合调试能力2实验容设计一个简易计算器,能够进展加减乘除运算。3实验运行结果图4源代码 #include /包含单片机存放器的头文件#include /包含_nop_()函数定义的头文件/#includesbit P0_4 = 0x84;sbit P0_5 = 0x85;sbit P0_6 = 0x86;sbit P0_7 = 0x87;void delay10ms()unsigned

26、char a,b;for(a=100;a0;a-)for(b=50;b0;b-);void delay1ms()unsigned char a,b;for(a=10;a0;a-)for(b=50;b0;b-);unsigned char code tab=0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71;void main()unsigned char m,i,j,k,l,p,cc2,cc3,cc4,cc5,o;unsigned long c1,c2,cc;unsigned int c

27、c1;unsigned char aa0,aa1,aa2,aa3,bb0,bb1,bb2,bb3;unsigned char a0,a1,a2,a3,b0,b1,b2,b3;bit q,n;while(1) static dian=0x80,fuhao=0; for (j=0;j=3;j+) k=0xfe(8-j); P0=k|l; if(P0_4=0) delay10ms(); if(P0_4=0) while(P0_4=0) P2=b0; P1=0xfe; delay1ms(); P2=0; P2=b1; P1=0xfd; delay1ms(); P2=0; P2=b2; P1=0xfb;

28、 delay1ms(); P2=0; P2=b3; P1=0xf7; delay1ms(); P2=0; P2=a0; P1=0xef; delay1ms(); P2=0; P2=a1; P1=0xdf; delay1ms(); P2=0; P2=a2; P1=0xbf; delay1ms(); P2=0; P2=a3; P1=0x7f; delay1ms(); P2=0; P2=dian; P1=0xef; delay1ms(); P2=0; P2=fuhao; P1=0xef; delay1ms(); P2=0; if(tab4*j=0x39) n=1; i=3; else m+; if(

29、m=4&n=0) a3=a2; a2=a1; a1=a0; a0=tab4*j; aa3=aa2; aa2=aa1; aa1=aa0; aa0=4*j; else if(p=3&n=1) b3=b2; b2=b1; b1=b0; b0=tab4*j; bb3=bb2; bb2=bb1; bb1=bb0; bb0=4*j; p+; if(P0_5=0) delay10ms();if(P0_5=0)while(P0_5=0) P2=b0; P1=0xfe; delay1ms(); P2=0; P2=b1; P1=0xfd; delay1ms(); P2=0; P2=b2; P1=0xfb; del

30、ay1ms(); P2=0; P2=b3; P1=0xf7; delay1ms(); P2=0; P2=a0; P1=0xef; delay1ms(); P2=0; P2=a1; P1=0xdf; delay1ms(); P2=0; P2=a2; P1=0xbf; delay1ms(); P2=0; P2=a3; P1=0x7f; delay1ms(); P2=0; P2=dian; P1=0xef; delay1ms(); P2=0; P2=fuhao; P1=0xef; delay1ms(); P2=0; if(tab4*j+1=0x5e) i=4; n=1; else m+; if(m=

31、4&n=0) a3=a2; a2=a1; a1=a0; a0=tab4*j+1; aa3=aa2; aa2=aa1; aa1=aa0; aa0=4*j+1; else if(p=3&n=1) b3=b2; b2=b1; b1=b0; b0=tab4*j+1; bb3=bb2; bb2=bb1; bb1=bb0; bb0=4*j+1; p+; if(P0_6=0) delay10ms();if(P0_6=0)while(P0_6=0) P2=b0; P1=0xfe; delay1ms(); P2=0; P2=b1; P1=0xfd; delay1ms(); P2=0; P2=b2; P1=0xf

32、b; delay1ms(); P2=0; P2=b3; P1=0xf7; delay1ms(); P2=0; P2=a0; P1=0xef; delay1ms(); P2=0; P2=a1; P1=0xdf; delay1ms(); P2=0; P2=a2; P1=0xbf; delay1ms(); P2=0; P2=a3; P1=0x7f; delay1ms(); P2=0; P2=dian; P1=0xef; delay1ms(); P2=0; P2=fuhao; P1=0xef; delay1ms(); P2=0; if(tab4*j+2=0x77) i=1; n=1; else if(

33、tab4*j+2=0x79) q=1; n=1; else m+; if(m=4&n=0) a3=a2; a2=a1; a1=a0; a0=tab4*j+2; aa3=aa2; aa2=aa1; aa1=aa0; aa0=4*j+2; else if(p=3&n=1) b3=b2; b2=b1; b1=b0; b0=tab4*j+2; bb3=bb2; bb2=bb1; bb1=bb0; bb0=4*j+2; p+; if(P0_7=0)delay10ms();if(P0_7=0)while(P0_7=0) P2=b0; P1=0xfe; delay1ms(); P2=0; P2=b1; P1

34、=0xfd; delay1ms(); P2=0; P2=b2; P1=0xfb; delay1ms(); P2=0; P2=b3; P1=0xf7; delay1ms(); P2=0; P2=a0; P1=0xef; delay1ms(); P2=0; P2=a1; P1=0xdf; delay1ms(); P2=0; P2=a2; P1=0xbf; delay1ms(); P2=0; P2=a3; P1=0x7f; delay1ms(); P2=0; P2=dian; P1=0xef; delay1ms(); P2=0; P2=fuhao; P1=0xef; delay1ms(); P2=0; if(tab4*j+3=0x71) i=6; n=1; else if(tab4*j+3=0x7c) i=2; n=1; else m+; if(m=4&n=0) a3=a2; a2=a1; a1=a0; a0=

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

copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!