(波形发生器) 单片机课程设计报告

时间:2024.4.20

单片机原理及系统课程设计

专    业:   自动控制     

班    级:         

姓    名:           

学    号:       

指导教师:          

兰州交通大学自动化与电气工程学院

年  月  日

波形发生器

1 引言

本系统是基于STC89C51单片机的波形发生器。采用STC89C51单片机作为控制核心,外围采用数字/模拟转换电路(DAC0832)和按键等。通过按键控制可产生方波、三角波、正弦波和锯齿波。其设计简单、性能优良,具有一定的实用性。文中简要介绍了DAC0832数模转换器的结构原理和使用方法,STC89C51的基础理论,着重介绍了如何利用单片机控制D/A转换器产生上述信号的硬件电路和软件编程。

2 设计方案及原理

2.1设计原理及元件选型

(1)设计原理

该设计设计一个低频信号发生器,我们采用的是AT89C51 单片机用软件实现信号的输出。该单片机是一个微型计算机,包括中央处理器CPU,RAM,ROM、I/O 接口电路、定时计数器、串行通讯等,是波形设计的核心。该信号发生器原理框图如图1,总体原理为:利用AT89C51 单片机构造低频信号发生器,可产生正弦波,方波,三角波,锯齿波四种波形,通过汇编语言对单片机的编程即可产生相应的波形信号,并可以通过键盘进行各种功能的转换和信号频率的控制,当输出的数字信号通过数模转换成模拟信号也就得到所需要的信号波形,通过运算放大器的放大输出波形,同时让显示器显示输出的波形信息。     

通过P1口和开关K0-K3相连接来控制各个波形的输出。能根据k0-k4键状态进行波形切换,当某一按键按下时,输出相对应的波形。

(2) 元件选型

单片机AT89C51系统,DAC0832一片,PC机一台,运算放大器

2.2设计方案

(1)总体方框图:

           

                                图1 总体设计功能图

(2)设计思路

利用中断,当5个开关中有任意一个闭合时,跳转至中断程序,在中断程序中判断是哪一个按键闭合,跳转至相应的程序,执行输出波形的操作,每输出一个点之后,判断按键是否断开,如果依旧闭合,则继续输出,如果已经断开,则结束中断程序。

3 硬件设计

3.1硬件原理图

波形发生器的硬件原理图如图2所示:

图2 波形发生器的硬件原理图

3.1硬件连线图

图3 硬件连线图

4 软件设计

4.1主程序如下:

              ORG  0000H

              LJMP  MAIN

              ORG  1000H                 

MAIN:

JNB  P1.0,IR0         ;如果K0键闭合,则跳转至IR0输出锯齿波

JNB  P1.1,IR1         ;如果K1键闭合,则跳转至IR1输出三角波

JNB  P1.2,IR2         ;如果K2键闭合,则跳转至IR2输出方波

JNB  P1.3,IR3         ;如果K3键闭合,则跳转至IR3输出正弦波

AJMP  MAIN

4.2锯齿波的产生过程

锯齿波的实现过程是首先定义一个初值然后进行加法操作,加的步数的多少则根据要求的频率来进行。然后加到某个数之后就再重新设置为初值,再重复执行刚刚的操作,如此循环下去。

锯齿波发生流程图图4所示:

 

图4 锯齿波发生流程图

锯齿波函数图像如附录图5所示:

4.3 三角波的产生过程

三角波的实现是设置一个初值,当加到某个值的时候,执行减一操作,减到初值时,再加一。

三角波发生流程图图6所示:

图6 三角波发生流程图

三角波函数图像如附录图7所示:

 4.4 方波的产生过程

方波的实现只需开始的时候设置一个初值然后直接输出这个值就行了,输出一段时间后,然后再重新置一个数据,然后再输出这个数据一段时间,但是此时的时间一定要等于前面那段时间。这样才是一个方波,如果两个时间不相同,那就相当于一个脉冲波了。

方波发生流程图如图8所示:

图8 方波发生流程图

方波函数图像如图9所示:

4.5正弦波的产生过程

    正弦波的实现需要查表,每查一次表,输出一个数值,之后查下一个数值继续输出,当一个波形的256个数值全部输出之后,从头开始继续输出。

正弦波发生流程图如图10所示:

图10 正弦波发生流程图

    正弦波函数图像如图11所示:

5 总结

经过将近一周的单片机课程设计,终于完成了我的波形发生器的设计,基本达到设计要求,从心底里来说,还是很高兴的,毕竟这次设计把仿真做了出来。但高兴之余不得不深思呀!

在本次设计的过程中,我发现很多的问题,虽然以前还做过这样的设计但这次设计真的让我长进了很多。对于单片机设计,其硬件电路是比较简单的,主要是解决程序设计的问题,而程序设计是一个很灵活的东西,它反映了你解决问题的逻辑思维和创新能力,它才是一个设计的灵魂所在。因此在整个设计过程中大部分时间是用在程序上面的。很多子程序是可以借鉴书本上的,但怎样衔接各个子程序才是关键的问题所在,这需要对单片机的结构很熟悉。因此可以说单片机的设计是软件和硬件的结合,二者是密不可分的。

6 参考文献

[1] 李华,王思明. 单片机原理与应用[M]. 兰州:兰州大学出版社.2001

[2] 孙进平,张大腾.51系列单片机原理,开发与应用实例[M].北京.中国电力出版社.2008

7 附录

7.1 仿真结果:

图5 锯齿波函数图像

图7 三角波函数图像

图9 方波函数图像

图11 正弦波函数图像

7.2 程序:

各子程序:

1 锯齿波发生子程序如下:

IR0:      MOV R0,#0FEH ;设置端口地址

             MOV A,#00H

LOOP: MOVX @R0,A  ;写入

             JB P1.0,MAIN  ;如果k0键已经断开,则返回

             INC A         ;A加一

             SJMP LOOP    ;循环

       LJMP MAIN    ;返回

2 三角波发生子程序如下:

IR1:      MOV R0,#0FEH              ;设置端口地址

             MOV A,#00H

UP2:     MOVX @R0,A         ;写入

             JB P1.1,MAIN           ;如果k2键已经断开,则返回

             INC A                        ;A加一

             JNZ UP2                    ;循环

DOWN2:    DEC A                ;A减一

             MOVX @R0,A         ;写入

             JB P1.1,MAIN           ;如果k2键已经断开,则返回

             JNZ DOWN2            ;循环

             SJMP UP2                  ;如果减到0,则跳转至UP2,继续加一操作

             LJMP MAIN              ;返回

3 方波发生子程序如下:

IR2:      MOV R0,#0FEH              ;设置端口地址

POSI:   MOV A,#00H            ;给A赋值0x00

             MOVX @R0,A         ;写入

             LCALL DELAY        ;延时

             JB P1.2,MAIN           ;如果k3键已经断开,则返回

NEGA: MOV A,#0FFH         ;给A赋值0xFF

             MOVX @R0,A         ;写入

             LCALL DELAY        ;延时

             JB P1.2,MAIN           ;如果k3键已经断开,则返回

             SJMP POSI                ;跳转至POSI,继续下一个波形的输出

             LJMP MAIN              ;返回

DELAY:      MOV R7,#100           ;延时子程序         

DELAY1:MOV R6,#10

      NOP

DELAY2:DJNZ R6,DELAY2

DJNZ R7,DELAY1

RET

4 正弦波发生子程序如下:

IR3:             MOV R0,#0FEH                     ;设置端口地址

                    MOV R1,#00H

XX:                    MOV A,R1 

                    LCALL HANSHU           ;调用查表函数

                    MOVX @R0,A                ;写入

                    JB P1.3,MAIN                  ;如果k4键已经断开,则返回

                    INC R1

                    SJMP XX                          ;继续查表

                    LJMP MAIN                     ;返回

HANSHU:  MOV DPTR,#TAB1

                    MOVC A,@A+DPTR

                    RET

TAB1: db 080h,083h,086h,089h,08ch,090h,093h,096h,099h,09ch,09fh,0a2h,0a5h,0a8h,0abh,0aeh

        db 0b1h,0b3h,0b6h,0b9h,0bch,0bfh,0c1h,0c4h,0c7h,0c9h,0cch,0ceh,0d1h,0d3h,0d5h,0d8h

        db 0dah,0dch,0deh,0e0h,0e2h,0e4h,0e6h,0e8h,0eah,0ebh,0edh,0efh,0f0h,0f1h,0f3h,0f4h

        db 0f5h,0f6h,0f8h,0f9h,0fah,0fah,0fbh,0fch,0fdh,0fdh,0feh,0feh,0feh,0ffh,0ffh,0ffh

        db 0ffh,0ffh,0ffh,0ffh,0feh,0feh,0feh,0fdh,0fdh,0fch,0fbh,0fah,0fah,0f9h,0f8h,0f6h

        db 0f5h,0f4h,0f3h,0f1h,0f0h,0efh,0edh,0ebh,0eah,0e8h,0e6h,0e4h,0e2h,0e0h,0deh,0dch

        db 0dah,0d8h,0d5h,0d3h,0d1h,0ceh,0cch,0c9h,0c7h,0c4h,0c1h,0bfh,0bch,0b9h,0b6h,0b3h

        db 0b1h,0aeh,0abh,0a8h,0a5h,0a2h,09fh,09ch,099h,096h,093h,090h,08ch,089h,086h,083h

        db 080h,07dh,07ah,077h,074h,070h,06dh,06ah,067h,064h,061h,05eh,05bh,058h,055h,052h

        db 04fh,04dh,04ah,047h,044h,041h,03fh,03ch,039h,037h,034h,032h,02fh,02dh,02bh,028h

        db 026h,024h,022h,020h,01eh,01ch,01ah,018h,016h,015h,013h,011h,010h,00fh,00dh,00ch

        db 00bh,00ah,008h,007h,006h,006h,005h,004h,003h,003h,002h,002h,002h,001h,001h,000h

        db 000h,000h,001h,001h,002h,002h,002h,003h,003h,004h,005h,006h,006h,007h,008h,00ah

        db 00bh,00ch,00dh,00fh,010h,011h,013h,015h,016h,018h,01ah,01ch,01eh,020h,022h,024h

        db 026h,028h,02bh,02dh,02fh,032h,034h,037h,039h,03ch,03fh,041h,044h,047h,04ah,04dh

        db 04fh,052h,055h,058h,05bh,05eh,061h,064h,067h,06ah,06dh,070h,074h,077h,07ah,07dh

5 总的程序:

ORG  0000H

             LJMP  MAIN

             ORG  1000H                 

MAIN:

JNB  P1.0,IR0        ;如果K0键闭合,则跳转至IR0输出锯齿波

JNB  P1.1,IR1        ;如果K1键闭合,则跳转至IR1输出三角波

JNB  P1.2,IR2        ;如果K2键闭合,则跳转至IR2输出方波

JNB  P1.3,IR3        ;如果K3键闭合,则跳转至IR3输出正弦波

AJMP  MAIN

IR0:      MOV R0,#0FEH ;设置端口地址

             MOV A,#00H

LOOP: MOVX @R0,A  ;写入

             JB P1.0,MAIN  ;如果k0键已经断开,则返回

             INC A         ;A加一

             SJMP LOOP    ;循环

       LJMP MAIN    ;返回

IR1:      MOV R0,#0FEH              ;设置端口地址

             MOV A,#00H

UP2:     MOVX @R0,A         ;写入

             JB P1.1,MAIN           ;如果k2键已经断开,则返回

             INC A                        ;A加一

             JNZ UP2                    ;循环

DOWN2:    DEC A                ;A减一

             MOVX @R0,A         ;写入

             JB P1.1,MAIN           ;如果k2键已经断开,则返回

             JNZ DOWN2            ;循环

             SJMP UP2                  ;如果减到0,则跳转至UP2,继续加一操作

             LJMP MAIN              ;返回

             IR2:       MOV R0,#0FEH              ;设置端口地址

POSI:   MOV A,#00H            ;给A赋值0x00

             MOVX @R0,A         ;写入

             LCALL DELAY        ;延时

             JB P1.2,MAIN           ;如果k3键已经断开,则返回

NEGA: MOV A,#0FFH         ;给A赋值0xFF

             MOVX @R0,A         ;写入

             LCALL DELAY        ;延时

             JB P1.2,MAIN           ;如果k3键已经断开,则返回

             SJMP POSI                ;跳转至POSI,继续下一个波形的输出

             LJMP MAIN              ;返回

DELAY:      MOV R7,#100           ;延时子程序         

DELAY1:MOV R6,#10

      NOP

DELAY2:DJNZ R6,DELAY2

DJNZ R7,DELAY1

RET

IR3:             MOV R0,#0FEH                     ;设置端口地址

                    MOV R1,#00H

XX:                    MOV A,R1 

                    LCALL HANSHU           ;调用查表函数

                    MOVX @R0,A                ;写入

                    JB P1.3,MAIN                  ;如果k4键已经断开,则返回

                    INC R1

                    SJMP XX                          ;继续查表

                    LJMP MAIN                     ;返回

HANSHU:  MOV DPTR,#TAB1

                    MOVC A,@A+DPTR

                    RET

TAB1: db 080h,083h,086h,089h,08ch,090h,093h,096h,099h,09ch,09fh,0a2h,0a5h,0a8h,0abh,0aeh

        db 0b1h,0b3h,0b6h,0b9h,0bch,0bfh,0c1h,0c4h,0c7h,0c9h,0cch,0ceh,0d1h,0d3h,0d5h,0d8h

        db 0dah,0dch,0deh,0e0h,0e2h,0e4h,0e6h,0e8h,0eah,0ebh,0edh,0efh,0f0h,0f1h,0f3h,0f4h

        db 0f5h,0f6h,0f8h,0f9h,0fah,0fah,0fbh,0fch,0fdh,0fdh,0feh,0feh,0feh,0ffh,0ffh,0ffh

        db 0ffh,0ffh,0ffh,0ffh,0feh,0feh,0feh,0fdh,0fdh,0fch,0fbh,0fah,0fah,0f9h,0f8h,0f6h

        db 0f5h,0f4h,0f3h,0f1h,0f0h,0efh,0edh,0ebh,0eah,0e8h,0e6h,0e4h,0e2h,0e0h,0deh,0dch

        db 0dah,0d8h,0d5h,0d3h,0d1h,0ceh,0cch,0c9h,0c7h,0c4h,0c1h,0bfh,0bch,0b9h,0b6h,0b3h

        db 0b1h,0aeh,0abh,0a8h,0a5h,0a2h,09fh,09ch,099h,096h,093h,090h,08ch,089h,086h,083h

        db 080h,07dh,07ah,077h,074h,070h,06dh,06ah,067h,064h,061h,05eh,05bh,058h,055h,052h

        db 04fh,04dh,04ah,047h,044h,041h,03fh,03ch,039h,037h,034h,032h,02fh,02dh,02bh,028h

        db 026h,024h,022h,020h,01eh,01ch,01ah,018h,016h,015h,013h,011h,010h,00fh,00dh,00ch

        db 00bh,00ah,008h,007h,006h,006h,005h,004h,003h,003h,002h,002h,002h,001h,001h,000h

        db 000h,000h,001h,001h,002h,002h,002h,003h,003h,004h,005h,006h,006h,007h,008h,00ah

        db 00bh,00ch,00dh,00fh,010h,011h,013h,015h,016h,018h,01ah,01ch,01eh,020h,022h,024h

        db 026h,028h,02bh,02dh,02fh,032h,034h,037h,039h,03ch,03fh,041h,044h,047h,04ah,04dh

        db 04fh,052h,055h,058h,05bh,05eh,061h,064h,067h,06ah,06dh,070h,074h,077h,07ah,07dh

更多相关推荐:
简易波形发生器课程设计报告

课程设计报告设计题目简易波形发生器学院理学院专业班级08电子信息科学与技术1班学号20xx31120xx220xx31120xx220xx31120xx1姓名陈建泽纪婧如蔡国英电子邮件811781675qqco...

电子课程设计-多种波形发生器报告

课题名称多种波形发生器课题代码院系专业电气工程及其自动化班级学生时间指导教师签名教研室主任系主任签名一设计目的1了解并掌握电子电路的一般设计方法具备初步的独立设计能力2通过查阅手册和文献资料进一步熟悉常用电子器...

波形发生器课程设计报告

单片机及DSP课程设计报告专业电子信息工程班级信息101姓名史延凯学号指导教师何香铃时间20xx061728通信与电子工程学院1目录一设计目的及意义311设计目的312设计意义3二方案论证321设计要求错误未定...

波形发生器课设报告

西北工业大学课程设计报告题学专班日目波形发生器院自动化学院业自动化级09031201期20xx年1月15日摘要21题目本次实验主要是以FPGA作为基础制作一个简易波形发生器不仅可以显示学号同时可以通过按键输入产...

模电课程设计报告(波形发生器)

课程设计课程名称模拟电子技术基础课程设计题目名称波形发生电路学生学院物理与光电工程学院专业班级电子科学与技术5班学号学生姓名指导教师20xx12171摘要和关键词摘要用RC桥式正弦波振荡电路产生正弦波正弦波频率...

波形发生器设计报告2

电子技术课程设计报告课题名称学院专业班级姓名学号时间波形发生器昆明学院自机学院机械设计制造及自动化3班李飞飞王祥武20xx1401011120xx0410012620xx年7月10日摘要本文主要介绍能产生正弦波...

简易波形发生器设计报告

电子信息工程学院硬件课程设计实验室课程设计报告题目波形发生器设计年级专业学号学生姓名指导教师13级电子信息工程学院20xx21111126覃凤素罗伟华20xx年11月1日课程设计报告书波形发生器设计波形发生器亦...

北京交通大学模电设计实验多种波形发生器实验报告

国家电工电子实验教学中心模拟电子技术实验报告实验题目多种波形发生器学院电子信息工程学院专业自动化1103学生姓名高帅学号112120xx20xx年6月7日国家电工电子实验教学中心模拟电子技术实验实验报告目录1设...

DAC0832波形发生器课程设计实验报告1

微机原理与接口技术课程设计报告书DAC0832波形发生器目录一引言1二设计目的2三原理说明2四硬件设计4五设计原理6六程序编译71输出方波子程序72输出三角波子程序83输出锯齿波子程序84输出正弦波子程序95输...

模电设计报告_波形发生器

模拟电子技术课程设计了可看看扬州大学能源与动力工程学院本科生课程设计题目函数发生器的设计课程模拟电子技术基础专业班级学号姓名指导教师纪晓华蒋步军完成日期20xx年11月模拟电子技术课程设计第一部分任务及指导书含...

函数信号发生器课程设计报告

漳州师范学院模拟电子技术课程设计函数信号发生器姓名学号系别专业年级指导教师20xx年4月3日1函数信号发生器摘要利用集成电路LM324设计并实现所需技术参数的各种波形发生电路根据电压比较器可以产生方波方波再继续...

DAC0832波形发生器课程设计实验报告1

微机原理与接口技术课程设计报告书题目DAC0832波形发生器学院名称湖南科技大学潇湘学院班级电子信息工程001班指导老师欧青立陈君宋芳学号0954030110姓名赵翔潇湘学院电子信息001班学号09540301...

波形发生器课程设计报告(19篇)