函数信号发生器的设计与实现 (1)资料 下载本文

内容发布更新时间 : 2024/12/23 13:00:15星期一 下面是文章的全部内容请认真阅读。

如上图所示,12864的八位数据端接单片机的P0口,其三个使能端RS、RW、E分别接单片机的P2.2—P2.4。通过软件控制液晶屏可以显示波形以及波形的幅度和频率。

带中文字库的128X64是一种具有4位/8位并行、2线或3线串行多种接口方式,内部含有国标一级、二级简体中文字库的点阵图形液晶显示模块;其显示分辨率为128×64, 内置8192个16*16点汉字,和128个16*8点ASCII字符集.利用该模块灵活的接口方式和简单、方便的操作指令,可构成全中文人机交互图形界面。可以显示8×4行16×16点阵的汉字. 也可完成图形显示.低电压低功耗是其又一显著特点。

LCD12864基本特性:

(1)、低电源电压(VDD:+3.0--+5.5V)(2)、显示分辨率:128×64点 (3)、内置汉字字库,提供8192个16×16点阵汉字(简繁体可选) (4)、内置 128个16×8点阵字符 (5)、2MHZ时钟频率 (6)、显示方式:STN、半透、正显 (7)、驱动方式:1/32DUTY,1/5BIAS (8)、视角方向:6点 (9)、背光方式:侧部高亮白色LED,功耗仅为普通LED的1/5—1/10 (10)、通讯方式:串行、并口可选 (11)、内置DC-DC转换电路,无需外加负压 (12)、无需片选信号,简化软件设计(13)、工作温度: 0℃ - +55℃ ,存储温度: -20℃-+60℃

图(5) 数码管显示模块

通过一位数码管显示波形类型(1-3).

(3)按键显示模块的设计

本系统采用独立按键,其连接电路图如下:

图(6) 按键显示模块

图中四个按键引出的四个线分别接单片机的P3.2—P3.6口,如图KEY1用来切换输出波形、KEY2和KEY3用来调节频率的加减,KEY4和KEY5用来调节幅度的加减。当按KEY2时输出波形的频率增加,按KEY3时输出波形的频率减小。当按KEY4时输出波形的幅度增加,按KEY5时输出波形的幅度减小。

软件设计流程:

本系统采用AT89C51单片机,用编程的方法来产生三种波形,并通过编程 来切换三种波形以及波形频率的改变。

具体功能有:(1)各个波形的切换;(2)各种参数的设定;(3)频率增减等。

软件调通后,通过编程器下载到AT89C51芯片中,然后插到系统中即可独立完成所有的控制。

软件的流程图如下:

开始

I2C总线协议 主函数

初始化 根据相应的wave值进入相应的if语句 wave=1 wave=2 wave=3 输出三角波液晶显示 输出正弦波液晶显示 输出方波液晶显示 图(7)软件的流程图

部分程序代码: hnh.c文件:

#include #include #include\

#define uchar unsigned char #define uint unsigned int #define _Nop() _nop_()

#define AddW 0x90 #define AddR 0x91

sbit SDA=P2^0;

sbit SCL=P2^1;

sbit key1=P3^2; sbit key2=P3^3; sbit key3=P3^4; sbit key4=P3^5; sbit key5=P3^6;

bit back;

uchar wave=0; uchar f=1; uchar A1=10; uchar A2=1; uint num=0;

unsigned char code table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,};

unsigned char code fangbo[]=

{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,255,255,255,255,255,255,255,255,255,255, 255,255,255,255,255,255,255,255,255,255,255,255, 255,255,255,255,255,255,255,255,255,255,} ;

unsigned char code sanjiao[]

={ 0,4,8,12,16,20,24,28,32,36,40,44,48,52,56, 60,64,68,72,76,80,84,88,92,96,100,104, 108,112,116,120,124,128,124,120,116,112, 108,104,100,96,92,88,84,80,76,72,68,64,

60,56,52,48,44,40,36,32,28,24,20,16,12,8,4,0,};

unsigned char code sin[]

={135,145,158,167,176,188,199,209,218,226, 234,240,245,249,252,254,254,253,251,247, 243,237,230,222,213,204,193,182,170,158, 146,133,121,108,96,84,72,61,50,41,32,24, 17,11,7,3,1,0,0,2,5,9,14,20,28,36,45,55,66, 78,90,102,114,128 } ;

void delay1(uint z) {

uint x,y; for(x=z;x>0;x--) for(y=60;y>0;y--); }

共阴 //