键盘调频的锯齿波发生器设计
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 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、设计结果及错误分析
仿真效果图