课程设计任务书
学生姓名: 专业班级:
指导教师: 工作单位: 信息工程学院 题 目: 占空比可调信号发生器 初始条件:
本课程设计,要求用使用Proteus 仿真软件进行系统设计与仿真。
要求完成的主要任务: (包括课程设计工作量及其技术要求,以及说明书撰写等具体要求)
1. 课程设计时间:1周;
2. 课程设计内容:用4个按键分别控制输出信号的占空比和频率(用示波器观察输出波形),显示占空比范围0%~100%,频率范围50Hz~500Hz,实时测量输出信号的占空比和频率值。 3. 本课程设计统一技术要求:研读辅导资料对应章节,对选定的设计题目进行理论分析,针对具体设计部分的原理分析、建模、必要的推导和可行性分析,画出程序设计框图,编写程序代码(含注释),上机调试运行程序,记录实验结果(含计算结果和图表),并对实验结果进行分析和总结;
4. 课程设计说明书按学校“课程设计工作规范”中的“统一书写格式”撰写
时间安排:
1)年月 查阅相关资料,学习设计原理。 2)年月 方案选择和电路设计仿真。 3)年月 设计说明书撰写。
4)年月日 上交报告,同时进行答辩。
参考文献:
[1]姚燕南,薛钧义. 微型计算机原理与接口技术. 北京:高等教育出版社.2004 [2] 张鑫,华臻,陈书谦. 单片机原理及应用. 北京:电子工业出版社.2008
[3]徐维祥,刘旭敏. 单片微型计算机原理及应用. 大连:大连理工大学出版社.2006
指导教师签名: 年 月 日
系主任(或责任教师)签名: 年 月 日
目录
1、概论 . .......................................................................................................................................... 3 2、设计原理和方法 . ...................................................................................................................... 4
2.1方案的设计与选择 . .......................................................................................................... 4 2.2设计原理 . .......................................................................................................................... 5 3、芯片介绍 . .................................................................................................................................. 6
3.1 AT89C51介绍 . .................................................................................................................. 6 3.2 LM032L介绍 . .................................................................................................................... 7 4、系统硬件电路设计 . .................................................................................................................. 8
4.1系统硬件电路设计图 . ...................................................................................................... 8 4.2系统硬件电路模块 . .......................................................................................................... 9
4.2.1键盘接口电路 . ....................................................................................................... 9 4.2.2 LCD显示电路 . ................................................................................................... 10 4.2.3系统的资源分配表 . ............................................................................................. 10
5、系统的框图设计 . .................................................................................................................... 10
5.1主程序框图 . .................................................................................................................... 11 5.2中断程序框图 . ................................................................................................................ 11 6、源程序 . .................................................................................................................................... 13 7、系统软件仿真 . ........................................................................................................................ 17 8、性能分析 . ................................................................................................................................ 19
8.1 定时器中断分析 . ........................................................................................................... 19 8.2 系统性能分析 . ............................................................................................................... 20 8.3误差分析 . ........................................................................................................................ 20 9、心得体会 . ................................................................................................................................ 21 10、参考文献 . .............................................................................................................................. 22
1、概论
单片机集成度高,功能强,可靠性高,体积小,功耗低,使用方便,价格低廉等一系列优点,目前已经渗入到人们工作和生活的方方面面,几乎无处不在,无所不为。单片机的应用领域已经从面向工业控制,通讯,交通,智能仪表等迅速发展到家用消费产品,办公自动化,汽车电子,PC 机外围一记网络通讯等广大领域。
单片机有两种基本结构形式:一种是在通用微型计算机中广泛采用的,将程序存储器和数据存储器合用一个存储器空间的结构,成为普林斯机构。另一种是将程序存储器个数据存储器截然分开,分别寻址的结构,一般需要较大的程序存储器,目前单片机以采用程序存储器截然分开的结构多。本课题讨论的占空比可调的信号发生器的核心是目前应用极为广泛的51系列单片机。
基于单片机的信号发生器的设计,该课题的设计目的是充分运用大学期间所学的专业知识,考察现在正在使用的信号发生器的基本功能,完成一个基本的实际系统的设计全过程。关键是这个实际系统设计的过程,在整个过程中我可以充分发挥自动化的专业知识。特别是这个信号发生器的设计中涉及到一个典型的控制过程。通过单片机控制一个有特殊功能的信号发生芯片,可以产生一系列有规律的幅度和频率可调的波形。这样一个信号发生器装置在控制领域有相当广泛的应用范围。因为产生一系列的可调波形可以作为其他一些设备的数值输入,还可以应用与设备检测,仪器调试等场合。高频稳定的波形信号也可以用于无线电波的调频,解调。这些都是现代生活中必不可少的一些应用。
Proteus 软件是英国Labcenter electronics公司出版的EDA 工具软件(该软件中国总 代理为广州风标电子技术有限公司)。它不仅具有其它EDA 工具软件的仿真功能,还能仿真单片机及外围器件。它是目前最好的仿真单片机及外围器件的工具。虽 然目前国内推广刚起步,但已受到单片机爱好者、从事单片机教学的教师、致力于单片机开发应用的科技工作者的青睐。Proteus 是世界上著名的EDA 工具 (仿真软件) , 从原理图布图、代码调试到单片机与外围电路协同仿真,一键切换到PCB 设计,真正实现了从概念到产品的完整设计。是目前世界上唯一将电路仿真软件、PCB 设计软件和虚拟模型仿真软件三合一的设计平台,其处理器模型支持8051、HC11、PIC10/12/16/18/24/30/DsPIC33、 AVR、ARM 、8086和MSP430等,2010年又增加了Cortex 和DSP 系列处理器,并持续增加其他系列处
理器模型。在编译方面,它也支持 IAR、Keil 和MPLAB 等多种编译器。
Proteus 软件具有其它EDA 工具软件(例:multisim )的功能。这些功能是: 1.原理布图
2.PCB 自动或人工布线 3.SPICE 电路仿真 革命性的特点 1.互动的电路仿真
用户甚至可以实时采用诸如RAM ,ROM ,键盘,马达,LED ,LCD ,AD/DA,部分SPI 器件,部分IIC 器件。
2.仿真处理器及其外围电路
可以仿真51系列、AVR 、PIC 、ARM 、等常用主流单片机。还可以直接在基于原理图的虚拟原型 上编程,再配合显示及输出,能看到运行后输入输出的效果。配合系统配置的虚拟逻辑分析仪、示波器等,Proteus 建立了完备的电子设计开发环境。
2、设计原理和方法
2.1方案的设计与选择
在电子技术领域中,实现函数信号发生器的方法有很多种,可以采用不同的原理级器件构成不同的电路,但是可以实现相同的功能。 方案的比较:
方案一:采用单片函数发生器如8038,8038可同时产生正弦波,方波等,而且方法简单易行。用D/A转换器的输出来改变调制电压,也可以实现数控的调频,但是产生的频率稳定度不高。
方案二:采用锁相式频率合成器,利用锁相环,降压控振荡器(VOC )的输出,频率锁定在所需的频率上,该方案性能良好,但是难以达到输出频率覆盖系数的要求,其电路复杂。
方案三:采用单片机编程的方法实现。该方法可以通过编程,来控制方波信号输出的
频率和幅度,并且只要改变程序的相关参数,便可以改变输出波形的频率和占空比。由于编程的方法产生的是数字信号,所以信号的精度可以做到很高。并且电路简单。
鉴于方案一的信号频率不够稳定和方案二的电路复杂,频率覆盖系数难以达标等缺点,所以决定采用方案三的设计方法。方案三不仅仅是软硬件结合,而且它使用的元器件,容易得到,且价格便宜,使得硬件的开销达到最省。
在此次设计中,利用AT89C51单片机,软硬件结合,实现占空比和频率可调。案件的操作是通过数字电路跟外部中断0来控制的。可以输出占空比在1%到99%可调,精度为1%,频率范围为50HZ 到500HZ 可调,精度为10HZ 的方波。
本设计用到一个AT89C51微处理器,4个按键,一个四输入与门。AT89C51用到两个定时器,定时器0和定时器1。其中定时器0工作再方式1下,决定输出信号的频率,定时器1工作再方式1下,决定输出信号的占空比。按键1和2决定信号的输出频率,按键1用于增大信号的频率,按一下就增加10HZ ,当增减大500HZ 时,就归为50HZ 。按键2用于减小输出信号的频率,按一次键,输出信号的频率减少10HZ ,当减少到50HZ 时,频率就归于500. 按键3和4决定信号的占空比,按键3用于增加信号的占空比,按下一次键,占空比就增加1,上限值为99,当在此按键是,就让占空比归1. 按键4用于减小信号的占空比,按下一次键,占空比就减1,下限值为1,当再次按键时,就让占空比回归到99. 通过上面的步骤,可以实现占空比和频率的可调。
2.2设计原理
AT89C51单片机是真个波形信号发生器的核心,通过程序的编写和执行,可以产生可以调节的方波,并受到按键的控制,增减频率和占空比。并且在液晶上显示出来。定时器0工作再方式1下,决定输出信号的频率,定时器1工作再方式1下,决定输出信号的占空比。按键1和2决定信号的输出频率,按键1用于增大信号的频 率,按一下就增加10HZ ,当增减大500HZ 时,就归为50HZ 。按键2用于减小输出信号的频率,按一次键,输出信号的频率减少10HZ ,当减少到 50HZ时,频率就归于500. 按键3和4决定信号的占空比,按键3用于增加信号的占空比,按下一次键,占空比就增加1,上限值为99,当在此按键是,就 让占空比归1. 按键4用于减小信号的占空比,按下一次键,占空比就减1,下限值为1,当再次按键时,就让占空比回归到99. 通过上面的步骤,可以实现占空比和频率的可调。
液晶则选用LCD032L ,可直观的看到频率和占空比。信号发生器原理框图如下
图2.2 信号发生器原理框图、
3、芯片介绍
3.1 AT89C51介绍
AT89C51是一种带4K 字节FLASH 存储器(FPEROM —Flash Programmable and Erasable Read Only Memory)的低电压、高性能CMOS 8位微处理器,俗称单片机。AT89C51是一种带2K 字节闪存可编程可擦除只读存储器的 单片机。单片机的可擦除只读存储器可以反复擦除1000次。该器件采用ATMEL 高密度非易失存储器制造技术制造,与工业标准的MCS-51指令集和输出 管脚相兼容。由于将多功能8位CPU 和闪烁存储器组合在单个芯片中,ATMEL 的AT89C51是一种高效微控制器,AT89C2051是它的一种精简版本。AT89C51单片机为很多嵌入式控制系统提供了一种灵活性高且价廉的方案。引脚排列如图3.1所示。
3.2 LM032L介绍
LM032L 采用标准的14脚接口,其中: 第1脚:VSS 为地电源 第2脚:VDD 接5V 正电源
第3脚:V0为液晶显示器对比度调整端,接正电源时对比度最弱,接地电源时对比度最高,对比度过高时会产生“鬼影”,使用时可以通过一个10K 的电位器调整对比度
第4脚:RS 为寄存器选择,高电平时选择数据寄存器、低电平时选择指令寄存器。 第5脚:R/W为读写信号线,高电平时进行读操作,低电平时进行写操作。当RS 和RW 共同为低电平时可以写入指令或者显示地址,当RS 为低电平RW 为高电平时可以读忙信号,当RS 为高电平RW 为低电平时可以写入数据。
第6脚:E 端为使能端,当E 端由高电平跳变成低电平时,液晶模块执行命令。 第7~14脚:D0~D7为8位双向数据线。 引脚图如图3.2所示。
图3.2 LM032L引脚图
LM032L 字符集如图3.3所示
图3.3 LM032L字符集
4、系统硬件电路设计
4.1系统硬件电路设计图
系统硬件电路原理图如下图4.1所示:四个独立按键分别与单片机P1.0,P1.1,P1.2,P1.3相连接,并且通过一个四输入的与门,将与门的输出当做单片机外部中断0的触发信号。当有按键按下时,就会进入外部中断程序。P1.4口输出信号连接到示波器,检测输出波形。通过单片机的PO 口连接到LCD032L 的数据段,用以显示波形信号发生器的频率和占空比。
图4.1 系统硬件电路设计图
4.2系统硬件电路模块
4.2.1键盘接口电路
小键盘如图4.2.1所示,总共有四个键,前两个控制频率,后两个控制波形信号的占空比,分别接P1.0~P1.3,经过一个与门与P3.2(INT 0)相连,当键盘被按下后转到键盘处理子程序中。
图4.2.1 键盘接口电路
4.2.2 LCD显示电路
LCD 选取的是LM032L 为20*2的液晶,与单片机的连接电路如下。其中VSS 接地,VDD 接+5V电源.D0~D7接单片机的P0口。
图4.2.2 显示部分电路
4.2.3系统的资源分配表
系统的资源分配表如表4.2.3所示
表4.2.3 系统资源分配表
5、系统的框图设计
软件是该LCD 显示控制系统的重要组成部分,在软件的设计中,我们采用了模块了设计,将各部分功能编写为子模块的形式,这样增加了程序的可读性。
5.1主程序框图
主程序用于控制整个系统,先对系统初始化,然后通过一个空循环等待中断程序,当中断到来时候,就进入中断程序,执行中断程序。中断程序执行完成之后,就返回主程序,继续等待。
图5.1 主程序流程图
5.2中断程序框图
键盘扫描用外部中断0实现,用以分析是那个键盘被按下,然后在实现所要的功能。 关于键盘扫描程序的说明: (1)频率调节
当按下键1的时候,会转到外部中断0子程序,判断之后,会改变其中变量fre 的值,然后分别将T0,T1按要求重新赋初始值,然后再在液晶上实时刷新。即可改变即加10Hz, 当加到最大值500Hz 时,继续按下键1,将会回到最小值50Hz 上。同理按下键2,频率值将会减10Hz, 当减到最小值50Hz, 会回到最大值500Hz 上。 (2)占空比调节
当按下键3,进入到外部中断0子程序,判断却是按下后,改变zkb (即占空比),然后改变定时器的初值。实时刷新,同频率调节,占空比也需要进行限制。
要注意的是频率和占空比的初始值都为50,我们定义的占空比为百分比的分子部分。
键盘处理子程序流程图入图5.2所示。当有按键按下时,进入到外部中断,然后暂时关闭外部中断,启动延时程序,以消除抖动。然后检测是哪个按键被按下,然后对频率跟占空比的变量做出相应的赋 值,并且将占空比的值送到数码管显示。并且对定时器0和定时器1
和1中断,中断程序结束。
图9 中断子程序流程图
6、源程序
#include
#define uchar unsigned char #define uint unsigned int
float fosc=12000000; //系统时钟频率
sbit key1=P1^0; //控制频率的增加
sbit key2=P1^1; //控制频率的减少 sbit key3=P1^2; //控制占空比的增加 sbit key4=P1^3;//控制占空比的减少 sbit lcdrs=P2^0; sbit lcdrw=P2^1; sbit lcden=P2^2; sbit clk=P1^4; uchar num;
uchar lcdtable[]={0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39}; uchar code table1[]="FRE(Hz):"; uchar code table2[]={"DUT(%):"};
uint zkb=50; //占空比初值,取值范围为0到100 uint fre=50; //频率初值,取值范围为50到500 uint time0_H,time0_L,time1_H,time1_L;
void delay(uint z) //延时程序 { uint i,j;
for(i=z;i--;i>0) for(j=110;j--;j>0); }
void write_com(uchar com) {
lcdrs=0; lcdrw=0; P0=com; delay(5); lcden=1; delay(5); lcden=0; }
void write_data(uchar date) {
lcdrs=1; lcdrw=0;
P0=date; delay(5); lcden=1; delay(5); lcden=0; }
void init() {
TMOD=0x11; //定时器0和1都工作在方式1 time0_H=0xB1; time0_L=0xE0; time1_H=0xD8; time1_L=0xF0;
TH0=0xB1; //定时器0装入初值,计数器计数20000次,20ms TL0=0xE0;
TH1=0xD8; //定时器1装入初值,计数器计数10000次,10ms TL1=0xF0;
IT0=1; //外部中断1为低电平触发 EX0=1; //开外部中断1
ET0=1; //定时器T0中断允许
ET1=1; //定时器T1中断允许 EA=1; //开启总中断 TR0=1; //开启定时器0
TR1=1; //开启定时器1 lcden=0;
write_com(0x38); write_com(0x0c); write_com(0x06); write_com(0x01); }
void main() {
init();
write_com(0x80);
for(num=0;num
write_data(table1[num]); delay(5); }
write_data(0x30+5); delay(5);
write_data(0x30+0); delay(5);
write_com(0x80+0x40); for(num=0;num
write_data(table2[num]); delay(5); }
delay(5);
write_data(0x30+5); delay(5);
write_data(0x30+0); while(1); }
void T0_time() interrupt 1 {
TR1=1; //开定时器1 TH0=time0_H; TL0=time0_L; clk=1; }
void T1_time() interrupt 3 {
TR1=0; //关定时器0 TH1=time1_H; TL1=time1_L; clk=0; }
void keyscan() interrupt 0 //外部中断0 {
uchar fre_bai,fre_shi,fre_ge,zkb_shi,zkb_ge; float TX,TZ;
EX0=0; //关中断 delay(10); //延时消抖 if(P1!=0x0F) if(key1==0) {
fre=fre+10; if(fre>500) fre=50; }
if(key2==0) {
fre=fre-10; if(fre
if(key3==0) {
zkb=zkb+1; if(zkb>99) zkb=1; }
if(key4==0) {
zkb=zkb-1; if(zkb
TX=(65536-fosc/(12.0*fre));
TZ=(65536-(fosc*zkb))/(12.0*100*fre); time0_H=(uint)TX/256; time0_L=(uint)TX%256; time1_H=(uint)TZ/256; time1_L=(uint)TZ%256; P1=0x0f; EX0=1; TR0=1; TR1=1;
fre_bai=fre/100; fre_shi=fre/10%10; fre_ge=fre%10;
write_com(0x80+0x08);
write_data(lcdtable[fre_bai]); delay(5);
write_data(lcdtable[fre_shi]); delay(5);
write_data(lcdtable[fre_ge]); delay(5);
zkb_shi=zkb/10; zkb_ge=zkb%10;
write_com(0x80+0x07+0x40); write_data(lcdtable[zkb_shi]);
delay(5);
write_data(lcdtable[zkb_ge]); delay(5); }
7、系统软件仿真
系统电路图如图1.3.1所示,系统单片机需要的HEX 文件有KEIL 软件生成,下载至单片机中,开始仿真,未按下任何键情况下,系统仿真结果为图7.1所示。
图7.1初始情况下的仿真结果
图中光标中周期为10ms, 与频率计和液晶显示一致,得到仿真结果图7.2
图7.2按下键1的仿真结果
图中光标测得的周期为10.0ms,fre=1/10.0ms=100Hz,与液晶显示大致一致。 当按下键1到显示频率为500HZ 时,测得示波器波形周期为2ms ,频率显示器为498HZ
图7.3
图中光标测得的周期为2ms,fre=1/2ms=500Hz,与液晶显示一致。 按下按键3,使得显示占空比为60%,得到仿真结果图7.4
图7.4按下键3的仿真结果
图中测得的占空比6.5ms/11ms=0.599,与液晶显示一致。
按下键4使得占空比为30%,得仿真结果图7.5
图7.5按下键4的仿真结果
图中光标测得的占空比2.25ms/7.50ms=0.3,与液晶显示一致。
8、性能分析
8.1 定时器中断分析
本次占空比可调的信号发生器的设计采用了定时器0和定时器1中断,定时器0中断用于控制信号的频率,定时器1用于控制信号的占空比。当调节输出信号的占空比时,信号的频率就不变;如果调节信号的频率,占空比就不变。设fre 表示输出的频率,zkb 表示输出的占空比,TX 为定时器0的计数次数,TZ 为定时器 1的计数次数。给TX 装入初值为:TX=(65536-fosc/(12.0*fre));给TZ 装入初值为TZ=(65536-(fosc*zkb))
/(12.0*100*fre);当定时器0计数到时,开启定时器1,定时器1开始计数,并且P1.4口输出高电平。当经过一个周期中高电平持续的时间后,定时器1计数时间就到了,程序进 入到定时器1中断执行,然后关掉定时器1,并且输出低电平。因为定时器0
中断是一
直开着的,当经过一个周期中低电平持续的时间后,定时器0计数又到了,进 入定时器0中断执行,如此循环。当改变fre 或者zkb 的时候,就可以相应改变输出信号的占空比跟频率。
8.2 系统性能分析
该系统实现占空比跟频率可调的信号发生器。占空比的调节范围是1%到99%,精度是1%,当达到上限值时,再次增加时,占空比归于1%,达到下限时,再次减少,占空比自动归于99%。频率的调节范围是50HZ 到500HZ ,精度是10HZ ,当达到上限值时,再次增加时,频率自动归于50HZ ,当达到下限值 时,再次减少时,频率自动归于500HZ 。总之,这次设计达到了设计要求,输出的信号稳定度高,误差小,并且方便调节,硬件电路简单。
8.3误差分析
本设计中主要的参数有设定的频率值和占空比,示波器上测得的频率值和占空比,以
及LCD 显示的频率值和占空比,可以看到设定的占空比和频率值总是和LCD 上显示的一样,出现误差的只有示波器上测得的,这是因为虽然设定的频率值和占空比总是整数,但是换算为定时器的初始值时,会出现小数部分,而程序直接将小数部分省略,由此便出现了误差。
9、心得体会
本次课题的设计题目是设计并实现占空比可调的信号发生器,主要实现占空比可调 并测出频率及占空比的值。经过一个星期的学习、设计、仿真、调试,最终得出结果,基本完成设计要求。
之前学过单片机课程,这次课程设计是选择用T0定时器控制方波的周期,T1定时器控制方波的占空比,外部中断0处理按键的。由于定时器和中断都是单片机课程重点,因此设计并不麻烦,外部中断处理按键请求则是初步接触,但设计起来并不困难。除此还用到LM032L 作为液晶显示,终于完成了LCD 的显示部分。
以前学习单片机都是用汇编语言来编程的,但这次课设要汇编语言咸的较为麻烦。参考网上的一些资料,觉得C 语言编程得到程序较简单明了,幸好有C 语言基础,所以编程学习起来还是蛮快的。其中涉及到对LM032L 作为液晶显示的编程,也卡住了我,通过学习,了解其显示字符的编程方法,也较轻松的解决了。还有,就是写程序时注意对中断的允/禁控制,每当中断进来之后,举要关闭中断,然后执行中断内部程序,最后要开中断,才能保证整个硬件系统的顺利运行。最后,就是要对按键进行延时去抖,这里的延时不能太短,才能看到液晶显示的数字较为流畅。
为了完成这个设计,这次用的是proteus 进行连接硬件原理图和进行仿真,用Keil 软件对程序进行编译,写进89C51芯片上。这两个软件操作起来还是很简单的,可能是之前做过几个课设都用到这些软件,因此对他们也是很熟悉了。
我觉得这次单片机课程设计很有意义,又让我多了解了一些关于单片机的运用,为了这次课设复习了相关单片机的知识,也额外的学习了如何运用C 语言来对单片机进行编程,不仅加深了对书本的学习,学会了从文献中找出解决之道,很有益处。并且也知道了自己身上所欠缺的,对单片机的编程还是显得不够熟练,特别是C 语言编程,要继续努力,把单片机学得更好。
10、参考文献
[1]姚燕南,薛钧义. 微型计算机原理与接口技术. 北京:高等教育出版社.2004
[2] 张鑫,华臻,陈书谦. 单片机原理及应用. 北京:电子工业出版社.2008
[3]徐维祥,刘旭敏. 单片微型计算机原理及应用. 大连:大连理工大学出版社.2006
[4] 李群芳,张士军,黄建. 单片微型计算机与接口技术(第2版). 北京:电子工业出版 社.2005
[5]汪道辉. 单片机系统设计与实践. 北京:电子工业出版社.2006
本科生能力拓展训练成绩评定表
指导教师签字:
年 月 日
课程设计任务书
学生姓名: 专业班级:
指导教师: 工作单位: 信息工程学院 题 目: 占空比可调信号发生器 初始条件:
本课程设计,要求用使用Proteus 仿真软件进行系统设计与仿真。
要求完成的主要任务: (包括课程设计工作量及其技术要求,以及说明书撰写等具体要求)
1. 课程设计时间:1周;
2. 课程设计内容:用4个按键分别控制输出信号的占空比和频率(用示波器观察输出波形),显示占空比范围0%~100%,频率范围50Hz~500Hz,实时测量输出信号的占空比和频率值。 3. 本课程设计统一技术要求:研读辅导资料对应章节,对选定的设计题目进行理论分析,针对具体设计部分的原理分析、建模、必要的推导和可行性分析,画出程序设计框图,编写程序代码(含注释),上机调试运行程序,记录实验结果(含计算结果和图表),并对实验结果进行分析和总结;
4. 课程设计说明书按学校“课程设计工作规范”中的“统一书写格式”撰写
时间安排:
1)年月 查阅相关资料,学习设计原理。 2)年月 方案选择和电路设计仿真。 3)年月 设计说明书撰写。
4)年月日 上交报告,同时进行答辩。
参考文献:
[1]姚燕南,薛钧义. 微型计算机原理与接口技术. 北京:高等教育出版社.2004 [2] 张鑫,华臻,陈书谦. 单片机原理及应用. 北京:电子工业出版社.2008
[3]徐维祥,刘旭敏. 单片微型计算机原理及应用. 大连:大连理工大学出版社.2006
指导教师签名: 年 月 日
系主任(或责任教师)签名: 年 月 日
目录
1、概论 . .......................................................................................................................................... 3 2、设计原理和方法 . ...................................................................................................................... 4
2.1方案的设计与选择 . .......................................................................................................... 4 2.2设计原理 . .......................................................................................................................... 5 3、芯片介绍 . .................................................................................................................................. 6
3.1 AT89C51介绍 . .................................................................................................................. 6 3.2 LM032L介绍 . .................................................................................................................... 7 4、系统硬件电路设计 . .................................................................................................................. 8
4.1系统硬件电路设计图 . ...................................................................................................... 8 4.2系统硬件电路模块 . .......................................................................................................... 9
4.2.1键盘接口电路 . ....................................................................................................... 9 4.2.2 LCD显示电路 . ................................................................................................... 10 4.2.3系统的资源分配表 . ............................................................................................. 10
5、系统的框图设计 . .................................................................................................................... 10
5.1主程序框图 . .................................................................................................................... 11 5.2中断程序框图 . ................................................................................................................ 11 6、源程序 . .................................................................................................................................... 13 7、系统软件仿真 . ........................................................................................................................ 17 8、性能分析 . ................................................................................................................................ 19
8.1 定时器中断分析 . ........................................................................................................... 19 8.2 系统性能分析 . ............................................................................................................... 20 8.3误差分析 . ........................................................................................................................ 20 9、心得体会 . ................................................................................................................................ 21 10、参考文献 . .............................................................................................................................. 22
1、概论
单片机集成度高,功能强,可靠性高,体积小,功耗低,使用方便,价格低廉等一系列优点,目前已经渗入到人们工作和生活的方方面面,几乎无处不在,无所不为。单片机的应用领域已经从面向工业控制,通讯,交通,智能仪表等迅速发展到家用消费产品,办公自动化,汽车电子,PC 机外围一记网络通讯等广大领域。
单片机有两种基本结构形式:一种是在通用微型计算机中广泛采用的,将程序存储器和数据存储器合用一个存储器空间的结构,成为普林斯机构。另一种是将程序存储器个数据存储器截然分开,分别寻址的结构,一般需要较大的程序存储器,目前单片机以采用程序存储器截然分开的结构多。本课题讨论的占空比可调的信号发生器的核心是目前应用极为广泛的51系列单片机。
基于单片机的信号发生器的设计,该课题的设计目的是充分运用大学期间所学的专业知识,考察现在正在使用的信号发生器的基本功能,完成一个基本的实际系统的设计全过程。关键是这个实际系统设计的过程,在整个过程中我可以充分发挥自动化的专业知识。特别是这个信号发生器的设计中涉及到一个典型的控制过程。通过单片机控制一个有特殊功能的信号发生芯片,可以产生一系列有规律的幅度和频率可调的波形。这样一个信号发生器装置在控制领域有相当广泛的应用范围。因为产生一系列的可调波形可以作为其他一些设备的数值输入,还可以应用与设备检测,仪器调试等场合。高频稳定的波形信号也可以用于无线电波的调频,解调。这些都是现代生活中必不可少的一些应用。
Proteus 软件是英国Labcenter electronics公司出版的EDA 工具软件(该软件中国总 代理为广州风标电子技术有限公司)。它不仅具有其它EDA 工具软件的仿真功能,还能仿真单片机及外围器件。它是目前最好的仿真单片机及外围器件的工具。虽 然目前国内推广刚起步,但已受到单片机爱好者、从事单片机教学的教师、致力于单片机开发应用的科技工作者的青睐。Proteus 是世界上著名的EDA 工具 (仿真软件) , 从原理图布图、代码调试到单片机与外围电路协同仿真,一键切换到PCB 设计,真正实现了从概念到产品的完整设计。是目前世界上唯一将电路仿真软件、PCB 设计软件和虚拟模型仿真软件三合一的设计平台,其处理器模型支持8051、HC11、PIC10/12/16/18/24/30/DsPIC33、 AVR、ARM 、8086和MSP430等,2010年又增加了Cortex 和DSP 系列处理器,并持续增加其他系列处
理器模型。在编译方面,它也支持 IAR、Keil 和MPLAB 等多种编译器。
Proteus 软件具有其它EDA 工具软件(例:multisim )的功能。这些功能是: 1.原理布图
2.PCB 自动或人工布线 3.SPICE 电路仿真 革命性的特点 1.互动的电路仿真
用户甚至可以实时采用诸如RAM ,ROM ,键盘,马达,LED ,LCD ,AD/DA,部分SPI 器件,部分IIC 器件。
2.仿真处理器及其外围电路
可以仿真51系列、AVR 、PIC 、ARM 、等常用主流单片机。还可以直接在基于原理图的虚拟原型 上编程,再配合显示及输出,能看到运行后输入输出的效果。配合系统配置的虚拟逻辑分析仪、示波器等,Proteus 建立了完备的电子设计开发环境。
2、设计原理和方法
2.1方案的设计与选择
在电子技术领域中,实现函数信号发生器的方法有很多种,可以采用不同的原理级器件构成不同的电路,但是可以实现相同的功能。 方案的比较:
方案一:采用单片函数发生器如8038,8038可同时产生正弦波,方波等,而且方法简单易行。用D/A转换器的输出来改变调制电压,也可以实现数控的调频,但是产生的频率稳定度不高。
方案二:采用锁相式频率合成器,利用锁相环,降压控振荡器(VOC )的输出,频率锁定在所需的频率上,该方案性能良好,但是难以达到输出频率覆盖系数的要求,其电路复杂。
方案三:采用单片机编程的方法实现。该方法可以通过编程,来控制方波信号输出的
频率和幅度,并且只要改变程序的相关参数,便可以改变输出波形的频率和占空比。由于编程的方法产生的是数字信号,所以信号的精度可以做到很高。并且电路简单。
鉴于方案一的信号频率不够稳定和方案二的电路复杂,频率覆盖系数难以达标等缺点,所以决定采用方案三的设计方法。方案三不仅仅是软硬件结合,而且它使用的元器件,容易得到,且价格便宜,使得硬件的开销达到最省。
在此次设计中,利用AT89C51单片机,软硬件结合,实现占空比和频率可调。案件的操作是通过数字电路跟外部中断0来控制的。可以输出占空比在1%到99%可调,精度为1%,频率范围为50HZ 到500HZ 可调,精度为10HZ 的方波。
本设计用到一个AT89C51微处理器,4个按键,一个四输入与门。AT89C51用到两个定时器,定时器0和定时器1。其中定时器0工作再方式1下,决定输出信号的频率,定时器1工作再方式1下,决定输出信号的占空比。按键1和2决定信号的输出频率,按键1用于增大信号的频率,按一下就增加10HZ ,当增减大500HZ 时,就归为50HZ 。按键2用于减小输出信号的频率,按一次键,输出信号的频率减少10HZ ,当减少到50HZ 时,频率就归于500. 按键3和4决定信号的占空比,按键3用于增加信号的占空比,按下一次键,占空比就增加1,上限值为99,当在此按键是,就让占空比归1. 按键4用于减小信号的占空比,按下一次键,占空比就减1,下限值为1,当再次按键时,就让占空比回归到99. 通过上面的步骤,可以实现占空比和频率的可调。
2.2设计原理
AT89C51单片机是真个波形信号发生器的核心,通过程序的编写和执行,可以产生可以调节的方波,并受到按键的控制,增减频率和占空比。并且在液晶上显示出来。定时器0工作再方式1下,决定输出信号的频率,定时器1工作再方式1下,决定输出信号的占空比。按键1和2决定信号的输出频率,按键1用于增大信号的频 率,按一下就增加10HZ ,当增减大500HZ 时,就归为50HZ 。按键2用于减小输出信号的频率,按一次键,输出信号的频率减少10HZ ,当减少到 50HZ时,频率就归于500. 按键3和4决定信号的占空比,按键3用于增加信号的占空比,按下一次键,占空比就增加1,上限值为99,当在此按键是,就 让占空比归1. 按键4用于减小信号的占空比,按下一次键,占空比就减1,下限值为1,当再次按键时,就让占空比回归到99. 通过上面的步骤,可以实现占空比和频率的可调。
液晶则选用LCD032L ,可直观的看到频率和占空比。信号发生器原理框图如下
图2.2 信号发生器原理框图、
3、芯片介绍
3.1 AT89C51介绍
AT89C51是一种带4K 字节FLASH 存储器(FPEROM —Flash Programmable and Erasable Read Only Memory)的低电压、高性能CMOS 8位微处理器,俗称单片机。AT89C51是一种带2K 字节闪存可编程可擦除只读存储器的 单片机。单片机的可擦除只读存储器可以反复擦除1000次。该器件采用ATMEL 高密度非易失存储器制造技术制造,与工业标准的MCS-51指令集和输出 管脚相兼容。由于将多功能8位CPU 和闪烁存储器组合在单个芯片中,ATMEL 的AT89C51是一种高效微控制器,AT89C2051是它的一种精简版本。AT89C51单片机为很多嵌入式控制系统提供了一种灵活性高且价廉的方案。引脚排列如图3.1所示。
3.2 LM032L介绍
LM032L 采用标准的14脚接口,其中: 第1脚:VSS 为地电源 第2脚:VDD 接5V 正电源
第3脚:V0为液晶显示器对比度调整端,接正电源时对比度最弱,接地电源时对比度最高,对比度过高时会产生“鬼影”,使用时可以通过一个10K 的电位器调整对比度
第4脚:RS 为寄存器选择,高电平时选择数据寄存器、低电平时选择指令寄存器。 第5脚:R/W为读写信号线,高电平时进行读操作,低电平时进行写操作。当RS 和RW 共同为低电平时可以写入指令或者显示地址,当RS 为低电平RW 为高电平时可以读忙信号,当RS 为高电平RW 为低电平时可以写入数据。
第6脚:E 端为使能端,当E 端由高电平跳变成低电平时,液晶模块执行命令。 第7~14脚:D0~D7为8位双向数据线。 引脚图如图3.2所示。
图3.2 LM032L引脚图
LM032L 字符集如图3.3所示
图3.3 LM032L字符集
4、系统硬件电路设计
4.1系统硬件电路设计图
系统硬件电路原理图如下图4.1所示:四个独立按键分别与单片机P1.0,P1.1,P1.2,P1.3相连接,并且通过一个四输入的与门,将与门的输出当做单片机外部中断0的触发信号。当有按键按下时,就会进入外部中断程序。P1.4口输出信号连接到示波器,检测输出波形。通过单片机的PO 口连接到LCD032L 的数据段,用以显示波形信号发生器的频率和占空比。
图4.1 系统硬件电路设计图
4.2系统硬件电路模块
4.2.1键盘接口电路
小键盘如图4.2.1所示,总共有四个键,前两个控制频率,后两个控制波形信号的占空比,分别接P1.0~P1.3,经过一个与门与P3.2(INT 0)相连,当键盘被按下后转到键盘处理子程序中。
图4.2.1 键盘接口电路
4.2.2 LCD显示电路
LCD 选取的是LM032L 为20*2的液晶,与单片机的连接电路如下。其中VSS 接地,VDD 接+5V电源.D0~D7接单片机的P0口。
图4.2.2 显示部分电路
4.2.3系统的资源分配表
系统的资源分配表如表4.2.3所示
表4.2.3 系统资源分配表
5、系统的框图设计
软件是该LCD 显示控制系统的重要组成部分,在软件的设计中,我们采用了模块了设计,将各部分功能编写为子模块的形式,这样增加了程序的可读性。
5.1主程序框图
主程序用于控制整个系统,先对系统初始化,然后通过一个空循环等待中断程序,当中断到来时候,就进入中断程序,执行中断程序。中断程序执行完成之后,就返回主程序,继续等待。
图5.1 主程序流程图
5.2中断程序框图
键盘扫描用外部中断0实现,用以分析是那个键盘被按下,然后在实现所要的功能。 关于键盘扫描程序的说明: (1)频率调节
当按下键1的时候,会转到外部中断0子程序,判断之后,会改变其中变量fre 的值,然后分别将T0,T1按要求重新赋初始值,然后再在液晶上实时刷新。即可改变即加10Hz, 当加到最大值500Hz 时,继续按下键1,将会回到最小值50Hz 上。同理按下键2,频率值将会减10Hz, 当减到最小值50Hz, 会回到最大值500Hz 上。 (2)占空比调节
当按下键3,进入到外部中断0子程序,判断却是按下后,改变zkb (即占空比),然后改变定时器的初值。实时刷新,同频率调节,占空比也需要进行限制。
要注意的是频率和占空比的初始值都为50,我们定义的占空比为百分比的分子部分。
键盘处理子程序流程图入图5.2所示。当有按键按下时,进入到外部中断,然后暂时关闭外部中断,启动延时程序,以消除抖动。然后检测是哪个按键被按下,然后对频率跟占空比的变量做出相应的赋 值,并且将占空比的值送到数码管显示。并且对定时器0和定时器1
和1中断,中断程序结束。
图9 中断子程序流程图
6、源程序
#include
#define uchar unsigned char #define uint unsigned int
float fosc=12000000; //系统时钟频率
sbit key1=P1^0; //控制频率的增加
sbit key2=P1^1; //控制频率的减少 sbit key3=P1^2; //控制占空比的增加 sbit key4=P1^3;//控制占空比的减少 sbit lcdrs=P2^0; sbit lcdrw=P2^1; sbit lcden=P2^2; sbit clk=P1^4; uchar num;
uchar lcdtable[]={0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39}; uchar code table1[]="FRE(Hz):"; uchar code table2[]={"DUT(%):"};
uint zkb=50; //占空比初值,取值范围为0到100 uint fre=50; //频率初值,取值范围为50到500 uint time0_H,time0_L,time1_H,time1_L;
void delay(uint z) //延时程序 { uint i,j;
for(i=z;i--;i>0) for(j=110;j--;j>0); }
void write_com(uchar com) {
lcdrs=0; lcdrw=0; P0=com; delay(5); lcden=1; delay(5); lcden=0; }
void write_data(uchar date) {
lcdrs=1; lcdrw=0;
P0=date; delay(5); lcden=1; delay(5); lcden=0; }
void init() {
TMOD=0x11; //定时器0和1都工作在方式1 time0_H=0xB1; time0_L=0xE0; time1_H=0xD8; time1_L=0xF0;
TH0=0xB1; //定时器0装入初值,计数器计数20000次,20ms TL0=0xE0;
TH1=0xD8; //定时器1装入初值,计数器计数10000次,10ms TL1=0xF0;
IT0=1; //外部中断1为低电平触发 EX0=1; //开外部中断1
ET0=1; //定时器T0中断允许
ET1=1; //定时器T1中断允许 EA=1; //开启总中断 TR0=1; //开启定时器0
TR1=1; //开启定时器1 lcden=0;
write_com(0x38); write_com(0x0c); write_com(0x06); write_com(0x01); }
void main() {
init();
write_com(0x80);
for(num=0;num
write_data(table1[num]); delay(5); }
write_data(0x30+5); delay(5);
write_data(0x30+0); delay(5);
write_com(0x80+0x40); for(num=0;num
write_data(table2[num]); delay(5); }
delay(5);
write_data(0x30+5); delay(5);
write_data(0x30+0); while(1); }
void T0_time() interrupt 1 {
TR1=1; //开定时器1 TH0=time0_H; TL0=time0_L; clk=1; }
void T1_time() interrupt 3 {
TR1=0; //关定时器0 TH1=time1_H; TL1=time1_L; clk=0; }
void keyscan() interrupt 0 //外部中断0 {
uchar fre_bai,fre_shi,fre_ge,zkb_shi,zkb_ge; float TX,TZ;
EX0=0; //关中断 delay(10); //延时消抖 if(P1!=0x0F) if(key1==0) {
fre=fre+10; if(fre>500) fre=50; }
if(key2==0) {
fre=fre-10; if(fre
if(key3==0) {
zkb=zkb+1; if(zkb>99) zkb=1; }
if(key4==0) {
zkb=zkb-1; if(zkb
TX=(65536-fosc/(12.0*fre));
TZ=(65536-(fosc*zkb))/(12.0*100*fre); time0_H=(uint)TX/256; time0_L=(uint)TX%256; time1_H=(uint)TZ/256; time1_L=(uint)TZ%256; P1=0x0f; EX0=1; TR0=1; TR1=1;
fre_bai=fre/100; fre_shi=fre/10%10; fre_ge=fre%10;
write_com(0x80+0x08);
write_data(lcdtable[fre_bai]); delay(5);
write_data(lcdtable[fre_shi]); delay(5);
write_data(lcdtable[fre_ge]); delay(5);
zkb_shi=zkb/10; zkb_ge=zkb%10;
write_com(0x80+0x07+0x40); write_data(lcdtable[zkb_shi]);
delay(5);
write_data(lcdtable[zkb_ge]); delay(5); }
7、系统软件仿真
系统电路图如图1.3.1所示,系统单片机需要的HEX 文件有KEIL 软件生成,下载至单片机中,开始仿真,未按下任何键情况下,系统仿真结果为图7.1所示。
图7.1初始情况下的仿真结果
图中光标中周期为10ms, 与频率计和液晶显示一致,得到仿真结果图7.2
图7.2按下键1的仿真结果
图中光标测得的周期为10.0ms,fre=1/10.0ms=100Hz,与液晶显示大致一致。 当按下键1到显示频率为500HZ 时,测得示波器波形周期为2ms ,频率显示器为498HZ
图7.3
图中光标测得的周期为2ms,fre=1/2ms=500Hz,与液晶显示一致。 按下按键3,使得显示占空比为60%,得到仿真结果图7.4
图7.4按下键3的仿真结果
图中测得的占空比6.5ms/11ms=0.599,与液晶显示一致。
按下键4使得占空比为30%,得仿真结果图7.5
图7.5按下键4的仿真结果
图中光标测得的占空比2.25ms/7.50ms=0.3,与液晶显示一致。
8、性能分析
8.1 定时器中断分析
本次占空比可调的信号发生器的设计采用了定时器0和定时器1中断,定时器0中断用于控制信号的频率,定时器1用于控制信号的占空比。当调节输出信号的占空比时,信号的频率就不变;如果调节信号的频率,占空比就不变。设fre 表示输出的频率,zkb 表示输出的占空比,TX 为定时器0的计数次数,TZ 为定时器 1的计数次数。给TX 装入初值为:TX=(65536-fosc/(12.0*fre));给TZ 装入初值为TZ=(65536-(fosc*zkb))
/(12.0*100*fre);当定时器0计数到时,开启定时器1,定时器1开始计数,并且P1.4口输出高电平。当经过一个周期中高电平持续的时间后,定时器1计数时间就到了,程序进 入到定时器1中断执行,然后关掉定时器1,并且输出低电平。因为定时器0
中断是一
直开着的,当经过一个周期中低电平持续的时间后,定时器0计数又到了,进 入定时器0中断执行,如此循环。当改变fre 或者zkb 的时候,就可以相应改变输出信号的占空比跟频率。
8.2 系统性能分析
该系统实现占空比跟频率可调的信号发生器。占空比的调节范围是1%到99%,精度是1%,当达到上限值时,再次增加时,占空比归于1%,达到下限时,再次减少,占空比自动归于99%。频率的调节范围是50HZ 到500HZ ,精度是10HZ ,当达到上限值时,再次增加时,频率自动归于50HZ ,当达到下限值 时,再次减少时,频率自动归于500HZ 。总之,这次设计达到了设计要求,输出的信号稳定度高,误差小,并且方便调节,硬件电路简单。
8.3误差分析
本设计中主要的参数有设定的频率值和占空比,示波器上测得的频率值和占空比,以
及LCD 显示的频率值和占空比,可以看到设定的占空比和频率值总是和LCD 上显示的一样,出现误差的只有示波器上测得的,这是因为虽然设定的频率值和占空比总是整数,但是换算为定时器的初始值时,会出现小数部分,而程序直接将小数部分省略,由此便出现了误差。
9、心得体会
本次课题的设计题目是设计并实现占空比可调的信号发生器,主要实现占空比可调 并测出频率及占空比的值。经过一个星期的学习、设计、仿真、调试,最终得出结果,基本完成设计要求。
之前学过单片机课程,这次课程设计是选择用T0定时器控制方波的周期,T1定时器控制方波的占空比,外部中断0处理按键的。由于定时器和中断都是单片机课程重点,因此设计并不麻烦,外部中断处理按键请求则是初步接触,但设计起来并不困难。除此还用到LM032L 作为液晶显示,终于完成了LCD 的显示部分。
以前学习单片机都是用汇编语言来编程的,但这次课设要汇编语言咸的较为麻烦。参考网上的一些资料,觉得C 语言编程得到程序较简单明了,幸好有C 语言基础,所以编程学习起来还是蛮快的。其中涉及到对LM032L 作为液晶显示的编程,也卡住了我,通过学习,了解其显示字符的编程方法,也较轻松的解决了。还有,就是写程序时注意对中断的允/禁控制,每当中断进来之后,举要关闭中断,然后执行中断内部程序,最后要开中断,才能保证整个硬件系统的顺利运行。最后,就是要对按键进行延时去抖,这里的延时不能太短,才能看到液晶显示的数字较为流畅。
为了完成这个设计,这次用的是proteus 进行连接硬件原理图和进行仿真,用Keil 软件对程序进行编译,写进89C51芯片上。这两个软件操作起来还是很简单的,可能是之前做过几个课设都用到这些软件,因此对他们也是很熟悉了。
我觉得这次单片机课程设计很有意义,又让我多了解了一些关于单片机的运用,为了这次课设复习了相关单片机的知识,也额外的学习了如何运用C 语言来对单片机进行编程,不仅加深了对书本的学习,学会了从文献中找出解决之道,很有益处。并且也知道了自己身上所欠缺的,对单片机的编程还是显得不够熟练,特别是C 语言编程,要继续努力,把单片机学得更好。
10、参考文献
[1]姚燕南,薛钧义. 微型计算机原理与接口技术. 北京:高等教育出版社.2004
[2] 张鑫,华臻,陈书谦. 单片机原理及应用. 北京:电子工业出版社.2008
[3]徐维祥,刘旭敏. 单片微型计算机原理及应用. 大连:大连理工大学出版社.2006
[4] 李群芳,张士军,黄建. 单片微型计算机与接口技术(第2版). 北京:电子工业出版 社.2005
[5]汪道辉. 单片机系统设计与实践. 北京:电子工业出版社.2006
本科生能力拓展训练成绩评定表
指导教师签字:
年 月 日