当前位置:文档之家› 实验(8课时用)单片机实验指导书

实验(8课时用)单片机实验指导书

单片机原理及应用》实验指导书计算机科学与技术系2012 年8 月目录实验一:流水灯实验.......................................... 1...实验二:中断实与定时器中断实验................................ 4..实验三:串行口实验.......................................... 9...实验四:矩阵式键盘输入识别.................................. 1..3实验五:LCD循环显示设计 (19)实验一:流水灯实验通过对P3 口地址的操作控制8位LED 流水点亮,从而认识单片机的存储器实验参考电路图如下:VCCAP17P3.7ZEQP1.6 P3.6M^ P1.5P3.5/T1 PI -1 P3.4/T0 P1.3 P33JlhJT1 P1.2 P3.2JirJT0 P1 1 P3.1 仃:<D P1 0 P3 0,'RXDAT89C51RSIPSEtJ匚A ALEXTAL2A[8.15|参考实验程序//流水灯实验#in clude<reg51.h> // 包含单片机寄存器的头文件 sfr x=OxbO; 〃P3口在存储器中的地址是 bOH 通过sfr 可定义8051内核单片机//的所有内部8位特殊功能寄存器,对地址x 的操作也就是对P1 口的操作**************************************实验目的:实验原理图—>XTAL1AD[O .7]D4 R447QR D6 R6屮斤D0 R8_470RD3 R3_4?OR D1 R1 470R-D7 R74Z0F?D5 R5_4?ORD2 R2 470R函数功能:延时一段时间*****************************************/ void delay(void){ unsigned char i,j;for(i=0;i<250;i++)for(j=0;j<250;j++); // 利用循环等待若干机器周期,从而延时一段时间} /***************************************** 函数功能:主函数******************************************/void main(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,实现从0000 0000~1111 1111 的加法过程。

调试后的程序代码:实验二:中断与定时计数器实验第一部分中断实验一、实验目的:通过对P3.2 、P3.3 引脚的电平控制,实现外部中断处理,从而控制输出口P1的输出效果变化。

二、实验原理图实验参考电路图如下:参考实验程序/用外中断0的中断方式进行数据采集和处理 #in clude<reg52.h>#in clude< intrin s.h> void ini t(); void delay (un sig ned in t); void mai n() {in it(); while(1) {P1 = 0xff; delay(100); P1 = 0x00; delay(100); } }void ini t() {EA = 1; IT0 = 0;LUDIA JLUDUU ILUDW LUO⑷'ELLDW臣LLD 切2R21 - 22 23 24 25 26 R u 耶R 匚圳尺匚MR匸湖尺匚肖2R2R72R2R8LED-VELLOW*XTAL1iPD.WD1P 口洲D 茫XTAU'啊加2FD.MD* pnawRSTPDJJ^DT P2JW啣阳F2iA1DPSEN P23ft11 ALE P2.4A12 EftP2S^13 P2J5jft1lP2.TA15 pi urnDiiwvn P1.1H2K・ 3.1/DC0 P1J P32rtNTD POF^^HNTI P14PXimiPISpajsn-iP1^P3WUHpiiP3J7RD西3S37芳35 3t21_a.23 S•T id卫a _ 13 i«16R92R2RT O2R2SW1SIAWPDTSW2SW ^SPO TIT1 = 0;EX0 = 1;EX1 = 1;}void delay(unsigned int n){unsigned int i,j;for(i=0;i<n;i++) for(j=0;j<110;j++);}void aa() interrupt 0{unsigned char tmp = 0xfe;unsigned int i=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);}void bb() interrupt 2{P1 = 0xf0;delay(500);P1 = 0x0f;delay(500);}四、实验思考题:根据指导书中提供的原理图,自行设计一个外部中断实验,要求:1. 两个外部中断全部用上;2. 实验能体现不同中断优先级的中断源的相应情况;3. 不同中断处理程序能输出不同的响应效果第二部分:定时器中断实验通过使用定时器TO 的中断来控制P2.0引脚的的LED 的灯闪烁,要求闪烁时 间2S,既亮1 S ,灭1 S 。

二、 实验原理图实验参考电路图如下(注释,下图只有D1等闪烁,既亮1 S ,灭1 S ):二、参考实验程序//用定时器TO 的中断实现长时间定时,单片机晶体振荡器周期为 12MHZ 机器//周期为1us#include<reg51.h> // 包含51单片机寄存器定义的头文件 sbit D 仁P2A 0; // 将D1位定义为P2.0引脚 unsigned char Countor; //设置全局变量,储存定时器 TO 中断次数/**************************************************************函数功能:主函数**************************************************************/实验目的:------------------- U伽却--'D1______________ ——晋一汕 -------- EiXTALIXTA12F£ .2//C2 p [常心PI 4/ 吃打如5Pt.if xsFI.7/MVP5ENF2.0W 他倔 P2.2/A13卩巳猟11 ALBP2.47A12 EA FIJ/A13PI. 6/AM PJ. 7/A.15P3JVRHDP11ns卩 2IMT1PI 4F3.4HD Pl 5 皱如 Pl 6PI 7F3.7JRDLED=rEi-imiC 2C31030RR 3R1——C懈J 1 11151173H 匚 GR^rrf=fan]to-1nEHBDTT1;13 21~25~ 27void main(void){EA=1; // ET0=1; // TMOD=0x01; //TH0=(65536-15536)/256; // TL0=(65536-15536)%256; //TR0=1; //while(1)// 无限循环等待中断}/**************************************************************函数功能:定时器TO 的中断服务程序**************************************************************/ void TimeO(void) interrupt 1 using O //“ interrupt ”声明函数为中断服务函数//其后的1为定时器TO 的中断编号;0表示使用第0组工作寄存器{Countor++; // 中断次数自加 1 if(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位重新赋初值 }四、 实验思考题:开总中断定时器 T0 中断允许 使用定时器 T0 的模式 2 定时器TO 的高8位赋初值定时器TO 的高8位赋初值 启动定时器 TOCountor=O; // 从 O 开始累计中断次数实验指导修改程序使用定时器T1的中断方式来控制P2.0、P2.1引脚的LED灯分别以200mshe 800ms的周期闪烁调试后的程序代码:实验三:串行口实验一、实验目的:本实验要求单片机U1通过其串行口TXD向计算机发送一个数据用集成电路MAX232各单片机的输出信号转化成计算机能够识别的信号送的实例,再设计一个单片机接受计算机送出数据的过程二、实验原理图单片机发送数据实验参考电路图如图(1):“oxab”。

禾U图(1 )单片机接受数据实验参考电路图如下:三、参考实验程序//单片机向PC 发送数据 #in clude<reg51.h>//包含单片机寄存器的头文件un sig ned char code Tab[ ]={0xFE,0xFD,0xFB,0xF7,0xEF,0xDF,0xBF,0x7F}; //流水灯控制码,该数组被定义为全局变量 /*****************************************************函数功能:向PC 发送一个字节数据***************************************************/ void Send(un sig ned char dat) {SBUF=dat; while(TI==0)TI=0;}D1II I I I IADHD.7]U2vccAR1 220 RAIS,.15]X7AL2Kb rALE EAPbtNADP..7]XTAL1XTAE2ATB9C51D2220 RD2R3 220 R1— R4 220 R~I ——*P3>O/RX[>P1.0P2 H/TK&Pi.dP3-2/INT0PI.2 P33/INT1 P1.3 IP3^T0 P1.4 raj/TiP1.5 P3.6AWR P1.S IP3 J/RDP1.7D7 R7 Z20R D8R6 220 R1:1011 T T~13~ 14D4I I;311 1 i- i i 1 p p p pp pp pF3.0/RXD厂 1.-T/? p-2S /IMTOP3.3/IMT1P3 P3.7/RDRSTAT09C51ALE 3 p SEND5 DSR6 220 R 4函数功能:延时约150ms************************************************************ void delay(void) {unsigned char m,n; for(m=0;m<200;m++) for(n=0;n<250;n++)}/***************************************************** 函数功能:主函数***************************************************/void main(void){unsigned char i;TMOD=0x20; //TMOD=0010 0000B ,定时器T1 工作于方式2 SCON=0x40; //SCON=0100 0000B ,串口工作方式1PCON=0x00; //PCON=0000 0000B ,波特率9600TH1=0xfd; // 根据规定给定时器T1 赋初值TL1=0xfd; // 根据规定给定时器T1 赋初值TR1=1; // 启动定时器T1while(1){for(i=0;i<8;i++) // 模拟检测数据{Send(Tab[i]); // 发送数据idelay(); //150ms 发送一次数据}}}四、实验思考题:根据参考原理图图(2)设计一个单片机接受计算机送出数据的过程调试后的程序代码:实验四:矩阵式键盘输入识别一、实验目的:设计一个4X4的矩阵键盘,键盘的号码 0~15,要求编写出一个键盘输入扫 描程序,要求单片机能根据键盘排列顺序, 能将按下去键盘号正确识别出来, 并 采用两个数码管分别键盘号码的个位和十位。

相关主题