您好,欢迎访问三七文档
当前位置:首页 > 电子/通信 > 综合/其它 > 单片机频率发生器设计
单片机课程设计报告书课题名称频率发生器设计姓名王涛学号20117288院、系、部电气工程系专业电气工程及其自动化指导教师牛晓燕2014年6月25日※※※※※※※※※※※※※※※※※※※※※※※※2011级单片机课程设计1频率发生器设计一、设计目的单片机是一种集成电路芯片,是采用超大规模集成电路技术把具有数据处理能力的中央处理器CPU随机存储器RAM、只读存储器ROM、多种I/O口和中断系统、定时器/计时器等功能集成到一块硅片上构成的一个小而完善的微型计算机系统。它的应用领域已从面向工业控制、通讯、交通、智能仪表等迅速发展到家用消费产品、办公自动化、汽车电子、PC机外围以及网络通讯等广大领域。通过学习和掌握单片机中常用接口电路的应用和设计技术,充分认识理论知识对应用技术的指导性作用,进一步加强理论知识与应用相结合的实践和锻炼。通过这次设计实践能够进一步加深对专业知识和理论知识学习的认识和理解,使自己的设计水平和对所学的知识的应用能力以及分析问题解决问题的能力得到全面提高。二、设计要求利用核心元件为89C52单片机的开发板制作频率发生器,具体要求:1.通过按键输入设定频率(默认占空比1:1)并显示2.通过按键输入设定占空比并显示3.输出此频率4.要求做出实物。(本机地址为08H,当接到上位机发的08H时,则回发08H;当接到上位机发的AAH时,则将设定发给上位机;当收到上位机发的55H时,则修改设定频率)三、硬件电路设计3.1系统结构框图频率发生器主要由单片机,键盘,8段数码管,电源以及复位电路六部分组成。系统结构框图如图3-1所示。图3-1系统结构框图3.2单片机STC89C52介绍STC89C52是一种带8K字节闪烁可编程可檫除只读存储器的低电压,高性能COMOS8的微处理器,俗称单片机。该器件采用ATMEL搞密度非易失存储器制造技术制造,与工业标准的MCS-51指令集和输出管脚相兼容。STC89C52管脚图如图3-2所示,具体介绍如下:2图3-2STC89C52引脚图①主电源引脚(2根)VCC(Pin40):电源输入,接+5V电源GND(Pin20):接地线②外接晶振引脚(2根)XTAL1(Pin19):片内振荡电路的输入端XTAL2(Pin20):片内振荡电路的输出端③控制引脚(4根)RST/VPP(Pin9):复位引脚,引脚上出现2个机器周期的高电平将使单片机复位。ALE/PROG(Pin30):地址锁存允许信号PSEN(Pin29):外部存储器读选通信号EA/VPP(Pin31):程序存储器的内外部选通,接低电平从外部程序存储器读指令,如果接高电平则从内部程序存储器读指令。可编程输入/输出引脚(32根)STC89C52单片机有4组8位的可编程I/O口,分别位P0、P1、P2、P3口,每个口有8位(8根引脚),共32根。P3口为准双向口。可以字节访问,也可以位访问。P3.0---RXD,串行输入口。3P3.1---TXD,串行输出口。P3.2---INT0,外部中断0的请求。P3.3---INT1,外部中断1的请求。P3.4---T0,定时器/计数器0外部计数脉冲。P3.5---T1,定时器/计数器,1外部计数脉冲。P3.6---WR,外部数据存储器写选通。P3.7---RD,外部数据存储器读选通。3.3按键扫描电路这里使用的是独立式键盘,各键通断是相互独立的,每个按键都通过一根输入线输入到单片机,但每个按键工作状态不会影响其他输入线上的工作状态。因此通过检测输入线的电平状态就可以很容易地判断按键是否按下。行列式键盘的接法比独立式键盘的接法复杂,编程实现上也会比较复杂。独立式键盘电路配置灵活,软件结构简单,在占用相同的I/O端口的情况下,行列式键盘的接法会比独立式接法允许的按键数量多,本设计只需三个按键,数量少,为简单起见故采用独立式接法键盘。独立式键盘的接口方法,查询方式的独立式键盘工作电路如图3-3所示。按键直接与单片机89C52的I/O接口线相接,通过读I/O口判定各I/O口线的电平状态,即可识别出按下的键。图3-4键盘扫描电路3.4数码管显示电路动态扫描显示接口是单片机系统中应用最为广泛的一种显示方式。LED数码动态显示的基本做法在于分时轮流选通数码管的公共端,使得各数码管轮流导通,使得字段上显示字形码。这种方式数码管的发光效率,而且由于各个数码管的字段线是并联使用的,从而大大简化了硬件线路。其接口电路是把所有显示器的8个笔画段A-DP同名端并联在一起,而每个显示器的公共极COM各自独立地接受I/O线控制,CPU向字段输出口送出字段形码是,所有显示器由于同名端并连接收到相同的字形码,但究竟是哪个显示器亮,则取决于COM端,而这一端是由I/O控制的,所以就可以自行决定何时显示哪一位了。而所谓动态扫描是指采用分时的方法,轮流控制各个显示器的COM端,使各个显示器轮流点亮。再轮流点亮扫描过程中,每位显示器的点亮时间是极为短暂的(约1ms),但由于人的视觉暂留现象及发光二极管的余辉效应,尽管实际上个位显示器并非同时点亮,但只要扫描的速度足够快,给人的影响就是一组稳定的显示数据,不会有闪4烁感。图3-3数码管显示电路3.5电源电路为解决单片机电能,实验板电源部分电路如图3-5所示。图3-5电源电路3.6通讯口为实现PC机与单片机之间的串行通信,实验板通讯部分电路见图3-6,通讯接口采用标准的232接口电平,采用MAX232芯片作为电平转换器。图3-6通讯口电路53.7系统电路原理图系统电路原理图如图3-7所示图3-7系统电路原理图四、软件设计4.1主程序本次频率发生器的软件设计包括主程序模块、延时子程序模块、系统初始化程序模块、显示子程序模块、按键扫描程序模块、定时器中断子程序模块等子程序模块组成。主程序是整个系统软件的运行主体,各个子系统的软件程序都必须经过它的调度,才能运行得当。根据设计的功能要求,主程序用来控制整个程序的执行,完成了对系统的初始化,而且它与各子程序紧密相联,共同实现频率发生器各种功能的执行。6主程序流程图如图4-1:图4-1主程序流程图4.2中断子程序图4-2外部中断子程序图7五、程序设计上位机程序如下:#includereg51.h#defineucharunsignedcharsbitzk=P0^0;sbitoutput=P0^1;uchari=8,j;voiddelay1ms(ucharn)//延时nms{ucharj;while(n--)for(j=0;j122;j++){;}}voidaabb()interrupt0{EX0=0;j=0xaa;for(i=9;i0;i--){if(j&0x80)output=1;elseoutput=0;zk=0;delay1ms(1);zk=1;j=j1;}EX0=1;}voidbbaa()interrupt28{EX1=0;j=0xbb;for(i=9;i0;i--){if(j&0x80)output=1;elseoutput=0;zk=0;delay1ms(1);zk=1;j=j1;}EX1=1;}voidmain(){IT0=1;//选择INT1为下降沿触发方式IT1=1;EX1=1;EA=1;EX0=1;while(1);}下位机程序如下:#includereg51.h#includeintrins.h#defineucharunsignedchar#defineuintunsignedintsbitOutPut=P1^7;//矩形波输出口sbitinput=P1^0;floatfosc=12000000;//系统时钟频率9floatlength=65536;//方式1计数长度ucharflag,i=8,kz;//状态键标志ucharZKB;//占空比uintPL,TT=50,TTT=50;//频率ucharTIMER0_L,TIMER0_H,TIMER1_L,TIMER1_H;//T0和T1的定时初值ucharcodetabl[11]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0};//LED共阴极代码/*****************************************延时子程序*****************************************/voiddelay1ms(uintn)//延时nms{ucharj;while(n--)for(j=0;j122;j++){;}}/*****************************************系统初始化*****************************************/voidsystem_init(void){SCON=0x00;flag=0;PL=20;ZKB=50;TL0=0xb0;//初始频率20Hz定时0.05sTH0=0x3c;TL1=0x58;//初始占空比50定时0.025sTH1=0x9e;TMOD=0x11;//T0和T1为工作方式1的定时模式IT0=1;//选择INT0为下降沿触发方式10IT1=1;//选择INT1为下降沿触发方式EX0=1;EX1=1;//外部中断0允许ET0=1;//定时器1和定时器0中断允许ET1=1;EA=1;//系统中断允许TR0=1;//定时器1和定时器0开始定时TR1=1;TIMER0_L=0xb0;TIMER0_H=0x3c;TIMER1_L=0x58;TIMER1_H=0x9e;}/*****************************************显示子程序*****************************************/voiddisplay(uintPL,ucharZKB){ucharb,f,d,e,m,n,k;//分离频率的各位数值b=PL/10000;PL=PL%10000;f=PL/1000;PL=PL%1000;d=PL/100;PL=PL%100;e=PL/10;k=PL%10;m=ZKB/10;//分离占空比各位数值n=ZKB%10;if(PL==0)b=f=d=e=k=10;if(ZKB==0)m=n=10;11P2=~0x01;P0=tabl[b];delay1ms(2);P2=~0x02;P0=tabl[f];delay1ms(2);P2=~0x04;P0=tabl[d];delay1ms(2);P2=~0x08;P0=tabl[e];delay1ms(2);P2=~0x10;P0=tabl[k];delay1ms(2);P2=~0x40;P0=tabl[m];delay1ms(2);P2=~0x80;P0=tabl[n];delay1ms(2);}/*****************************************键盘扫描*****************************************/voidKey_Scan(){floatTC0,TC1;flag++;if(flag==3)//状态返回,正常工作{flag=0;//清状态标志位TC0=(length-(fosc*(100-ZKB))/(12*100*PL));12TC1=(length-(fosc*ZKB)/(12*100*PL));//占空比定时初值TIMER0_H=(uint)TC0/256;//计算T0和T1的初值TIMER0_L=(uint)TC0%256;TIMER1_H=(uint)TC1/256;TIMER1_L=(uint)TC1%256;}}voidKey_Scan1(){if(flag==1){PL+=10;//按键频率加5if(PL10000)PL=50;display(PL,ZKB);}if(flag==2)//状态2下对占空比进行调整{ZKB+=5;//按键占空比加5if(ZKB99)ZKB=5;}if
本文标题:单片机频率发生器设计
链接地址:https://www.777doc.com/doc-2594707 .html