实验8课时用单片机实验指导书.docx
- 文档编号:28666712
- 上传时间:2023-07-19
- 格式:DOCX
- 页数:30
- 大小:158.73KB
实验8课时用单片机实验指导书.docx
《实验8课时用单片机实验指导书.docx》由会员分享,可在线阅读,更多相关《实验8课时用单片机实验指导书.docx(30页珍藏版)》请在冰豆网上搜索。
实验8课时用单片机实验指导书
单片机原理及应用》
实验指导书
计算机科学与技术系
2012年8月
实验一:
流水灯实验1...
实验二:
中断实与定时器中断实验4..
实验三:
串行口实验9...
实验四:
矩阵式键盘输入识别1..3
实验五:
LCD循环显示设计19
实验一:
流水灯实验
实验原理图
通过对P3口地址的操作控制8位LED流水点亮,从而认识单片机的存储器
实验参考电路图如下:
VCC
—>XTAL1AD[O.7]
D4R447QR
D6R6屮斤
D0R8_470R
D3R3_4?
or
D1R1470R-
D7R74Z0F?
D5R5_4?
or
D2R2470R
A
P17P3.7ZEQ
P1.6P3.6M^
P1.5P3.5/T1
PI-1P3.4/T0
P1.3P33JlhJT1
P1.2P3.2JirJT0
P11P3.1仃:
P10P30,'RXD AT89C51 RSIPSEtJ 匚A ALE XTAL2 A[8.15| 参考实验程序 //流水灯实验 #include sfrx=OxbO;〃P3口在存储器中的地址是bOH通过sfr可定义8051内核单 片机 //的所有内部8位特殊功能寄存器,对地址x的操作也就是对P1口的 操作 ************************************** 函数功能: 延时一段时间 *****************************************/voiddelay(void) {unsignedchari,j; for(i=0;i<250;i++) for(j=0;j<250;j++) ;//利用循环等待若干机器周期,从而延时一段时间} /*****************************************函数功能: 主函数 ******************************************/ voidmain(void) { while (1) { x=0xfe;// 第一个灯亮 delay();// 调用延时函数 x=0xfd;// 第二个灯亮 delay();// 调用延时函数 x=0xfb;// 第三个灯亮 delay();// 调用延时函数 x=0xf7;// 第四个灯亮 delay();// 调用延时函数 x=0xef;// 第五个灯亮 delay();//调用延时函数 x=0xdf;// 第六个灯亮 delay();// 调用延时函数 x=0xbf;// 第七个灯亮 delay();//调用延时函数 x=0x7f;//第八个灯亮delay();//调用延时函数 } } 四、实验思考题: 1.修改程序使LED灯为18灯亮一一27灯亮一一36灯亮一一45灯亮,再将LED灯亮的顺序倒过来既: 45灯亮——36灯亮——27灯亮——18灯亮,连续运行。 2.设计一个八位二进制加法计数器,要求用八个流水灯显示加法器的结果,灯亮表示1,灯灭表示0,实现从00000000~11111111的加法过程。 调试后的程序代码: 实验二: 中断与定时计数器实验 第一部分中断实验 一、实验目的: 通过对P3.2、P3.3引脚的电平控制,实现外部中断处理,从而控制输出口 P1的输出效果变化。 二、实验原理图 实验参考电路图如下: LUDIAJ LUDUUI LUDW LUO⑷ 'ELLDW 臣LLD切 2R2 1-2223242526Ru耶R匚圳尺匚MR匸湖尺匚肖 2R2 R7 2R2 R8 LED-VELLOW *XTAL1i PD.WD1 P口洲D茫 XTAU' 啊加2 FD.MD* pnaw RST PDJJ^DT P2JW 啣阳 F2iA1D PSEN P23ft11 ALE P2.4A12 Eft P2S^13 P2J5jft1l P2.TA15 piurn Diiwvn P1.1H2K ・3.1/DC0 P1J P32rtNTD PO F^^HNTI P14 PXimi PIS pajsn-i P1^ P3WUH pii P3J7RD 西 3S 37 芳 35 3t 21 _a. 23 S •T id 卫 a _13 i« 16 R9 2R2 RTO 2R2 SW1 SIAWPDT SW2 sw^spot 参考实验程序 /用外中断0的中断方式进行数据采集和处理 #include #include voiddelay(unsignedint); voidmain() { init(); while (1) { P1=0xff; delay(100); P1=0x00; delay(100); } } voidinit() { EA=1; IT0=0; IT1=0; EX0=1; EX1=1; } voiddelay(unsignedintn) { unsignedinti,j; for(i=0;i } voidaa()interrupt0 { unsignedchartmp=0xfe; unsignedinti=0; P1=tmp; delay(100); i=7; while(i--) { tmp=_crol_(tmp,1); P1=tmp;delay(100); } //delay(500); i=7; while(i--) { tmp=_cror_(tmp,1); P1=tmp;delay(100); } //delay(500); } voidbb()interrupt2 { P1=0xf0; delay(500); P1=0x0f; delay(500); } 四、实验思考题: 根据指导书中提供的原理图,自行设计一个外部中断实验,要求: 1.两个外部中断全部用上; 2.实验能体现不同中断优先级的中断源的相应情况; 3.不同中断处理程序能输出不同的响应效果 第二部分: 定时器中断实验 实验目的: 通过使用定时器TO的中断来控制P2.0引脚的的LED的灯闪烁,要求闪烁时间2S,既亮1S,灭1S。 二、实验原理图 U 伽 却--' D1 ——晋一汕E iXTALI XTA12 F£.2//C2p[常心 PI4/吃打如5Pt.ifxsFI.7/MV P5EN F2.0W他倔P2.2/A13卩巳猟11 ALB P2.47A12 EA FIJ/A13 PI.6/AM PJ.7/A.15 P3JVRHD P11 ns 卩2IMT1 PI4 F3.4HD Pl5 皱如 Pl6 PI7 F3.7JRD LED=rEi-imi C2 C3 1 030R R3 R1 ——C懈 J1 11 15 117 3H匚GR^rrf=fan]to-1nEHB D TT 1; 13 14 21 ~25~ 27 实验参考电路图如下(注释,下图只有D1等闪烁,既亮1S,灭1S): 二、参考实验程序 //用定时器TO的中断实现长时间定时,单片机晶体振荡器周期为12MHZ机器 //周期为1us #include sbitD仁P2A0;//将D1位定义为P2.0引脚 unsignedcharCountor;//设置全局变量,储存定时器TO中断次数 /************************************************************** 函数功能: 主函数 **************************************************************/ voidmain(void) 开总中断 定时器T0中断允许使用定时器T0的模式2定时器TO的高8位赋初值 定时器TO的高8位赋初值 启动定时器TO Countor=O;// 从O开始累计中断次数 { EA=1;// ET0=1;// TMOD=0x01;// TH0=(65536-15536)/256;// TL0=(65536-15536)%256;// TR0=1;// while (1)//无限循环等待中断 } /************************************************************** 函数功能: 定时器TO的中断服务程序 **************************************************************/ voidTimeO(void)interrupt1usingO//“interrupt”声明函数为中断服务 函数 //其后的1为定时器TO的中断编号;0表示使用第0组工作 寄存器 { Countor++;//中断次数自加1if(Countor==2O)//若累计满2O次,即计时满1s{ D1=~D1;//按位取反操作,将P2.O引脚输出电平取反 Countor=0;//将Countor清0,重新从0开始计数} TH0=(65536-15536)/256;//定时器T0的高8位重新赋初值 TL0=(65536-15536)%256;//定时器T0的高8位重新赋初值 } 四、实验思考题: 修改程序使用定时器T1的中断方式来控制P2.0、P2.1引脚的LED灯分别 以200mshe800ms的周期闪烁 调试后的程序代码: 实验三: 串行口实验 一、实验目的: “oxab”。 禾U 针对发 本实验要求单片机U1通过其串行口TXD向计算机发送一个数据用集成电路MAX232各单片机的输出信号转化成计算机能够识别的信号送的实例,再设计一个单片机接受计算机送出数据的过程 二、实验原理图 单片机发送数据实验参考电路图如图 (1): D1 I I I I I I ADHD.7] U2 vcc A R1220R AIS,.15] X7AL2 Kbr ALEEAPbtN ADP..7] XTAL1 XTAE2 ATB9C51 D2 220R D2 R3220R 1— R4 220R~I——* P3>O/RX[> P1.0 P2H/TK& Pi.d P3-2/INT0 PI.2 P33/INT1 P1.3 IP3^T0 P1.4 raj/Ti P1.5 P3.6AWR P1.S IP3J/RD P1.7 D7 R7Z20R D8 R6220R 1: 11 10 11 tT~ 13~ 14 D4 I I ;31 11i-ii1pppppppp F3.0/RXD厂1.-T/? p-2s/imto P3.3/IMT1 P3 P3.7/RD RST AT09C51 ALE 3pSEN D5 DS R6220R 4 图 (1) 单片机接受数据实验参考电路图如下: 三、参考实验程序 //单片机向PC发送数据 #include unsignedcharcodeTab[]={0xFE,0xFD,0xFB,0xF7,0xEF,0xDF,0xBF,0x7F}; //流水灯控制码,该数组被定义为全局变量 /***************************************************** 函数功能: 向PC发送一个字节数据 ***************************************************/ voidSend(unsignedchardat) { SBUF=dat; while(TI==0) TI=0; } 函数功能: 延时约150ms ************************************************************voiddelay(void) { unsignedcharm,n;for(m=0;m<200;m++)for(n=0;n<250;n++) } /*****************************************************函数功能: 主函数 ***************************************************/ voidmain(void) { unsignedchari; TMOD=0x20;//TMOD=00100000B,定时器T1工作于方式2 SCON=0x40;//SCON=01000000B,串口工作方式1 PCON=0x00;//PCON=00000000B,波特率9600 TH1=0xfd;//根据规定给定时器T1赋初值 TL1=0xfd;//根据规定给定时器T1赋初值 TR1=1;//启动定时器T1 while (1) { for(i=0;i<8;i++)//模拟检测数据 { Send(Tab[i]);//发送数据i delay();//150ms发送一次数据 } } } 四、实验思考题: 根据参考原理图图 (2)设计一个单片机接受计算机送出数据的过程 调试后的程序代码: 实验四: 矩阵式键盘输入识别 一、实验目的: 设计一个4X4的矩阵键盘,键盘的号码0~15,要求编写出一个键盘输入扫描程序,要求单片机能根据键盘排列顺序,能将按下去键盘号正确识别出来,并采用两个数码管分别键盘号码的个位和十位。 二、实验原理图 o4€6fc兀rrFfFCKFr. poporaPQpopoflo ".'ki 实验参考电路图如下: 二、参考实验程序 #include sbitP14=P1A4; sbitP15=P1A5; sbitP16=P1A6; code 数字 sbitP17=PM7; unsignedchar Tab[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};// 0~9的段码 unsignedcharkeyval;/**************************************************************函数功能: 数码管动态扫描延时 **************************************************************/ voidled_delay(void) { unsignedcharj; for(j=0;j<200;j++) } /**************************************************************函数功能: 按键值的数码管显示子程序 **************************************************************/ voiddisplay(unsignedchark) { P2=0xbf; P0=Tab[k/10]; keyval=1; 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==0) keyval=15; if(P17==0) keyval=16; } TR0=1; TH0=(65536-500)/256; TL0=(65536-500)%256; } 四、实验思考题: 修改实验电路图和实验程序和设计电路,改成静态显示 调试后的程序代码: 实验五: LCD循环显示设计 一、实验目的: NormalUniversity 采用1602型LCD循环显示字符串“WelcometoHeifei其中LCD显示模式为: 16*2显示、5*7点阵、8位数据口;显示开、有光标开且光标闪烁;光标右移,字符不移。 实验原理图 U1j ■+5V A C3 1Du R1 10k P0.4/AD4 XTA12 P0-3/AD3 IP0.2/AD2 P0.1/AD1 >XTAL1 PO.O/ADQ 33 P06 34 P05 35 PD4 36 PD3 37 PD2 阀 P01 39 POD 1» 19 17 亘 13TTK 31 3D 29 5 4 ~T~ 23 27 21 21 实验参考电路图如下: 参考实验程序 GMD //用LCD循环右移显示”WelcometoHeifeiNormalUniversity" #include #includevintrins.h>//包含_nop_()函数定义的头文件 sbitRS=P2A0;// 寄存器选择位,将RS位定义为P2.0引脚 sbitRW=P2A1;// 读写选择位,将RW位定义为P2.1引脚 sbitE=P2A2;// 使能信号位,将E位定义为P2.2引脚 sbitBF=P0A7;// 忙碌标志位,,将BF位定义为P0.7引脚 unsignedcharcodestring[]={"WelcometoHeifeiNormalUniversity"}; /*****************************************************函数功能: 延时1ms (3j+2)*i=(3X33+2)X10=1010(微秒),可以认为是1毫秒 ***************************************************/ voiddelay1ms() { unsignedchari,j; for(i=0;i<10;i++) for(j=0;j<33;j++) } /***************************************************** 函数功能: 延时若干毫秒入口参数: n ***************************************************/ voiddelay(unsignedcharn) { unsignedchari; for(i=0;i delay1ms(); } /*****************************************************函数功能: 判断液晶模块的忙碌状态 返回值: result。 result=1,忙碌;result=0,不忙 ***************************************************/ unsignedcharBusyTest(void) { bitresult; RS=0;//根据规定,RS为低电平,RW为高电平时,可以读状态 RW=1; E=1;//E=1,才允许读写_nop_();//空操作 _nop_(); _nop_(); _nop_();//空操作四个机器周期,给硬件反应时间 result=BF;//将忙碌标志电平赋给result E=0;returnresult; } 函数功能: 将模式设置指令或显示地址写入液晶模块 入口参数: dictate { while(BusyTest()==1);// RS=0;//入指令 RW=0; E=0;//E冲, // "0" _nop_(); _nop_();// P0=dictate;// _nop_(); _nop_(); 如果忙就等待 根据规定,RS和R/W同时为低电平时,可以写置低电平(根据表8-6,写指令时,E为高脉 就是让E从0到1发生正跳变,所以应先置 空操作两个机器周期,给硬件反应时间 将数据送入P0口,即写入指令或地址 voidWriteInstruction(unsignedchardictate) } /*****************************************************函数功能: 指定字符显示的实际地址入口参数: x voidWriteAddress(unsignedcharx) { Writelnstruction(x|0x80);//显示位置的确定方法规定为"80H+地址码 x" } /***************************************************** 函数功能: 将数据(字符的标准ASCll码)写入液晶模块 入口参
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 实验 课时 单片机 指导书