1、30最小系统与电源10功能实现45实验报告出勤5总分电子安装实验室安全守则(请在下一页手抄一份安全守则)1、 每次实验前,认真预习准备,仔细阅读实验安全守则,严格按照安全规范进行实验,确保实验安全;2、 桌面要保持整洁,不允许有杂物,禁止将水杯、瓶装水放在桌面;3、 电烙铁在使用前,必须检查电源线有无烫损漏线情况,一经发现,立即找老师进行安全处理;4、 电烙铁长时间不使用,应将电源线拔掉;电烙铁使用后,应放回烙铁架中,以免烫伤物品;5、 实验结束后,必须拔掉电烙铁的电源线;已经加热的电烙铁,必须冷却后再放入抽屉中;6、 焊锡中含铅,不要含在口中,实验结束后要洗手;7、 稳压电源在使用前,应先调
2、好要使用的电压,再进行线路连接,并确保连接的极性正确;8、 抢救触电人员时,应首先切断电源或用绝缘物体挑开电源线,使触电者脱离电源,千万不要用手拖拉触电人员,以免连环触电;9、 实验结束后,必须关闭桌面电源开关,将桌面收拾干净,工具物品整理好。题目:基于51单片机的直流电机调速及音乐控制系统1. 设计要求以51单片机为核心,设计、焊接并调试一个实际单片机控制系统,实现四位一体数码管显示直流电机转向、转速,并利用按键控制音乐播放。系统设计具体要求:1) 电源电路(9V AC - 5V DC)。2) 51单片机最小系统。3) 按键控制音乐播放。4) 四位一体数码管显示(三极管8550驱动)。5)
3、直流电机驱动电路。6) 按键控制电机转动并在四位一体数码管显示。2. 设计原理及系统方案设计1) 直流电机:直流电机只要能提供一定的直流就可以转动,改变电压极性可以改变转动方向,可以通过给直流电机提供脉冲信号来驱动它,脉冲信号的占空比可以影响到直流电机的平均速度,因此可以通过调整占空比从而能实现调速的目的(PWM调速)。电机的驱动电流是比较大的,所以需要用三极管来放大电流。程序的关键就是如何实现占空比的调整,这个可以通过对51单片机定时器重装初值进行改变,从而改变时间。2) 音乐播放:乐曲是由音调和节奏组成的,这两种特征都可以用单片机的定时器来实现,所以音乐文件在程序中是一个很大的数组,数组中
4、包含着音乐的两种控制特征。音乐的输出以及播放、停止控制分别用两个按键来控制。3) 总体设计:显示数码管用P2.0P2.3进行位选,P0口控制显示数字;直流电机用P2.5和P2.6输出PWM波形,通过三极管进行驱动,P1.1P1.5分别是正反转控制,加速,减速,启动,停止按键;音乐播放通过P1.0输出,由P1.6控制。3 各功能模块硬件电路设计1) 电源电路:电源电路采用7805芯片产生+5V供电电压。2) 最小系统:包括电源,接地,晶振,复位,上拉电阻。3) 数码管显示:四位数码管是一种半导体发光器件,其基本单元是发光二极管。能显示4个数码管叫四位数码管。数码管按段数分为七段数码管和八段数码管
5、,八段数码管比七段数码管多一个发光二极管单元(多一个小数点显示);按发光二极管单元连接方式分为共阳极数码管和共阴极数码管。共阳数码管是指将所有发光二极管的阳极接到一起形成公共阳极(COM)的数码管。共阳数码管在应用时应将公共极COM接到+5V,当某一字段发光二极管的阴极为低电平时,相应字段就点亮。当某一字段的阴极为高电平时,相应字段就不亮。共阴数码管是指将所有发光二极管的阴极接到一起形成公共阴极(COM)的数码管。共阴数码管在应用时应将公共极COM接到地线GND上,当某一字段发光二极管的阳极为高电平时,相应字段就点亮。当某一字段的阳极为低电平时,相应字段就不亮。4) 直流电机驱动:基于三极管的
6、使用机理和特性,在驱动电机中采用H桥功率驱动电路,H桥功率驱动电路可应用于步进电机、交流电机及直流电机等的驱动永磁步进电机或混合式步进电机的励磁绕组都必须用双极性电源供电,也就是说绕组有时需正向电流,有时需反向电流,这样绕组电源需用H桥驱动。直流电机控制使用H桥驱动电路,当PWM1为低电平,通过对PWM2输出占空比不同的矩形波使三极管Q1、Q6同时导通Q5截止,从而实现电机正向转动以及转速的控制;同理,当PWM2为高电平,通过对PWM1输出占空比不同的矩形波使三极管Q1、Q6同时导通,Q6截止,从而实现电机反向转动以及转速的控制。4 系统软件设计1) 源代码#define _ctf_C_#in
7、clude reg51.hctf.h#includeabsacc.h#include INTRINS.H/*自定义变量*/#define uint unsigned int /自定义变量#define uchar unsigned char/*控制位定义*/unsigned char n=0; /n为节拍常数变量 unsigned char code music_tab = 0x18, 0x30, 0x1C , 0x10, /格式为: 频率常数, 节拍常数, 频率常数, 节拍常数, 0x20, 0x40, 0x1C , 0x10, 0x18, 0x10, 0x20 , 0x10, 0x1C,
8、0x10, 0x18 , 0x40, 0x1C, 0x20, 0x20 , 0x20, 0x1C, 0x20, 0x18 , 0x20, 0x20, 0x80, 0xFF , 0x20, 0x30, 0x1C, 0x10 , 0x18, 0x20, 0x15, 0x20 , 0x1C, 0x20, 0x20, 0x20 , 0x26, 0x40, 0x20, 0x20 , 0x2B, 0x20, 0x26, 0x20 , 0x20, 0x20, 0x30, 0x80 , 0xFF, 0x20, 0x20, 0x1C , 0x10, 0x18, 0x10, 0x20 , 0x20, 0x26,
9、0x20, 0x2B , 0x20, 0x30, 0x20, 0x2B , 0x40, 0x20, 0x30, 0x1C , 0x10, 0x18, 0x20, 0x15 , 0x20, 0x26, 0x40, 0x20 , 0x20, 0x2B, 0x20, 0x26 , 0x20, 0x20, 0x20, 0x30 , 0x80, 0x20, 0x10, 0x1C , 0x10, 0x20, 0x20, 0x26 , 0x20, 0x2B, 0x20, 0x30 , 0x20, 0x2B, 0x40, 0x20 , 0x15, 0x1F, 0x05, 0x20 , 0x10, 0x1C,
10、0x10, 0x20 , 0x20, 0x20, 0x20, 0x30 , 0x30, 0x18, 0x40, 0x1C , 0x20, 0x20, 0x20, 0x26 , 0x40, 0x13, 0x60, 0x18 , 0x20, 0x15, 0x40, 0x13 , 0x40, 0x18, 0x80, 0x00 ;sbit Beep = P10 ;sbit P10=P25; /输出波形1sbit P11=P26; /输出波形2sbit P12=P11; /正反转sbit P13=P12; /加速sbit P14=P13; /减速sbit P15=P14; /停止sbit P16=P15
11、;/启动sbit P17=P16;void int0() interrupt 1 /采用中断0 控制节拍 TH0=0xd8; TL0=0xef; n-; void delay (unsigned char m) /控制频率延时 unsigned i=3*m;while(-i);void delayms(unsigned char a) /毫秒延时子程序 while(-a);uchar code smg12=0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90,0xB8,0x8E;/程序存储区定义字型码表char data led4=0x07,0x0
12、B,0x0D,0x0E; /位码uint x; /数码管显示的数值char gw,sw,bw,qw;uchar j; /定时次数,每次20msuchar f=9; /计数的次数uchar k;uchar t; /脉冲加减/*延时函数*/delays()uchar i; for(i=4608;i0;i-);/*数码管显示*/display() uchar i,m; gw=x%10; /求速度个位值,送到个位显示缓冲区 sw=(x/10)%10; /求速度十位值,送到十位显示缓冲区 bw=(x/100)%10; /求速度百位值,送到百位显示缓冲区 for(m=0;m20;m+) for(i=0;i4;i+) switch(i) case 0: P0=smggw;P2=led0; delays();break; case 1: P0=smgsw; P2=led1; case 2: P0=smgbw; P2=led2; case 3:P2=led2; P0=0xff; P2=led3; if(k=0) /正转时显示反F P0=0xB8;delays(); else P0=0x8E;/反转时显示F /*t0定时*中断函数*/void t0() inter