首页 范文大全 古典文学 职场知识 中国文学 公文书信 外国名著 寓言童话 百家讲坛 散文/诗歌 美文欣赏 礼仪知识 民俗风情
  • 范文大全
  • 古典文学
  • 职场知识
  • 中国文学
  • 公文书信
  • 外国名著
  • 寓言童话
  • 百家讲坛
  • 散文/诗歌
  • 美文欣赏
  • 礼仪知识
  • 民俗风情
  • 谜语大全
  • 名言警句
  • 单片机及DSP课程设计报告

    时间:2021-03-16 00:10:46 来源:蒲公英阅读网 本文已影响 蒲公英阅读网手机站

    相关热词搜索:课程设计 机及 报告

    单片机及DSP课程设计报告 本文关键词:课程设计,机及,报告,DSP

    单片机及DSP课程设计报告 本文简介:一、课设目的1、通过本设计,能综合运用《单片机技术原理与应用》、《DSP原理与应用》《C语言程序设计》以及《数字电路》、《模拟电路》等课程的内容,为以后从事电子产品设计、软件编程、系统控制等工作奠定一定的基础。2、学会使用KEILC和PROTEUS等软件,用C语言或汇编语言编写一个较完整的实用程序,

    单片机及DSP课程设计报告 本文内容:

    一、课设目的

    1、通过本设计,能综合运用《单片机技术原理与应用》、《DSP原理与应用》《C语言程序设计》以及《数字电路》、《模拟电路》等课程的内容,为以后从事电子产品设计、软件编程、系统控制等工作奠定一定的基础。

    2、学会使用KEIL

    C和PROTEUS等软件,用C语言或汇编语言编写一个较完整的实用程序,并仿真运行,保证设计的正确性。

    3、了解单片机接口应用开发的全过程:分析需求、设计原理图、选用元器件、布线、编程、调试、撰写报告等。

    二、课设内容

    设计一个基于单片机的音乐播放器,在播放音乐的同时并能显示播放的歌曲序号,同时可以实现上一曲、下一曲的转换;在播放的同时,还能实现暂停/开始的功能。

    3、

    问题分析、方案的提出、设计思路及原因

    要想使播放器发出响声,就得设计一个能产生声响的程序,让单片机输出到扬声器。音调的高低用音阶表示,不同的音阶对应不同的频率。因此,不同频率的方波就可以产生音阶。由于频率的倒数是周期,因此可由单片机中的定时控制方波周期,当定时器计数溢出时产生中断。将与扬声器连接就可得到方波的周期,从而达到了控制频率,即音阶的目的。通过TXAL1

    与TXAL2输入时钟信号,通过p1.0~p1.7输出控制现实控制信号显示,有p3.2、p3.3与p3.5分别作为上一曲、下一曲和开始暂停的控制输入。

    显示电路是一个8位共阴极LED数码管。

    单片机的P0.0-P0.7分别与数码管的A、B、C、D、E、F、G、DP相连接。

    晶振电路由两个1nF的电容和一个6Mhz的晶体振荡器组成。节点1与单片机的XTAL2相连接,节点2与单片机的XTAL1相连接,从而为单片机提供时间信号,为音乐的播放节拍控制提供基本时间单位:当晶体振荡频率为6.MHz,定时器工作在方式1下时,若各音阶相对应的定时器计数初值为X,则可根据下式计算X:

    控制电路,键一与p3.2相连、键二与p3.3相连、键3与p3.5相连。当电键按下时接口接低电平,从而实现对音乐播放器的控制。

    键一联通实现上一曲更换,键发声电路由数字扬声器连接p2.0接口实现音乐的输出,由控制电路发出操作指令后,单片机调用相应程序,并将音乐信号由p2.0口输出,通过驱动扬声器发出美妙的音乐。二联通实现下一曲更换,键三联通实现开始暂停操作。

    四、电路设计及功能说明,硬件原理框图及电路图

    AT89C51是一种带4K字节闪烁可编程可擦除只读存储器的低电压,高性能CMOS

    8位微处理器,俗称单片机。

    总原理图

    51单片机

    显示电路

    电源电路

    键控电路

    复位电路

    晶振电路

    发声电路

    时钟电路

    与振荡器共同产生单片机所需的工作时钟信号

    功能选择电路

    实现播放器的功能操作

    显示电路

    实现单片机的信息显示功能

    开始

    4、

    软件部分的程序流程图,算法和使用的编程技巧;

    初始化

    查询歌曲曲目

    上一曲、下一曲

    数码管显示

    暂停、播放

    等待播放

    关闭显示

    播放音乐

    判断是否结束?

    结束

    1、总体思路

    主程序实现对单片机进行初始化后,进入曲目识别子程序,进行歌曲曲目判断。确定歌曲曲目后,数码管再进行显示。然后,子程序对是否播放进行循环判断,得到播放中断的指令后再进行播放。

    执行播放后,关闭数码管显示并调用查表子程序进行播放音乐。在播放音乐的过程中,查表子程序循环判断音乐是否结束。当音乐结束时,程序跳转回曲目识别子程序。

    5、

    源程序清单

    OUT

    BIT

    P2.0

    ;定义音频输出端口,p2.0

    N

    EQU

    3;歌曲总数

    OUT_NUM

    EQU

    P1;数码管显视当前所放歌曲曲数

    ORG

    0000H

    AJMP

    MAIN

    ORG

    0003H

    AJMP

    LAST_SONG

    ;外部中断0用于接上一曲歌按键

    ORG

    000BH

    AJMP

    F_T0

    ;定时器0用于定时,作音符发生器用

    ORG

    0013H

    q4:

    AJMP

    NEXT_SONG

    ;外部中断1接下一曲歌按键

    ORG

    001BH

    AJMP

    START_PAUSE

    ;定时器1用计数,这里用作中断,接开始/暂停键,初值为0ffH,方式2

    ORG

    0030H

    MAIN:

    MOV

    SP,#60H

    MOV

    DPTR,#TABLE

    ;DPRT指向每首歌曲的入口地址的地址。

    MOV

    R0,#30H

    ;R0中存入数据30H,这里在以30H开始的单元存放每首歌曲的入口地址,其中30H,31H存放歌曲的节拍入口地址,32H,33H存放歌曲音符入口地址,每首歌占用四个存储存单元。

    MOV

    R5,#00H

    ;R5中存放表TABLE中正在执行操作的序号

    MOV

    R6,#1

    ;R6存放正在设置入口信息的歌曲数

    SET_TAB:

    MOV

    A,R5

    ;设置每首歌曲的入口信息,存放在以30H开始的存储单元中。

    MOVC

    A,@A+DPTR

    MOV

    @R0,A

    INC

    R5

    INC

    R0

    MOV

    A,R5

    MOVC

    A,@A+DPTR

    MOV

    @R0,A

    INC

    R5

    INC

    R0

    MOV

    A,R5

    MOVC

    A,@A+DPTR

    MOV

    @R0,A

    INC

    R0

    INC

    R5

    MOV

    A,R5

    MOVC

    A,@A+DPTR

    MOV

    @R0,A

    INC

    R0

    INC

    R5

    INC

    R6

    ;设置完一首歌曲后,歌曲数加一

    CJNE

    R6,#N+1,SET_TAB

    ;是否设置完,没有便继续,否则进行下面的操作

    ;***********************************

    对中断,计数器的相关参数进行设置

    MOV

    TMOD,#61H

    ;计数器0工作方式1,计数器1工作方式2

    MOV

    TH1,#0FFH

    ;给计数器1置初值0FFH,又由于是工作方式2,所以

    MOV

    TL1,#0FFH

    ;计数器计数为1,相当于一外部中断。

    SETB

    ET1

    ;允许计数器1中断

    SETB

    ET0

    ;允许计数器具0中断

    CLR

    PT0

    ;计数器0为低优先级

    SETB

    PT1

    ;计数器1为高优先级

    SETB

    IT0

    ;外部中断0为跳沿触发

    SETB

    PX0

    ;高优先级

    SETB

    IT1

    ;外部中断1为跳沿触发

    SETB

    PX1

    ;高优先级

    SETB

    EX1

    ;允许外部中断1中断

    SETB

    EX0

    ;允许外部中断定0中断

    SETB

    EA

    ;开中断总开关

    SETB

    TR1

    ;定时器1开始工作,作中断用

    SETB

    OUT

    ;音频输出端口初始化

    ;***********************************

    ;设置结束

    CLR

    F0

    ;设置F0=0,用来作暂停/播放的标置位用

    MOV

    22H,#01H

    ;22H单元中存放正在播放的歌曲编号

    MOV

    DPTR,#OUT_TAB

    ;将正在播放的歌曲编号送数码管显视

    MOV

    A,22H

    MOVC

    A,@A+DPTR

    MOV

    OUT_NUM,A

    MOV

    R7,#00H

    ;R7中存放歌曲总信息的入口地址

    START0:MOV

    R4,#00H

    ;R4存放当前正在播放歌曲的第几个节拍数

    MOV

    R0,#30H

    ;30H开始的单元中存放歌曲的入口信息

    MOV

    A,R7

    ;将歌曲的节拍表的入口地址送到DPTR

    ADD

    A,R0

    MOV

    R0,A

    MOV

    DPH,@R0

    INC

    R0

    MOV

    DPL,@R0

    INC

    R0

    MOV

    A,R4

    INC

    R4

    MOVC

    A,@A+DPTR

    ;取出第一节拍数,其实第一个节拍不是歌曲的第一个节拍,而是表示几分音符

    ;****************************************************

    MOV

    26H,A

    ;将取出的音符数+节拍数保存在职26H单元中

    NEXT:

    MOV

    R0,#30H

    ;开始取出歌曲的第一个数据

    MOV

    A,R7

    ADD

    A,R0

    MOV

    R0,A

    MOV

    DPH,@R0

    INC

    R0

    MOV

    DPL,@R0

    INC

    R0

    MOV

    A,R4

    INC

    R4

    MOVC

    A,@A+DPTR

    ;放在A中

    ;****************************************************

    JZ

    END0

    ;若为0,则表示为休止符,不唱,本次音符不唱,

    MOV

    R1,A

    ;不为0,取出节拍数

    ANL

    A,#0FH

    MOV

    R2,A

    MOV

    A,R1

    SWAP

    A

    ANL

    A,#0FH

    JNZ

    SING

    ;音符不为0,唱

    CLR

    TR0

    ;为0,不唱,关频率发生器

    SJMP

    SING1

    SING:

    DEC

    A

    ;开始唱,进行相应的数据处理

    MOV

    R3,A

    RL

    A

    MOV

    DPH,@R0

    INC

    R0

    MOV

    DPL,@R0

    INC

    R0

    MOVC

    A,@A+DPTR

    MOV

    21H,A

    MOV

    TH0,A

    MOV

    A,R3

    RL

    A

    INC

    A

    MOVC

    A,@A+DPTR

    MOV

    20H,A

    MOV

    TL0,A

    SETB

    TR0

    ;开唱

    SING1:LCALL

    DELAY

    ;每个音符唱多久

    JB

    F0,FOR

    ;是否暂停,

    AJMP

    NEXT

    ;没有暂停,继续

    FOR:

    CLR

    TR0

    ;暂停,不唱

    JB

    F0,$

    ;等待播放

    AJMP

    NEXT

    ;开始播放

    END0:

    CLR

    TR0

    ;不唱

    MOV

    A,22H

    ;唱完处理

    CJNE

    A,#N,WW

    ;是不是全部歌曲都唱完

    MOV

    22H,#01H

    ;全部唱完,则从第一首开始再唱

    MOV

    R7,#00H

    MOV

    OUT_NUM,#06H

    ;数码管显视第一首歌曲编号

    AJMP

    WWW

    WW:

    MOV

    A,R7

    ;没有全部唱完,唱下一首,歌曲的入口信息调整

    ADD

    A,#4

    MOV

    R7,A

    INC

    22H

    CLR

    EA

    PUSH

    DPH

    PUSH

    DPL

    MOV

    A,22H

    MOV

    DPTR,#OUT_TAB

    MOVC

    A,@A+DPTR

    MOV

    OUT_NUM,A

    ;数码管显视相应的歌曲编号

    POP

    DPL

    POP

    DPH

    WWW:

    SETB

    EA

    AJMP

    START0

    ;开始下一首的演唱

    F_T0:

    MOV

    TH0,21H

    ;定时器0置初值

    MOV

    TL0,20H

    CPL

    OUT

    ;频率产生

    RETI

    NEXT_SONG:

    PUSH

    ACC

    ;下一曲中断程序处理,保护现场

    PUSH

    DPH

    PUSH

    DPL

    CLR

    EA

    ;关中断

    MOV

    A,22H

    CJNE

    A,#N,Q

    ;是最后一首吗?

    MOV

    R7,#00H

    ;是最后一首,则R7指向第一首,演唱第一首

    MOV

    22H,#01H

    AJMP

    BACK

    Q:

    INC

    22H

    ;不是最后一首,唱下一首,R7内容加4,歌曲数加1

    MOV

    A,R7

    ADD

    A,#4

    MOV

    R7,A

    BACK:

    MOV

    R4,#00H

    ;数码管显视相应的歌曲编号

    MOV

    A,22H

    MOV

    DPTR,#OUT_TAB

    MOVC

    A,@A+DPTR

    MOV

    OUT_NUM,A

    ;********************************************

    MOV

    B,R0

    ;对下首要演唱的歌曲的几分拍进行调整,同时对R0中的内容进行保护

    MOV

    R4,#00H

    MOV

    R0,#30H

    MOV

    A,R7

    ADD

    A,R0

    MOV

    R0,A

    MOV

    DPH,@R0

    INC

    R0

    MOV

    DPL,@R0

    INC

    R0

    MOV

    A,R4

    INC

    R4

    MOVC

    A,@A+DPTR

    MOV

    26H,A

    ;结果存入26H单元中

    DEC

    R4

    MOV

    R0,B

    ;恢复R0中的内容

    ;********************************************

    POP

    DPL

    ;恢复现场

    POP

    DPH

    POP

    ACC

    SETB

    EA

    RETI

    ;中断返回

    LAST_SONG:

    PUSH

    ACC

    ;上一曲中断程序处理开始,保护现场

    PUSH

    DPH

    PUSH

    DPL

    CLR

    EA

    ;关中断

    MOV

    A,22H

    ;曲目数送A

    CJNE

    A,#1,QQ

    ;是否是第一首

    MOV

    22H,#N

    ;是第一首歌曲

    MOV

    B,#4

    ;将R7指向最后一首歌曲

    MOV

    A,#N-1

    MUL

    AB

    MOV

    R7,A

    AJMP

    BACK2

    ;处理结束

    QQ:

    DEC

    22H

    MOV

    A,R7

    ;R7减4

    SUBB

    A,#4

    MOV

    R7,A

    BACK2:

    MOV

    R4,#00H

    MOV

    A,22H

    MOV

    DPTR,#OUT_TAB

    MOVC

    A,@A+DPTR

    MOV

    OUT_NUM,A

    ;数码管显视相应歌曲的编号

    ;********************************************

    MOV

    B,R0;对下首要演唱的歌曲的几分拍进行调整,同时对R0中的内容进行保护

    MOV

    R4,#00H

    MOV

    R0,#30H

    MOV

    A,R7

    ADD

    A,R0

    MOV

    R0,A

    MOV

    DPH,@R0

    INC

    R0

    MOV

    DPL,@R0

    INC

    R0

    MOV

    A,R4

    INC

    R4

    MOVC

    A,@A+DPTR

    MOV

    26H,A

    ;结果存入26H单元中

    DEC

    R4

    MOV

    R0,B;R0中的内容恢复

    ;********************************************

    POP

    DPL

    ;恢复现场

    POP

    DPH

    POP

    ACC

    SETB

    EA

    RETI

    ;中断返回

    START_PAUSE:CPL

    F0

    ;开始/暂停中断处理程序,将标置位取反

    JB

    F0,RETURN

    ;为1返回

    SETB

    TR0

    ;为0则播放

    RETURN:

    RETI

    ;中断返回

    DELAY:

    MOV

    27H,26H

    ;音符演奏时间控制

    D2:

    MOV

    28H,#125

    D3:

    MOV

    29H,#248

    DJNZ

    29H,$

    DJNZ

    28H,D3

    DJNZ

    27H,D2

    DJNZ

    R2,DELAY

    RET

    OUT_TAB:

    DB

    3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH,77H,7CH,39H,5EH,79H,71H,73H

    ;共阴数码管显视用

    ;OUT_TAB:

    DB

    0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H,88H,83H,0C6H,0A1H,86H,8EH,0FFH

    ;共阳

    TABLE:

    DW

    SONG1,TABLE1,SONG2,TABLE2,SONG3,TABLE3

    TABLE1:DW

    64580,64684,64777,64820,64898,64968,65030

    DW

    63628,63835,64021,64103,64260,64400,64524

    SONG1:

    DB

    04H

    ;1=C

    2/4

    军港之夜

    DB

    32H,54H,52H,32H,54H,52H,32H,12H,12H,32H,32H,54H,52H,32H,52H,52H,32H,32H,21H,31H,24H,0E2H,0D1H,0E1H,0D2H,0C2H,14H,14H

    DB

    0C2H,32H,32H,12H,21H,31H,24H,32H,34H,0D2H,0C2H,14H,14H,32H,52H,52H,32H,52H,54H,32H,34H,31H,21H,12H,24H,24H

    DB

    34H,0E2H,0C2H,0D1H,0E1H,0D4H,12H,0E2H,32H,32H,0E2H,0D1H,0E1H,0D4H,0D2H,0E2H,32H,32H,0E2H,0E2H,0D1H,0E1H,0D4H

    DB

    22H,0D1H,11H,0E2H,0D2H,0C4H,0C4H,32H,52H,52H,32H,62H,5H,61H,54H,31H,52H,31H,12H,31H,31H,32H,54H,52H,32H,52H,52H,32H

    DB

    32H,21H,31H,24H,0E2H,0D1H,0E1H,0D2H,0C2H,34H,34H,32H,52H,52,32H,62H,51H,61H,54H,31H,52H,31H,12H,32H,12H,32H,32H,54H,52H

    DB

    32H,52H,52H,31H,31H,32H,21H,31H,24H,0E2H,0D1H,0E1H,0D2H,0C2H,14H,14H

    DB

    32H,52H,52H,32H,32H,21H,31H,24H,0E2H,0D1H,0E1H,0D2H,0C2H,14H,14H

    DB

    0C2H,32H,32H,12H,21H,31H,24H,32H,34H,0D2H,0C2H,14H,14H,32H,52H,52H,32H,52H,54H,32H,34H,31H,21H,12H,24H,24H

    DB

    34H,0E2H,0C2H,0D1H,0E1H,0D4H,12H,0E2H,32H,32H,0E2H,0D1H,0E1H,0D4H,0D2H,0E2H,32H,32H,0E2H,0E2H,0D1H,0E1H,0D4H

    DB

    22H,0D1H,11H,0E2H,0D2H,0C4H,0C4H,32H,52H,52H,32H,62H,5H,61H,54H,31H,52H,31H,12H,31H,31H,32H,54H,52H,32H,52H,52H,32H

    DB

    32H,21H,31H,24H,0E2H,0D1H,0E1H,0D2H,0C2H,34H,34H,32H,52H,52,32H,62H,51H,61H,54H,31H,52H,31H,12H,32H,12H,32H,32H,54H,52H

    DB

    32H,52H,52H,31H,31H,32H,21H,31H,24H,0E2H,0D1H,0E1H,0D2H,0C2H,14H,14H

    DB

    32H,52H,52H,32H,32H,21H,31H,24H,74H,0D2H,0C2H,14H,14H,14H,14H

    DB

    00H

    TABLE2:DW

    63835,64021,64103,64260,64400,64524,64580,64684,64777

    DW

    64820,64898,64968,65030,65058,65110,65157,65178

    SONG2:

    DB

    02H;1=C

    4/4

    死了都要爱

    DB

    04H,94H

    DB

    0E8H,0E4H,0E4H,0E8H,0E4H,0F4H,0D4H,0C4H,0B4H,84H,84H,92H,92H,94H,92H,02H

    DB

    0A4H,0A2H,0B2H,0B4H,0C4H,84H,82H,92H,94H,0A4H

    DB

    04H,0C2H,0C2H,0D4H,0C2H,0D2H,0D8H,0D4H,0D2H,92H

    DB

    0E8H,0E4H,0E4H,0E8H,0E4H,0F4H,0D4H,0C4H,0B4H,84H,84H,92H,92H,94H,92H,02H

    DB

    0A4H,0A2H,0B2H,0B4H,0C4H,0E8H,0D8H

    DB

    0C8H,0C8H,08H,08H,78H,28H,38H,34H,24H

    DB

    24H,64H,64H,24H,64H,72H,72H,78H,58H,54H,44H,38H,34H,14H,34H,84H,74H,74H,62H,62H,0D8H,78H,28H,38H,34H,24H

    DB

    24H,64H,64H,24H,64H,72H,72H,72H,94H,92H,94H,0A4H,58H,58H,54H,44H

    ;#音不准

    DB

    58H,58H,58H,58H,0A8H,0A8H,0A4H,0B4H,0A4H,84H,0A4H,94H,98H,98H,08H

    DB

    84H,82H,82H,82H,82H,94H,0A2H,94H,92H,82H,74H,72H,74H,72H,72H,72H,72H,92H,91H,91H,94H,54H,74H,94H

    ;;*************************************************

    DB

    0A8H,0A4H,0A2H,0B2H,0C4H,0B4H,0A4H,0A4H,0A4H,92H,92H,98H,82H,72H,78H,04H,0A4H,0A2H,0B2H,0B4H,0C4H,84H,82H,92H,94H,0A4H

    DB

    04H,0C4H,0D4H,0C4H,0C8H,04H,94H

    DB

    0E8H,0E4H,0E4H,0E8H,0E4H,0F4H,0D4H,0C4H,0B4H,84H,84H,92H,92H,94H,92H,02

    DB

    0A4H,0A2H,0B2H,0B4H,0C4H,84H,82H,92H,94H,0A4H,04H,0C2H,0C2H,0D4H,0D8H,0D4H,0D2H,92H

    DB

    0E8H,0E4H,0E4H,0E8H,0E4H,0F4H,0D4H,0C4H,0B4H,84H,84H,92H,92H,94H,92H,02

    DB

    0A4H,0A2H,0B2H,0B4H,0C4H,84H,82H,92H,94H,0A4H,04H,0C2H,0C2H,0D4H,0D8H,0D4H,0D2H,92H

    ;*************

    DB

    0A4H,0A2H,0B2H,0B3H,0C4H,0E8H,0D8H

    DB

    0C8H,0C8H,0C8H,08H

    DB

    00H

    TABLE3:

    DW

    64898,64968,65030,65086,65135,65158,65199,64260,64400,64524,64580,64684,64777,64862

    SONG3:

    DB

    03H

    ;G=2/4

    中华人民共和国国歌

    DB

    04H,04H,0C2H,14H,12H,12H,12H,11H,11H,0C2H,0D1H,0E1H,14H,14H,02H,32H,12H,21H,31H,52H,51H,51H,54H

    DB

    32H,31H,31H,12H,11H,31H,52H,51H,31H,24H,24H,24H,64H,54H,24H,34H,52H,34H,52H,32H,21H,31H,12H,11H,21H,34H,04H

    DB

    52H,51H,0D1H,12H,12H,32H,31H,31H,52H,51H,51H,22H,22H,22H,0D2H,0D1H,0D1H,24H,22H,0C2H,14H,12H,12H,34H,32H,32H,54H,54H,54H,54H

    DB

    12H,11H,31H,52H,51H,51H,64H,54H,32H,31H,11H,52H,52H,52H,32H,02H,12H,02H,0C4H,14H

    DB

    0A2H,0A1H,11H,52H,52H,52H,32H,02H,12H,02H,0C4H,14H,0C4H,14H,0C4H,14H,14H,04H

    DB

    04H,04H,04H,04H

    DB

    00H

    END;

    七、仿真过程综述

    拿到任务书后的首先想到的是觉得这次课程设计还是比较难的,因为单片机课程的学习是在很早以前了,现在突然要用它需要在把相关知识捡起来,这需要一定的时间;而且,这次课设还需要编程,变成一直是我的弱项。但还是要认真对待,就仔细的看了所有的设计题目,根据自己的爱好和能力,我最终选择了播放器。

    刚确定这个题目后觉得无从下手,不知道从什么开始做起。所以就在网上查阅了相关资料,大致浏览了一遍,看懂了几分,觉得应该从学习软件开始。因此就去图书馆借了一本相关的书,把仿真软件学了一遍并做了几个小例子练习了一下,就开始着手编程了。编程的过程是痛苦的,这需要很强的逻辑思维能力,这一部分只能耐心地慢慢来。经过查阅相关资料,和各种程序的拼凑,基本的程序是出来了,放到keil里调试时错误很多,在改错时又查阅大量的资料,曲曲折折的把程序改正好,最终形成一个.hex的文件。接下来画仿真图还是比较容易的,这一部分很轻松。当把程序加载进去开始仿真时又出现了问题,程序是对的,原理图是对的,可是一结合就是得不到想要的结果。在仔细研究,再加上和同学探讨,原来是所选择的元件有误,当把所有错误都改正以后,在仿真时就都成功了,该有的功能都有,该出现的显示也有了。

    八、调试过程中的主要难点及解决思路和办法

    编程调试中,用KILL将所编好的程序汇编,发现有好几处错误出现,经过仔细检查,发现一些是由于所输入的符号不是英文模式下,汇编机器无法识别,所以要将输入错误的符号在引文模式下重新输入一遍,就能改正了。

    还出现了一类的错误提示是由于汇编语言语法的错误。比如:语句CPL

    R1是不对的,因为它是无效的寄存器,只有修改成CPL

    RI才是对的。、

    仿真调试时,当把汇编好的.hex文件加入单片机中仿真时,结果又是并不是所期望的。在我第一次调试时,并没有播放出来歌曲,接下来试了好几次都不行,经过仔细分析和同学的交流,原来电容不是对应的,换了电容,又替换了原来的按键,结果再仿真时就成功了。所以在画原理图时选对元件很重要,只看到外观合适就用是不可以的。

    九、课设结果及分析、收获、体会和建议

    课程设计是培养学生综合运用所学知识,发现、提出、分析和解决实际问题,锻炼实践能力的重要环节,是对学生实际工作能力的具体训练和考察过程。随着科学技术发展的日新日异,单片机已经成为当今计算机应用中空前活跃的领域,在生活中可以说得是无处不在。因此作为电子信息工程专业的学生来说掌握单片机的开发技术是十分重要的。

    我的题目是音乐播放器硬软件的设计,通过这次课程设计我学到很多很多的东西。我学会了怎么样去制定计划,怎么样去实现这个计划,并掌握了在执行过程中怎么样去克服心理上的不良情绪。不仅巩固了以前所学过的知识,而且学到了很多在书本上所没有学到过的知识,能熟练地运用网络、图书馆等相关资料查阅需要的知识,学会了用proteus软件和keil软件来设计和调试基于单片机的功能实现的方法,了解并提高了自己对汇编语言的掌握程度,可以进行一些简单的编程。通过这次课程设计使我懂得了理论与实际相结合是很重要的,只有理论知识是远远不够的,只有把所学的理论知识与实践相结合起来,从理论中得出结论,从实践中证实结论,从而提高自己的实际动手能力和独立思考的能力。

    同时在设计的过程中发现了自己的不足之处,对以前所学过的知识理解得不够深刻,掌握得不够牢固,对单片机汇编语言掌握得不够好。这次课程设计通过自己的努力,同学的帮助,还有老师的辛勤指导下,最终顺利完成。

    十、参考文献

    [1]

    郑郁正.单片机原理及应用.四川大学出版社,2003。

    [2]

    谭浩强.C程序设计(第二版).清华大学出版社,1999。

    [3]

    王晓君.安国臣等.

    MCS—51及兼容单片机原理与选型.

    北京-电子工业出版社,2003。

    [4]

    李启炎.

    Protel

    99SE应用教程.

    上海-同济大学出版社

    2005.2

    单片机及DSP课程设计报告

    业:

    电子信息工程

    级:

    信息102

    名:

    王文婕

    号:

    201027073

    指导教师:

    吴则举

    间:2013-06-17~28

    通信与电子工程学院

    教师评语:

    教师:

    日期:

    设计过程30﹪

    课设报告40﹪

    答辩30﹪

    总成绩

    篇2:单片机实验报告册填写

    单片机实验报告册填写 本文关键词:单片机,填写,实验,报告

    单片机实验报告册填写 本文简介:单片机实验报告册填写指导编写:HUBU2015级通信工程xmx2017年5月23日次数实验项目名称时间填写内容建议151单片机LED点阵屏字符显示器设计与实现:原理设计、硬件proteus仿真搭建第9周周二、周五2017年4月18日、21日单片机设计的原理用protues画出硬件图2系统软件设计第1

    单片机实验报告册填写 本文内容:

    单片机实验报告册

    填写指导

    编写:HUBU2015级通信工程

    xmx

    2017年5月23日

    次数

    时间

    1

    51单片机LED点阵屏字符显示器设计与实现:原理设计、硬件proteus仿真搭建

    第9周周二、周五

    2017年4月18日、21日

    单片机设计的原理

    用protues画出硬件图

    2

    系统软件设计

    第10周周二、周五

    2017年4月25日、28日

    代码的设计

    3

    系统proteus仿真调试

    第11周周二、周五

    2017年5月2日、5日

    用Keil生成.hex文件

    计算机仿真结果

    4

    实物硬件搭建

    第12周周二、周五

    2017年5月9日、12日

    所需元器件的选择

    5

    实物硬件搭建

    第13周周二、周五

    2017年5月16日、19日

    元件引脚的判断

    焊接

    6

    实物系统调试

    第14周周二、周五

    2017年5月23日、26日

    单片机的烧录

    7

    实物系统调试

    第15周周二、周五

    2017年5月30日、6月2日

    接电源测试

    (最好情节波折)

    8

    实物系统验收

    第16周周二、周五

    2017年6月6日、9日

    老师检测

    9

    心得与体会

    实验室:计信大楼410或510(课表)

    实验一

    51单片机LED点阵屏字符显示器设计与实现:

    原理设计、硬件proteus仿真搭建

    系统硬件设计同设计报告

    1、新建protues文件

    2、功能模块:元件选择

    端口模块

    测量仪器

    3、(1)点击P添加元器件(2)元器件清单

    4、搭建电路

    选中元器件然后放在电路图合适位置,连线。

    本实验的Vcc和地在端口原件,分别是power和ground

    5、完成硬件proteus仿真搭建

    实验二

    系统软件设计

    系统软件设计同设计报告

    实验三

    系统proteus仿真调试

    1、打开keil,先新建一个工程

    2、单片机型号的选择

    3、新建c程序

    点击file/new后点左上角的保存按钮,输入文件名,记住扩展名.c,接着点击target

    1,右键source

    group

    1,出现可以选择。

    点击add

    files

    to

    group

    s

    source

    ,选择刚才的c文件,点击add,后close。

    4、创建hex

    单击上面方框target

    1的右边的第一个按钮。

    选择output,勾选creat

    hex

    file,编程完后编译,连接等步骤。

    5、成功生成.hex文件

    6、打开protues双击单片机,然后将编译好的hex导入,点确定。

    7、最后运行仿真即可。

    8、仿真结果

    实验四

    实物硬件搭建(一)

    硬件搭建的器材选择

    AT89C51单片机为很多嵌入式控制系统提供了一种灵活性高且价廉的方案。

    管脚说明

    VCC:供电电压。

    GND:接地。

    P0口:P0口为一个8位漏级开路双向I/O口,每脚可吸收8TTL门电流。当P1口的管脚第一次写1时,被定义为高阻输入。P0能够用于外部程序数据存储器,它可以被定义为数据/地址的第八位。在FIASH编程时,P0

    口作为原码输入口,当FIASH进行校验时,P0输出原码,此时P0外部必须被拉高。

    P1口:P1口是一个内部提供上拉电阻的8位双向I/O口,P1口缓冲器能接收输出4TTL门电流。P1口管脚写入1后,被内部上拉为高,可用作输入,P1口被外部下拉为低电平时,将输出电流,这是由于内部上拉的缘故。在FLASH编程和校验时,P1口作为第八位地址接收。

    P2口:P2口为一个内部上拉电阻的8位双向I/O口,P2口缓冲器可接收,输出4个TTL门电流,当P2口被写“1”时,其管脚被内部上拉电阻拉高,且作为输入。并因此作为输入时,P2口的管脚被外部拉低,将输出电流。这是由于内部上拉的缘故。P2口当用于外部程序存储器或16位地址外部数据存储器进行存取时,P2口输出地址的高八位。在给出地址“1”时,它利用内部上拉优势,当对外部八位地址数据存储器进行读写时,P2口输出其特殊功能寄存器的内容。P2口在FLASH编程和校验时接收高八位地址信号和控制信号。

    P3口:P3口管脚是8个带内部上拉电阻的双向I/O口,可接收输出4个TTL门电流。当P3口写入“1”后,它们被内部上拉为高电平,并用作输入。作为输入,由于外部下拉为低电平,P3口将输出电流(ILL)这是由于上拉的缘故。

    P3口也可作为AT89C51的一些特殊功能口,如下表所示:

    管脚

    备选功能

    P3.0

    RXD(串行输入口)

    P3.1

    TXD(串行输出口)

    P3.2

    /INT0(外部中断0)

    P3.3

    /INT1(外部中断1)

    P3.4

    T0(记时器0外部输入)

    P3.5

    T1(记时器1外部输入)

    P3.6

    /WR(外部数据存储器写选通)

    P3.7

    /RD(外部数据存储器读选通)

    P3口同时为闪烁编程和编程校验接收一些控制信号。

    RST:复位输入。当振荡器复位器件时,要保持RST脚两个机器周期的高电平时间ALE/PROG:当访问外部存储器时,地址锁存允许的输出电平用于锁存地址的地位字节。

    在FLASH编程期间,此引脚用于输入编程脉冲。在平时,ALE端以不变的频率周期输出正脉冲信号,此频率为振荡器频率的1/6。因此它可用作对外部输出的脉冲或用于定时目的。然而要注意的是:每当用作外部数据存储器时,将跳过一个ALE脉冲。如想禁止ALE的输出可在SFR8EH地址上置0。此时,

    ALE只有在执行MOVX,MOVC指令是ALE才起作用。另外,该引脚被略微拉高。如果微处理器在外部执行状态ALE禁止,置位无效。

    /PSEN:外部程序存储器的选通信号。在由外部程序存储器取指期间,每个机器周期两次/PSEN有效。但在访问外部数据存储器时,这两次有效的/PSEN信号将不出现。

    /EA/VPP:当/EA保持低电平时,则在此期间外部程序存储器(0000H-FFFFH),不管是否有内部程序存储器。注意加密方式1时,/EA将内部锁定为RESET;当/EA端保持高电平时,此间内部程序存储器。在FLASH编程期间,此引脚也用于施加12V编程电源(VPP)。

    XTAL1:反向振荡放大器的输入及内部时钟工作电路的输入。

    XTAL2:来自反向振荡器的输出

    88点阵相关原理参考设计报告

    实验五

    实物硬件搭建(二)

    焊接过程中出现的问题及解决方案

    1焊接方式

    由于本实验中涉及的元器件管脚有些多,且排版较复杂,再加上焊锡有限,所以就放弃拖焊的焊接方式。采用利用导线连接管脚的方式进行焊接。

    2元器件注意事项

    对于管脚,要剪切的合适,焊接好后就不要再动该器件了,有时候修改不好,反而使焊接好的板子弄坏了,比如把电路板上镀的铜箔线刮断,元器件损坏等,再进行补救都不好补了。我曾经就这样弄坏了一个电路板。

    3焊接注意事项

    ①焊接电路时如果用焊锡量普遍较大,以至于有些都堆成了一个锡球,这样不但难看而且还不牢固,合适的用锡量是焊出来的焊盘是一个往内凹的锥面。焊锡过少,不足以包裹焊点。

    ②冷焊。焊接时烙铁温度过低或加热时间不足,焊锡未完全熔化、浸润、焊锡表面不光亮(不光滑),有细小裂纹。

    ③夹松香焊接,焊锡与元器件或印刷板之间夹杂着一层松香,造成电连接不良。若夹杂加热不足的松香,则焊点下有一层黄褐色松香膜

    点阵正面向上,ARK

    SZ411288K在左边时,如上图所示,此时点阵为“行共阴”结构:

    R表示行线

    C表示列线,

    当Rx低电平Cy高电平时,则相应(x,y)处的LED亮(参考原点为左上角)

    LED测定引脚步骤如下

    1.【定正负极】把万用表拨到电阻档×10,先用黑色探针(输出高电平)随意选择一个引脚,红色探针碰余下的引脚,看点阵有没发光,没发光就用黑色探针再选择一个引脚,红色探针碰余下的引脚,当点阵发光,则这时黑色探针接触的那个引脚为正极,红色探针碰到就发光的7个引脚为负极,剩下的6个引脚为正极。

    2.【引脚编号】先把器件的引脚正负分布情况记下来,正极(行)用数字表示,负极(列)用字母表示,先定负极引脚编号,黑色探针选定一个正极引脚,红色点负极引脚,看是第几列的二极管发光,第一列就在引脚写A,第二列就在引脚写B,第三列以此类推。

    这样就点阵的一半引脚都编号了。剩下的正极引脚用同样的方法,第一行的亮就在引脚标1,第二行就在引脚标2,第三行以此类推。

    实验六

    实物系统调试(一)

    1烧录准备:

    2

    插芯片

    芯片缺口方向对准插槽正方向

    芯片缺口方向对准拉杆方向

    3拉下插槽拉杆:

    拉下之后如图所示

    4插线

    插线图

    运行烧录软件

    选择单片机型号和COM口:

    打开程序文件

    开始烧录

    打开EP51电源开关

    烧录完成

    实验七

    实物系统调试(二)

    亮度有限

    误差分析

    1部分节点可能虚焊,导致接触不良,所以在LED上有些点显示的亮度没有预计的那么亮。

    2在烧录程序的过程中,单片机被我反复拔下来几次,有些管脚已经不太牢固,甚至快脱落,所以插上去之后单片机管脚与底座可能接触不良。

    实验八

    实物系统验收

    成功!

    心得体会范本

    第一篇

    在这次课程设计的整个过程中,我们做了一次全面、较规范的设计练习,全面地温习了以前所学过的知识,用理论联系实际并结合单片机原理课程和解决实际问题,巩固、加深和扩展了有关单片机设计方面的知识。尤其重要的是让我们养成了科学的习惯,在设计过程中一定要注意掌握设计进度,按预定计划完成阶段性的目标,在底图设计阶段,注意设计计算与结构设计画图交替进行,采用正确的设计方法。在整个设计过程中注意对设计资料和计算数据的保存和积累,保持记录的完整性。在课程设计的实践中进行了设计基本技能的训练,掌握了查阅和使用标准、规范、手册、图册、及相关技术资料的基本技能以及计算、数据处理等方面的能力。

    通过对通用51系列单片机机处理器、常用元器件的设计,掌握了一般单片机设计的程序和方法,让我们对整个单片机程序的设计,C51语言有了一个比较深的理解。

    还有就是增强了自身的动手能力。在这次课程设计中,我主要负责的是程序设计和单片机部件焊接。通过参考相关的程序设计,自己写出了主要的程序代码。同时将元器件正确焊接到基板上。这些都是将以前书本上讲的或是没有讲的,通过一次课程设计具体的实施,使自己的动手能力和独立设计能力真正得到锻炼,对于以后我们的发展与学习来说,都可以看作一笔不小的财富,前面还有很多需要我们去尝试。

    同时不能忽略的是,这一次课程设计是以小组为单位的。在这次课程设计中,我和自己的小组成员学会了密切分工配合。而这样的合作能力和团队精神在今后的学习工作中是很重要的。

    第二篇

    本文设计一个8×8点阵LED图文显示屏。经过测试,LED各点亮度均匀,可显示图形和文字,且稳定清晰无串扰。本系统具有硬件少、结构简单、容易实现,性能稳定可靠等特点。通过查阅资料,了解了LED发光原理和LED显示技术的原理和现状。在

    LED点阵显示屏的设计过程中,学到了很多东西,复习了Protel、Proteus、Keil等软件的基础应用。基本了解了整个嵌入式开发的流程。这次设计开发,本人受益非浅,在以后的开发过程中一定总结经验,吸取教训,为以后的学习工作打好基础。

    本论文是在鞠老师的悉心指导下完成的,从课题的选择到论文的最终完成的每一个环节,自始至终得到鞠老师的精心指导和帮助。老师渊博的学识、严谨的治学态度、求实创新的工作作风、对事业和科学的执着追求,以及对我们小组谆谆教诲给我留下了深刻的印象,使我受益终身。在课题的研究设计过程中,我不仅从鞠老师那里学到许多专业知识,更重要的是学会了学习新知识并将其巩固的方法,这无疑是一把开启未来生活的钥匙,特此向鞠老师表示衷心的感谢!

    第三篇

    本LED显示屏控制系统已能实现LED显示的基本功能,并且体现出了相对于传统的基于8位/16位普通单片机的显示系统的优越性,如上设计所述,但由于本组成员水平和设计时间有限,离一个完全实用的,能够完全符合市场需求的LED显示系统还有一定的差距.因此,在以后的研制过程中,还需要在以下几个方面做大量的工作:

    (1)扮在系统抗干扰方面,不论是硬件部分还是软件部分,都还必须在工作现场根据实际情况进行大量的实验,调试工作,才能最终实现LED显示系统的可靠工作。

    (2)在增强图文屏显示效果上,可使用双色屏或多色屏,双色(或多色)屏所使用的LED点阵单元,在同一点阵位置上安装了两个(或多个)不同颜色的LED发光灯,对不同颜色的显示控制方面进行进一步的设计,以满足显示更加丰富多彩的图形和文字。

    (3)由于ARM微处理器的强大运算能力和丰富的片内外围,可将LED显示屏方便地接入以太网络,每一个

    LED显示控制器可作为一个网络节点,方便的组成基于工业以太网的LED显示网络,在这方面还应该进行进一步的研究与实验,以满足更高,更复杂的使用要求。

    在这次课程设计的整个过程中,我们做了一次全面、较规范的设计练习,全面地温习了以前所学过的知识,用理论联系实际并结合单片机原理课程和解决实际问题,巩固、加深和扩展了有关单片机设计方面的知识。尤其重要的是让我们养成了科学的习惯,在设计过程中一定要注意掌握设计进度,按预定计划完成阶段性的目标,在底图设计阶段,注意设计计算与结构设计画图交替进行,采用正确的设计方法。在整个设计过程中注意对设计资料和计算数据的保存和积累,保持记录的完整性。在课程设计的实践中进行了设计基本技能的训练,掌握了查阅和使用标准、规范、手册、图册、及相关技术资料的基本技能以及计算、数据处理等方面的能力。

    通过对通用89C51单片机机处理器铁电存储器芯片、常用元器件的设计,掌握了一般单片机设计的程序和方法,让我们对整个单片机程序的设计,C51语言有了一个比较深的理解。

    还有就是增强了自身的动手能力。在这次课程设计中,我主要负责的是程序设计和单片机部件焊接。通过参考相关的程序设计,自己写出了主要的程序代码。同时将元器件正确焊接到基板上。这些都是将以前书本上讲的或是没有讲的,通过一次课程设计具体的实施,使自己的动手能力和独立设计能力真正得到锻炼,对于以后我们的发展与学习来说,都可以看作一笔不小的财富,前面还有很多需要我们去尝试。

    同时不能忽略的是,这一次课程设计是以小组为单位的。在这次课程设计中,我和自己的小组成员学会了密切分工配合。而这样的合作能力和团队精神在今后的学习工作中是很重要的。

    19

    篇3:《单片机实验报告》

    《单片机实验报告》word版 本文关键词:单片机,实验,报告,word

    《单片机实验报告》word版 本文简介:实验报告课程名称计算机测控技术实验项目单片机实验仪器keil4.0系别仪器科学与光电工程专业测控技术与仪器班级/学号学生姓名实验日期成绩指导教师实验一单片机程序设计基础一.实验设备硬件使用的是单片机SS-8051高级单片机实验仪,软件使用的是Keiluv2软件开发环境。二.实验目的熟悉单片机的调试环

    《单片机实验报告》word版 本文内容:

    课程名称

    计算机测控技术

    实验项目

    单片机

    实验仪器

    keil4.0

    仪器科学与光电工程

    测控技术与仪器

    班级/学号

    学生姓名

    实验日期

    指导教师

    实验一

    单片机程序设计基础

    一.实验设备

    硬件使用的是单片机SS-8051高级单片机实验仪,软件使用的是Keil

    uv2软件开发环境。

    二.

    实验目的

    熟悉单片机的调试环境与指令系统

    三.实验内容

    自编一个汇编小程序,使用Keil

    uv2软件开发环境,进行编译、调试、运行程序。

    Keil

    uv2

    操作流程的简单说明:

    1.

    NEW

    PROJECT

    ↙,建一个新的项目,取项目名并存于F:盘下(最好在F盘下建一个自己的文件夹)。在出现的对

    话框中选Atmel/AT89c51

    芯片型号;或者可以从File/

    devices

    database

    的对话框中选择芯片型号。

    2.

    FILE/

    NEW

    ↙,建立一个新文件,在打开的窗口下输入程序,取文件名并存盘。

    3.

    选中Source

    Group1点击鼠标右键,在出现的菜单中选中

    Add

    Files

    to

    Group

    `

    Source

    Group1`,将文件加入到项目中。

    4.

    选中Target1点击鼠标右键,在出现的菜单中选中Options

    for

    Target

    `

    Target1`:

    l

    在出现的对话框中打开output项的对话框,选中`Great

    HEX

    File`,以保证编译时能生成.HEX文件,为后续下载程序做准备。

    l

    在出现的对话框中打开debug项的对话框,选中`Use

    “keil

    monitor

    51-driver”,并将其下的选项均选中系统处于在线下载调试状态。。

    5.

    Project/Build

    target或Rebuild

    all

    target

    files,编译所输入的程序,检查语法错误,更改错误直至无错为止。

    6.

    Debug/

    ‘Start/Stop

    Debug

    Session’

    ↙,开始调试程序,单步或断点运行程序额,检查逻辑错误。

    4.

    实验程序

    #include

    unsigned

    int

    code

    chOriginalSet[10]={30,30,550,30,8,30,550,30,8,1};

    /*阀序时间间隔设置*/

    unsigned

    char

    code

    chFarXu[9]={0x00,0x51,0x55,0x45,0x80,0x62,0x6a,0x4a,0x80};

    /*阀序*/

    void

    delay(unsigned

    int

    times);

    main()

    {

    unsigned

    char

    i;

    while(1)

    {

    for(i=1;i

    #include

    typedef

    unsigned

    char

    Byte;

    BytedataAA;

    voidOUT(void)

    {

    SBUF=AA;/*发送字符子程序*/

    wait:if(TI==1)

    {

    TI=0;

    goto

    end1;

    }/*发送完毕返回*/

    gotowait;/*否则等待TI=1*/

    end1:_nop_();

    }

    void

    IN(void)

    {

    in1:if(RI==1)

    {

    RI=0;

    goto

    end2;

    }/*接收到字符(RI=1)时启动接收*/

    goto

    in1;/*否则查询是否接收到字符*/

    end2:AA=SBUF;/*启动接收*/

    }

    voidmain(void)

    {

    TH1=0xF3;/*设置波特率为2400*/

    TL1=0xF3;/*设置波特率为2400*/

    TMOD=0x20;/*选择计时器1方式2产生波特率*/

    IE=0;/*禁止所有的中断,采用查询方式*/

    SCON=0x50;/*设置串口为方式1,接收允许*/

    TR1=1;/*启动定时器1*/

    AGAIN:IN();/*接收字符子程序*/

    OUT();/*回送字符子程序*/

    goto

    AGAIN;/*循环*/

    }

    7.

    实验截图

    实验三

    V/F转换电路实验

    1、

    实验内容

    V/F转换电路的调试。

    2、

    实验要求

    1、

    在了解LM331工作原理(转换原理)的基础上,考虑以下几个问题:输入电压范围;输出频率范围;输入和输出间的对应关系。

    2、

    调试电路,直至V/F转换器可以正确输出波形。如果V/F转换器没有输出或输出波形不理想,请分析查找原因,并将波形调至等占空比。

    3、

    用示波器、频率计等工具观察V/F转换器的输出波形,观察定标调整环节W1,W2和W3对波形的影响。

    4、

    通过实测数据分析V/F转换器的线性,画出实际的V、F对应关系。

    3、

    实验电路图

    四、实验数据处理

    V(V)

    4.973

    4.029

    3.500

    3.005

    2.499

    1.999

    1.504

    1.001

    0.502

    F(Hz)

    6.64

    5.38

    4.63

    4.00

    3.32

    2.66

    2.00

    1.32

    0.67

    实验四

    V/F转换的数据采集

    一.

    实验内容

    连线并编制程序:使用定时器和计数器完成

    LM331脉冲输出信号的采集功能,

    对采集的数据进行处理,最终得到频率值。

    二.

    实验目的

    1.

    定时器中断的使用;

    2.

    学习定时器中断间隔时间的计算;

    3.

    掌握计数器的使用方法;

    4.

    学习中断处理程序的编程方法。

    三.

    原理简述

    1.定时器/计数器的输入脉冲周期与机器周期一样,为振荡器频率的1/12。本实验中时钟频率为12M,现要采用中断方法来实现1秒延时,要在定时器1中设置一个时间常数,使其每隔0.05秒产生一次中断,CPU响应中断后R0中计数值减一,令(R0)=14H,即可实现1秒的延时,

    时间常数可按下法确定:

    机器周期=12/晶振频率=12/12=1uS

    定时器需设初值为X,则(2^16—X)*1=50000uS

    求出X=15536

    化为十六进制:X=3CB0H,故初始值为:TH1=3CH,TL1=B0H。

    2.

    初始化程序

    包括定时器初始化和中断系统初始化,主要对IP,IE,TCON,TMOD的相应位进行正确的设置,并将时间常数送入定时器中。由于只有定时器中断,IP不必设置。

    注意一点:定时器1初始化时建议用如下的指令:

    ANLTMOD,#0FH

    ORLTMOD,#10H

    3.

    设计中断服务程序和主程序

    中断服务程序除了要完成计数减1工作外,还要将时间常数重新送入定时器中,为下一次中断做准备。主程序则对计数器的数值进行处理,转换成频率值。

    实验五

    7279键盘显示控制实验

    一.

    实验题目

    连线并编制程序,将HD7279A的全部编码送HD7279A显示,以一秒钟为间隔显示下一位,以前的显示内容左移。

    二.

    实验目的

    1.

    了解HD7279A键盘显示芯片的基本应用;

    2.

    掌握HD7279A键盘显示芯片的接口电路及编程方法。

    三.

    原理简述

    HD7279A是一片具有串行接口的,可同时驱动8位共阴式数码管(或64只独立LED)的智能显示驱动芯片,该芯片同时还可连接多达64键的键盘矩阵,单片即可完成LED显示、键盘接口的全部功能。

    HD7279A内部含有译码器,可直接接受BCD码或16进制码,并同时具有2种译码方式,此外还有多种控制命令,如消隐、闪烁、左移、右移、段寻址等。命令的具体形式可查阅HD7279A相关的技术资料。

    四.

    实验电路

    五.

    连线方法

    电路单元

    2单元

    6单元

    8单元

    9单元

    连接一

    P1.2-P1.5

    DATA,/KEY,/CS,/CLK

    (JP38.2-JP38.5)

    连接二

    左边的DG0-DG5

    6G-1G

    连接三

    SA-DP

    B7-B0

    连接四

    右边的DG0-DG3

    C0-C3

    连接五

    SA-SC

    C4-C6

    连接六

    JP16跳线接GND

    另外,在实验之前,应将8单元的U7(7406)和U6(74LS245)芯片取下,因7279已经有直接驱动数码管的能力,如果另外放置驱动芯片,反而会影响数码管的显示效果。

    六.

    实验程序

    程序清单(C51):

    #include/*C51内部资源定义*/

    #include

    typedef

    unsigned

    char

    Byte;/*下面的程序中用Byte代替unsigned

    char*/

    bdata

    Byte

    BIT_COUNT,TIMER,TIMER1,TEN,DATA_IN,DATA_OUT,AA,BB;

    sbit

    data_in0=DATA_IN^0;

    sbit

    data_out7=DATA_OUT^7;

    sbit

    DAT=P1^2;/*HD7279A的DATA连接于P1.2*/

    sbit

    KEY=P1^3;/*HD7279A的KEY(键盘中断信号)连接于P1.3*/

    sbit

    CS=P1^4;/*HD7279A的CS(片选信号)连接于P1.4*/

    sbit

    CLK=P1^5;/*HD7279A的CLK连接于P1.5*/

    void

    SEND(void);/*发送*/

    void

    LONG_DELAY(void);/*长延时*/

    void

    SHORT_DELAY(void);/*短延时*/

    void

    RECEIVE(void);/*接收*/

    void

    main(void)/*主程序*/

    {

    START:_nop_();/*启动,短延时几微秒*/

    P1=0xDB;

    /*给P1赋值0xDB*/

    TIMER=50;/*定时50秒*/

    START_DELAY:TIMER1=255;/*定时255秒*/

    START_DELAY1:TIMER1--;/**/

    if(TIMER1>0)

    goto

    START_DELAY1;/*如果TIMER1大于0跳转到START_DELAY1*/

    TIMER--;/**/

    if(TIMER>0)

    goto

    START_DELAY;/*如果TIMER大于0跳转到START_DELAY*/

    DATA_OUT=0xA4;

    /*给DATA_OUT赋值0xA4*/

    SEND();

    /*发送数据*/

    CS=1;

    /*片选置1*/

    MAIN1:if(KEY==1)

    goto

    MAIN1;

    /*如果键盘中断信号为1,跳转到MAIN1*/

    DATA_OUT=0x15;

    /*DATA_OUT赋值0x15*/

    SEND();

    /*发送*/

    RECEIVE();

    /*接收*/

    CS=1;

    /*片选为1*/

    AA=DATA_IN;

    /*给AA赋值DATA_IN*/

    if(AA==6)BB=1;/*如果AA为6,BB为1*/

    if(AA==5)BB=2;/*如果AA为5,BB为2*/

    if(AA==4)BB=3;/*如果AA为4,BB为3*/

    if(AA==14)BB=4;/*如果AA为14,BB为4*/

    if(AA==13)BB=5;/*如果AA为13,BB为5*/

    if(AA==12)BB=6;/*如果AA为12,BB为6*/

    if(AA==22)BB=7;/*如果AA为22,BB为7*/

    if(AA==21)BB=8;/*如果AA为21,BB为8*/

    if(AA==20)BB=9;/*如果AA为20,BB为9*/

    if(AA==30)BB=11;/*如果AA为30,BB为11*/

    if(AA==29)BB=0;/*如果AA为29,BB为0*/

    if(AA==28)BB=12;/*如果AA为28,BB为12*/

    TEN=0;/*MOVTEN,A*/

    DATA_OUT=0xA1;/*MOVDATA_OUT,#10100001B*/

    SEND();/*CALLSEND*/

    DATA_OUT=0xA1;/*MOVDATA_OUT,#10100001B*/

    SEND();/*CALLSEND*/

    DATA_OUT=0x81;/*MOVDATA_OUT,#10000001B*/

    SEND();/*CALLSEND*/

    DATA_OUT=TEN;/*MOVDATA_OUT,TEN*/

    SEND();/*CALLSEND*/

    DATA_OUT=0x80;/*MOVDATA_OUT,#10000000B*/

    SEND();/*CALLSEND*/

    DATA_OUT=BB;/*MOVDATA_OUT,B*/

    SEND();/*CALLSEND*/

    CS=1;

    /*片选信号置1*/

    WAIT:if(KEY==0)

    goto

    WAIT;

    goto

    MAIN1;

    /*如果KEY为0,跳转到WAIT,否则跳转到MAIN1*/

    }

    void

    SEND(void)

    /*发送子程序*/

    {

    BIT_COUNT=8;

    /*统计为8*/

    CS=0;

    /*片选置0*/

    LONG_DELAY();

    /*长延时*/

    SEND_LOOP:CY=data_out7;

    /*发送循环*/

    DAT=CY;

    /*引脚的状态*/

    CLK=1;

    /*时钟信号为1*/

    AA=DATA_OUT;

    /*给AA赋值DATA_OUT*/

    AA=_crol_(AA,1);/*_crol_函数在这里是把左边的一个零移到右边*/

    DATA_OUT=AA;/*给DATA_OUT赋值AA*/

    SHORT_DELAY();

    /*短延时*/

    CLK=0;/*时钟信号为0*/

    SHORT_DELAY;/*短延时*/

    BIT_COUNT--;

    if(BIT_COUNT>0)

    goto

    SEND_LOOP;/*DJNZBIT_COUNT,SEND_LOOP;

    DAT=0;/*将DAT清0*/

    }

    void

    LONG_DELAY(void)/*长延时子程序*/

    {

    TIMER=25;

    /*定时25秒*/

    DELAY_LOOP:TIMER--;/*延时循环*/

    if(TIMER>0)

    goto

    DELAY_LOOP;/*如果TIMER大于0,跳转到DELAY_LOOP*/

    }/*RET*/

    void

    SHORT_DELAY(void)/*短延时子程序*/

    {

    TIMER=4;/*MOVTIMER,#4;

    /**/

    DELAY_LOOP1:TIMER--;/*延时循环*/

    if(TIMER>0)

    goto

    DELAY_LOOP1;/*如果TIMER大于0,跳转到DELAY_LOOP1*/

    }

    void

    RECEIVE(void)/*接收子程序*/

    {

    BIT_COUNT=8;/*MOVBIT_COUNT,#8*/

    DAT=1;/*SETBDAT*/

    LONG_DELAY();/*CALLLONG_DELAY*/

    RECEIVE_LOOP:CLK=1;/*SETBCLK*/

    SHORT_DELAY();/*CALLSHORT_DELAY*/

    AA=DATA_IN;/*MOVA,DATA_IN*/

    AA=_crol_(AA,1);/*RLAA*/

    DATA_IN=AA;/*MOVDATA_IN,A*/

    CY=DAT;/*MOVC,DAT*/

    data_in0=CY;/*MOVDATA_IN.0,C*/

    CLK=0;/*CLRCLK*/

    SHORT_DELAY();/*CALLSHORT_DELAY*/

    BIT_COUNT--;/**/

    if(BIT_COUNT>0)

    goto

    RECEIVE_LOOP;/*如果BIT_COUNT大于0,跳转到DELAY_LOOP*/

    DAT=0;/*CLR

    DAT*/

    }

    七.

    实验截图

    实验六

    电机调速控制实验

    一.

    实验内容

    连线并编制程序,产生脉冲信号,控制直流电动机的运行。

    二.

    实验目的

    1.

    掌握采用单片机控制直流电动机的硬件接口技术。

    2.

    掌握直流电动机驱动程序的设计与调试方法。

    3.

    熟悉直流电动机的工作特性。

    三.

    实验电路

    4.

    连线方法

    电路单元

    2单元

    电机单元

    电机单元

    连接一

    P10-P13

    AD4-AD7

    连接二

    GND

    CS1

    连接三

    GND

    GND(有跳线)

    连接四

    VCC

    VCC(有跳线)

    5.

    实验程序

    #include

    typedef

    unsigned

    char

    Byte;

    sbit

    PAA=P1^0;

    sbit

    PBB=P1^2;

    sbit

    PCC=P1^1;

    sbit

    PDD=P1^3;//设置引脚

    void

    DelayXms()//延时程序

    {

    int

    i,j;

    for(i=0;i

    #include

    int

    f,f0;

    void

    main()

    {

    TMOD=0X51;

    TH0=0X9E;

    TL0=0X58;

    TH1=0X00;

    TL1=0X00;

    ET0=1;

    EA=1;

    TR0=1;

    TR1=1;

    while(1);

    }

    void

    time1()

    interrupt

    1

    using

    2

    {

    EA=0;

    TR0=0;

    TR1=0;

    f=TL1+TH1*256;

    f0=f*2;

    }

    八.

    实验截图

    实验八

    微型打印机接口控制实验

    一.

    实验内容:

    将实验仪接上微型打印机,控制打印机打印出各种效果的汉字和字符。

    二.

    实验目的:

    1.

    了解微型打印机接口及其打印字符的方法;

    2.

    了解微型打印机打印汉字的方法;

    3.

    了解单片机与微型打印机的连线方法。

    三.

    有关说明:

    l

    并行接口连接

    接口与引脚定义:本系列打印机并口与CENTRONICS

    兼容,支持BUSY/ACK

    握手协议,接口插座如下图:

    并行接口各引脚信号的定义如下图表所示:

    注:

    1.“入”表示输入到打印机。

    2.“出”表示从打印机输出。

    3.信号的逻辑电平为TTL

    电平。

    l

    并行接口引脚信号时序

    并口时序如下图所示:

    四.

    实验电路:

    五.

    连线方法:

    电路单元

    第2单元

    打印机

    连接1

    P0.0-P0.7

    Data1-Data8(3,5,7,9,11,13,15,17)

    连接2

    P3.7

    /STB(1)

    连接3

    P3.2(INT0)

    BUSY(21)

    连接4

    Gnd

    18

    六.

    实验程序

    l

    单片机控制打印机时汇编例程

    BUSY

    EQU

    P3.2

    ;

    定义BUSY

    信号引脚

    nSTB

    EQU

    P3.7

    ;

    定义nSTB

    信号引脚

    JB

    BUSY,$

    ;

    等待打印机到空闲

    MOV

    P1,A

    ;

    送数据到数据口

    CLR

    nSTB

    ;

    置nSTB

    为低电平

    NOP

    ;

    延长nSTB

    信号脉冲宽度以满足时序要求

    nop

    nop

    SETB

    nSTB

    ;

    置nSTB

    为高电平(此时数据将被读入打印机)

    RET

    print_content:

    DB

    北京炜煌

    DB

    0dh

    END

    l

    单片机C51

    例程

    //

    北京炜煌科技打印机示例程序

    //

    Nocky

    Tian

    //

    2007-07-17

    #include

    //

    Hardware

    configuration

    #define

    PRINTER_DATA

    P1

    //

    定义打印机数据线端口

    sbit

    BUSY

    =

    P3^2;

    //

    定义打印机忙信号引脚

    sbit

    nSTB

    =

    P3^7;

    //

    定义打印机nSTB

    信号引脚

    sbit

    PE

    =

    P3^3;

    //

    定义打印机纸状态检测信号引脚

    sbit

    nACK

    =

    P3^2;

    //

    定义打印机应答信号引脚

    sbit

    nERR

    =

    P3^1;

    //

    定义打印机错误检测信号引脚

    sbit

    nSEL

    =

    P3^0;

    //

    定义打印机在线检测信号引脚

    #define

    CR

    0x0d

    #define

    LF

    0x0a

    void

    PrintByte(unsigned

    char

    byte_data);

    void

    PrintString(char*

    str);

    void

    PrintByteN(unsigned

    char*

    data_src,unsigned

    char

    N);

    void

    main(void)

    {

    char

    str[]

    =

    “Printer

    demo“;

    PrintString(“北京炜煌WH“);

    PrintByte(CR);

    while(1);

    }

    /*

    PrintByte()

    Send

    a

    byte

    to

    printer

    Nocky

    Tian

    @

    2006-7-17/

    #include

    void

    PrintByte(unsigned

    char

    byte_data)

    {

    while(

    BUSY

    ==

    1

    ){

    }

    PRINTER_DATA

    =

    byte_data;

    nSTB

    =

    0;

    _nop_();

    //

    调整nSTB

    信号脉宽

    nSTB

    =

    1;

    }

    /*

    PrintString()

    Print

    a

    string

    which

    is

    ending

    with

    a

    /0

    character

    To

    Excuted

    the

    print

    command

    a

    addition

    CR

    character

    is

    needed

    Nocky

    Tian

    @

    2006-7-17/

    void

    PrintString(char*

    str)

    {

    while(str

    ){

    PrintByte((str++));

    }

    }

    /*

    PrintByteN()

    Print

    N

    bytes

    through

    printer

    no

    more

    than

    255

    bytes

    could

    be

    printed

    by

    the

    function

    If

    more

    than

    255

    bytes

    need

    printing,the

    type

    of

    N

    need

    changing

    to

    unsigned

    int,even

    unsigned

    long

    if

    necessary.

    Nocky

    Tian

    @

    2006-07-17/

    void

    PrintByteN(

    unsigned

    char*

    data_src,//

    pointer

    to

    data

    source

    unsigned

    char

    N)

    //

    number

    of

    data(byte)

    {

    while(

    N--){

    PrintByte(*(data_src++));

    }

    }

    七.

    实验截图

    • 范文大全
    • 职场知识
    • 精美散文
    • 名著
    • 讲坛
    • 诗歌
    • 礼仪知识