首页 低频信号发生器的单片机设计

低频信号发生器的单片机设计

举报
开通vip

低频信号发生器的单片机设计单片机低频信号发生器的设计 单片机低频信号发生器的设计 一、系统分析 1、 系统实现方案 用80C51单片微型机实现整个系统的控制,并提供指令系统。用可编程接口芯片8255将CPU与外设相连,实现其间数据的并行传输。外设主要有:16*16显示屏——用于显示提示语;数字显示屏——回显键盘输入;波形发生器——显示不同频率的正弦波。通过键盘和显示电路,实现人机对话,执行频率和幅值的输入然后由单片机进行判断分析,最后输出需要的结果。 2、 基本功能 屏幕上显示:正弦波 4:50Hz 5:30Hz 6:20Hz 8:停 ,用...

低频信号发生器的单片机设计
单片机低频信号发生器的设计 单片机低频信号发生器的设计 一、系统分析 1、 系统实现方案 用80C51单片微型机实现整个系统的控制,并提供指令系统。用可编程接口芯片8255将CPU与外设相连,实现其间数据的并行传输。外设主要有:16*16显示屏——用于显示提示语;数字显示屏——回显键盘输入;波形发生器——显示不同频率的正弦波。通过键盘和显示电路,实现人机对话,执行频率和幅值的输入然后由单片机进行判断分析,最后输出需要的结果。 2、 基本功能 屏幕上显示:正弦波 4:50Hz 5:30Hz 6:20Hz 8:停 ,用户根据提示,从键盘上输入所选参数,在数字显示屏上回显,在波形发生器上显示相应频率的波形。 汇编语言控制程序的结构如下图示,在键盘输入过程中有相应提示。 二、系统硬件设计 1、​ 硬件线路图 见附录一 2、​ 芯片说明 ⑴8051单片机 MCS-51单片机内部结构: MCS-51单片机包括如下功能部件:一个8位中央处理器;4K/8KB的ROM;128/256B的RAM;32条I/O口;2个和3个(对8032/8052)定时器/计数器;1个具有5个中断源、2个优先级的嵌套中断结构;1个用于多微处理机通信、I/O或全双工UART(通用异步接收发生器)的串行I/O口,此外还有程序寄存器PC,程序状态寄存器PSW,堆栈寄存器SP,数据指针寄存器DPTR等部件,这些部件集成在一块芯片上,通过内部总线连接,构成完整的微型计算机。 根据8051内部结构和工作原理,可以把上述各功能部件划分为以下五部分: ①CPU结构:由运算器(ALU)、控制器(定时控制部件等)和专用寄存器三部分电路构成。 算术逻辑部件ALU:既可进行加、减、乘、除四则运算,也可以进行与、或、非、异或等逻辑运算,还具有数据传送,移位,判断和程序转移等功能。 定时控制部件:起控制器的作用,由定时控制逻辑、指令寄存器(IR)和振荡器(OSC)组成。 专用寄存器组:主要用来指示当前要执行指令的内存地址、存放操作数和指示指令执行后的状态等。 ②存储器结构 存储器地址分配:存储器的地址分配有三个地址空间——ROM存储器地址空间(包括片内ROM和片外ROM);片内RAM地址空间;片外RAM地址空间。 片内ROM:8031内部没有ROM;只有8051才有4KBROM。 片外RAM:MCS-51可以对片外RAM中数据进行读/写。 片内RAM:MCS-51的片内RAM容量只有128个存储单元,可以用来存放操作数、操作结果和实时数据。 ③I/O端口:是MCS-51单片机对外部实现控制和信息交换的必经之路,是一个过度的集成电路,用于信息传送过程中的速度匹配和增强它的负载能力。 并行I/O端口:P0、P1、P2和P3,每个端口都有双向I/O功能,每个I/O端口内部都有一个8位数据输出缩存器和一个8位数据输入缓冲器。并行I/O端口一次可以传送一组二进制信息。 串行I/O端口:既可以在程序控制下把CPU的8位并行数据变成串行数据逐位从发送数据线TXD发送出去,也可以把RXO线上串行接收到的数据变成8位并行数据送给CPU,而且这种串行发送和串行接收可以单独进行,也可以同时进行。串行I/O端口一次只能传送1位二进制信息。 ④定时器/计数器:8051内部有两个16位可编程定时器/计数器,命名为T0和T1,分别由TH0(高八位)和TL0(低八位),TH1和TL1拼装而成,它们均为特殊功能寄存器SFR中的一个,用户可以通过指令对它们存取数据。T0和T1的最大计数模值为65535。T0和T1有定时器和计数器两种工作模式,每种模式下又分为若干工作方式。在定时器模式下,T0和T1的计数脉冲可以由单片机时钟脉冲经12分频后提供,定时时间和单片机时钟频率有关。在T0和T1的计数脉冲可以从P3.4和P3.5引脚上输入。 ⑤中断系统:8051共可处理五个中断源发出的中断请求,可以对五个中断请求信号进行排队和控制,并响应其中优先权最高的中断请求。8051的五个中断源有内部和外部之分:外部中断源有二个,通常指外部设备;内部中断源有三个,两个定时器/计数器中断源和一个串行口中断源。8051的中断系统主要有中断允许控制器IE和中断优先级控制器IP等组成。IE用于控制五个中断源中哪些中断请求被允许向CPU提出,哪些被禁止;IP用于控制五个中断源的中断请求的优先级最高,可以被CPU最先处理。 MCS-51单片机引脚功能: 1、​ 端口线(4×8=32条) ①P0.7~P0.0:若8051不带片外存储器,P0.7~P0.0可作为通用I/O使用,传送CPU的 输入、输出数据。 若8051带片外存储器,P0.7~P0.0在CPU访问片外存储器时先是用于传送片外存储器的低8位地址,然后传送CPU对片外存储器的读写数据。 ②P1.7~P1.0:可作为通用I/O使用,传送用户的输入、输出数据。 ③P2.7~P2.0:可作为通用I/O使用。 可配合P1.7~P1.0传送片内EPROM12位地址中的高4位地址。 ④P3.7~P3.0:可作为通用I/O使用。 可作控制用,专用功能。 2、​ 电源线(2条) VCC为+5V电源线。 VSS为接地线。 3、​ 控制线(16条) 1​ ALE/PROG:地址锁存允许/编程线 2​ EA/VPP:允许访问片外存储器/编程电源线 3​ PSEN:片外ROM选通线。 4​ RST/VPD:复位、备用电源线。 5​ XTAL1和XTAL2:片内振荡电路输入线。 ⑵6116 6116是2K×8位静态随机存储器芯片,采用CMOS工艺制作,单一+5V电源,额定功耗160mW,典型存取时间为200ns,24线双列直插式封装。A0~A10为片内11位地址线;IO0~IO7为8位数据线;CE为片选信号线;OE、WE为读、写信号线。 ⑶74LS373 74LS373是一个三态门的8位锁存器,它可以作为8031外部的一个扩展输入口。 接口电路的工作原理:当外设把数据准备好后,发出一个控制信号XT加到373的G端,即锁存控制端,使输入数据在74LS373种锁存。在执行上面的第二条指令时,P2.6=0,RD有效,通过或门后加到373的OE端,即373的三态门控制端,使三态门畅通,锁存的数据读入到累加器中。 ⑷8155 8155是Intel公司研制的通用I/O接口芯片,MCS-51和8155相连不仅可为外设提供两个8位I/O端口(A口和B口)和一个6位I/O端口(C口),也可为CPU提供一个256字节的RAM和一个14位定时器/计数器。 8155共由7部分电路组成: ①双向数据总线缓冲器:该缓冲器是8位的,用于传送CPU对RAM存储器的读写数据。 ②地址缩存器:共有8位,用于锁存CPU送来的RAM单元地址和端口地址。 ③地址译码器和读写控制器:地址译码器的地址由地址缩存器输出端送来,读写控制接 RD和WR线上信息,实现对CPU和8155间所传信息的控制。 ④RAM:容量为256字节,主要用于存放实时数据。 ⑤I/O寄存器:分为A、B和C三个端口。A口和B口的I/O寄存器为8位,既可以存放外设的输出数据,也可以存放外设的输入数据;C口的I/O寄存器只有6位,用于存放I/O数据或命令、状态信息。 ⑥命令寄存器和状态寄存器:皆为8位寄存器,命令寄存器存放CPU送来的命令字,状态寄存器存放8155的状态字。 ⑦定时器/计数器:这是一个二进制的14位减1计算器,计数器初值由CPU通过程序送来。 8155引脚功能: 1​ 地址/数据总线(8条):AD7~AD0。 2​ I/O总线(22条):PA7~PA0,通用I/O总线; PB7~PB0,通用I/O总线; PC5~PC0,I/O数据/控制线。 3​ 控制总线(8条):RESET-总清输入线; CE和IO/M-CE为片选输入线,IO/M为I/O端口或RAM的选通 线; RD和WR-RD是读/写命令输入线,WR是写命令线; ALE-允许地址输入线; T/IN和T/OUT:T/IN是计数器输入线,T/OUT为计数器输出线; 4​ 电源线(2条):VCC为+5V电源输入线, VSS为接地线。 ⑸8255A 8255A是Intel公司生产的通用可编程并行I/O接口芯片,MCS-51和8255A相连可为外设提供三个8位I/O端口,允许采用同步、异步和中断方式传送I/O数据。 8255A内部由四部分电路组成: ①A口、B口和C口:均为8位I/O数据口,但结构上略有差别。A口由一个8位数据输出缓冲/缩存器和一个8位数据输入缓冲/缩存器组成,B口和C口各有一个8位数据输出缓冲/缩存器和一个8位数据输入缓冲器(无输入数据缩存器)组成。A口、B口和C口三个端口都可与外设相连,分别传送外设的输入/输出数据或控制信息,但在Mode1和Mode2工作方式下,A口和B口常作为数据口,用于传送I/O数据;C口为控制器,高4位属于A口,传送A口上外设的控制/状态信息,低四位属于B口,传送B口所需的控制/状态信息。 ②A组控制器和B组控制器:都由控制字寄存器和控制逻辑组成。A组控制字寄存器控制A口和C口上半部(PC7~PC4),B组控制器控制B口和C口下半部(PC3~PC0)。 ③数据缓冲器:双向8位缓冲器,用于传送MCS-51和8255A间的控制字、状态字和数据字。 ④读写控制逻辑:接收MCS-51送来的读写命令和选口地址,用于控制对8255A的读写。 8255A引脚功能: 8255A有40条引脚,采用双列直插式封装。 1​ 数据总线(8条):D7~D0 2​ 控制总线(6条):RESET-复位线; CS-片选线; RD和WR-RD为读命令线,WR为写命令线; A0和A1-地址输出线。 3​ 并行I/O总线(24条):PA7~PA0-双向I/O总线; PB7~PB0-双向I/O总线; PC7~PC0-双向数据/控制总线 4​ 电源线(2条):VCC为+5V电源线; GND为地线。 ⑹D/A转换器 D/A转换器(Digital to Analog Converter)是一种能把数字量转换成模拟量的电子器件。D/A转换器可以直接从MCS-51输入数字量,并转换成模拟量推动执行机构动作,以控制被控实体的工作过程。 D/A转换器的原理很简单,可以总结为“按权展开,然后相加”几个字,换句话说,D/A转换器要能把输入数字量中的每位都按其权值分别转换成模拟量,并通过运算放大器求和相加,因此D/A转换器内部必须有一个解码网络(解码网络通常有两种:二进制加权电阻网络和T型电阻网络),以实现按权值分别进行D/A转换。 ⑺DAC0832 DAC0832内部结构: DAC0832内部由三部分电路组成。“8位输入寄存器”用于存放CPU送来的数字量,使输入数字量得到缓冲和锁存,由LE1加以控制;“8位DAC寄存器”用于存放待转换数字量,由LE2控制;“8位D/A转换电路”由8位T型电阻网络和电子开关组成,电子开关受“8位DAC寄存器”输出控制,T型电阻网络能输出与数字量成正比的模拟电流。因此,DAC0832通常需要外接运算放大器才能得到模拟输出电压。 DAC0832引脚功能: DAC0832共有20条引脚,双列直插式封装。 1​ 数字量输入线DI7~DI0(8条); 2​ 控制线(5条):CS-片选线; ILE-允许数字联输入线; XFER-传送控制输入线; WR1和WR2-两条写命令输入线 3​ 输出线(3条):Rfb-运算放大器反馈线; IOUT1和IOUT2-两条模拟电流输出线。 4​ 电源线(4条):VCC-电源输入线; VREF-参考电压; DGND-数字量地线; AGND-模拟量地线。 3、组合模块说明 本系统由三大模块组成:汉字显示模块、键盘输入模块和波形显示模块。 汉字显示模块:由8051、锁存器、27128、8255和373芯片组成。 键盘输入显示模块:由8051、8155和数字显示器组成。 波形显示模块:由8051、138和波形发生器组成。 4、系统工作原理 ⑴汉字显示模块 每个汉字采用16*16点阵显示,8255芯片使用方式0工作,PA、PB、PC口均为输出。PA口和PB口的输出分别控制汉字的上八行和下八行,PC口的输出控制由8051的并行口P1选中的八列。即H16~H9 由PA口输出,H8~H1由PB口输出,PC口输出八列。 8051的P1口:P1.0 选左起第一个八列,选最上面的374 P1.1 选左起第二个八列,选次上的374 P1.2 选左起第三个八列,选最上面的374 P1.3 选左起第四个八列,选次上的374 P1.4 选左起第五个八列,选次上的374 P1.5 选左起第六个八列,选次上的374 P1.6 选左起第七个八列,选次上的374 P1.7 选最右一个八列, 选最下面的374 如汉字"正": L1出0: H16~H9: 00H H8 ~H1: 00H L2出0: H16~H9: 00H H8 ~H1: 01H L3出0: H16~H9: 20H H8 ~H1: 00H L4出0: H16~H9: 40H H8 ~H1: 02H L5出0: H16~H9: 40H H8 ~H1: 02H L6出0: H16~H9: 40H H8 ~H1: 7EH L7出0: H16~H9: 40H H8 ~H1: 02H L8出0: H16~H9: 40H H8 ~H1: 02H L9出0: H16~H9: 7FH H8 ~H1: FEH L10出0:H16~H9:42H H8 ~H1: 02H L11出0:H16~H9: 42H H8 ~H1: 02H L12出0:H16~H9: 42H H8 ~H1: 02H L13出0:H16~H9: 42H H8 ~H1: 02H L14出0:H16~H9: 40H H8 ~H1: 02H L15出0:H16~H9: 00H H8 ~H1: 00H L16出0:H16~H9: 00H H8 ~H1: 00H 将要显示的字的编码放入DATA表中,通过移动指针依次取出并扫描在屏上。DATA表中的编码如下:(具体点阵见附录二) 00H, 00H, 00H, 00H, 00H, 00H, 00H, 00H, 00H, 00H, 00H, 00H, 00H, 00H, 00H, 00H 正 00H, 00H, 00H, 01H, 40H, 01H, 41H, FFH, 40H, 01H, 40H, 01H, 40H, 01H, 40H, 01H 7FH, FFH, 40H, 81H, 40H, 81H, 40H, 81H, 40H, 81H, 40H, 81H, 00H, 01H, 00H, 00H 弦 47H, C0H, 44H, 40H, 44H, 42H, 44H, 41H, 7CH, 7FH, 00H, 00H, 10H, 02H, 10H, 86H 91H, 8AH, 52H, 92H, 1CH, A2H, 10H, C2H, 10H, 86H, 11H, 02H, 10H, 01H, 10H, 00H 波 44H, 40H, 32H, 7FH, 00H, 82H, 01H, 0CH, 3FH, F1H, 22H, 01H, 23H, 82H, 22H, 44H 22H, 28H, FEH, 10H, 22H, 28H, 22H, C4H, 23H, 02H, 28H, 01H, 30H, 01H, 00H, 01H 00H, 00H, 00H, 00H, 00H, 00H, 00H, 00H, 00H, 00H, 00H, 00H, 00H, 00H, 00H, 00H 4 00H, 00H, 7FH, 80H, 00H, 80H, 00H, 80H, 00H, 80H, 00H, 80H, 7FH, FFH, 00H, 00H : 00H, 00H, 00H, 00H, 00H, 00H, 00H, 82H, 00H, 00H, 00H, 00H, 00H, 00H, 00H, 00H 5​  00H, 00H, 7FH, 81H, 40H, 81H, 40H, 81H, 40H, 81H, 40H, 81H, 40H, FFH, 00H, 00H 0​  00H, 00H, 7FH, FFH, 40H, 01H, 40H, 01H, 40H, 01H, 40H, 01H, 7FH, FFH, 00H, 00H H 00H, 00H, 7FH, FFH, 00H, 80H, 00H, 80H, 00H, 80H, 00H, 80H, 7FH, FFH, 00H, 00H z 01H, 03H, 01H, 05H, 01H, 09H, 01H, 11H, 01H, 21H, 01H, 41H, 01H, 81H, 00H, 00H 00H, 00H, 00H, 00H, 00H, 00H, 00H, 00H, 00H, 00H, 00H, 00H, 00H, 00H, 00H, 00H 5​  00H, 00H, 7FH, 81H, 40H, 81H, 40H, 81H, 40H, 81H, 40H, 81H, 40H, FFH, 00H, 00H : 00H, 00H, 00H, 00H, 00H, 00H, 00H, 82H, 00H, 00H, 00H, 00H, 00H, 00H, 00H, 00H 3​ 00H, 00H, 40H, 81H, 40H, 81H, 40H, 81H, 40H, 81H, 40H, 81H, 7FH, FFH, 00H, 00H 0​ 00H, 00H, 7FH, FFH, 40H, 01H, 40H, 01H, 40H, 01H, 40H, 01H, 7FH, FFH, 00H, 00H H 00H, 00H, 7FH, FFH, 00H, 80H, 00H, 80H, 00H, 80H, 00H, 80H, 7FH, FFH, 00H, 00H z 01H, 03H, 01H, 05H, 01H, 09H, 01H, 11H, 01H, 21H, 01H, 41H, 01H, 81H, 00H, 00H 00H, 00H, 00H, 00H, 00H, 00H, 00H, 00H, 00H, 00H, 00H, 00H, 00H, 00H, 00H, 00H 6​  00H, 00H, 7FH, FFH, 40H, 81H, 40H, 81H, 40H, 81H, 40H, 81H, 40H, FFH, 00H, 00H : 00H, 00H, 00H, 00H, 00H, 00H, 00H, 82H, 00H, 00H, 00H, 00H, 00H, 00H, 00H, 00H 2 00H, 00H, 40H, FFH, 40H, 81H, 40H, 81H, 40H, 81H, 40H, 81H, 7FH, 81H, 00H, 00H 0 00H, 00H, 7FH, FFH, 40H, 01H, 40H, 01H, 40H, 01H, 40H, 01H, 7FH, FFH, 00H, 00H H 00H, 00H, 7FH, FFH, 00H, 80H, 00H, 80H, 00H, 80H, 00H, 80H, 7FH, FFH, 00H, 00H z 01H, 03H, 01H, 05H, 01H, 09H, 01H, 11H, 01H, 21H, 01H, 41H, 01H, 81H, 00H, 00H 00H, 00H, 00H, 00H, 00H, 00H, 00H, 00H, 00H, 00H, 00H, 00H, 00H, 00H, 00H, 00H 8​ 00H, 00H, 7FH, FFH, 40H, 81H, 40H, 81H, 40H, 81H, 40H, 81H, 7FH, FFH ,00H, 00H : 00H, 00H, 00H, 00H, 00H, 00H, 00H, 82H, 00H, 00H, 00H, 00H, 00H, 00H, 00H, 00H 停 01H, 00H, 02H, 00H, 1FH, FFH, 21H, 00H, A2H, 80H, 22H, 80H,3EH, 80H, 36H, 82H B6H, 81H, 76H, FFH, 36H, 80H, 36H, 80H, 3EH, 80H, 22H, 80H, 22H, 80H, 03H, 00H 00H, 00H, 00H, 00H, 00H, 00H, 00H, 00H, 00H, 00H, 00H, 00H, 00H, 00H, 00H, 00H ⑵键盘输入模块 键盘输入监视模块中的8155芯片采用PA口输出,PB口输出和PC口输入的控制方式。 PA7~PA0 八位LED数位选择: PA0 1:最右边的LED亮 0:最右边的LED暗 PA1 1:右边第二个的LED亮 0:右边第二个的LED暗 PA2 1:右边第三个的LED亮 0:右边第二个的LED暗 PA3 1:右边第四个的LED亮 0:右边第二个的LED暗 PA4 1:右边第五个的LED亮 0:右边第二个的LED暗 PA5 1:右边第六个的LED亮 0:右边第二个的LED暗 PA6 1:右边第七个的LED亮 0:右边第二个的LED暗 PA7 1:最左边的LED亮 0:最左边的LED暗 接线: 8051 P2.7P2.6P2.5P2.4P2.3P2.2P2.1P2.0P0.7P0.6P0.5P0.4P0.3P0.2P0.1P0.0 8155 命令字口 1 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 8000H PA口 1 0 0 0 0 0 0 1 0 0 0 0 0 0 0 1 8101H PB口 1 0 0 0 0 0 0 1 0 0 0 0 0 0 1 0 8102H PC口 1 0 0 0 0 0 0 1 0 0 0 0 0 0 1 1 8102H 按键: 将PA口置0,当发现键盘按下时,相应的PC口输入0,如: PA0 0 "1"键按下 PC0入"0","1"键未按下 PC0入"1" "2"键按下 PC1入"0","1"键未按下 PC0入"1" "3"键按下 PC2入"0","1"键未按下 PC0入"1" "4"键按下 PC3入"0","1"键未按下 PC0入"1" "5"键按下 PC4入"0","1"键未按下 PC0入"1" "6"键按下 PC5入"0","1"键未按下 PC0入"1" "7"键按下 PC6入"0","1"键未按下 PC0入"1" "8"键按下 PC7入"0","1"键未按下 PC0入"1" 1 无法检测键是否按下 通过对按键的检测,将按键对应的数字(即TAB表中该数字编码的偏移量)放入缓冲区,再调用显示程序,找到TAB表中该数字位置,根据编码输出数字 PB口PB7~0 字型编码输出 ⑶波形显示模块 将正弦波量化成不同大小的电压植输出给波形发生器在屏幕上显示不同振幅的亮点,根据所按键调用不同的延时程序以得到不同频率的正弦波。 当8155检测到该0后,从PB口输出,显示相应的数字。 三、软件设计 1、程序流程图 N Y N Y Y N Y 8位显示器流程图 N Y N 键盘流程图 2、程序清单及说明 汉字显示: 正弦波 4: 50Hz 5:30Hz 6:20Hz 8:停 MOV R0, #00H MOV R1, #00H MOV R2, #00H MOV R3, #00H MOV R4, #00H MOV R5, #00H ;系统初始化 MOV R6, #00H MOV R7, #00H MOV R8, #00H MOV R9, #00H CLR A CLR B CLR C CLR D ORG 0030H MOV R0, #0FFH ;控制口址 MOV A, #80H ;控制字10000000 方式0,PA PB PC口输出 MOV @R0, A ;控制字送到控制字端口 AGAI: MOV DPTR, #DATA ;DPTR指向数据表首址 MOV A, DPL ;低8位的地址送入A ADD A, #20H MOV 30H, A ;表长-1的低位送入30H MOV A, DPH ;高8位的地址送入寄存器A ADDC A, #02H MOV 31H, A ;表长-1的高位送入31H(表末址送31H,30H) REPE: MOV R2, #0FFH ;字符重复次数送R2 STAR: MOV R3, #00H ;相对DATA首址的偏移量送R3 MOV R4, #0FEH ;从最左一列开始 SCAL: MOV P1, #0FEH ;P1.0出,选中最上面的374 MOV R0, #0FEH ;PC口址 MOV A, R4 MOVX @R0, A ;列出→PC口 MOV A, R3 MOVC A, @A+OPTR MOV R0, #0FCH ;PA口址 MOVX @R0, A ;行出→PA口(上半字) INC R3 ;偏移量加1 MOV A, R3 MOVC A, @A+DPTR MOV R0, #0FDH ;PB口址 MOVX @R0, A ;行出→PA口(下半字) ACALL DL ;调用延时子程序 INC R3 ;偏移量加1 MOV A, R4 SETB C RLC A ;循环左移1位 MOV R4, A CJNE A, #0FFH, SCAL ;8列扫描完了么?未,则转SCAL MOV R4, #0FEH SCAR: MOV P1, #0FDH ;P1.1=0,选中第二个374 MOV R0, #0FEH ;PC口址 MOV A, R4 MOVX @R0, A ;列出→PC口 MOV A, R3 MOVC A, @A+DPTR MOV R0, #0FCH ;PA口址 MOVX @R0, A ;行出→PA口(上半字) INC R3 ;偏移量加1 MOV A, R3 MOVC A, @A+DPTR MOV R0, #0FDH ;PB口址 MOVX @R0, A ;行出→PB口(下半字) ACALL DL ;调用延时子程序 INC R3 ;偏移量加1 MOV A, R4 SETB C RLC A ;循环左移1位 MOV R4, A CJNE A, #0FFH, SCAR ;8列扫描完了么?未,则转SCAL MOV R4, #0FEH SCBL: MOV P1, #0FBH ;P1.2=0,选中第三片374 MOV R0, #0FEH ;PC口址 MOV A, R4 MOVX @R0, A ;列出→PC口 MOV A, R3 MOVC A, @A+DPTR MOV R0, #0FCH ;PA口址 MOVX @R0, A ;行出→PA口(上半字) INC R3 ;偏移量加1 MOV A, R3 MOVC A, @A+DPTR MOV R0, #0FDH ;PB口址 MOVX @R0, A ;行出→PB口(下半字) ACALL DL ;调用延时子程序 INC R3 ;偏移量加1 MOV A, R4 SETB C RLC A ;循环左移1位 MOV R4, A CJNE A, #0FFH, SCBL ;8列扫描完了么?未,则转SCAL MOV R4, #0FEH SCBR: MOV P1, #0F7H ;P1.3=0,选中第四个374 MOV R0, #0FEH ;PC口址 MOV A, R4 MOVX @R0, A ;列出→PC口 MOV A, R3 MOVC A, @A+DPTR MOV R0, #0FCH ;PA口址 MOVX @R0, A ;行出→PA口(上半字) INC R3 ;偏移量加1 MOV A, R3 MOVC A, @A+DPTR MOV R0, #0FDH ;PB口址 MOVX @R0, A ;行出→PB口(下半字) ACALL DL ;调用延时子程序 INC R3 ;偏移量加1 MOV A, R4 SETB C RLC A ;循环左移1位 MOV R4, A CJNE A, #0FFH, SCBR ;8列扫描完了么?未,则转SCAL MOV R4, #0FEH SCCL: MOV P1, #0EFH ;P1.4=0,选中第五个374 MOV R0, #0FEH ;PC口址 MOV A, R4 MOVX @R0, A ;列出→PC口 MOV A, R3 MOVC A, @A+DPTR MOV R0, #0FCH ;PA口址 MOVX @R0, A ;行出→PA口(上半字) INC R3 ;偏移量加1 MOV A, R3 MOVC A, @A+DPTR MOV R0, #0FDH ;PB口址 MOVX @R0, A ;行出→PB口(下半字) ACALL DL ;调用延时子程序 INC R3 ;偏移量加1 MOV A, R4 SETB C RLC A ;循环左移1位 MOV R4, A CJNE A, #0FFH, SCCL ;8列扫描完了么?未,则转SCAL MOV R4, #0FEH SCCR: MOV P1, #0DFH ;P1.5=0,选中第六个374 MOV R0, #0FEH ;PC口址 MOV A, R4 MOVX @R0, A ;列出→PC口 MOV A, R3 MOVC A, @A+DPTR MOV R0, #0FCH ;PA口址 MOVX @R0, A ;行出→PA口(上半字) INC R3 ;偏移量加1 MOV A, R3 MOVC A, @A+DPTR MOV R0, #0FDH ;PB口址 MOVX @R0, A ;行出→PB口(下半字) ACALL DL ;调用延时子程序 INC R3 ;偏移量加1 MOV A, R4 SETB C RLC A ;循环左移1位 MOV R4, A CJNE A, #0FFH, SCCL ;8列扫描完了么?未,则转SCAL MOV R4, #0FEH SCDL: MOV P1, #0BFH ;P1.6=0,选中次最下面的374 MOV R0, #0FEH ;PC口址 MOV A, R4 MOVX @R0, A ;列出→PC口 MOV A, R3 MOVC A, @A+DPTR MOV R0, #0FCH ;PA口址 MOVX @R0, A ;行出→PA口(上半字) INC R3 ;偏移量加1 MOV A, R3 MOVC A, @A+DPTR MOV R0, #0FDH ;PB口址 MOVX @R0, A ;行出→PB口(下半字) ACALL DL ;调用延时子程序 INC R3 ;偏移量加1 MOV A, R4 SETB C RLC A ;循环左移1位 MOV R4, A CJNE A, #0FFH, SCDL ;8列扫描完了么?未,则转SCAL MOV R4, #0FEH SCDR: MOV P1, #07FH ;P1.7=0,选中最后一个374 MOV R0, #0FEH ;PC口址 MOV A, R4 MOVX @R0, A ;列出-〉PC口 MOV A, R3 MOVC A, @A+DPTR MOV R0, #0FCH ;PA口址 MOVX @R0, A ;行出→PA口(上半字) INC R3 ;偏移量加1 MOV A, R3 MOVC A, @A+DPTR MOV R0, #0FDH ;PB口址 MOVX @R0, A ;行出→PB口(下半字) ACALL DL ;调用延时子程序 INC R3 ;偏移量加1 MOV A, R4 SETB C RLC A ;循环左移1位 MOV R4, A CJNE A, #0FFH, SCD ;8列扫描完了么?未,则转SCALR CJNZ R2, STAR ;字符重复的次数完了么?未,转STAR INC DPTR INC DPTR ;字符左移一位 MOV A, DPL CJNE A, 30H, REPE MOV A, DPH CJNE A, 31H, REPE ;不为最后一列,则REPE JMP RDKB DL: MOV R1, #500 CJNZ R1, $ RET DATA:DB 00H, 00H, 00H, 00H, 00H, 00H, 00H, 00H, 00H, 00H, 00H, 00H, 00H, 00H, 00H, 00H 00H, 00H, 00H, 01H, 40H, 01H, 41H, FFH, 40H, 01H, 40H, 01H, 40H, 01H, 40H, 01H 7FH, FFH, 40H, 81H, 40H, 81H, 40H, 81H, 40H, 81H, 40H, 81H, 00H, 01H, 00H, 00H 47H, C0H, 44H, 40H, 44H, 42H, 44H, 41H, 7CH, 7FH, 00H, 00H, 10H, 02H, 10H, 86H 91H, 8AH, 52H, 92H, 1CH, A2H, 10H, C2H, 10H, 86H, 11H, 02H, 10H, 01H, 10H, 00H 44H, 40H, 32H, 7FH, 00H, 82H, 01H, 0CH, 3FH, F1H, 22H, 01H, 23H, 82H, 22H, 44H 22H, 28H, FEH, 10H, 22H, 28H, 22H, C4H, 23H, 02H, 28H, 01H, 30H, 01H, 00H, 01H 00H, 00H, 00H, 00H, 00H, 00H, 00H, 00H, 00H, 00H, 00H, 00H, 00H, 00H, 00H, 00H 00H, 00H, 7FH, 80H, 00H, 80H, 00H, 80H, 00H, 80H, 00H, 80H, 7FH, FFH, 00H, 00H 00H, 00H, 00H, 00H, 00H, 00H, 00H, 82H, 00H, 00H, 00H, 00H, 00H, 00H, 00H, 00H 00H, 00H, 7FH, 81H, 40H, 81H, 40H, 81H, 40H, 81H, 40H, 81H, 40H, FFH, 00H, 00H 00H, 00H, 7FH, FFH, 40H, 01H, 40H, 01H, 40H, 01H, 40H, 01H, 7FH, FFH, 00H, 00H 00H, 00H, 7FH, FFH, 00H, 80H, 00H, 80H, 00H, 80H, 00H, 80H, 7FH, FFH, 00H, 00H 01H, 03H, 01H, 05H, 01H, 09H, 01H, 11H, 01H, 21H, 01H, 41H, 01H, 81H, 00H, 00H 00H, 00H, 00H, 00H, 00H, 00H, 00H, 00H, 00H, 00H, 00H, 00H, 00H, 00H, 00H, 00H 00H, 00H, 7FH, 81H, 40H, 81H, 40H, 81H, 40H, 81H, 40H, 81H, 40H, FFH, 00H, 00H 00H, 00H, 00H, 00H, 00H, 00H, 00H, 82H, 00H, 00H, 00H, 00H, 00H, 00H, 00H, 00H 00H, 00H, 40H, 81H, 40H, 81H, 40H, 81H, 40H, 81H, 40H, 81H, 7FH, FFH, 00H, 00H 00H, 00H, 7FH, FFH, 40H, 01H, 40H, 01H, 40H, 01H, 40H, 01H, 7FH, FFH, 00H, 00H 00H, 00H, 7FH, FFH, 00H, 80H, 00H, 80H, 00H, 80H, 00H, 80H, 7FH, FFH, 00H, 00H 01H, 03H, 01H, 05H, 01H, 09H, 01H, 11H, 01H, 21H, 01H, 41H, 01H, 81H, 00H, 00H 00H, 00H, 00H, 00H, 00H, 00H, 00H, 00H, 00H, 00H, 00H, 00H, 00H, 00H, 00H, 00H 00H, 00H, 7FH, FFH, 40H, 81H, 40H, 81H, 40H, 81H, 40H, 81H, 40H, FFH, 00H, 00H 00H, 00H, 00H, 00H, 00H, 00H, 00H, 82H, 00H, 00H, 00H, 00H, 00H, 00H, 00H, 00H 00H, 00H, 40H, FFH, 40H, 81H, 40H, 81H, 40H, 81H, 40H, 81H, 7FH, 81H, 00H, 00H 00H, 00H, 7FH, FFH, 40H, 01H, 40H, 01H, 40H, 01H, 40H, 01H, 7FH, FFH, 00H, 00H 00H, 00H, 7FH, FFH, 00H, 80H, 00H, 80H, 00H, 80H, 00H, 80H, 7FH, FFH, 00H, 00H 01H, 03H, 01H, 05H, 01H, 09H, 01H, 11H, 01H, 21H, 01H, 41H, 01H, 81H, 00H, 00H 00H, 00H, 00H, 00H, 00H, 00H, 00H, 00H, 00H, 00H, 00H, 00H, 00H, 00H, 00H, 00H 00H, 00H, 7FH, FFH, 40H, 81H, 40H, 81H, 40H, 81H, 40H, 81H, 7FH, FFH ,00H, 00H 00H, 00H, 00H, 00H, 00H, 00H, 00H, 82H, 00H, 00H, 00H, 00H, 00H, 00H, 00H, 00H 01H, 00H, 02H, 00H, 1FH, FFH, 21H, 00H, A2H, 80H, 22H, 80H,3EH, 80H, 36H, 82H B6H, 81H, 76H, FFH, 36H, 80H, 36H, 80H, 3EH, 80H, 22H, 80H, 22H, 80H, 03H, 00H 00H, 00H, 00H, 00H, 00H, 00H, 00H, 00H, 00H, 00H, 00H, 00H, 00H, 00H, 00H, 00H ORG 0100H ST: MOV DPTR, #8100H ;命令字口 MOV A, #03H ;控制字00000011 MOVX @DPTR, A ;控制字→控制字口 ORG 0400H DSPY: MOV R5, #58H ;显示缓冲区首址58H MOV R6, #01H ;R1显示位,从最右位开始00000001 LOOP: MOV A, R6 MOV DPTR, #8101H ;PA口址 MOVX @DPTR, A ;PA口选一位亮(第一位) INC DPTR ;PB口址 MOV A, @R5 ;要显示的字(在显示缓冲区内) ADD A, #12H ;偏移量 MOVC A, @A+PC ;查看,取字形编码 MOVX @DPTR, A ;字形编码→PB口 MOV R7, #0FFH DL0: MOV R8, #0FFH DL1: DJNZ R8, DL1 DJNZ R7, DL0 INC R5 ;指向下一个缓冲单元 MOV A, R6 RL A ;显示器左移一位 MOV R6, A JNB A.0, LOOP ;8位LED全扫描了么?未,转LOOP RET DA: DB 3FH, 06H, 5BH, 4FH, 66H, 6DH, 7DH, 07H, 7FH RDKB: ACALL DSPY MOV A, #FEH ;11111110 MOV DPTR, #8101H ;PA口址 MOVX @DPTR, A ;PA0=0 MOV DPTR, #8103H ;PC口址 MOVX A, @DPTR CPL A ;A取反 JZ AGAI JB A.0, A0 JB A.1, A1 JB A.2, A2 JB A.3, A3 JB A.4, A4 JB A.5, A5 JB A.6, A6 JB A.7, A7 SJMP NEXT A0: MOV 58H, #01H ;按"1"号键的 MOV B, #00H SJMP NEXT A1: MOV 58H, #02H MOV B, #00H SJMP NEXT A2: MOV 58H, #03H MOV B, #00H SJMP NEXT A3: MOV 58H, #04H MOV B, #04H SJMP NEXT A4: MOV 58H, #05H MOV B, #05H SJMP NEXT A5: MOV 58H, #06H MOV B, #06H SJMP NEXT A6: MOV 58H, #07H MOV B, #00H SJMP NEXT A7: MOV 58H, #08H MOV B, #08H SJMP NEXT NEXT: AJMP DSPY AJMP DSPY RET CMP B, #08H HALT CMP B, #00H JZ AGAIN CMP B, #04H JZ CALL1 CMP B, #05H JZ CALL2 CMP B, #06H JZ CALL3 CALL1: MOV D, #028H LP1: MOVX @DPTR, D INC D ACALL DELAY1 CJNZ D, #044H,LP1 LP2: MOVX @DPTR, D INC D ACALL DELAY2 CJNZ D, #050H, LP2 LP3: MOVX @DPTR, D DEC D ACALL DELAY2 CJNZ D, #044H, LP3 LP4: MOVX @DPTR, D DEC D ACALL DELAY1 CJNZ D, #028H, LP4 LP5: MOVX @DPTR, D DEC D ACALL DELAY1 CJNZ D, #0CH, LP5 LP6: MOVX @DPTR, D DEC D ACALL DELAY2 CJNZ D, #0H, LP6 LP7: MOVX @DPTR, D INC D ACALL DELAY2 CJNZ D, #0CH, LP7 LP8: MOVX @DPTR, D INC D ACALL DELAY1 CJNZ D, #028H, LP8 SJMP LP1 DELAY1: MOV R7, #59H DL0: DJNZ R7, DL0 RET DELAY2: MOV R7, #D0H DL1: DJNZ R7, DL1 RET CALL2: MOV D, #028H LP11: MOVX @DPTR, D INC D ACALL DELAY11 CJNZ D, #044H, LP11 LP22: MOVX @DPTR, D INC D ACALL DELAY22 CJNZ D, #050H, LP22 LP33: MOVX @DPTR, D DEC D ACALL DELAY22 CJNZ D, #044H, LP33 LP44: MOVX @DPTR, D DEC D ACALL DELAY11 CJNZ D, #028H, LP44 LP55: MOVX @DPTR, D DEC D ACALL DELAY11 CJNZ D, #0CH, LP55 LP66: MOVX @DPTR, D DEC D ACALL DELAY22 CJNZ D, #0H, LP66 LP77: MOVX @DPTR, D INC D ACALL DELAY22 CJNZ D, #0CH, LP77 LP88: MOVX @DPTR, D INC D ACALL DELAY11 CJNZ D, #028H, LP88 SJMP LP11 DELAY11: MOV R7, #95H DL1: DJNZ R7, DL1 RET DELAY22: MOV R7, #01H DL4: MOV R6, #0FFH DL5: DJNZ R6, DL5 DL6: DJNZ R7, DL4 DL7: MOV R8, 05BH DJNZ R8, DL7 RET CALL3: MOV D, #028H LP111: MOVX @DPTR, D INC D ACALL DELAY111 CJNZ D, #044H, LP111 LP222: MOVX @DPTR, D INC D ACALL DELAY222 CJNZ D, #050H, LP222 LP333: MOVX @DPTR, D DEC D ACALL DELAY222 CJNZ D, #044H, LP333 LP444: MOVX @DPTR, D DEC D ACALL DELAY111 CJNZ D, #028H, LP444 LP555: MOVX @DPTR, D DEC D ACALL DELAY111 CJNZ D, #0CH, LP555 LP666: MOVX @DPTR, D DEC D ACALL DELAY222 CJNZ D, #0H, LP666 LP777: MOVX @DPTR, D INC D ACALL DELAY222 CJNZ D, #0CH, LP777 LP888: MOVX @DPTR, D INC D ACALL DELAY111 CJNZ D, #028H, LP888 SJMP LP111 DELAY111: MOV R7, #DFH DL0: DJNZ R7, DL0 RET DELAY222: MOV R7, #02H DL4: MOV R6, #0FFH DL5: DJNZ R6, DL5 DL6: DJNZ R7, DL4 DL7: MOV R8, 00BH DJNZ R8, DL7 RET 四、使用说明 输入程序代码,从0030H地址开始执行。屏幕上显示汉字:" 正弦波 4:50Hz 5:30Hz 6:20Hz 8:停 ",按下键,则在数字显示器上显示该数字,并在波形发生器上输出相应频率的正弦波。 五、参考资料 ①《MCS-51单片机原理及其接口技术》(第2版) 胡汉才 清华大学出版社 2004年2月 ②《MCS-51单片机原理及应用实例》 南建辉 雄鸣 王军茹 清华大学出版社 2004年3月 ③《51系列单片机系统设计与应用技巧》 李刚 林凌 姜苇 2004年1月 ④《单片机-应用系统开发实例导航》 靳达 人民邮电出版社 2003年10月 ⑤《单片机-典型模块设计实例导航》 求是科技 人民邮电出版社 2004年5月
本文档为【低频信号发生器的单片机设计】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
该文档来自用户分享,如有侵权行为请发邮件ishare@vip.sina.com联系网站客服,我们会及时删除。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。
本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。
网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
下载需要: 免费 已有0 人下载
最新资料
资料动态
专题动态
is_610994
暂无简介~
格式:doc
大小:272KB
软件:Word
页数:18
分类:工学
上传时间:2011-10-24
浏览量:32