工业控制 | 能源技术 | 汽车电子 | 通信网络 | 安防监控 | 智能电网 | 移动手持 | 无线技术 | 家用电器 | 数字广播 | 消费电子 | 应用软件 | 其他方案

全数字信号发生器

作者:dolphin 时间:2016-09-27


从图中可以看到,该电路主要由这样几部分组成:

(1)数码管显示部分,由单片机及相关外围电路构成5位数码管显示电路;

(2)按键部分,共有5个按键,

(3)EEPROM存储器,这里选择IIC接口的AT24C01A芯片;

(4)一只LED指示灯;

(5)输出管脚。

因此,单片机共要用到23只管脚。

引脚数量确定后,即可初步确定主芯片的型号,这里选用40引脚的AT89C51单片机。如果编程中发现内部资源(如片内RAM,ROM、定时器等)不够,可以更换为89C52等其他单片机,比较灵活。

右图是电源、输出部分,由图可见,仪器的输出接口采用两种方式,即集电极开路(OC门)方式和射极输出方式,其中OC门方式是很多以频率信号为输出的仪器的标准输出方式,如光电编码器、霍尔开关等。

一、键盘程序

本仪器需要调整的数值范围较大,因此,“增加”和“减少”键必须具有快速连加和快速连减的功能,否则调整速度太慢。这种键盘可以用多种方法来实现,关键在于设计一个正确的程序结构,左图是一种实现方法的流程图。

程序工作时,不断地扫描键盘,第一次扫描到有键按下后如常规键盘一样,进行键值处理,处理完毕,不等待键盘释放,直接退出键盘程序。当又一次执行到键盘程序,如果检测到键还被按着,就不再直接去键值处理程序,而是将一个计数器加1,直接返回主程序,如此循环,直到计数到一个定值(如200,表示键盘程序已被执行了200次),如果键还被按着,说明用户有连加(或连减)要求,程序即将计数器减去一个数值(如10),然后进行键值处理。这样,以后键盘程序 每执行10次,就执行一次键值处理程序,实现了第一次启动时间较长,以后快速连续动作的要求。如果检测到键已被释放,则清除所有标志,将计数器清零,准备下一次按键处理。

程序开始时定义了两个常量:QdSj和Ljsj,如下所示:

const uint Qdsj=500;/*与首次启动连加(减)功能的时间有关*/

const uint

Ljsj=30;/*与连加(减)的速度有关*/
这两个常量与第一次启动及连加、减的速度有关,具体数值应根据实际情况试验后确定。下面是部分键处理程序,注意其中这两个变量的使用。

void Key()/*键处理*/

{……

if(!KeyValue)

{

…无键按下,清除一切标志退出

)

if(KeyMark)/*第一次检测到按键吗?*/

{KeyCounter++;/*不是第-次(KeyMark已是1了)*/

if(Qdsj==KeyCounter)

/*连续按着已有Qdsj次了*/

(KeyCounter一=Lj sj;/*减去Ljsj次*/

Keyprocess(KeyValue,1);/*键值处理*/

}

else(re七urn; } /*如果按着还没有到Qdsj*/

}

else

/*第一次检测到有键按下*/

{mDelay(10);/*延时10毫秒*/

…再次检测

if(!KeyValue)