机械与电子工程学院
接口技术课程设计报告
题目:多频率的正弦波低频信号发生器的
设计
摘 要: 本系统利用单片机AT89C51采用程序设计方法产生正弦波,再通过D/A转换器DAC0808将数字信号转换成模拟信号,滤波放大,最终由示波器显示出来,能产1Hz,10Hz,100Hz,1000Hz的波形。通过键盘来控制正弦波频率的变化,并通过数码管显示其数值,系统大致包括信号发生部分、数/模转换部分以及显示部分三部分,其中尤其对数/模转换部分和波形产生和变化部分进行详细论述。
关键词:单片机AT89C51、DAC0808、74HC573
目录
1.设计任务及要求 .......................................................................................................................... 1
2.方案选择 ...................................................................................................................................... 1
3.硬件系统设计 .............................................................................................................................. 1
3.1 总体系统设计思路 .......................................................................................................... 1
3.2 电路构成介绍 ................................................................................................................... 2
3.2.1单片机最小系统 ................................................................................................... 2
3.2.2波形产生电路设计 ............................................................................................... 3
3.2.3频率显示电路的设计 ........................................................................................... 4
3.2.4键盘显示电路的设计 ........................................................................................... 4
3.2.5系统整体电路 ....................................................................................................... 5
4. 软件系统设计 ............................................................................................................................ 6
5.系统调试与存在的问题 .............................................................................................................. 6
5.1 Proteus仿真结果 ............................................................................................................... 6
5.2 结果分析 .......................................................................................................................... 9
5.3 存在问题 .......................................................................................................................... 9
6.心得体会 ...................................................................................................................................... 9
参考文献 ........................................................................................................................................ 10
附录1:程序 ................................................................................................................................. 11
1.设计任务及要求
(1)设计任务为多频率的正弦波低频信号发生器
(2)要求正弦波低频信号发生器产生1Hz,10Hz,100Hz,1000Hz的波形,频率可由开关选择。
2.方案选择
信号发生电路方案论证:
方案一:通过单片机控制D/A,输出正弦波。此方案输出的波形不够稳定,抗干扰能力弱,不易调节。但此方案电路简单、成本低。
方案二:使用传统的锁相频率合成方法。通过芯片IC145152,压控振荡器搭接的锁相环电路输出稳定性极好的正弦波。此方案,电路复杂,干扰因素多,不易实现。
方案三:利用MAX038芯片组成的电路输出波形。MAX038是精密高频波形产生电路,能够产生准确的正弦波周期性波形。但此方案成本高,程序复杂度高。
综合考虑以上三种方案,本设计选择方案一。
3.硬件系统设计
3.1 总体系统设计思路
本设计系统由主控制模块、数模转换模块、显示模块、控制模块共四个模块组成。主控芯片使用AT89C51单片机,数模转换模块采用DAC0808实现,显示模块采用4个数码管构成,利用键盘控制正弦波频率的改变。系统整体模块如图1所示。
图1系统整体模块
1.设计任务及要求
(1)设计任务为多频率的正弦波低频信号发生器
(2)要求正弦波低频信号发生器产生1Hz,10Hz,100Hz,1000Hz的波形,频率可由开关选择。
2.方案选择
信号发生电路方案论证:
方案一:通过单片机控制D/A,输出正弦波。此方案输出的波形不够稳定,抗干扰能力弱,不易调节。但此方案电路简单、成本低。
方案二:使用传统的锁相频率合成方法。通过芯片IC145152,压控振荡器搭接的锁相环电路输出稳定性极好的正弦波。此方案,电路复杂,干扰因素多,不易实现。
方案三:利用MAX038芯片组成的电路输出波形。MAX038是精密高频波形产生电路,能够产生准确的正弦波周期性波形。但此方案成本高,程序复杂度高。
综合考虑以上三种方案,本设计选择方案一。
3.硬件系统设计
3.1 总体系统设计思路
本设计系统由主控制模块、数模转换模块、显示模块、控制模块共四个模块组成。主控芯片使用AT89C51单片机,数模转换模块采用DAC0808实现,显示模块采用4个数码管构成,利用键盘控制正弦波频率的改变。系统整体模块如图1所示。
图1系统整体模块
3.2 电路构成介绍
利用单片机AT89C51采用程序设计方法产生正弦波,再通过D/A转换器DAC0808将数字信号转换成模拟信号,滤波放大,最终由示波器显示出来,能产1Hz,10Hz,100Hz,1000Hz的波形。通过键盘来控制正弦波频率的变化,并通过数码管显示其数值,系统大致包括信号发生部分、数/模转换部分以及显示部分三部分,其中尤其对数/模转换部分和波形产生和变化部分进行详细论述。 3.2.1单片机最小系统
AT89C51是片内有ROM/EPROM的单片机,因此,这种芯片构成的最小系统简单﹑可靠。用AT89C51单片机构成最小应用系统时,只要将单片机接上时钟电路和复位电路即可,如图 89C51单片机最小系统所示。由于集成度的限制,最小应用系统只能用作一些小型的控制单元。其应用特点:
(1) 有可供用户使用的大量I/O口线。 (2) 内部存储器容量有限。 (3) 应用系统开发具有特殊性。
图2 AT89C51单片机最小系统
3.2.2波形产生电路设计
由单片机采用编程方法产生正弦波波形、通过D/A转换模块DAC0808在进过滤波放大之后输出。单片机的P2口连接DAC0808的八位数据输入端,DAC0808的输出端接放大器,经过放大后输出所要的波形。DAC0808的为八位数据并行输入的,DAC0808的引脚图如图3所示,其结构图如图4所示:
图3 DAC0808引脚图
图4 DAC0808的内部结构
其连接电路图如下:
图5 波形产生电路
如图所示,VEE接-5V电压,COMP端与VEE之间接0.1uF电容,VREF(+)通过5K电阻接+5V电源,VREF(-)接地。输出端IOUT连接运算放大器反向输入端。运算放大器同相输入端接地。
3.2.3频率显示电路的设计
通过4个74HC753连接4个数码管显示输出的正弦波的频率,其电路图如下:
图6 正弦波频率显示
如上图所示,74HC753输入端接单片机的P0口,其LE端分别接单片机的P3.1—P1.4。通过软件控制可以显示波形的频率。
3.2.4键盘显示电路的设计
由于本系统所用按键少,其连接电路图如下:
图7 键盘
图中独立键盘引出的线接单片机的P1.0-P1.1,开关的功能如图所示。P11每按一次频率×10,P22每按一次频率÷10。
3.2.5系统整体电路
系统整体电路图如图8所示;
图8 整体电路图
单片机AT89C51采用程序设计方法产生正弦波,再通过D/A转换器DAC0808将数字信号转换成模拟信号,最终由示波器显示出来,能产1Hz,10Hz,100Hz,1000Hz的波形。通过键盘来控制正弦波频率的变化,并通过数码管显示其数值。
4.软件系统设计
软件的流程图:
本系统采用AT89C51单片机,用编程的方法来产生正弦波波形,设置初始值,并通过编程来切换波形频率的改变。
具体功能有:(1)正弦波波形的显示;(2)频率增减。
软件调试后,通过编程器下载到AT89C51芯片中,首先初始化函数,接着键盘扫描,定时器初始化,分离函数,最后显示出正弦波频率。
软件的流程图如下:
图9 软件的流程图
5.系统调试与存在的问题
5.1 Proteus仿真结果
仿真结果如下所示:
图10 频率为1Hz时波形图
AT89C51采用程序设计方法产生正弦波,再通过D/A转换器DAC0808将数字信号转换成模拟信号,最终由示波器显示出来,能产1Hz。
图11 频率为10Hz时波形图
AT89C51采用程序设计方法产生正弦波,再通过D/A转换器DAC0808将数字信号转换成模拟信号,最终由示波器显示出来,能产10Hz。
图12 频率为100Hz时波形图
AT89C51采用程序设计方法产生正弦波,再通过D/A转换器DAC0808将数字信号转换成模拟信号,最终由示波器显示出来,能产100Hz。
图13 频率为1000Hz时波形图
AT89C51采用程序设计方法产生正弦波,再通过D/A转换器DAC0808将数字信号转换成模拟信号,最终由示波器显示出来,能产1000Hz。
5.2 结果分析
本系统通过对AT89C51加载程序使其输出正弦波波形,同时可以通过按键正弦波频率。设置初始频率为1Hz,当第一次按下K键时,选择要改变正弦波的频率为10Hz,第二次按下K键时,选择要改变正弦波的频率为100Hz,第三次按下K键时,选择要改变正弦波的频率为1000Hz,第四次按下K键时,正弦波的频率恢复到初始状态1Hz,同时输出各个频率对应的波形,能正确显示波形及其频率。
5.3 存在问题
刚开始用4位数码管显示的时候,正弦波频率到了100Hz和1000Hz的时候数码管就会不停地闪烁。之后换用74HC573连接静态数码管,前面的问题得到解决,不过当正弦波频率到了1000Hz以后,有时候按下×10键就回不到程序要求的1Hz。
6.心得体会
在本次设计的过程中,我发现很多的问题,虽然以前还做过这样的设计但这次设计真的让我长进了很多。对于单片机设计,其硬件电路是比较简单的,主要是解决程序设计的问题,而程序设计是一个很灵活的东西,它反映了你解决问题的逻辑思维和创新能力,它才是一个设计的灵魂所在。因此在整个设计过程中大部分时间是用在程序上面的。很多子程序是可以借鉴书本上的,但怎样衔接各个子程序才是关键的问题所在,这需要对单片机的结构很熟悉。因此可以说单片机的设计是软件和硬件的结合,二者是密不可分的。
要设计一个成功的电路,必须要有耐心,要有坚持的毅力。在整个电路的设计过程中,花费时间最多的是各个单元电路的连接及电路的细节设计上,如在多种方案的选择中,我们仔细比较分析其原理以及可行的原因。这就要求我们对硬件系统中各组件部分有充分透彻的理解和研究,并能对之灵活应用。完成这次设计后,我在书本理论知识的基础上又有了更深层次的理解。
最后还要在此感谢各位毕业设计的指导老师们和我的组员们,他们在整个过程中都给予了我充分的帮助与支持。
参考文献
[1] 郭文川主编.单片机原理与接口技术.中国农业出版社,2007.8
[2] 郭天祥.51单片机C语言教程.北京: 电子工业出版社,2009.1
[3] 郑学坚,周斌.微型计算机
附录1:程序
#include
#include
#define uchar unsigned char
uchar code SINX[]={
0x7F,0x82,0x85,0x88,0x8B,0x8F,0x92,0x95,0x98,0x9B,0x9E,0xA1,0xA4,0xA7,0xAA,0xAD,
0xB0,0xB3,0xB6,0xB8,0xBB,0xBE,0xC1,0xC3,0xC6,0xC8,0xCB,0xCD,0xD0,0xD2,0xD5,0xD7,
0xD9,0xDB,0xDD,0xE0,0xE2,0xE4,0xE5,0xE7,0xE9,0xEB,0xEC,0xEE,0xEF,0xF1,0xF2,0xF4,
0xF5,0xF6,0xF7,0xF8,0xF9,0xFA,0xFB,0xFB,0xFC,0xFD,0xFD,0xFE,0xFE,0xFE,0xFE,0xFE,
0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFD,0xFD,0xFC,0xFB,0xFB,0xFA,0xF9,0xF8,0xF7,0xF6,
0xF5,0xF4,0xF2,0xF1,0xEF,0xEE,0xEC,0xEB,0xE9,0xE7,0xE5,0xE4,0xE2,0xE0,0xDD,0xDB,
0xD9,0xD7,0xD5,0xD2,0xD0,0xCD,0xCB,0xC8,0xC6,0xC3,0xC1,0xBE,0xBB,0xB8,0xB6,0xB3,
0xB0,0xAD,0xAA,0xA7,0xA4,0xA1,0x9E,0x9B,0x98,0x95,0x92,0x8F,0x8B,0x88,0x85,0x82,
0x7F,0x7C,0x79,0x76,0x73,0x6F,0x6C,0x69,0x66,0x63,0x60,0x5D,0x5A,0x57,0x54,0x51,
0x4E,0x4B,0x48,0x46,0x43,0x40,0x3D,0x3B,0x38,0x36,0x33,0x31,0x2E,0x2C,0x29,0x27,
0x25,0x23,0x21,0x1E,0x1C,0x1A,0x19,0x17,0x15,0x13,0x12,0x10,0x0F,0x0D,0x0C,0x0A,
0x09,0x08,0x07,0x06,0x05,0x04,0x03,0x03,0x02,0x01,0x01,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x02,0x03,0x03,0x04,0x05,0x06,0x07,0x08,
0x09,0x0A,0x0C,0x0D,0x0F,0x10,0x12,0x13,0x15,0x17,0x19,0x1A,0x1C,0x1E,0x21,0x23,
0x25,0x27,0x29,0x2C,0x2E,0x31,0x33,0x36,0x38,0x3B,0x3D,0x40,0x43,0x46,0x48,0x4B,
0x4E,0x51,0x54,0x57,0x5A,0x5D,0x60,0x63,0x66,0x69,0x6C,0x6F,0x73,0x76,0x79,0x7C };//正弦波信号
#define uint unsigned int
#define Fosc 11059200 //晶振频率11059200
#define ALL 65536 //最长基数长度65536
uchar LED1_BUF=0xff,LED2_BUF=0xff,LED3_BUF=0xff,LED4_BUF=0xff; //数码管显示
uchar TIMER0_H,TIMER0_L; //定时器0的初值设置
uchar NUM=0; //计数变量 uint FREQ=1;
uint a;
//bit FLAG=0; //频率调节标志
sbit F_UP=P1^0;
sbit F_DOWN=P1^1;
void delay(uchar t);
void display(); //
void calculate_F();
void discrete();
void key_scan();
void init(); //
void timer0(); //
void delay(uchar t)
{
uchar i,j;
//频率上调按钮 //频率下调按钮 //延时函数 显示函数 //频率变化,计算定时初值 //分离频率用于显示 //键盘扫描函数 初始化函数 定时器0的终端服务函数 //函数功能:延时
while(t--)
{
for(i=0;i
for(j=0;j
;
}
}
void calculate_F()
出定时器0的初值
{
float temp;
temp=ALL-Fosc/11.0592/256/FREQ; TIMER0_H=(uint)temp/256; TIMER0_L=(uint)temp%256; }
void key_scan()
{
//a=k; //函数功能:键盘扫描函数 //函数功能:频率计数函数,当频率变化,计算
if(F_UP==0) {delay(5); if(F_UP==0) {
TR0=0; a++;
//k=a;
while(F_UP==0); if(a>3) {
a=0; }
//FLAG=1;
}
}
if(a==0)
{FREQ=1;}
if(a==1)
{FREQ=10;} if(a==2)
{FREQ=100;}
if(a==3)
{FREQ=1000;}
void init()
{
TMOD=0x01;
TH0=TIMER0_H;
TL0=TIMER0_L;
ET0=1;
EA=1;
TR0=1;
calculate_F();
discrete();
display();
}
void discrete()
{
//函数功能:定时器初始化函数//函数功能:参数分离函数 16
LED1_BUF=FREQ/1000;
LED2_BUF=FREQ/100%10;
LED3_BUF=FREQ%100/10;
LED4_BUF=FREQ%10;
}
uchar
DSY_CODE[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};
void display() //函数功能:数码管显示函数
{
P3=0Xf1;
P0=DSY_CODE[LED1_BUF];
delay(5);
P3=0xf2;
P0=DSY_CODE[LED2_BUF];
delay(5);
P3=0xf4;
P0=DSY_CODE[LED3_BUF];
delay(5);
P3=0xf8;
17 code
P0=DSY_CODE[LED4_BUF];
delay(5);
}
void timer0() interrupt 1 //函数功能:定时器0中断函数 {
//TR0=0;
TH0=TIMER0_H;
TL0=TIMER0_L;
P2=SINX[NUM];
NUM++;
//TR0=1;
}
main() //函数功能:主程序入口
{
init();
while(1)
{
key_scan();
18
calculate_F(); discrete(); display(); }
}
19
机械与电子工程学院
接口技术课程设计报告
题目:多频率的正弦波低频信号发生器的
设计
摘 要: 本系统利用单片机AT89C51采用程序设计方法产生正弦波,再通过D/A转换器DAC0808将数字信号转换成模拟信号,滤波放大,最终由示波器显示出来,能产1Hz,10Hz,100Hz,1000Hz的波形。通过键盘来控制正弦波频率的变化,并通过数码管显示其数值,系统大致包括信号发生部分、数/模转换部分以及显示部分三部分,其中尤其对数/模转换部分和波形产生和变化部分进行详细论述。
关键词:单片机AT89C51、DAC0808、74HC573
目录
1.设计任务及要求 .......................................................................................................................... 1
2.方案选择 ...................................................................................................................................... 1
3.硬件系统设计 .............................................................................................................................. 1
3.1 总体系统设计思路 .......................................................................................................... 1
3.2 电路构成介绍 ................................................................................................................... 2
3.2.1单片机最小系统 ................................................................................................... 2
3.2.2波形产生电路设计 ............................................................................................... 3
3.2.3频率显示电路的设计 ........................................................................................... 4
3.2.4键盘显示电路的设计 ........................................................................................... 4
3.2.5系统整体电路 ....................................................................................................... 5
4. 软件系统设计 ............................................................................................................................ 6
5.系统调试与存在的问题 .............................................................................................................. 6
5.1 Proteus仿真结果 ............................................................................................................... 6
5.2 结果分析 .......................................................................................................................... 9
5.3 存在问题 .......................................................................................................................... 9
6.心得体会 ...................................................................................................................................... 9
参考文献 ........................................................................................................................................ 10
附录1:程序 ................................................................................................................................. 11
1.设计任务及要求
(1)设计任务为多频率的正弦波低频信号发生器
(2)要求正弦波低频信号发生器产生1Hz,10Hz,100Hz,1000Hz的波形,频率可由开关选择。
2.方案选择
信号发生电路方案论证:
方案一:通过单片机控制D/A,输出正弦波。此方案输出的波形不够稳定,抗干扰能力弱,不易调节。但此方案电路简单、成本低。
方案二:使用传统的锁相频率合成方法。通过芯片IC145152,压控振荡器搭接的锁相环电路输出稳定性极好的正弦波。此方案,电路复杂,干扰因素多,不易实现。
方案三:利用MAX038芯片组成的电路输出波形。MAX038是精密高频波形产生电路,能够产生准确的正弦波周期性波形。但此方案成本高,程序复杂度高。
综合考虑以上三种方案,本设计选择方案一。
3.硬件系统设计
3.1 总体系统设计思路
本设计系统由主控制模块、数模转换模块、显示模块、控制模块共四个模块组成。主控芯片使用AT89C51单片机,数模转换模块采用DAC0808实现,显示模块采用4个数码管构成,利用键盘控制正弦波频率的改变。系统整体模块如图1所示。
图1系统整体模块
1.设计任务及要求
(1)设计任务为多频率的正弦波低频信号发生器
(2)要求正弦波低频信号发生器产生1Hz,10Hz,100Hz,1000Hz的波形,频率可由开关选择。
2.方案选择
信号发生电路方案论证:
方案一:通过单片机控制D/A,输出正弦波。此方案输出的波形不够稳定,抗干扰能力弱,不易调节。但此方案电路简单、成本低。
方案二:使用传统的锁相频率合成方法。通过芯片IC145152,压控振荡器搭接的锁相环电路输出稳定性极好的正弦波。此方案,电路复杂,干扰因素多,不易实现。
方案三:利用MAX038芯片组成的电路输出波形。MAX038是精密高频波形产生电路,能够产生准确的正弦波周期性波形。但此方案成本高,程序复杂度高。
综合考虑以上三种方案,本设计选择方案一。
3.硬件系统设计
3.1 总体系统设计思路
本设计系统由主控制模块、数模转换模块、显示模块、控制模块共四个模块组成。主控芯片使用AT89C51单片机,数模转换模块采用DAC0808实现,显示模块采用4个数码管构成,利用键盘控制正弦波频率的改变。系统整体模块如图1所示。
图1系统整体模块
3.2 电路构成介绍
利用单片机AT89C51采用程序设计方法产生正弦波,再通过D/A转换器DAC0808将数字信号转换成模拟信号,滤波放大,最终由示波器显示出来,能产1Hz,10Hz,100Hz,1000Hz的波形。通过键盘来控制正弦波频率的变化,并通过数码管显示其数值,系统大致包括信号发生部分、数/模转换部分以及显示部分三部分,其中尤其对数/模转换部分和波形产生和变化部分进行详细论述。 3.2.1单片机最小系统
AT89C51是片内有ROM/EPROM的单片机,因此,这种芯片构成的最小系统简单﹑可靠。用AT89C51单片机构成最小应用系统时,只要将单片机接上时钟电路和复位电路即可,如图 89C51单片机最小系统所示。由于集成度的限制,最小应用系统只能用作一些小型的控制单元。其应用特点:
(1) 有可供用户使用的大量I/O口线。 (2) 内部存储器容量有限。 (3) 应用系统开发具有特殊性。
图2 AT89C51单片机最小系统
3.2.2波形产生电路设计
由单片机采用编程方法产生正弦波波形、通过D/A转换模块DAC0808在进过滤波放大之后输出。单片机的P2口连接DAC0808的八位数据输入端,DAC0808的输出端接放大器,经过放大后输出所要的波形。DAC0808的为八位数据并行输入的,DAC0808的引脚图如图3所示,其结构图如图4所示:
图3 DAC0808引脚图
图4 DAC0808的内部结构
其连接电路图如下:
图5 波形产生电路
如图所示,VEE接-5V电压,COMP端与VEE之间接0.1uF电容,VREF(+)通过5K电阻接+5V电源,VREF(-)接地。输出端IOUT连接运算放大器反向输入端。运算放大器同相输入端接地。
3.2.3频率显示电路的设计
通过4个74HC753连接4个数码管显示输出的正弦波的频率,其电路图如下:
图6 正弦波频率显示
如上图所示,74HC753输入端接单片机的P0口,其LE端分别接单片机的P3.1—P1.4。通过软件控制可以显示波形的频率。
3.2.4键盘显示电路的设计
由于本系统所用按键少,其连接电路图如下:
图7 键盘
图中独立键盘引出的线接单片机的P1.0-P1.1,开关的功能如图所示。P11每按一次频率×10,P22每按一次频率÷10。
3.2.5系统整体电路
系统整体电路图如图8所示;
图8 整体电路图
单片机AT89C51采用程序设计方法产生正弦波,再通过D/A转换器DAC0808将数字信号转换成模拟信号,最终由示波器显示出来,能产1Hz,10Hz,100Hz,1000Hz的波形。通过键盘来控制正弦波频率的变化,并通过数码管显示其数值。
4.软件系统设计
软件的流程图:
本系统采用AT89C51单片机,用编程的方法来产生正弦波波形,设置初始值,并通过编程来切换波形频率的改变。
具体功能有:(1)正弦波波形的显示;(2)频率增减。
软件调试后,通过编程器下载到AT89C51芯片中,首先初始化函数,接着键盘扫描,定时器初始化,分离函数,最后显示出正弦波频率。
软件的流程图如下:
图9 软件的流程图
5.系统调试与存在的问题
5.1 Proteus仿真结果
仿真结果如下所示:
图10 频率为1Hz时波形图
AT89C51采用程序设计方法产生正弦波,再通过D/A转换器DAC0808将数字信号转换成模拟信号,最终由示波器显示出来,能产1Hz。
图11 频率为10Hz时波形图
AT89C51采用程序设计方法产生正弦波,再通过D/A转换器DAC0808将数字信号转换成模拟信号,最终由示波器显示出来,能产10Hz。
图12 频率为100Hz时波形图
AT89C51采用程序设计方法产生正弦波,再通过D/A转换器DAC0808将数字信号转换成模拟信号,最终由示波器显示出来,能产100Hz。
图13 频率为1000Hz时波形图
AT89C51采用程序设计方法产生正弦波,再通过D/A转换器DAC0808将数字信号转换成模拟信号,最终由示波器显示出来,能产1000Hz。
5.2 结果分析
本系统通过对AT89C51加载程序使其输出正弦波波形,同时可以通过按键正弦波频率。设置初始频率为1Hz,当第一次按下K键时,选择要改变正弦波的频率为10Hz,第二次按下K键时,选择要改变正弦波的频率为100Hz,第三次按下K键时,选择要改变正弦波的频率为1000Hz,第四次按下K键时,正弦波的频率恢复到初始状态1Hz,同时输出各个频率对应的波形,能正确显示波形及其频率。
5.3 存在问题
刚开始用4位数码管显示的时候,正弦波频率到了100Hz和1000Hz的时候数码管就会不停地闪烁。之后换用74HC573连接静态数码管,前面的问题得到解决,不过当正弦波频率到了1000Hz以后,有时候按下×10键就回不到程序要求的1Hz。
6.心得体会
在本次设计的过程中,我发现很多的问题,虽然以前还做过这样的设计但这次设计真的让我长进了很多。对于单片机设计,其硬件电路是比较简单的,主要是解决程序设计的问题,而程序设计是一个很灵活的东西,它反映了你解决问题的逻辑思维和创新能力,它才是一个设计的灵魂所在。因此在整个设计过程中大部分时间是用在程序上面的。很多子程序是可以借鉴书本上的,但怎样衔接各个子程序才是关键的问题所在,这需要对单片机的结构很熟悉。因此可以说单片机的设计是软件和硬件的结合,二者是密不可分的。
要设计一个成功的电路,必须要有耐心,要有坚持的毅力。在整个电路的设计过程中,花费时间最多的是各个单元电路的连接及电路的细节设计上,如在多种方案的选择中,我们仔细比较分析其原理以及可行的原因。这就要求我们对硬件系统中各组件部分有充分透彻的理解和研究,并能对之灵活应用。完成这次设计后,我在书本理论知识的基础上又有了更深层次的理解。
最后还要在此感谢各位毕业设计的指导老师们和我的组员们,他们在整个过程中都给予了我充分的帮助与支持。
参考文献
[1] 郭文川主编.单片机原理与接口技术.中国农业出版社,2007.8
[2] 郭天祥.51单片机C语言教程.北京: 电子工业出版社,2009.1
[3] 郑学坚,周斌.微型计算机
附录1:程序
#include
#include
#define uchar unsigned char
uchar code SINX[]={
0x7F,0x82,0x85,0x88,0x8B,0x8F,0x92,0x95,0x98,0x9B,0x9E,0xA1,0xA4,0xA7,0xAA,0xAD,
0xB0,0xB3,0xB6,0xB8,0xBB,0xBE,0xC1,0xC3,0xC6,0xC8,0xCB,0xCD,0xD0,0xD2,0xD5,0xD7,
0xD9,0xDB,0xDD,0xE0,0xE2,0xE4,0xE5,0xE7,0xE9,0xEB,0xEC,0xEE,0xEF,0xF1,0xF2,0xF4,
0xF5,0xF6,0xF7,0xF8,0xF9,0xFA,0xFB,0xFB,0xFC,0xFD,0xFD,0xFE,0xFE,0xFE,0xFE,0xFE,
0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFD,0xFD,0xFC,0xFB,0xFB,0xFA,0xF9,0xF8,0xF7,0xF6,
0xF5,0xF4,0xF2,0xF1,0xEF,0xEE,0xEC,0xEB,0xE9,0xE7,0xE5,0xE4,0xE2,0xE0,0xDD,0xDB,
0xD9,0xD7,0xD5,0xD2,0xD0,0xCD,0xCB,0xC8,0xC6,0xC3,0xC1,0xBE,0xBB,0xB8,0xB6,0xB3,
0xB0,0xAD,0xAA,0xA7,0xA4,0xA1,0x9E,0x9B,0x98,0x95,0x92,0x8F,0x8B,0x88,0x85,0x82,
0x7F,0x7C,0x79,0x76,0x73,0x6F,0x6C,0x69,0x66,0x63,0x60,0x5D,0x5A,0x57,0x54,0x51,
0x4E,0x4B,0x48,0x46,0x43,0x40,0x3D,0x3B,0x38,0x36,0x33,0x31,0x2E,0x2C,0x29,0x27,
0x25,0x23,0x21,0x1E,0x1C,0x1A,0x19,0x17,0x15,0x13,0x12,0x10,0x0F,0x0D,0x0C,0x0A,
0x09,0x08,0x07,0x06,0x05,0x04,0x03,0x03,0x02,0x01,0x01,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x02,0x03,0x03,0x04,0x05,0x06,0x07,0x08,
0x09,0x0A,0x0C,0x0D,0x0F,0x10,0x12,0x13,0x15,0x17,0x19,0x1A,0x1C,0x1E,0x21,0x23,
0x25,0x27,0x29,0x2C,0x2E,0x31,0x33,0x36,0x38,0x3B,0x3D,0x40,0x43,0x46,0x48,0x4B,
0x4E,0x51,0x54,0x57,0x5A,0x5D,0x60,0x63,0x66,0x69,0x6C,0x6F,0x73,0x76,0x79,0x7C };//正弦波信号
#define uint unsigned int
#define Fosc 11059200 //晶振频率11059200
#define ALL 65536 //最长基数长度65536
uchar LED1_BUF=0xff,LED2_BUF=0xff,LED3_BUF=0xff,LED4_BUF=0xff; //数码管显示
uchar TIMER0_H,TIMER0_L; //定时器0的初值设置
uchar NUM=0; //计数变量 uint FREQ=1;
uint a;
//bit FLAG=0; //频率调节标志
sbit F_UP=P1^0;
sbit F_DOWN=P1^1;
void delay(uchar t);
void display(); //
void calculate_F();
void discrete();
void key_scan();
void init(); //
void timer0(); //
void delay(uchar t)
{
uchar i,j;
//频率上调按钮 //频率下调按钮 //延时函数 显示函数 //频率变化,计算定时初值 //分离频率用于显示 //键盘扫描函数 初始化函数 定时器0的终端服务函数 //函数功能:延时
while(t--)
{
for(i=0;i
for(j=0;j
;
}
}
void calculate_F()
出定时器0的初值
{
float temp;
temp=ALL-Fosc/11.0592/256/FREQ; TIMER0_H=(uint)temp/256; TIMER0_L=(uint)temp%256; }
void key_scan()
{
//a=k; //函数功能:键盘扫描函数 //函数功能:频率计数函数,当频率变化,计算
if(F_UP==0) {delay(5); if(F_UP==0) {
TR0=0; a++;
//k=a;
while(F_UP==0); if(a>3) {
a=0; }
//FLAG=1;
}
}
if(a==0)
{FREQ=1;}
if(a==1)
{FREQ=10;} if(a==2)
{FREQ=100;}
if(a==3)
{FREQ=1000;}
void init()
{
TMOD=0x01;
TH0=TIMER0_H;
TL0=TIMER0_L;
ET0=1;
EA=1;
TR0=1;
calculate_F();
discrete();
display();
}
void discrete()
{
//函数功能:定时器初始化函数//函数功能:参数分离函数 16
LED1_BUF=FREQ/1000;
LED2_BUF=FREQ/100%10;
LED3_BUF=FREQ%100/10;
LED4_BUF=FREQ%10;
}
uchar
DSY_CODE[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};
void display() //函数功能:数码管显示函数
{
P3=0Xf1;
P0=DSY_CODE[LED1_BUF];
delay(5);
P3=0xf2;
P0=DSY_CODE[LED2_BUF];
delay(5);
P3=0xf4;
P0=DSY_CODE[LED3_BUF];
delay(5);
P3=0xf8;
17 code
P0=DSY_CODE[LED4_BUF];
delay(5);
}
void timer0() interrupt 1 //函数功能:定时器0中断函数 {
//TR0=0;
TH0=TIMER0_H;
TL0=TIMER0_L;
P2=SINX[NUM];
NUM++;
//TR0=1;
}
main() //函数功能:主程序入口
{
init();
while(1)
{
key_scan();
18
calculate_F(); discrete(); display(); }
}
19