单片机原理及应用实验报告
老师:
学生:
专业:电气工程及其自动化
学院:核自学院
学号:
实验一蜂鸣器实验
一. 实验目的
利用单片机的P1口作IO口,使用户学会蜂鸣器的使用。
二. 实验设备及器件
IBM PC 机 一台
DP-51PROC单片机综合仿真实验仪 一台
频率计 一台
三. 实验内容
1. 编写一段程序,用P1.3口控制(输出3K到4K频率的方波),使B5区的蜂鸣器发出嘹亮的响声。
2. 按照例程输入一段程序,用P1.3口控制,使B5区的蜂鸣器发出“生日快乐”的音乐。
图3.3 蜂鸣器原理图
四. 实验步骤
1. 使用导线把A2区的P13与B5区的 BUZZ接线柱相连。
2. 先编写一个延时程序(120~200us)。
3. 再编写一个循环程序,改变P1.3脚的电平,然后延时。这样,这个循环就使P1.3口输出一个频率为2.5KHz-4KHz的方波。在DP-51PROC单片机综合仿真实验仪上运行该程序时,B5区的蜂鸣器将发出嘹亮的响声
4. 按以下例程输入,然后运行,蜂鸣器发出“生日快乐”的音乐。
五、实验修改后源程序
ORG 0000H
JMP MAIN
ORG 000BH
JMP INTT0
ORG 0100H
MAIN:
MOV SP,#60H
MOV TMOD,#01H ;初始化定时器及器中断
SETB ET0 ;开定时器0中断
SETB EA
SETB TR0 ;启动定时器0
START0:
SETB P1.3
MOV 30H,#00H
NEXT:
MOV A,30H
MOV DPTR,#TABLE ;从TABLE中读取数据――声响时间
MOVC A,@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 D1
SING:
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 TR0
D1:
CALL DELAY ;声音延时
INC 30H
JMP NEXT
ENDD:
CLR TR0
JMP START0
INTT0: ;定时器0中断服务程序
PUSH PSW
PUSH ACC
MOV TL0,20H
MOV TH0,21H
CPL P1.3
POP ACC
POP PSW
RETI
DELAY: ;R5的值就是声响持续时间
MOV R7,#02
DELAY0:
MOV R4,#187
DELAY1:
MOV R3,#248
DJNZ R3,$
DJNZ R4,DELAY1
DJNZ R7,DELAY0
DJNZ R5,DELAY
RET
TABLE:
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
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
DB 0E2H,01H,0E1H,0D4H,0B4H,0C4H,0B4H,04H,00H
TABLE1:
DW 64260,64400,64524,64580,64684,64777,64820,64898
DW 64968,65030,65058,65110,65157,65178,65217
END
在keil上编辑后的截图:
编译好后检查出无错误和警告:
下载后:
将程序经图3下载后就可以发出祝你生日快乐的声音。
实验总结:
编辑源程序是注意将指导中的
ORG 8000H
JMP MAIN
ORG 800BH
JMP INTT0
ORG 8100H
改成:ORG 0000H
JMP MAIN
ORG 000BH
JMP INTT0
ORG 0100H
在keil上编辑运行时要选择文件的保存属性后缀.ASM 若有错误则不能运行。实验中只要一根导线将A2区的P13与B5区的 BUZZ接线柱相连。
本次实验让我们知道可以通过单片机上运行汇编程序来实现特定的功能如让蜂鸣器循环发出祝你生日快乐的音调。
实验二 电子琴实验
一. 实验目的
利用实验仪上提供的按键K1~K7作为电子琴按键,控制蜂鸣器发声,使用户了解计算机发声原理,熟悉定时器和键盘扫描电路的工作原理及编程方法。
二. 实验设备及器件
IBM PC 机 一台
DP-51PROC单片机综合仿真实验仪 一台
频率计 一台
三. 实验内容
1. 编写一段程序,用P3.3口控制(输出7种音阶标称频率的方波),使B5区的蜂鸣器发出不同的音调。程序检测按键的状态,当某一键按下时,蜂鸣器发出对应的音调。
2. 按照歌曲的音调,使用D1区的按键K1~K7,弹奏一首简单的音乐。
四. 实验步骤
1. 用导线将A2区P3.3口(INT1)和B5区的BUZZ接口相连,然后将D1区的J53接口和A2区的J61接口一一对应相连。如图3.4所示。
图3.4 实验5原理图
2. 编写按键的动态键盘扫描程序,根据不同音阶的频率编写蜂鸣器的音调控制程序,然后完成电子琴的主程序设计。
3. 调试编写好的程序,使用频率计校准音阶的频率,然后使用键盘演奏一段好听的音乐。
实验修改后程序
BUZZ EQU P3.3 ;端口定义
ORG 0000H
LJMP MAIN
ORG 000BH
LJMP INT_T0
ORG 0100H
MAIN:
MOV SP,#60H ;初始化堆栈指针
MOV P1,#0FFH ;设置P1口为输入模式
MOV TMOD,#01H ;设置定时器0为工作模式1
SETB ET0 ;开定时器0中断
SETB EA ;开总中断
CLR TR0 ;关闭定时器0
START:
MOV R0,P1
CJNE R0,#0FFH,KEY1 ;键盘扫描
CLR TR0
SJMP START
KEY1:
CJNE R0,#0FEH,KEY2 ;K1键按下
MOV 30H,#0FBH ;设置音阶1
MOV 31H,#0E9H
LJMP SET_TIMER
KEY2:
CJNE R0,#0FDH,KEY3;K2键按下
MOV 30H,#0FCH ;设置音阶2
MOV 31H,#5CH
LJMP SET_TIMER
KEY3:
CJNE R0,#0FBH,KEY4;K3键按下
MOV 30H,#0FCH ;设置音阶3
MOV 31H,#0C1H
LJMP SET_TIMER
KEY4:
CJNE R0,#0F7H,KEY5 ;K4键按下
MOV 30H,#0FCH ;设置音阶4
MOV 31H,#0EFH
LJMP SET_TIMER
KEY5:
CJNE R0,#0EFH,KEY6 ;K5键按下
MOV 30H,#0FDH ;设置音阶5
MOV 31H,#045H
LJMP SET_TIMER
KEY6:
CJNE R0,#0DFH,KEY7;K6键按下
MOV 30H,#0FDH ;设置音阶6
MOV 31H,#92H
LJMP SET_TIMER
KEY7:
CJNE R0,#0BFH,NOKEY;K7键按下
MOV 30H,#0FDH ;设置音阶7
MOV 31H,#0D6H
SET_TIMER:
SETB TR0 ;发声
SJMP START
NOKEY:
CLR TR0 ;无键按下
SJMP START
INT_T0: ;T0中断服务程序
MOV TH0,30H ;定时器赋初值
MOV TL0,31H
CPL BUZZ ;输出方波
RETI
;
END
编译好后检查出无错误和警告:
下载到单片机上后点开始:
开始后分别按按键K1~K7就可以发出7种音阶。
实验总结:
首先编写源程序时要将
BUZZ EQU P3.3 ;端口定义
ORG 8000H
LJMP MAIN
ORG 800BH
LJMP INT_T0
ORG 8100H
改成:
BUZZ EQU P3.3 ;端口定义
ORG 0000H
LJMP MAIN
ORG 000BH
LJMP INT_T0
ORG 0100H
设置合适的地址才能正确的运行。
连接导线时要注意用导线将A2区P3.3口(INT1)和B5区的BUZZ接口相连,然后将D1区的J53接口和A2区的J61接口一一对应相连。连接好后按下k1~K 7的按键如能发出7个音阶则证明实验成功。让我们更好的理解了单片机的功能。
实验三 直流电机控制电路设计
一 设计目的
1掌握单片机用PWM实现直流电机调整的基本方法,掌握直流电机的驱动原理。
2学习模拟控制直流电机正转、反转、加速、减速的实现方法。
二 设计要求
用已学的知识配合51单片机设计一个可以正转、反转或变速运动的直流电机控制电路,并用示波器观察其模拟变化状况。
三 设计思路及原理
PWM功率驱动电路如下:
图3.34 直流电机驱动原理图
原理图如图3.34,只要ZDJ_A的电压比ZDJ_B的电压高,电机正转。如果ZDJ_B的电压比ZDJ_A高,电机反转。
利用单片机对PWM信号的软件实现方法。MCS一51系列典型产品8051具有两个定时计数器。因为PWM信号软件实现的核心是单片机内部的定时器,所以通过控制定时计数器初值,从而可以实现从8051的任意输出口输出不同占空比的脉冲波形。从而实现对直流电动机的转速控制。
。AT89C51的P1.0—P1.2控制直流电机的快、慢、转向,低电平有效。P3.0为PWM波输出,P3.1为转向控制输出,P3.2为蜂鸣器。PWM控制DC电机转速,晶振为12M,利用定时器控制产生占空比可变的PWM波,按K1键,PWM值增加,则占空比增加,电机转快,按K2键,PWM值减少,则占空比减小,电机转慢,当PWM值增加到最大值255或者最小值1时,蜂鸣器将报警
四 实验器材
DVCC试验箱 导线若 电源等器件 PROTUES仿真软件 KRIL软件
五 实验流程与程序
#include < reg51.h > sbit K1 =P1^0 增加键
sbit K2 =P1^1 减少键
sbit K3 =P1^2 转向选择键
sbit PWMUOT =P3^0 PWM波输出
sbit turn_around =P3^1 转向控制输出 s
bit BEEP =P3^2 蜂鸣器
unsigned int PWM; void Beep(void);
void delay(unsigned int n); void main(void) {
TMOD=0x11; //设置T0、T1为方式1,(16位定时器)
TH0=0 65536us延时常数{t=(65536-TH)/fose/12} TL0=0;
TH1=PWM //脉宽调节,高8位 TL1=0;
EA=1; //开总中断
ET0=1; //开T0中断
ET1=1; //开T1中断 TR0=1 // T0定时允许
while(1) {
if(K3==0&&K1==1&&K2==1) // 转向
{
turn_around=!turn_around; }
while(K3==0); //检测K3是否释放
do{
PWM++
if(PWM>0xfe)//防止PWMS计数溢出
{
PWM=0xff; }
if(PWM==0xff)Beep() 响 delay(3000);
}
while(K1==0&&K2==1);
do{
PWM-- if(PWM<1)
{
PWM=1; }
if(PWM==1)Beep() delay(3000); }
while(K1==1&&K2==0); } }
void timer0() interrupt 1 using 2 // 定时器0中断服务程序 {
TR1=0 //T1禁止 TH0=0 //置T0定时常数 TL0=0
TH1=PWM //置T1定时常数 TL1=0;
TR1=1 //T1允许 PWMUOT=0 // PWM波输出0 }
void timer1() interrupt 3 using 3 //定时器1中断服务程序
{
TR1=0 //T1禁止 PWMUOT=1 //PWM波输出1 }
void Beep(void) //蜂鸣器子程序 {
unsigned char i; for (i=0;i<100;i++) {
delay(100);
BEEP=!BEEP; }
BEEP=1; delay(100); }
void delay(unsigned int n) {
while(n--) ; }
六 Proteus仿真截图
七 实验结果
此次试验通过仿真系统进行了仿真,按下相应的开关,可实现控制直流电机的加速、减速及转向。
八 实验结论与心得
通过软件的设计及运行,实验达到了预期的结果,实现了电机的正转、反转,加速和减速设计。设计过程中遇到了很多的问题,但是我们没有半途而废,加深了对知识的理解,一点一点的分析。总而言之,这次课程设计让我受益匪浅。在摸索该如何设计电路使之实现所需功能的过程中,培养了我的设计思维,增加了实际操作能力,也让深深地体会到了自己学习知识的不足之处,对于知识的理解程度不够深,自己以为明白的实际上不明白。在以后的学习过程中,我会重视这些问题,逐渐改变自己的学习习惯,不断的进步!
实验四 16×16 LED扫描输出实验
一. 实验目的
使用户学会利用单片机的IO口进行LED点阵的扫描显示。
二. 实验设备及器件
IBM PC 机 一台
DP-51PROC单片机综合仿真实验仪 一台
三. 实验内容
编写一段程序,用P1口控制C3区4片74HC164进行行列扫描,使C3区的16×16 LED点阵显示用户指定的汉字。
四. 实验要求
学会使用单片机对LED点阵进行扫描显示。
五. 实验步骤
1. 使用导线将A2区的P10~P14与C3区的L_DAT_H、L_DAT_L、L_CLK、L_OE、L_STR依次连接。
2. 运行光盘中的程序,显示“感谢您使用DP-51PROC单片机综合仿真实验仪!”,先是向左滚动,后是向上滚动
3. 如果用户希望改变显示的汉字,可以使用光盘中附带的字模提取软件(Pctolcd2002)提取用户希望显示汉字的字模,字模提取软件的设置为阴码、逐列式、逆向、十六进制、C51格式自定义,将生成的字模拷贝到程序中所指定的位置插入即可。
六. 实验预习要求
阅读本书的2.8.19节内容,理解硬件结构,还可以先把程序编好,然后在Keil C51环境下进行软件仿真。
七. 实验参考程序
#include <reg52.h>
typedef unsigned char byte;
typedef unsigned int word;
sbit datah595=P1^0;
sbit datal595=P1^1;
sbit clk595=P1^2;
sbit oe595=P1^3;
sbit str595=P1^4;
word data datah,datal;
byte code displaydata[]=
{
0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
//在以下位置插入字模
0x00,0x04,0x00,0x43,0xFC,0x70,0x14,0x00,0xD4,0x39,0x54,0x41,0x54,0x41,0xD4,0x49,
0x04,0x50,0x3F,0x42,0xC4,0x41,0x45,0x61,0x36,0x0A,0x04,0x34, 0x00,0x27,0x00,0x00,/*"感",0*/
0x40,0x00,0x42,0x00,0xCC,0x3F,0x04,0x50,0x00,0x29,0xFC,0x11,0x56,0x4D,0x55,0x83,
0xFC,0x7F,0x50,0x00,0x90,0x41,0x10,0x80,0xFF,0x7F,0x10,0x00, 0x10,0x00,0x00,0x00,/*"谢",1*/
0x80,0x00,0x40,0x20,0x30,0x38,0xFC,0x03,0x03,0x38,0x90,0x40,0x68,0x40,0x06,0x49,
0x04,0x52,0xF4,0x41,0x04,0x40,0x24,0x70,0x44,0x00,0x8C,0x09, 0x04,0x30,0x00,0x00,/*"您",2*/
0x40,0x00,0x20,0x00,0xF0,0x7F,0x1C,0x00,0x07,0x40,0xF2,0x41,0x94,0x22,0x94,0x14,
0x94,0x0C,0xFF,0x13,0x94,0x10,0x94,0x30,0x94,0x20,0xF4,0x61, 0x04,0x20,0x00,0x00,/*"使",3*/
0x00,0x80,0x00,0x40,0x00,0x30,0xFE,0x0F,0x22,0x02,0x22,0x02,0x22,0x02,0x22,0x02,
0xFE,0xFF,0x22,0x02,0x22,0x02,0x22,0x42,0x22,0x82,0xFE,0x7F, 0x00,0x00,0x00,0x00,/*"用",4*/
0x08,0x20,0xF8,0x3F,0x08,0x20,0x08,0x20,0x08,0x20,0x10,0x10,0xE0,0x0F,0x00,0x00,/*"D"*/
0x08,0x20,0xF8,0x3F,0x08,0x21,0x08,0x01,0x08,0x01,0x08,0x01,0xF0,0x00,0x00,0x00,/*"P", 5*/
0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x00,0x80,0x00,0x80,0x00,0x80,0x00,0x80,0x00,
0x80,0x00,0x80,0x00,0x80,0x00,0x80,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,/*"-",6*/
0x00,0x00,0xF8,0x19,0x08,0x21,0x88,0x20,0x88,0x20,0x08,0x11,0x08,0x0E,0x00,0x00,/*"5"*/
0x00,0x00,0x10,0x20,0x10,0x20,0xF8,0x3F,0x00,0x20,0x00,0x20,0x00,0x00,0x00,0x00,/*"1", 7*/
0x08,0x20,0xF8,0x3F,0x08,0x21,0x08,0x01,0x08,0x01,0x08,0x01,0xF0,0x00,0x00,0x00,/*"P"*/
0x08,0x20,0xF8,0x3F,0x88,0x20,0x88,0x00,0x88,0x03,0x88,0x0C,0x70,0x30,0x00,0x20,/*"R", 8*/
0xE0,0x0F,0x10,0x10,0x08,0x20,0x08,0x20,0x08,0x20,0x10,0x10,0xE0,0x0F,0x00,0x00,/*"O"*/
0xC0,0x07,0x30,0x18,0x08,0x20,0x08,0x20,0x08,0x20,0x08,0x10,0x38,0x08,0x00,0x00,/*"C", 9*/
0x00,0x08,0x00,0x08,0xF8,0x0B,0x28,0x09,0x29,0x09,0x2E,0x09,0x2A,0x09,0xF8,0xFF,
0x28,0x09,0x2C,0x09,0x2B,0x09,0x2A,0x09,0xF8,0x0B,0x00,0x08, 0x00,0x08,0x00,0x00,/*"单",10*/
0x00,0x80,0x00,0x40,0x00,0x30,0xFE,0x0F,0x10,0x01,0x10,0x01,0x10,0x01,0x10,0x01,
0x10,0x01,0x1F,0x01,0x10,0x01,0x10,0xFF,0x10,0x00,0x18,0x00, 0x10,0x00,0x00,0x00,/*"片",11*/
0x08,0x04,0x08,0x03,0xC8,0x00,0xFF,0xFF,0x48,0x00,0x88,0x41,0x08,0x30,0x00,0x0C,
0xFE,0x03,0x02,0x00,0x02,0x00,0x02,0x00,0xFE,0x3F,0x00,0x40, 0x00,0x78,0x00,0x00,/*"机",12*/
0x20,0x22,0x30,0x23,0xA8,0x22,0x67,0x12,0x32,0x12,0x00,0x20,0x0C,0x11,0x24,0x0D,
0x24,0x41,0x25,0x81,0x26,0x7F,0x24,0x01,0x24,0x05,0x24,0x09, 0x0C,0x31,0x00,0x00,/*"综",13*/
0x40,0x00,0x40,0x00,0x20,0x00,0x50,0x7E,0x48,0x22,0x44,0x22,0x42,0x22,0x41,0x22,
0x42,0x22,0x44,0x22,0x68,0x22,0x50,0x7E,0x30,0x00,0x60,0x00, 0x20,0x00,0x00,0x00,/*"合",14*/
0x40,0x00,0x20,0x00,0x10,0x00,0xEC,0x7F,0x07,0x40,0x0A,0x20,0x08,0x18,0x08,0x06,
0xF9,0x01,0x8A,0x10,0x8E,0x20,0x88,0x40,0x88,0x20,0xCC,0x1F, 0x88,0x00,0x00,0x00,/*"仿",15*/
0x00,0x10,0x04,0x90,0x04,0x90,0x04,0x50,0xF4,0x5F,0x54,0x35,0x5C,0x15,0x57,0x15,
0x54,0x15,0x54,0x35,0x54,0x55,0xF4,0x5F,0x04,0x90,0x06,0x90, 0x04,0x10,0x00,0x00,/*"真",16*/
0x00,0x00,0x10,0x82,0x0C,0x82,0x04,0x42,0x4C,0x42,0xB4,0x23,0x94,0x12,0x05,0x0A,
0xF6,0x07,0x04,0x0A,0x04,0x12,0x04,0xE2,0x14,0x42,0x0C,0x02, 0x04,0x02,0x00,0x00,/*"实",17*/
0x02,0x08,0xFA,0x08,0x82,0x04,0x82,0x24,0xFE,0x40,0x80,0x3F,0x40,0x22,0x60,0x2C,
0x58,0x21,0x46,0x2E,0x48,0x20,0x50,0x30,0x20,0x2C,0x20,0x23, 0x20,0x20,0x00,0x00,/*"验",18*/
0x40,0x00,0x20,0x00,0xF0,0xFF,0x0C,0x00,0x03,0x40,0x00,0x40,0x38,0x20,0xC0,0x10,
0x01,0x0B,0x0E,0x04,0x04,0x0B,0xE0,0x10,0x1C,0x20,0x00,0x60, 0x00,0x20,0x00,0x00,/*"仪",19*/
0x00,0x00,0x00,0x00,0x00,0x00,0xF0,0x5F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,/*"!",20*/
//至此字模插入结束
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
};
byte *p=&displaydata[0];
byte *q=&displaydata[32];
void delay(word a)
{
word b;
for(b=0;b<a;b++);
}
void senddata(word datah,datal)
{
byte i=0;
word m,n;
oe595=0;
str595=0;
for(;i<16;i++)
{
clk595=0;
m=datah;
n=~datal;
m&=0x8000;
n&=0x8000;
datah595=(bit)m;
datal595=(bit)n;
datah<<=1;
datal<<=1;
clk595=1;
}
str595=1;
str595=0;
}
void horizontal(byte time,word counth) //水平移动子程序
{
byte x,y;
word j,k,z;
for(z=0;z<counth;z++)
{
for(y=0;y<time;y++)
{
datal=0x0001;
for(x=0;x<16;x++)
{
p+=3;
j=(word)*p;
j<<=8;
j&=0xff00;
p-=1;
k=(word)*p;
k&=0x00ff;
datah=j|k;
if(x)
{
datal<<=1;
}
//datah=~datah; senddata(datah,datal);
}
p-=32;
}
p+=2;
}
p=&displaydata[0];
oe595=1;
}
void vertical(byte a,time,word countv) //垂直移动子程序
{
byte x,y,e,w=0;
word j,k,z;
word datah1,datah2;
for(z=countv;z>0;z--)
{
for(e=0;e<16;e++)
{
for(y=0;y<time;y++)
{
datal=0x0001;
for(x=0;x<16;x++)
{
p+=3;
j=(word)*p;
j<<=8;
j&=0xff00;
p-=1;
k=(word)*p;
k&=0x00ff;
datah1=j|k;
datah1>>=w;
q+=3;
j=(word)*q;
j<<=8;
j&=0xff00;
q-=1;
k=(word)*q;
k&=0x00ff;
datah2=j|k;
datah2<<=(16-w);
datah=datah1|datah2;
if(x)
{
datal<<=1;
}
//datah=~datah;
senddata(datah,datal);
}
p-=32;q-=32;
}
w++;
if(w==16) w=0;
}
if((a==16)&&(z==2))
{ p+=32;q+=16; }
else
{ p+=32;q+=32; }
}
p=&displaydata[0];
q=&displaydata[32];
oe595=1;
}
void main(void)
{
byte time=8;
word size=sizeof(displaydata);
word countv=((size-2)>>5)-1;
word counth=countv<<4;
byte a=(byte)((size-2)%32);
if(a==16)
{
counth+=8;
countv+=1;
}
while(1)
{
horizontal(time,counth);
delay(65535);
delay(65535);
vertical(a,time,countv);
delay(65535);
delay(65535);
}
}
实验五步进电机实验
一.实验目的
了解步进电机的工作原理,掌握它的转动控制方式和调速方法。
二. 实验设备及器件
IBM PC 机 一台
DP-51PROC单片机综合仿真实验仪 一台
三. 实验内容
1. 编写程序,通过单片机的P1口控制步进电机的控制端,使其按一定的控制方式进行转动。
2. 分别采用双四拍(AB→BC→CD→DA→AB)方式、单四拍(A→B→C→D→A)方式和单双八拍(A→AB→B→BC→C→CD→D→DA→A)方式编程,控制步进电机的转动方向和转速。
3. 观察不同控制方式下,步进电机转动时的振动情况和步进角的大小,比较这几种控制方式的优缺点。
四. 实验要求
学会步进电机的工作原理和控制方法,掌握一些简单的控制电路和基本的电机基础知识。
图3.35 步进电机驱动原理图
五. 实验步骤
1. 安装C10区JP6接口上的短路帽,将C10区BA、BB、BC、BD与A2区的P10~P13对应相连。
2. 打开程序调试软件,下载运行编写好的软件程序,观察步进电机的转动情况。
3. 修改步进电机的控制程序,再次运行程序,比较它们的不同控制效果。
六. 实验参考程序
5、 程序:
#include"reg51.h"
#define uint unsigned int
//#define delay_ms 5 //延时
sbit W=P3^6;
sbit R=P3^7;
sbit SEND=P3^0;
sbit CLOCK=P3^1;
int delay_ms=30;
sbit bu1=P1^4;
sbit bu2=P1^5;
sbit bu3=P1^6;
sbit bu4=P1^7;
uint flag=0;
unsigned int table[]={0x03,0x9F,0x25,0x0D,0x99,0x49,0x41,0x1F,0x01,0x09,0xff};
uint h=0;
void delay(uint n) //延时程序
{
uint i,j;
for(i=0;i<100;i++)
for(j=0;j<n;j++);
}
void zhengzhuan() //正转
{
bu1=~bu1;
delay(delay_ms);
bu1=~bu1;
bu2=~bu2;
delay(delay_ms);
bu2=~bu2;
bu3=~bu3;
delay(delay_ms);
bu3=~bu3;
bu4=~bu4;
delay(delay_ms);
bu1=~bu1;
}
void fanzhuan() //反转
{
bu4=~bu4;
delay(delay_ms);
bu4=~bu4;
bu3=~bu3;
delay(delay_ms);
bu3=~bu3;
bu2=~bu2;
delay(delay_ms);
bu2=~bu2;
bu1=~bu1;
delay(delay_ms);
bu1=~bu1;
}
void senddata(unsigned int dat) //发送数据程序
{
unsigned int i=0;
for(;i<8;i++)
{
CLOCK=0;
SEND=dat>>i&1;
;
CLOCK=~CLOCK;
}
}
uint saomiao() //键盘扫描程序
{
uint i,j,k1,k2=0x01,n;
uint A[]={0xfe,0xfd,0xfb,0xf7};
for(i=0;i<4;i++)
{
k2=0x01;
W=0;
P2=0x60;
P0=A[i];
delay(1);
W=1;
P2=0xA0;
W=0;
// k1=P0&0x0f;
// if(k1!=0x0f)
// {
for(j=0;j<4;j++)
{
n=P0&0x0F;
if(!(n&k2))
{
return(4*i+j);
}
k2<<=1;
}
// }
}
delay(100);
return(10) ;
}
void main()
{
uint m,r;
// W=0;
// P2=0x60;
// P0=0x00;
// ;
// W=1; //锁存P0口输出数据
// P2=0xA0;
// W=0;
while(1)
{
W=0;
P2=0x60;
P0=0xf0;
W=1; //锁存P0口输出数据
P2=0xA0;
W=0;
m=P0&0x0F;
if(m!=0x0f)
{
delay(50);
m=P0&0x0f;
if(m!=0x0f)
{
// flag=!flag;
// switch(flag)
// {
// case 0: zhengzhuan();
// break;
// case 1: fanzhuan();
// break;
// default : ;
// }
h=saomiao();
senddata(table[h]);
}
}
r=h;
if(r==1)
{
zhengzhuan();
}
if(r==2)
{
fanzhuan();
}
if(r==5)
{delay_ms+=5;
if(delay_ms>100)delay_ms=200;
}
if(r==4)
{delay_ms-=5;
if(delay_ms<=5)
{
delay_ms= 5;
}
}
}
}
实验心得:
20世纪末,电子技术获得了飞速的发展,在其推动下,现代电子产品几乎渗透了社会的各个领域,有力地推动了社会生产力的发展和社会信息化程度的提高,同时也使现代电子产品性能进一步提高,产品更新换代的节奏也越来越快
步进电机是一种将电脉冲信号转换成相应的角位移(或线位移)的电磁机械装置[1]。现在比较常用的步进电机包括反应式步进电机(VR)、永磁式步进电机(PM)、混合式步进电机(HB)等。
整个实验过程中呢,源程序的编写比较麻烦,调试多次也没有得出理想的结果!
采用提出的步进电机控制系统,步进电机在工作频率内运行平稳,定位精度高。该系统有效,实用,已在无人机器人系统中得到验证,结果有效可行。
单片机原理及应用实验报告一选题意义2二单片机AT89C52结构介绍2三实验内容3四实验步骤3五在uvision环境下软件程序设计4…
单片机原理与应用实验报告学校合肥工业大学姓名吕增威学号20xx2606班级计算机科学与技术0803班1目录前言3第一章MC51单片…
桂林航天工业学院电子工程系20xx20xx学年第专业班级学号姓名同组者指导教师任务一单片机控制单灯亮灭一实验目的1初步学会使用Ke…
实验课程单片机原理及应用实验项目单片机控制LED灯亮灭专业班级学号姓名实验日期实验一单片机控制LED灯实验一实验目的1进一步掌握K…
单片机原理及应用实验报告老师学生专业电气工程及其自动化学院核自学院学号实验一蜂鸣器实验一实验目的利用单片机的P1口作IO口使用户学…
《单片机原理及应用》课程设计报告专业:班级:姓名:指导教师:二0##年十二月二十五日单片机原理及应用课程设计任务书一、设计题目:答…
单片机原理及应用实验报告专业20xx级计算机科学与技术嵌入式应用技术学号姓名合肥师范学院实验报告姓名汪美玲课程名称单片机原理及应用…
数学计算机科学系实验报告专业计算机科学与技术班级实验课程单片机原理与应用技术姓名学号实验室硬件实验室同组同学实验时间20xx年3月…
单片机原理与应用实验报告学校合肥工业大学姓名吕增威学号20xx2606班级计算机科学与技术0803班1目录前言3第一章MC51单片…
单片机原理及应用课程设计报告书题目数字电压表的设计姓名杜典武学号103521034专业电气工程及其自动化指导老师万青老师设计时间2…