《单片机原理与应用》频率占空比可调的方波发生器_第1页
《单片机原理与应用》频率占空比可调的方波发生器_第2页
《单片机原理与应用》频率占空比可调的方波发生器_第3页
免费预览已结束,剩余17页可下载查看

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、1 单片机介绍及仿真原理MSP430系列单片机是美国仪器(TI ) 1996年开始推向市场的一种16 位超低功耗、具有精简指令集(RISC)的混合信号处理器(Mixed Signal Processor)。称之为混合信号处理器,是由于其针对实际应用需求,将多个不同功能的模拟电路、数字电路模块和微处理器集成在一个芯片上,以提供“单片”解决方案。该系列单片机多应用于需要电池供电的便携式仪器仪表中。单片机有集成度高、功能强、可靠性高、体积小、功耗地、使用方便、价格低廉等一系列优点,目前已经渗入到人们工作和生活的方方面面,几乎“无处不在,无所不为” 。单片机的应用领域已从面向工业控制、 通讯、交通、智

2、能仪表等迅速发展到家用消费产品、办公自动化、汽车电子、 PC机外围以及网络通讯等广大领域。单片机有两种基本结构形式 : 一种是在通用微型计算机中广泛采用的,将程序存储器和数据存储器合用一个存储器空间的结构,称为普林斯顿结构。另一种是将程序存储器和数据存储器截然分开,分别寻址的结构,一般需要较大的程序存储器,目前的单片机以采用程序存储器和数据存储器截然分开的结构为多。 本课题讨论的方波发生器的核心是目前应用极为广泛的 51 系列单片机。本次课程设计运用的仿真软件是Proteus 。Proteus 是世界上著名的EDA工具 ( 仿真软件 ) ,从原理图布图、代码调试到单片机与外围电路协同仿真,一键

3、切换到PCB设计,真正实现了从概念到产品的完整设计。是目前世界上唯一将电路仿真软件、PCB设计软件和虚拟模型仿真软件三合一的设计平台,其处理器模型支持8051ARM、8086 和 MSP430等。在编译方面,它也支持IAR、Keil和 MPLAB等多种编译器。2 设计原理本设计通过单片机80C51的 P3 口的 P3.0 和 P3.1 两个引脚输出两路方波信号,通过P1 口的矩阵键盘(只用到其中4 个)来控制输出方波的相位和频率变化以及复位。本设计的相位和频率的变化是通过调用延时子程序来控制的,通过按键是延时的时间发生改变从而输出不同相位和频率的方波信号,设计框图如下图1。图 1 设计框图本课

4、程设计是设计一个方波发生器,用1602 显示方波的频率和相位差。系统的整体图如图 2:图 2 系统整体图系统默认的频率为10HZ,默认的相位差为0。2.1 复位电路设计如果 RST持续为高电平,单片机就处于循环复位状态,而无法执行程序。由C1,R1,开关构成开关复位电路,如图3。上电后,由于电容充电,使RST持续一段高电平。当单片机在运行状态下,按下复位键也能使RST持续一段时间的高电平,从而实现上电复位和手动复位。图 3 复位电路2.2 振荡电路设计如图 3 所示,外接石英晶体或者瓷谐振器以及电容 C2,C3 接在放大器的反馈电路中构成并联谐振电路。谐振器本身对外接电容 C2、C3 虽然没有

5、十分严格的要求,但电容容量的大小会轻微影响振荡频率的高低、振荡器工作的稳定性、起振的难易程度以及温度的稳定性,如果使用石英晶体,推荐使用 30pF,而使用瓷谐振器建议选择 40pF。本次设计使用的是石英晶体谐振器,因此采用30pF 的电容,晶振频率为12MHZ 。图 4 振荡电路2.3 矩阵键盘设计在键盘中按键数量较多时,为了减少I/O 口的占用,通常将按键排列成矩阵形式,如图 5所示。在矩阵式键盘中,每条水平线和垂直线在交叉处不直接连通,而是通过一个按键加以连接。这样,一个端口( P1 口)就可以构成 4*4=16 个按键,比之直接将端口线用于键盘多出了一倍, 而且线数越多, 区别越明显,比

6、如再多加一条线就可以构成 20键的键盘,而直接用端口线则只能多出一键( 9键)。由此可见,在需要的键数比较多时,采用矩阵法来做键盘是合理的。矩阵式结构的键盘显然比直接法要复杂一些,识别也要复杂一些,下图中,列线通过电阻接正电源,并将行线所接的单片机的 I/O 口作为输出端,而列线所接的 I/O 口则作为输入。这样,当按键没有按下时,所有的输入端都是高电平,代表无键按下。行线输出是低电平,一旦有键按下,则输入线就会被拉低,这样,通过读入输入线的状态就可得知是否有键按下了 。图 5 矩阵键盘2.4 液晶显示液晶如图:图6 液晶1 602 字符型 LCD 通常有 14 条引脚线或 16 条引脚线的L

7、CD ,多出来的 2条线是背光电源线VCC(15 脚 )和地线 GND(16 脚 ),其控制原理与 14 脚的 LCD 完全一样,其中:引符功能说明脚号1V一般接地SS2V接电源( +5V)DDV液晶显示器对比度调整端,接正电源时对比度最弱,接地3电源时对比度最高(对比度过高时会产生“鬼影”,使用时可0以通过一个 10K 的电位器调整对比度) 。RRS 为寄存器选择,高电平 1时选择数据寄存器、低电平 04S 时选择指令寄存器。RR/W 为读写信号线,高电平(1) 时进行读操作,低电平(0)5/W时进行写操作。E( 或 EN) 端为使能 (enable) 端,6E写操作时,下降沿使能。读操作时

8、, E 高电平有效7D低 4位三态、 双向数据总线0位(最低位)B08D低 4位三态、 双向数据总线1位B19D低 4位三态、 双向数据总线2位B21D低 4位三态、 双向数据总线3位0B31D高 4位三态、双向数据总线4位1B41D高 4位三态、双向数据总线5位2B51D高 4位三态、双向数据总线6位3B61D高 4位三态、 双向数据总线7 位(最高位)(也是 busy flag )4B71B背光电源正极5LA1B背光 电源负极6LK寄存器选择控制表RR操作说明S/W00写入指令寄存器(清除屏等)01读 busy flag ( DB7 ),以及读取位址计数器( DB0DB6 )值10写入数据

9、寄存器(显示各字型等)11从数据寄存器读取数据注:关于 E=H 脉冲开始时初始化E 为0,然后置 E 为1,再清 0.busy flag (DB7 ):在此位为 1时, LCD 忙,将无法再处理其他的指令要求。3 程序流程图图7流程图4 源程序#include #include #define uchar unsigned char#define uint unsigned intsbit test=P37;sbit LCDEN=P22;sbit LCDRS=P20;sbit LCDRW=P21;sbit WaveA=P30;sbit WaveB=P31;uchar Frequency,Key

10、_Value,Flag,a6;uint data Phase_Difference;double Control_Phase=0.000001;int data Counter_T0,Number_T0, Counter_T1,Number_T1;/*void Initial_System();uchar Scan_Keyboard();uint Get_Number_T0(uchar Frequency);uint Get_Number_T1(uchar Frequency);void Increase_Frequency();void Decrease_Frequency();void I

11、ncrease_Phase_Difference(uint data Step_Phase_Difference); /void Decrease_Phase_Difference(uint data Step_Phase_Difference); void Calculate_Frequency_Phase(void); void Display_Frequency_Phase();void Delay(uint);void Write_Cmd(uchar cmd);void Write_Data(uchar Data);void LCD_Init();/*void main()Initia

12、l_System();while(1)Key_Value=Scan_Keyboard();Calculate_Frequency_Phase();Display_Frequency_Phase();/*void Initial_System()WaveA=0;WaveB=0;Control_Phase=0.000001;Frequency=10;Phase_Difference=0;Counter_T0=0;Counter_T1=0;Number_T1=Get_Number_T1(Frequency);TMOD=0x22;TH1=0x38; /256-200TL1=0x38; /256-200

13、TH0=0xc9; /256-201TL0=0xc9;EA=1;ET1=1;TR0=1;TR1=1;LCD_Init();/*void Write_Cmd(uchar cmd)LCDEN=1;LCDRS=0;P0=cmd;Delay(5);LCDEN=0;/*void Write_Data(uchar Data)LCDEN=1;LCDRS=1;P0=Data;Delay(5);LCDEN=0;/*void LCD_Init()LCDRW=0;LCDRS=0;Write_Cmd(0x01);Write_Cmd(0x38);Write_Cmd(0x0C);Write_Cmd(0x06);Write

14、_Cmd(0x80);Write_Data(F);Write_Data(R);Write_Data(E);Write_Data(:);Write_Cmd(0x80+0x40);Write_Data(P);Write_Data(H);Write_Data(A);Write_Data(:);/*uchar Scan_Keyboard()uchar key;uchar temp1,temp2;P1=0x0f;if(P1!=0x0f)temp1=P1;P1=0xf0;temp2=P1;P1=0x0f;while(P1!=0x0f)Delay(10);key=temp1|temp2;switch(key

15、)case 0xee :return 0; break;case 0xde :return 1; break;case 0xbe :return 2; break;case 0x7e :return 3; break;default : return 16;/*uint Get_Number_T0(uchar Frequency)uint h;double l;l=(double)Frequency;l=Control_Phase*0.5/l;l=l/0.000055;h=l;if(l-h+0.5)h=h+1;return h;/*uint Get_Number_T1(uchar Freque

16、ncy)uint h;double f;f=(double)Frequency;f=0.5/f;f=f/0.0002;h=f;if(f-h=0.5)h=h+1;return h;/*T0void Timer0_Interrupt() interrupt 1Counter_T0+;if(Counter_T0Number_T0)Counter_T0=0;if(Flag=0)WaveB=WaveA;elseWaveB=WaveA;ET0=0;TR0=0;/*T1void Timer1_Interrupt() interrupt 3Counter_T1+;if(Counter_T1Number_T1)

17、Counter_T1=0;WaveA=WaveA;ET0=1;TR0=1;/*void Increase_Frequency()if(Frequency10)Frequency=Frequency-10;elseFrequency=1;Number_T1=Get_Number_T1(Frequency);/*void Increase_Phase_Difference(uint data Step_Phase_Difference)Control_Phase=Control_Phase+0.00555556*Step_Phase_Difference; if(Control_Phase=1)C

18、ontrol_Phase=0.000001;else if(Control_Phase1)Flag=1;Control_Phase=Control_Phase-1;Phase_Difference+=Step_Phase_Difference;if(Phase_Difference=360)Phase_Difference=0;void Calculate_Frequency_Phase(void)switch(Key_Value)case 0:Increase_Frequency();break;case 1:Decrease_Frequency();break;case 2:Increas

19、e_Phase_Difference(10); break;case 3:Initial_System();break;default :break;Number_T0=Get_Number_T0(Frequency);void Display_Frequency_Phase()uchar i,j;a0=Frequency/100;a1=(Frequency%100)/10;a2=Frequency%10;a3=Phase_Difference/100;a4=(Phase_Difference%100)/10;a5=Phase_Difference%10;Write_Cmd(0x80+5);f

20、or(i=0;i=2;i+)Write_Data(ai+48);Delay(5);Write_Cmd(0x80+0x40+5);for(j=3;j0;k-)for(j=110;j0;j-);5 仿真结果分析5.1 系统初始化系统默认频率为 10HZ,相位差为 0 液晶显示,示波器测量如图:图 8 系统初始图5.2 频率 50HZ,相位差 0图 9 频率 50HZ,相位差05.3 频率 50HZ,相位差 50图 10 频率 50HZ,相位差505.4 频率 50HZ,相位差 90图 11 频率 50HZ,相位差906 心得体会本次课程设计我的题目是设计并实现两路相位可调方波信号发生器。实验要求输出两路方波信号,键盘控制频率和两信号的相位差, 频率围和变化步长值自定, 相位 0360,相位差变化步长值自定,用双踪示波器观察。在学习微机原理和单片机以及智能仪器这些课程的时候我们就接触过很多可以产生方波的方法。因此这次课程设计对于产生方波的方式有了多种选择。既然是单片机课设,而且这次实验的最简单的方案就是利用单片机两个引脚输出高低电平。通过定时器 A 计数来实现 PWM输出,通过来实现按键控制相位变化和频率变化以及占空比变化等,通过液晶MSP430的 P1 口的port2 端口的 IO 中断1602 来实现系统相关信

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论