基于dds与单片机的信号发生器的设计_毕业设计(编辑修改稿)内容摘要:

S T C8 9 C5 2 图 38 DDS模块 9 DDS 采用串行写入模式, 省 下了单片机的 5个 IO 口。 10 液晶 1602 模 块 液晶屏幕光标指针对应的实际位置如下: 11 12 采用串口写入模式,省下 4 个 IO 口。 back1, back2 用来调整背景光, V0 用来调整液晶中的文字显示电压,调整文字亮度。 按键设置 采用 5 个独立按 键作为波形设置按键,一个外部中断 0 的按键,采用跳变沿触发进入设置模式。 按键加一, 按键减一, 按键 液晶光标 左移一位, 按键液晶光标右移一位, 按键跳出频率设置 ,进入幅值设置,再次按下,跳出波形调试,开始产生波形。 13 整体电路 14 系统程序设计 本设计采用 c 语言编程。 程序 流程图: 测试 测试仪器:示波器 测试方法:按键,通过示波器查看波形频率与幅值是否 与液晶显示值相吻合。 开始 液晶与 DDS 模块初始化,显示此时的幅值与频率设置初值 1MHz 按下设置按键 按键控制液晶光标左右移动以及数值加减 跳出频率设置,进入幅值设置,旋钮调整波幅,同时可以在液晶上及时显示设置幅值 按下 break 键 按下 break 键 跳出设置模式,输出设置波形频率与幅值 检测设置按键有无按下 15 按下 Set 键后进入波形设置模式,分为两个环节,先调整频率,之后按下 break 键锁住频率,通过旋钮调整幅值,再按下 break 键锁住幅值,跳出设置,产生波形。 结束语 经过几天的辛勤努力,三人合理分工,我们 虽然没能 实现题目的所有要求, 但 在调试的过程中,遇到了很多问题,有硬件上的,也有软件上的,但在大家的努力下,最终解决了 不少 问题。 由于时间紧,任务重,不可能做到尽善尽美,系统还可以进行 很多 改进。 这次竞赛 增强了我们的实践能力和协作精神,而且懂得了联系实际的重要性,这 对我们以后的学习和工作大有裨益。 虽然我们遇到了很多困难和障碍,但同时也是困难与希望并存,我们将继续努力争取更大的进步。 Set Break 左 加 右 减 调幅 16 附录:单片机程序 include include include typedef unsigned char BYTE。 typedef unsigned int WORD。 typedef bit BOOL。 sbit add=P0^0。 sbit miu=P0^1。 sbit left=P0^2。 sbit right=P0^3。 sbit keybreak=P0^4。 sbit ad9850_w_clk =P2^2。 // 口接 ad9850 的 w_clk 脚/PIN7 sbit ad9850_fq_up =P2^1。 // 口接 ad9850 的 fq_up 脚/PIN8 sbit ad9850_rest =P2^0。 // 口接 ad9850 的 rest 脚 /PIN12 sbit ad9850_bit_data =P2^3。 // 口接 ad9850 的 D7 脚 /PIN25 sbit int1=P3^3。 //定义管脚功能 sbit cs=P3^0。 //使能端 sbit wr=P3^6。 //写端口 sbit rd=P3^7。 //读端口 sbit rs=P0^7。 //lcd sbit rw=P0^6。 sbit ep=P0^5。 sbit d7=P2^7。 sbit d6=P2^6。 sbit d5=P2^5。 sbit d4=P2^4。 BYTE dis1[]={V:00000000 V }。 BYTE dis2[]={F:01000000 Hz}。 double frequence=1000000。 double volt=。 void dds()。 //dds 模块输出波形 void reset_serial()。 //dds 初始化 void wr_serial(unsigned char w0,double frequence)。 //dds 写入频率 17 void delay2(int m) //延时 1us 左右 { unsigned char i,j。 for (i=0。 im。 i++) for (j=0。 j253。 j++)。 } void delay(unsigned int t)。 //延时很短 void delay(unsigned int t) { unsigned int qwe。 for(qwe=t。 qwe0。 qwe)。 } BOOL lcd_bz() //检测 lcd 是否忙 { BOOL result。 rs=0。 // 读忙信号 rw=1。 ep=1。 _nop_()。 _nop_()。 _nop_()。 _nop_()。 _nop_()。 _nop_()。 _nop_()。 _nop_()。 result = (BOOL)((P2amp。 0xf0)amp。 0x80)。 ep=0。 return(result )。 } lcd_wcmd (BYTE cmd) //向 lcd 写入设置工作命令 { while (lcd_bz())。 rs=0。 rw=0。 ep=0。 _nop_()。 18 _nop_()。 P2=cmd。 _nop_()。 _nop_()。 _nop_()。 _nop_()。 ep=1。 _nop_()。 _nop_()。 _nop_()。 _nop_()。 ep=0。 rs=0。 rw=0。 ep=0。 _nop_()。 _nop_()。 P2=cmd4。 _nop_()。 _nop_()。 _nop_()。 _nop_()。 ep=1。 _nop_()。 _nop_()。 _nop_()。 _nop_()。 ep=0。 } lcd_pos (BYTE pos) //定位 lcd 光标(指。
阅读剩余 0%
本站所有文章资讯、展示的图片素材等内容均为注册用户上传(部分报媒/平媒内容转载自网络合作媒体),仅供学习参考。 用户通过本站上传、发布的任何内容的知识产权归属用户或原始著作权人所有。如有侵犯您的版权,请联系我们反馈本站将在三个工作日内改正。