键盘调频的锯齿波发生器设计

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

设计题目:键盘调频的锯齿波发生器设计

一、要求

1、设计一个设计频率可调锯齿波发生器,至少要求有1Hz、500Hz、1KHz3

种频率。

2、用键盘控制3种锯齿波之间的切换。

二、分析

1、通过选定输出波形的幅度,调整相应的延时时间来控制输出锯齿波,通过控制延时

的长短来控制锯齿波的周期,从而控制频率可调。

2、设计好3个子程序,每个子程序对应不同频率的锯齿波。

3、设置按键初值,按键按下时,便把初值赋给n,用switch(n)语句调用不同的子程

序,以实现不同频率锯齿波之间的切换及输出。

4、利用DAC0832数模转换口输出信号。

三、设计

1、硬件设计(包括设计方案及说明、完整的硬件连接图等)

按键调频控制模块

数模转换模块

2、软件编程(包括流程图、完整的汇编源程序及其注释)流程图:

详细程序:

#include

#include

#include

#define DAC0832 XBYTE[0x7FFF] //定义DAC0832命令地址

#define COM8155 XBYTE[0x1000] //写命令地址口

#define PA8155 XBYTE[0x1001] //PA口读写地址口

#define PC8155 XBYTE[0x1003] //PC口读写地址口

#define uchar unsigned char

uchar key_current;

unsigned char key_read(void);

void delay1() // 1khz

{

unsigned int i;

for(i=0;i<5;i++)

{

}

}

void delay2() // 500hz

{

unsigned int i;

for(i=0;i<9;i++)

{

}

}

void delay3() // 1hz

{

unsigned int i;

for(i=0;i<800;i++)

{

}

}

void main()

{ unsigned char i;

unsigned char n;

COM8155=0x03;

while(1)

{

n=key_read();

switch(n)

{case 0x11: for(i=0;i<255;i++) //形成锯齿波,最大值为255 {

DAC0832=i;

i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++ ;i++;i++;// D/A转换输出

delay1(); // 延时

} break;

case 0x12: for(i=0;i<255;i++) //形成锯齿波,最大值为255

{

DAC0832=i;i++;i++;i++;i++;i++;i++;i++;i++; // D/A转换输出

delay2(); // 延时

} break;

case 0x14: for(i=0;i<255;i++) //形成锯齿波,最大值为255

{

DAC0832=i; // D/A转换输出

delay3(); // 延时

} break;

default: break;

}

}

}

unsigned char key_read(void) //键盘扫描函数

{

unsigned char i,scandata;

unsigned char col_out,row_in;

scandata=0x01; //设定扫描初值

PA8155=0x0F; //PA口做输出口

if((PC8155&0x0f)==0x00) //PC口做输入口

{

return key_current;

}

for(i=0;i<4;i++)

{

PA8155=scandata; //PA口低四位循环输出0,扫描键盘

col_out=0x0f&scandata; //存储PA口扫描的低四位

if((PC8155&0x0f)!=0x00) //再次检测PC口低四位是否有低电平

{

row_in=(PC8155&0x0f)<<4; //存储PC口的低四位

key_current=row_in+col_out; //储存被按下键的位置

return key_current;

}

scandata=_crol_(scandata,1); //循环左移

}

}

3、调试说明

1、用Keil软件编程并编译调试程序,反复调试,直到程序没有错误为止;

2、程序编译调试通过,生成.hex文件;

3、打开STC下载软件,将刚生成的.hex文件下载到单片机;

4、给单片机上电,程序在单片机上运行;

5、通过DAC0832D/A转换口输出锯齿波;

6、根据需要通过键盘分别选择1Hz、500Hz、1000Hz的锯齿波;

7、通过示波器可观察到500Hz、1000Hz的锯齿波,1Hz的是一个点在示波器显示屏上缓慢移动。

4、设计结果及错误分析

仿真效果图

相关文档
最新文档