单片机课程设计函数波形发生器.docx
- 文档编号:3311521
- 上传时间:2022-11-21
- 格式:DOCX
- 页数:19
- 大小:441.18KB
单片机课程设计函数波形发生器.docx
《单片机课程设计函数波形发生器.docx》由会员分享,可在线阅读,更多相关《单片机课程设计函数波形发生器.docx(19页珍藏版)》请在冰豆网上搜索。
单片机课程设计函数波形发生器
目录
一,功能描述1
二,硬件设计1
三,软件设计2
四,运行效果6
五,程序代码10
六,心得体会15
一,功能描述
1,系统可以输出锯齿波、三角波、方波和正弦波;
2,输出波形的选择通过4只按键加以选择,其对应关系为:
按键
1
2
3
4
输出波形
锯齿波(0)
三角波
(1)
方波
(2)
正弦波(3)
3,每种波形的周期可以通过可调电压控制;
4,输出波形可以在示波器上正确显现;
5,输出波形编号,在LED数码管有显示;
二,硬件设计
硬件连接图如下:
三,软件设计
系统主要由以下几个部分组成:
1,主函数;2,锯齿波子函数;3,三角波子函数;4,正弦波子函数;5,显示子函数。
各程序流程图分别如下所示。
图3-1主程序流程图图3-2锯齿波流程图
图3-3三角波流程图
图3-4方波流程图
图3-5正弦波流程图图3-6显示子函数
四,运行效果
图4-1程序运行界面
图4-2锯齿波运行结果1图4-3锯齿波运行结果2
图4-4锯齿波运行结果3图4-5三角波运行结果1
图4-6三角波运行结果2图4-7三角波运行结果3
图4-8方波运行结果1图4-9方波运行结果2
图4-10方波运行结果3图4-11正弦波运行结果1
图4-12正弦波运行结果2图4-13正弦波运行结果3
图4-14程序初始化之后的显示为数字“8”
图4-15“0”号波形即锯齿波
图4-16“1”号波形即三角波
图4-17“2”号波形即方波
图4-18“3”号波形即正弦波
五,程序代码
ORG0000H
AJMPSTART
ORG0010H
START:
MOVDPTR,#0CFFFH;8255控制口地址
MOVA,#80H;8255输入输出方式控制字,设置pa、pb都为输出口
MOVX@DPTR,A
MOVSP,#70H;指针重新定义初值
MOVR3,#08H;数码管的初值为8
MOVR7,#10;改变周期的变量初值
LCALLDISPLAY;上电数码管显示
LOOP0:
JNBP1.0,JUCHI
JNBP1.1,SANJIAO
JNBP1.2,NEXT0;由于rel的跳转范围有限,故借助于LJMP指令
JNBP1.3,NEXT;理由同上
LCALLDISPLAY
SJMPLOOP0;等待选择相应的波形
NEXT0:
LJMPFANGBO
NEXT:
LJMPSINE
;*************************************************************
;锯齿波,波形号码“0”
;*************************************************************
JUCHI:
MOVR3,#00H;输出显示波形号码
LCALLDISPLAY
MOVA,#00H
LP0:
MOVDPTR,#0EFFFH;0832地址
MOVX@DPTR,A;输出波形上一个点
MOVDPTR,#0FFFFH;开启转换
MOVX@DPTR,A
JBP3.2,$;查询AD转换完成
PUSHACC;保存波形上的点
MOVXA,@DPTR
JU0:
MOVR5,A;转换完成传进单片机的值
JU1:
MOVR4,#100;延时
JU2:
DJNZR4,JU2
DJNZR5,JU1
POPACC
INCA
JNBP1.1,EXIT0;检测新的波形输出命令
JNBP1.2,EXIT0
JNBP1.3,EXIT0
LJMPLP0
EXIT0:
MOVR3,#08H
LJMPLOOP0
;*************************************************************
;三角波,波形号码“1”
;*************************************************************
SANJIAO:
MOVR3,#01H;输出显示波形号码
MOVA,R3
LCALLDISPLAY
MOVA,#00H
LP1:
MOVDPTR,#0EFFFH;三角波,DAC0832地址
MOVX@DPTR,A;三角波的上升边
MOVDPTR,#0FFFFH
MOVX@DPTR,A
JBP3.2,$
PUSHACC
MOVXA,@DPTR
SAN0:
MOVR5,A;转换完成传进单片机的值
SAN1:
MOVR4,#100;延时
SAN2:
DJNZR4,SAN2
DJNZR5,SAN1
POPACC
INCA
JNBP1.0,EXIT1;检测新的波形输出命令
JNBP1.2,EXIT1
JNBP1.3,EXIT1
JNZLP1
DOWN:
DECA;三角波的下降边
JNBP1.0,EXIT1;检测新的波形输出命令,由于三角波有上升下降两段,为了保证对新的波形命令的相应速度
JNBP1.2,EXIT1
JNBP1.3,EXIT1
MOVDPTR,#0FFFFH
MOVX@DPTR,A
JBP3.2,$
PUSHACC
MOVXA,@DPTR
SAN3:
MOVR5,A;转换完成传进单片机的值
SAN4:
MOVR4,#100;延时
SAN5:
DJNZR4,SAN5
DJNZR5,SAN4
POPACC
MOVDPTR,#0EFFFH
MOVX@DPTR,A
JNZDOWN
SJMPLP1
EXIT1:
MOVR3,#08H
LJMPLOOP0
;*************************************************************
;方波,波形号码“2”
;*************************************************************
FANGBO:
MOVR3,#02H;输出显示波形号码
LCALLDISPLAY
LP2:
MOVDPTR,#0EFFFH;DAC0832地址
MOVA,#0FFH;方波上限
MOVX@DPTR,A
MOVDPTR,#0FFFFH;开启转换
MOVX@DPTR,A
JBP3.2,$
MOVXA,@DPTR
FANG0:
MOVR5,A
FANG1:
MOVR4,#100
FANG2:
DJNZR4,FANG2
DJNZR5,FANG1
JNBP1.0,EXIT2;检测新的波形输出命令
JNBP1.1,EXIT2
JNBP1.3,EXIT2
MOVDPTR,#0EFFFH
MOVA,#00H;方波下限
MOVX@DPTR,A
MOVDPTR,#0FFFFH;开启转换
MOVX@DPTR,A
JBP3.2,$
MOVXA,@DPTR
DL3:
MOVR5,A;延时
DL4:
MOVR4,#100
DL5:
DJNZR4,DL5
DJNZR5,DL4
JNBP1.0,EXIT2;检测新的波形输出命令
JNBP1.1,EXIT2
JNBP1.3,EXIT2
SJMPLP2
EXIT2:
MOVR3,#08H
RET
;*************************************************************
;正弦波,波形号码“3”
;*************************************************************
SINE:
MOVR3,#03H;输出显示波形号码
LCALLDISPLAY
MOVDPTR,#0EFFFH;DAC0832地址
MOVDPTR,#sinTab
MOV00H,#00H;开辟00H单元,不停加一,直至溢出,循环加一,因为正弦表是256个点
SINE_1:
MOVA,00H
MOVDPTR,#sinTab
MOVCA,@A+DPTR;查正弦表
MOVDPTR,#0EFFFH
MOVX@DPTR,A
MOVDPTR,#0FFFFH
MOVX@DPTR,A
JBP3.2,$
PUSHACC
MOVXA,@DPTR
SINE0:
MOVR5,A
SINE1:
MOVR4,#100
SINE2:
DJNZR4,SINE2
DJNZR5,SINE1
POPACC
INC00H
JNBP1.0,EXIT3;检测新的波形输出命令
JNBP1.1,EXIT3
JNBP1.2,EXIT3
AJMPSINE_1
EXIT3:
MOVR3,#08H
RET
;*************************************************************
;显示子程序
;*************************************************************
DISPLAY:
MOVA,#07FH;选择最后一个数码管
MOVDPTR,#0CFFDH;8255pb口作为位选
MOVX@DPTR,A
MOVA,R3
MOVDPTR,#TAB
MOVCA,@A+DPTR
MOVDPTR,#0CFFCH;8255pa口作为段选
MOVX@DPTR,A
RET
TAB:
DB3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH,00H
sinTab:
DB80H,83H,86H,89H,8DH,90H,93H,96H
DB99H,9CH,9FH,0A2H,0A5H,0A8H,0ABH,0AEH
DB0B1H,0B4H,0B7H,0BAH,0BCH,0BFH,0C2H,0C5H
DB0C7H,0CAH,0CCH,0CFH,0D1H,0D4H,0D6H,0D8H
DB0DAH,0DDH,0DFH,0E1H,0E3H,0E5H,0E7H,0E9H
DB0EAH,0ECH,0EEH,0EFH,0F1H,0F2H,0F4H,0F5H
DB0F6H,0F7H,0F8H,0F9H,0FAH,0FBH,0FCH,0FDH
DB0FDH,0FEH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH
DB0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FEH,0FDH
DB0FDH,0FCH,0FBH,0FAH,0F9H,0F8H,0F7H,0F6H
DB0F5H,0F4H,0F2H,0F1H,0EFH,0EEH,0ECH,0EAH
DB0E9H,0E7H,0E5H,0E3H,0E1H,0DEH,0DDH,0DAH
DB0D8H,0D6H,0D4H,0D1H,0CFH,0CCH,0CAH,0C7H
DB0C5H,0C2H,0BFH,0BCH,0BAH,0B7H,0B4H,0B1H
DB0AEH,0ABH,0A8H,0A5H,0A2H,9FH,9CH,99H
DB96H,93H,90H,8DH,89H,86H,83H,80H
DB80H,7CH,79H,78H,72H,6FH,6CH,69H
DB66H,63H,60H,5DH,5AH,57H,55H,51H
DB4EH,4CH,48H,45H,43H,40H,3DH,3AH
DB38H,35H,33H,30H,2EH,2BH,29H,27H
DB25H,22H,20H,1EH,1CH,1AH,18H,16H
DB15H,13H,11H,10H,0EH,0DH,0BH,0AH
DB09H,08H,07H,06H,05H,04H,03H,02H
DB02H,01H,00H,00H,00H,00H,00H,00H
DB00H,00H,00H,00H,00H,00H,01H,02H
DB02H,03H,04H,05H,06H,07H,08H,09H
DB0AH,0BH,0DH,0EH,10H,11H,13H,15H
DB16H,18H,1AH,1CH,1EH,20H,22H,25H
DB27H,29H,2BH,2EH,30H,33H,35H,38H
DB3AH,3DH,40H,43H,45H,48H,4CH,4EH
DB51H,55H,57H,5AH,5DH,60H,63H,66H
DB69H,6CH,6FH,72H,76H,79H,7CH,80H
END
六,心得体会
这次课程设计是我大学以来做的最满意的一次课程设计,通过对所学知识的运用,适当结合一点新的知识,做出一点东西出来。
但这一个星期过的极为痛苦,吃了几天的面包,待在实验室调试程序。
调试程序是个艰难的过程,因为任何一个小的错误都有可能导致运行结果不当,这次课程设计其中一个最大的收获就是学会了如何查错,如何排除错误,找到问题所在,本次试验程序的编写最终正是按照这样的思路来的,将整个大程序分成若干小程序,逐个检验正确性。
首先通过编写显示小程序排查出片选3是有问题的,换了片选之后,显示正确;然后因为一旦加入改变周期的程序,就运行不出结果,我就单独编写0809的程序,检验0809是否有输出。
这两个程序在程序文件夹内。
当然,还有一些不足,比如没有选用赋值伪指令来代替8055、0832、0809的地址,所以调试过程中改地址非常麻烦;另外当我用中断来编写改变周期的程序时就是运行不正确,换成查询方式就可以,这一点还没弄得清楚。
总之,有付出、有收获,很充实、很欣慰。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 单片机 课程设计 函数 波形 发生器