基于MCS51单片机的可调频率方波发生器课程方案设计书报告1.docx
《基于MCS51单片机的可调频率方波发生器课程方案设计书报告1.docx》由会员分享,可在线阅读,更多相关《基于MCS51单片机的可调频率方波发生器课程方案设计书报告1.docx(15页珍藏版)》请在冰豆网上搜索。
基于MCS51单片机的可调频率方波发生器课程方案设计书报告1
设计题目:
频率可调方波发生器
专业班级:
生物医学工程09班
组长:
李建华
组员:
梁国锋,赖水兵,郭万劲,李建华
2010年06月16日
摘要
本实验是基于PHILIPSAT89C51单片机所设计的,可以实现键位与数字动态显示的一种频率可调方波发生器。
通过键盘键入(10HZ-9999HZ)随机频率,使用七段数码管显示,每一个数码管对应一个键位。
单片机对各个键位进行扫描,确定键位的输入,然后数码管显示输入的数值,方波发生器输出以数码管显示的数值为频率的方波。
关键词:
单片机七段数码管键盘电路频率可调方波发生器
一、目的和功能
1.1目的:
设计一种频率范围限定且可调的方波发生器,志在产生特定频率的方波。
1.2功能:
假设键盘是4*4的键盘,当键盘输入范围在10hz-9999hz的数字,单片机控制数码管显示该数值,并把该数值当做方波发生器的输入频率,单片机控制该方波发生器以该数值作为频率显示方波,从而得到我们想要频率的方波。
二、硬件设计
2.1硬件设计思想
键盘的数字和键位关系固定,通过键盘输入产生频率,通过LED数码管显示出来,每一个数码管对应一个键位。
基本设备是基于PHILIPSAT89C51单片机,外围设备采用的是4个七段数码管,PHILIPSAT89C51单片机,1个OSCILLOSCOPE方波发生器,16个Button,若干电阻,电源电池。
2.2部分硬件方案论述
2.2.1七段数码管扫描显示方式的方案比较
方案一:
静态显示方式:
静态显示方式是指当显示器显示某一字符时,七段数码管的每段发光二极管的位选始终被选中。
在这种显示方式下,每一个LED数码管显示器都需要一个8位的输出口进行控制。
静态显示主要的优点是显示稳定,在发光二极管导通电流一定的情况下显示器的亮度大,系统运行过程中,在需要更新显示内容时,CPU才去执行显示更新子程序,这样既节约了CPU的时间,又提高了CPU的工作效率。
其不足之处是占用硬件资源较多,每个LED数码管需要独占8条输出线。
随着显示器位数的增加,需要的I/O口线也将增加。
方案二:
动态显示方式:
动态显示方式是指一位一位地轮流点亮每位显示器(称为扫描),即每个数码管的位选被轮流选中,多个数码管公用一组段选,段选数据仅对位选选中的数码管有效。
对于每一位显示器来说,每隔一段时间点亮一次。
显示器的亮度既与导通电流有关,也与点亮时间和间隔时间的比例有关。
通过调整电流和时间参数,可以既保证亮度,又保证显示。
若显示器的位数不大于8位,则显示器的公共端只需一个8位I/O口进行动态扫描(称为扫描口),控制每位显示器所显示的字形也需一个8位口(称为段码输出)。
动态显示器的优点是节省硬件资源,成本较低。
但在控制系统运行过程中,要保证显示器正常显示,CPU必需每隔一段时间执行一次显示子程序,占用CPU大量时间,降低了CPU的工作效率,同时显示亮度较静态显示器低。
由于PHILIPSAT89C51单片机本身提供的I/O口有限,因此我们选择方案二——动态扫描方式。
扫描方式中在轮流点亮扫描过程中,每位显示器的点亮时间是极为短暂的约1ms,但由于人的视觉暂留现象及发光二极管的余辉效应,尽管实际上各位显示器并非同时点亮,但只要扫描的速度足够快,给人的印象就是一组稳定的显示数据,不会有闪烁感。
节约了电能,节省了I/O口。
2.2.2键盘连接方式方案比较
方案一:
独立式键盘
一个具有4个按键的独立式键盘,每一个按键的一端都接地,另一端接mega16的I/O口。
独立式键盘每一按键都需要一根I/O线,占用mega16的硬件资源较多。
因此独立式键盘只适合按键较少的场合。
键盘是一组按键或开关的集合,键盘接口向计算机提供被按键的代码。
特点:
使用方便、结构复杂、成本高。
方案二:
矩阵式键盘
我们采用4×4矩阵式键盘,键盘的行线X0~X3通过电阻接+5V,当键盘没有键闭合时,所有的行线和列线断开,行线X0~X3均呈高电平。
当键盘上某一键闭合时,该键所对应的行线与列线短路,此时该行线的电平将由被短路的列线电平所决定。
如果将行线接至单片机的输入端口,列线接至单片机的输出端口,则在单片机的控制下使列线Y0为低电平,其余三根列线Y1、Y2、Y3均为高电平,然后单片机读输入口状态(即键盘行线状态),若X0、X1、X2、X3均为高电平,则Y0这一列上没有键闭合,如果读出的行线状态不全为高电平,则为低电平的行线和Y0相交的键处于闭合状态。
如果Y0这一列没有键闭合,紧接着使列线Y1为低电平,其余列线为高电平,用同样的方法检查Y1这一列有无键闭合,如此类推。
这种逐行逐列地检查键盘状态的过程称为对键盘的扫描。
CPU对键盘的扫描可以采取程序控制的随机方式,CPU空闲时才扫描键盘;也可以采取定时控制方式,每隔一段时间,CPU对键盘扫描一次;还可以采用中断方式,当键盘上有键闭合时,向CPU请求中断,CPU响应键盘发出的中断请求,对键盘进行扫描,以识别哪一个键处于闭合状态,并对键输入信息作相应处理。
因为如果采用独立式键盘PHILIPSAT89C51的I/O口对于方案一来说将是远远不够用的,为了节省I/O口,使我们的设计能够顺利进行,我们选用方案二——矩阵连接式键盘。
为了能够较为简单的编程,和节省CPU的资源,我们采用定时扫描,每隔一段时间,CPU对键盘扫描一次,并将键值读入。
2.3硬件电路图
三、软件
3.1软件设计基本思想:
●键盘的不间断扫描。
●4个八段数码管的动态显示。
●方波发生器方波的输出
3.2程序框图
3.3程序功能
初始化后单片机产生初值,将初值以动态扫描的方式显示于八段数码管,同时还对键盘进行实时扫描,在扫描后,单片机读取键值,并将键值通过数码管模块显示出来,方波发生器输出该频率的方波。
四、总结
4.1已达到的成果:
硬件电路图和键盘及显示的程序。
4.2未完成的部分:
软件关于实行初值计算部分以及仿真。
4.3设计感悟:
这一次课程设计遇到了很多问题。
硬件基本上是没有问题的,每个人都会做;但是程序是我们的弱点,还有就是分工合作,很多时候都是有分歧,还好最后还有水兵帮忙,使得我们的程序进一步完善。
做完这个程序只是我们学做程序的开始吧,今后会继续加强我们在做程序上的功力。
附录一程序代码
DISBUFEQU30H
SEGBUFEQU34H
LEDSPEQU37H
HDHZBIT20H.1
ORG0000H
LJMPMAIN
ORG001BH
LJMPTIMER1
ORG000BH
LJMPTIMER0
ORG0030H
MAIN:
MOVSP,#5FH
LCALLSCAN。
跳转到键盘控制电路子程序
LCALLFT0TH。
利用频率求初值程序
MOVT2CON,#04H
MOVTH2,S1
MOVTL2,S0
MOVRCAP2H,S1
MOVRCAP2L,S0
SETBET2
SETBEA
ANLTMOD,#0F0H
ORLTMOD,#10H
MOVTH0,#8AH
MOVTL0,#0D0H
SETBET1
SETBTR1
SETBEA
FT0TH:
MOVR0,#DIVBUF1。
|除数赋值10进制转换为16进制
MOVR1,#DIVBUF2
MOVA,R0
ADDA,#3。
|53H
MOVR0,A
MOV@R1,#0
INCR1
MOVA,@R0
MOV@R1,A
DECR0。
|52H
MOVA,@R0
MOVB,#10
MULAB
CLRC
ADDCA,@R1
MOV@R1,A
DECR0。
|51H
MOVA,@R0
MOVB,#100
MULAB
ADDCA,@R1
MOV@R1,A
DECR1
MOVA,@R1
ADDCA,B
MOV@R1,A
DECR0。
|50H
INCR1
MOVA,@R0
MOVB,#10
MULAB
MOVB,#100
MULAB
ADDCA,@R1
MOV@R1,A
DECR1
MOVA,@R1
ADDCA,B
MOV@R1,A。
|
CHOICE:
MOVR0,#DIVA
MOV@R0,#00H。
|被除数为5*10^5=0007A120H
INCR0
MOV@R0,#07H
INCR0
MOV@R0,#0A1H
INCR0
MOV@R0,#20H
DIV3216:
MOV40H,#0。
|除法运算
MOV41H,#0
MOVR7,#32
。
键盘部分
SCAN:
JNBKEYVALED,$
CLRKEYVALED
LCALLKEYSCAN
MOVA,KEYNAME
TIMER1:
PUSHPSW
PUSHAW
SETBRS1
CLRRS0
MOVTH1,#8AH
MOVTL1,#0D0H
MOVP3,#0FH
MOVA,P3
ANLA,#0FH
CJNEA,#0FH,NEXT21
SETBC
JMPNEXT22
NEXT21:
CLRC
NEXT22:
MOVA,KEYSTU
RLCA
MOVKEYSTU,A
ANLA,#07H
CJNEA,#2,NEXT23
ANLKEYSTU,#00H
JMPEXIT2
NEXT23:
CJNEA,#4,NEXT24
SETBKEYVALED
JMPEXIT2
NEXT24:
CJNEA,#5,EXIT2
ORLKEYSTU,#07H
EXIT2:
POPACC
POPPWE
RETI
KEYSCAN:
MOVR7,#4
MOVR5,#0
MOVR6,#11110111B
OP1:
MOVA,R6
RLA
MOVR6,A
MOVP3,A
MOVA,P3
ANLA,#0FH
RLA,#0FH
JNZNEXT31
INCR5
DJNZR7,LOOP1
SJMPEXIT3
NEXT31:
JNEAcc.0,NEXT32
MOVR4,#0
SJMPNEXT35
NEXT32:
JNBAcc.1,NEXT33
MOVR4,#1
SJMPNEXT35
NEXT33:
JNBAcc.2,NEXT34
MOVR4,#2
SJMPNEXT35
NEXT34:
MOVR4,#3
NEXT35:
MOVA,R4
RLA
RLA
ADDA,R5
MOVDPTP,#KEYTAB
MOVCA,@A+DPTP
MOVKEYNAME,A
EXIT3:
RET
DISPLAY:
MOVLEDSP,#00H
LCALLBINT0BCD
LCALLBCDT0SEG
LJMPLOOP
TIMER0:
PUSHPSW
PUSHAcc
SETBRS0
CLRRS1
MOVTH0,#0E4A
MOVTL0,#0A8H
MOVA.CEDSP
ANLA,#04H
CJNEA,#0,NEXT11
MOVP2,#00001D00B
ADDA#SEGBUF
MOVR0,A
MOVP0,A
MOVP0,@R0
CJMPEXIT1
NEXT11:
CJNEA,#2,NEXT12
MOVP2,#00000100B
ADDA,#SEGBUF
MOVR0,A
MOVP0,@R0
LKMPEXIT1
NEXT12:
CJNEA,#1,NEXT13
MOVP2,#00000010B
ADDA,#SEGBUF
MOVR0,A
MOVP0,@R0
LJMPEXIT1
NEXT13:
MOVP2,300000001B
ADA,#SEGBUF
MOVR0,A
MOVP0,@R0
EXIT1:
INCLEDSP
MOVA,LEDSP
ANLA,#01A
CJNEA,#04A,BELOW
BELOW:
JCRETUN
MOVLEDSP,#00H
RETURN:
POPAcc
POPPSW
RETI
BINT0BCD:
MOVR0,3DISBUF+3
MOVA,KEYNAME
MOVB,#10
DIVAB
MOV@R0,B
DECR0
MOVB,#10
DIVAB
MOV@R0,B
DECR0
MOVB,#10
DIVAB
MOV@R0,B
DECR0
MOV@R0,A
RET
方波输出部分:
TIMER1:
MOVDPTR,#KEYNAME
MOVC@A+DPTR,DPTR
RETI
END
附录二组员工作分配
李建华:
主要写程序和报告以及仿真检查结果
赖水兵:
电路图的描绘,程序的撰写
梁国锋:
程序的撰写
郭万劲:
电路图的描绘
参考文献
1、潘永雄高等学校信息工程类专业规划教材(新编单片机原理与应用)