1、核技术与自动化工程学院 2009级电气4班单片微机原理及应用实验报告专 业: 指导教师: 姓 名: 学 号: 目录实验一 LED灯的闪烁1实验二 蜂鸣器的使用3实验三 用键盘控制LED灯的点亮5实验四 直流电机的控制8实验一 LED灯的闪烁一、 实验目的1、 通过单片机控制LED灯每隔1秒闪烁一次;2、 用C语言或者汇编语言写程序。熟悉C语言编写方式。二、实验原理和内容通过单片机I/O端口,控制led灯每隔1秒亮一次。使用三层嵌套for循环完成循环,外部晶振位11.0591MHz,通过反汇编,计数每次每层for循环的次数,灯的点亮熄灭通过单片机的P1端口输出高电平和低电平来控制,高电平为点亮,
2、低电平为熄灭。三、实验数据与结果/ C源程序 /#include #define unchar unsigned char #define unit unsigned int unchar i,k; int x,y; void delay (unit z) for(x=z;z0;z-) for (y=110;y0;y-); void main () while (1) k=0xfe; for (i=0;i1)&0xff; delay (100) ; 四、实验总结该实验是我在之前的仅点亮一个灯的前提下拓展编写出来的,经过多次调试,终于达到了我预想的效果,关于本实验还有很多类似的拓展,如果都能运用
3、自如,那么在编写其他程序的时候就可以很轻松,比如很多子程序是完全可以调用的,比如时间延迟函数。学习过程中收获了很多宝贵的实战经验。让我明白了搞单片机要从软件硬件同步出发。实验二 蜂鸣器的使用一、实验目的熟练通过单片机控制蜂鸣器,播放生日快乐和祝你平安的调子。二、实验原理和内容本次实验利用单片机P13口控制蜂鸣器的发音,每一个音符由音高和节拍控制,音高在单片机中转换成频率,节拍在单片机中转换成延时程序。三、实验步骤1. 1使用导线把A2区的P13与B5区的 BUZZ接线柱相连。2. 先编写一个延时程序(120200us)。3. 再编写一个循环程序,改变P1.3脚的电平,然后延时。这样,这个循环就
4、使P1.3口输出一个频率为2.5KHz4KHz的方波。在DP-51PROC单片机综合仿真实验仪上运行该程序时,B5区的蜂鸣器将发出嘹亮的响声4. 按以下例程输入,然后运行,蜂鸣器发出“生日快乐”的音乐。四、实验数据与结果(1)生日快乐的汇编程序 ORG 0000H JMP MAIN ORG 000BH JMP INTT0 ORG 0100H MAIN: MOV SP,#60H MOV TMOD,#01H;初始化定时器及器中断 SETB ET0;开定时器0中断 SETB EA SETB TR0;启动定时器0START0: SETB P1.3 MOV 30H,#00HNEXT: MOV A,30H
5、 MOV DPTR,#TABLE;从TABLE中读取数据声响时间 MOVCA,A+DPTR MOV R2,A JZ ENDD ANL A,#0FH MOV R5,A MOV A,R2 SWAP A ANL A,#0FH JNZ SING CLR TR0 JMP D1SING: DEC A MOV 22H,A RL A MOV DPTR,#TABLE1;从TALBE1中读取数据声调 MOVC A,A+DPTR MOV TH0,A MOV 21H,A MOV A,22H RL A INC A MOVC A,A+DPTR MOV TL0,A MOV 20H,A SETB TR0D1: CALL DE
6、LAY;声音延时 INC 30H JMP NEXTENDD: CLR TR0 JMP START0INTT0:;定时器0中断服务程序 PUSH PSW PUSH ACC MOV TL0,20H MOV TH0,21H CPL P1.3 POP ACC POP PSW RETIDELAY: ;R5的值就是声响持续时间MOV R7,#01DELAY0: MOV R4,#187DELAY1: MOV R3,#248 DJNZ R3,$ DJNZ R4,DELAY1 DJNZ R7,DELAY0 DJNZ R5,DELAY RET TABLE: DB 82H,01H,81H,94H,84H,0B4H,
7、0A4H,04H DB 0E2H,01H,0E1H,0D4H,0B4H,0C4H,0B4H,04H,00HDB 82H,01H,81H,94H,84H,0C4H,0B4H,04H DB 82H,01H,81H,0F4H,0D4H,0B4H,0A4H,94H DB 0E2H,01H,0E1H,0D4H,0B4H,0C4H,0B4H,04H DB 82H,01H,81H,94H,84H,0B4H,0A4H,04H DB 82H,01H,81H,94H,84H,0C4H,0B4H,04H DB 82H,01H,81H,0F4H,0D4H,0B4H,0A4H,94H TABLE1: DW 64260,
8、64400,64524,64580,64684,64777,64820,64898 DW 64968,65030,65058,65110,65157,65178,65217 END 五、实验总结 本次实验利用单片机P13控制蜂鸣器的发音,每一个音符由音高和节拍控制,音高在单片机中转换成频率,节拍在单片机中转换成延时程序,这又是一次实际生活和理论的结合,该实验使我第一次感受到单片机如此强大的应用功能,仅靠一段程序就能让其发出音乐,虽然很简单,但是这是一个起点我相信市场上那些数码音乐也是从这这一步发展起来的吧,让我对任老师那句“学好单片机,就有好工作”有了更加深入的理解。 实验三 用键盘控制LED
9、灯的点亮一、实验目的通过对单片机I/O口的进一步利用,是端口输出规律性的高低电平,进一步熟悉单片机的输入输出功能。二、实验原理和内容51单片机空有4个双向的8位并行I/O端口,分别记住P0.P1.P2.P3口,端口的每一位均由锁存器输出驱动器和输入缓冲器所组成。本实验利用P1口控制单片机外围电路,同时也要注意延时程序的编写和使用。D1区上面有8个独立的LED发光二极管、拨动开关、按键电路,用户可以在上面进行相关实验。电路如图2.74所示。图2.74 独立控制的LED、拨动开关、键盘电路如图2.74所示,J52为LED控制接口, J53为按键输出接口,J54为拨动开关输出接口,另外,LED、按键
10、和拨动开关的前三位由接线柱引出。三、实验数据与结果#include#include#include#define uint unsigned int#define uchar unsigned charuint x,y,i,dong,k;uchar temp;sbit d1=P00;sbit k1=P30;sbit k2=P31;sbit k3=P32;sbit k4=P33;void delay(uint z)/延时函数for(x=z;x0;x-)if(P3&0xff)!=0xff)return; for(y=110;y0;y-); void key_scan()if(P3&0xff)!=0
11、xff)/有键按下delay(5);if(P3&0xff)!=0xff)if(k1=0) temp=1;while(!k1);if(k2=0) temp=2;while(!k1);if(k3=0) temp=3;while(!k1);if(k4=0) temp=4;while(!k4);void main()d1=1;while(1)key_scan();P0=k ;switch(temp)case 1: k=0xfe; delay (300); break;case 2: k=0xfd; delay (300); break;case 3: k=0xfb; delay (300); brea
12、k;case 4: k=0xf7; delay (300); break;default : break;运行上述程序后,我们可以看到LED灯随着不同按键的按下,点亮不同的灯。四、实验总结该实验是我从电机调速程序改编而来,让我再次熟悉的利用switch语句,更好的掌握C语言编写技能,不断提高程序编写水平。一点点进步,一点点成长。实验四 直流电机的控制一、 实验目的利用PWM控制直流电机的转动速度。二、实验原理和内容(1)实验原理 学习如何控制直流电机。PWM功率驱动电路如下:图3.34 直流电机驱动原理图原理图如图3.34,只要ZDJ_A的电压比ZDJ_B的电压高,电机正转。如果ZDJ_B的电
13、压比ZDJ_A高,电机反转。用D1区的按键KEY1与KEY2改变PWM的占空比来控制直流电机的转速。(2)实验内容按键1:直流电动机启动;按键2:直流电动机加速;按键3:直流电动机减速;按键4:直流电动机停止。三、实验数据与结果控制电机的C语言程序:#include#include#include#define uint unsigned int#define uchar unsigned charuint x,y,i,com;uchar temp;sbit d1=P00;/启动sbit k1=P30;/开关一开始转动sbit k2=P31;/开关二速度增加sbit k3=P32;/开关三速度
14、减少sbit k4=P33;/开关四停止void delay(uint z)/延时函数for(x=z;x0;x-)if(P3&0xff)!=0xff)return; for(y=110;y0;y-); void key_scan()if(P3&0xff)!=0xff)/有键按下delay(5);if(P3&0xff)!=0xff)if(k1=0) temp=1;while(!k1);if(k4=0) temp=4;while(!k4);void qd()if(k3=0)/加速while(!k3);com+=10;if(com=80)com=70;if(k2=0)/减速while(!k2);co
15、m-=10;if(com=-20)com=-10;d1=1;delay(20+com);d1=d1;delay(80-com);void main()d1=0;while(1)key_scan();switch(temp)case 1: qd(); break;case 4: d1=0; break;default : break;五、实验总结本实验是老师布置的课堂作业,关于电机调速,我之前一点也摸着不着头脑,通过向老师和唐帅同学请教,终于了解到控制电机速度的程序编写方式,还有按键扫描程序的编写,通过控制P00口的电位大小来达到控制其转速的目的。方式新颖。当多次调试后得到理想实验效果的时候那种心情是无比快乐的。10