电网电压检测系统
课程设计说明书
课程设计名称: 单片机课程设计
课程设计题目: 电网电压检测系统
学 院 名 称: 信息工程学院
专业: 电子信息工程 班级: 090411
学号: 28 姓名: 全伟
评分: 教师:
20 年 月 日
由每位学生填写、由任教教师保存待查
单片机 课程设计任务书 20 11 -20 12 学年 第 二 学期 第 17 周- 20 周 注:1、此表一组一表二份,课程设计小组一份;任课教师一份备查。
2、课程设计结束后与课程设计小结、学生成绩单一并交院教务存档。
摘要
众所周知, 电能是现如今保障经济发展和和技术进步最为关键的能源形式, 而且正是由于工业技术的快速发展, 导致了电网供电电压过高或过低引起用电设备被损坏的现象时有发生,因而对电网电压进行精确的测量,充分了解电网运行状况,并实时控制,是解决电力系统出现的问题的重要途径。
本文是单片机的一个设计性实验 ,以AT89C51作为核心控制元件,采用变压器以及稳压管等分立元件将交流电压经过整流滤波转换为直流信号,然后通过ADC0809对电压信号进行采样并转换成数字量送到AT89C51单片机中,通过单片机控制液晶屏进行显示并完成报警。
本设计可用于监测民用220V 交流电压的系统, 该系统能实时采样并对交流电压正常 ,如果所测量的电压偏高 ,或偏低做出相应的电压显示和声音报警。
关键词:单片机 交流电压监测 显示 报警
目录
一、设计要求: . ................................................. 5
二、系统组成及工作原理 .......................................... 5
2.1、系统设计流程 ............................................ 5
2.2、变压整流电路 ............................................ 5
2.3、A/D采样及转换电路 ...................................... 6
2.3.1、AD0809简介 ........................................ 6
2.3.2、AD0809与51单片机的连接 ........................... 8
2.4、单片机处理显示电路 ...................................... 8
2.4.1、AT89C51简介 ....................................... 8
2.4.2、复位电路 ......................................... 11
2.5、报警电路 ............................................... 12
2.6、显示电路 ............................................... 12
三、硬件方案电路设计 ........................................... 13
3.1、方案比较 ............................................... 13
3.1.1、方案一 ........................................... 13
图3.1.1 系统流程图(AD736) ............................. 13
3.1.2、方案二 ........................................... 13
3.1、变压整流电路 ........................................... 13
3.2、AD 采样电路 ............................................ 14
3.3、单片机处理及显示电路 ................................... 15
3.4、复位电路 ............................................... 16
3.5、报警电路 ............................................... 17
四、软件设计 . .................................................. 17
4.1、结构功能设计 ........................................... 17
4.2、算法设计 ............................................... 18
4.3、程序流程 ............................................... 20
五、实验调试和测试结果与分析 ................................... 21
5.1、软件部分 ............................................... 21
5.1、硬件部分 ............................................... 21
六、结论 . ...................................................... 21
七、参考文献 . .................................................. 22
附录一 原理图 . ................................................. 23
附录二 实物图 . ................................................. 24
附录三 程序代码 . ............................................... 26
一、设计要求:
(1)利用单片机实现对电网电压的监测
(2)电压检测范围AC160V-AC260V
(3)实时显示,超出检测范围发出报警信号
二、系统组成及工作原理
2.1、系统设计流程
图2.1 流程图
所以系统分为4个部分:交流电压变压整流电路、A/D采样及转换电路、单片机处理显示电路和报警电路。
2.2、变压整流电路
因为民用交流电压的范围远远大于 A/D 转换芯片所能接受的范围 ,实验表明 ,该电路的功能主要是把民用交流电压经过降压、整流滤波和调压等步骤得到低值(+5V)的直流模拟量 ,供给A/D转换芯片采样。技术难点就是要能使交流电压与直流电压成线性关系。电路采用Π形滤波电路如图2.2所示。
图2.2 变压整流电路(模拟量输入电路)
2.3、A/D采样及转换电路
对“模拟量输入电路”中提供的直流模拟量进行采用 ,完成从模拟到数字(A/D)的转换功能 ,并把所得的结果提供给单片机。
本次设计采用的是AD0809采样芯片。
2.3.1、AD0809简介
1、AD0809 的逻辑结构
ADC0809 是8 位逐次逼近型A/D转换器如图2.3.1所示。它由一个8路模拟开关、一个地址锁存译码器、一个A/D 转换器和一个三态输出锁存器组成。多路开关可选通8个模拟通道,允许8 路模拟量分时输入,共用A/D 转换器进行转换。三态输出锁器用于锁存A/D 转换完的数字量,当OE 端为高电平时,才可以从三态输出锁存器取走转换完的数据。
图2.3.1 AD0809引脚图
2、AD0809 的工作原理
IN0-IN7:8 条模拟量输入通道
ADC0809 对输入模拟量要求:信号单极性,电压范围是0-5V ,若信号太小,必须进行放大;输入的模拟量在转换过程中应该保持不变,如若模拟量变化太快,则需在输入前增加采样保持电路。
地址输入和控制线:4条
ALE 为地址锁存允许输入线,高电平有效。当ALE 线为高电平时,地址锁存与译码器将A , B,C 三条地址线的地址信号进行锁存,经译码后被选中的 通道的模拟量进转换器进行转换。A ,B 和C 为地址输入线,用于选通IN0-IN7 上的一路模拟量输入。通道选择表如下表所示。C B A 选择的通道如下表2-2-1:
表2-2-1
数字量输出及控制线:11 条
ST 为转换启动信号。当ST 上跳沿时,所有内部寄存器清零;下跳沿时,开始进行A/D 转换;在转换期间,ST 应保持低电平。EOC 为转换结束信号。当EOC 为高电平时,表明转换结束;否则,表明正在进行A/D 转换。OE 为输出允许信号,用于控制三条输出锁存器向单片机输出转换得到的数据。OE =1,输出转换得到的数据;OE =0,输出数据线呈高阻状态。D7-D0 为数字量输出线。CLK 为时钟输入信号线。因ADC0809的内部没有时钟电路,所需时钟信号必须由外界提供,通常使用频率为500KHZ ,VREF (+),VREF (-)为参考电压输入。
3 、ADC0809 应用说明
(1)ADC0809 内部带有输出锁存器,可以与AT89S51 单片机直接相连。
(2)初始化时,使ST 和OE 信号全为低电平。
(3)送要转换的哪一通道的地址到A ,B ,C 端口上。
(4)在ST 端给出一个至少有100ns 宽的正脉冲信号。
(5)是否转换完毕,我们根据EOC 信号来判断。
(6)当EOC 变为高电平时,这时给OE 为高电平,转换的数据就输出给单片机了。
2.3.2、AD0809与51单片机的连接
如图2.3.2所示:
图2.3.2 AD0809与51单片机接口电路
2.4、单片机处理显示电路
本次设计使用的是AT89C51。
2.4.1、AT89C51简介
AT89C51是一种带4K 字节FLASH 存储器(FPEROM —Flash Programmable and Erasable Read Only Memory)的低电压、高性能CMOS 8位微处理器,俗称单片机。AT89C2051是一种带2K 字节闪存可编程可擦除只读存储器的单片机。单片机的可擦除只读存储器可以反复擦除1000次。该器件采用ATMEL 高密度非易失存储器制造技术制造,与工业标准的MCS-51
指令集和输出管脚
相兼容。由于将多功能8位CPU 和闪烁存储器组合在单个芯片中,ATMEL 的AT89C51是一种高效微控制器,AT89C2051是它的一种精简版本。AT89C51单片机为很多嵌入式控制系统提供了一种灵活性高且价廉的方案。外形及引脚排列图2.4.1所示。
图2.4.1 AT89C51引脚图和外形图
VCC :供电电压。
GND :接地。
P0口:P0口为一个8位漏级开路双向I/O口,每脚可吸收8TTL 门电流。当P0口的管脚第一次写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:来自反向振荡器的输出。 2.4.2、复位电路
计算机在启动运行时都需要复位,使中央处理器CPU 和系统中的其它部件都处于一个确定的初始状态,并从这个状态开始工作。单片机采用的复位方式是自动复位方式。振荡电路的作用是为AT89C51提供一个稳定的工作频率单片机采用的复位方式是自动复位方式。在加电瞬间,电容通过电阻充电,就在RST 端出现一定时间的高电平,只要高电平时间足够长,就可以使MCS-51有效的复位。RST 端在加电时应保持的高电平时间包括V CC 的上升时间和振荡器起振的时间,V ss 上升时间若为10ms ,振荡器起振的时间和频率有关。10MHZ 时约为1ms ,1MHZ 时约为10ms ,所以一般为了可靠的复位,RST 在上电应保持20ms 以上的高电平。RC 时间常数越大,上电RST 端保持高电平的时间越长。
若复位电路失效,加电后CPU 从一个随机的状态开始工作,系统就不能正常运转。 如图2.4.2所示:
图2.4.2 复位电路
2.5、报警电路
本次的设计是采用蜂鸣器报警,其电路原理图如图2.5所示:
图2.5 蜂鸣器报警电路
2.6、显示电路
在这次课设中由于仿真和实物连接所使用的是不同的显示电路,仿真时用的是液晶显示而实物连接使用的是7279显示。液晶显示如图2.6所示:
图2.6 液晶显示
三、硬件方案电路设计 3.1、方案比较
3.1.1、方案一
用AD732进行采样转换,其流程图如图3.1.1所示:
图3.1.1 系统流程图(AD736)
3.1.2、方案二
用AD0809进行采样转换,因我们对0809交为熟悉和价格问题,而且学校发了一块最小系统版,其中也是0809. 所以在这我们选用方案二,其大致流程如图3.1.2所示。
图3.1.2 系统流程图(AD0809)
3.1、变压整流电路
电路的功能主要是把220V 的交流电压经过降压、整流滤波和调压等步骤得到低值(+5V)的直流模拟量 ,供给A/D转换芯片采样。后面直接用5V 电压提供电源。
其仿真图如图3.1所示。
图3.1 变压整流电路
3.2、AD 采样电路
该电路通过IN0通道把电压模拟信号采样进来,然后0809把模拟量转化为数字量通过数字量输出线D0-D7输出给单片机。其中在转换期间,ST 应保持低电平。EOC 为转换结束信号。当EOC 为高电平时,表明转换结束;否则,表明正在进行A/D 转换。OE 为输出允许信号,用于控制三条输出锁存器向单片机输出转换得到的数据。CLK 为时钟输入信号线。因ADC0809的内部没有时钟电路,所需时钟信号必须由外界提供,通常使用频率为500KHZ ,VREF (+),VREF (-)为参考电压输入。
其仿真图如图3.2所示;
图3.2 AD转换电路
3.3、单片机处理及显示电路
单片机的P0口接受0809转换后的数字量,在P1口输出并通过连接液晶显示。其中P3.0设置为报警输出端,其为高时,报警。反之,不报警。并且把P2.0,P2.1,P2.2端定义与液晶显示RS,RW,E 端相连。另外液晶显示输入口需加一排提拉电阻,使其正常工作。
其仿真电路图如图3.3所示:
图3.3 单片机处理及显示电路
3.4、复位电路
在加电瞬间,电容通过电阻充电,就在RST 端出现一定时间的高电平,只要高电平时间足够长,就可以使MCS-51有效的复位。且一般为了可靠的复位,RST 在上电应保持20ms 以上的高电平。RC 时间常数越大,上电RST 端保持高电平的时间越长。
其仿真电路如图3.4所示:
图3.4 复位电路
3.5、报警电路
蜂鸣器的工作电压为3-5V ,工作电流为50mA-100mA 。所以在电路中给其5V 的电压可使其正常工作。当三极管b 端为高时,三极管导通,蜂鸣器工作。反之,不工作。
其仿真电路图如图3.5所示:
图3.5 报警电路
四、软件设计 4.1、结构功能设计
软件主要完成控制AD0809进行采样、A/D转换 ,并从中取得结果以及根据结果作出相应的报警动作。
根据交直流电压对照如表4-1:
表4-1 交直流电压对照表
我们选取交流160 伏对应的直流2.6 伏和交流 260伏对应的直流4.3伏两组作为正常电压边界域值 ,当参考电压 +5V 时 ,2.6V 和 4.3V 对应的A/D结果为89H 和0DDH, 将两值在程序中设定为比较的边界值。超过4.3V 或低于2.6V 报警。报警是采用位操作指令 ,报警电路是从P3.0引脚引出 ,高电平时电路导通 ,蜂鸣器响; 相反低电平时 蜂鸣器不响; 显示是通过P1口输出给液晶显示。
4.2、算法设计
算法流程图如图4.2所示:
图4.2 算法流程图
4.3、程序流程
整个程序主要包括:芯片初始化,端口初始化,地址初始化,AD 采样转换,判断显示和报警。其流程图如图4.3所示:
图4.3 程序流程图
五、实验调试和测试结果与分析 5.1、软件部分
在protues 仿真中遇到一些问题,先是液晶显示不出来,后经调试才发现是程序判断出现错误,先是跟小的比较后直接又跟大的比较,使得程序直接跳出。没有显示,改正后就显示出来了。后来就出现显示乱码,结果检查出2个问题,一是0809忘记CLOCK ,二是程序算法出现点错误。在转换显示时,出现大于255的数时就会溢出,后来加了一个判断,在有进位的数时,把百位置2,在数带借位减去64H ,在除以0AH ,得到十位,余数为个位,这样改正后就正常显示出来了。结果是在设定的电压范围内部报警,低于设定较小值和高于设定较大值都会报警。
5.1、硬件部分
学院每组配发了一块最小系统版,因此硬件部分比较简单,只要连接好报警电路和采样电路就可。但在其调试时也遇到一个小状况就是蜂鸣器就是不响。在查询了一些资料和其他同学的帮助后才发现在三极管的发射机多接了一个电阻,因为蜂鸣器的工作电压要在3V-5V ,且要求一定电流,在50mA-100mA 。当我们把那个电阻去掉后,整个硬件开始正常工作了。
六、结论
本系统在电脑是用proteus 模拟调试 ,对不同的输入能作出正确的判断并作出是否报警的动作。用 AT89C51 作CPU ,它自带内部 EPROM,将编好的程序直接用软件进行仿真, 易于调试, 增加液晶显示实时电压值 ,使系统更加完善 。Proteus 这个仿真软件真的很好用。设计的缺点就是电压值采样的不怎么精确,希望以后可以改进。同时希望能够设计出可以用最小系统版中的按键来直接改变设定电压值的范围。
感谢在这次设计中给我帮助的同学,感谢老师对设计的指导,本次试验做的特别漫长,由于中间总有事情打扰每天的进度都不算多。不过也算提高
了自己,夯实了知识,特别是对proteus 这个软件的运用,有了熟练的掌握。
七、参考文献
[1] 杜伟略.80C51单片机及接口技术. 北京:化学工业出版社,2008.2 [2] 翁桂荣、邹丽新. 单片微型计算机接口技术. 苏州:苏州大学出版社,2007.4
[3] 唐竞新. 数字电子电路[M].第1版. 北京:清华大学出版社,2003 [4] 付晓光. 单片机原理与实用技术[M] . 北京:清华大学出版社,2006. [5] 张惠敏. 数字电子技术[M] . 北京:化学工业出版社,2005. [6] 李林功、吴飞青. 单片机原理与应用. 北京:机械工业出版社,2007 [7] 关键. 电子CAD 技术(第2版). 北京:电子工业出版社,2006
在较小值160V 和较大值260V 之间,蜂鸣器不响
低于较小值160V ,蜂鸣器响
大于较大值260V ,蜂鸣器响
附录三 程序代码
1、硬件代码
CS BIT P1.0 CLK BIT P1.1 DAT BIT P1.2 KEY BIT P1.3 BUZZER BIT P1.4 BJLOW DATA 021H BJHIGH DATA 022H
/********** 主程序 ************/ ORG 0000H LJMP START ORG 0030H START:MOV SP,#67H
MOV BJLOW,#89H ;设置较低电压值为160V MOV BJHIGH,#0DDH ;设置较高电压值为260V ACALL INIT_7279 L1: ACALL SAMP ACALL DISP JMP L1
/**********AD0809采样子程序 *******/ SAMP: MOV DPTR,#0A000H MOVX @DPTR,A MOV R7,#20H SAMP_L1:DJNZ R7,SAMP_L1 MOVX A,@DPTR CJNE A,BJLOW,SAMP_L2
SAMP_L2:JNC SAMP_L3 SETB BUZZER LJMP SAMP_L6
SAMP_L3:CJNE A,BJHIGH,SAMP_L4 SAMP_L4:JC SAMP_L5 SETB BUZZER SJMP SAMP_L6
SAMP_L5:CLR BUZZER SAMP_L6:MOV B,#33H DIV AB
MOV 50H,A MOV A,B MOV B,#05H DIV AB
MOV 51H,A MOV A,50H MOV B,#3CH
MUL AB MOV 53H,A MOV A,51H MOV B,#06H
MUL AB CLR C ADDC A,53H MOV 55H,A JNC SAMP_L9 MOV 45H,#02H MOV A,55H
50H 51H 60 6 ;判断采样电压是否在设定范围内 ;十位存于;个位存于;十位乘以;个位乘以
SUBB A,#0C8H MOV B,#0AH DIV AB MOV 46H,A MOV A,B MOV 47H,A
SJMP SAMP_L10 ;大于256的算法 SAMP_L9:MOV A,55H MOV B,#64H DIV AB MOV 45H,A MOV A,B MOV B,#0AH DIV AB MOV 46H,A
MOV A,B ;小于256的算法 MOV 47H,A ;将模拟量转换为数字量 SAMP_L10:RET
/********HD7279显示子程序 *********/ DISP: MOV R5,#08H MOV 40H,#0AH MOV 41H,#0AH MOV 42H,#0AH MOV 43H,#0AH MOV 44H,#0AH MOV R0,#40H MOV R1,#97H DLP1: CLR CS
; 数码管显示的个数
; 待显示的数据
; 待显示数据的显示方式指令
MOV A,R1 ; 发送第一个指令 ACALL STFS ; 调发送子程序 MOV A,@R0 ; 显示数据送A MOV DPTR,#TAB
MOVC A,@A+DPTR ; 待显示的数据送A ACALL STFS ; 调发送子程序 SETB CS ; 拉高CS INC R0 ; 修改数据指针 DEC R1
; 修改指令指针
DJNZ R5,DLP1 ;判断是否接受完数据 RET
TAB: DB 7EH,30H,6DH,79H,33H,5BH,5FH
DB 70H,7FH,7BH,00H ;0-9的对应的显示码 /********7279发送一个字节子程序 *********/ STFS: MOV R7,#08H FLP1: RLC A MOV P1.2,C SETB P1.1 MOV R6,#02H FLP2: DJNZ R6,FLP2 CLR P1.1 MOV R6,#02H FLP3: DJNZ R6,FLP3 DJNZ R7,FLP1 RET
/********HD7279初始化子程序 *********/ INIT_7279: MOV A,#0A4H ;A4为复位指令 ACALL STFS
; 调发送子程序
SETB CS ; 拉高CS
RET END
2、软件代码
RS BIT P2.0 ;定义RS 为P2.0 RW BIT P2.1 ;定义RW 为P2.1 E BIT P2.2 ;定义E 为P2.2 BUZZER BIT P3.0 BJLOW DATA 021H BJHIGH DATA 022H
/********** 主程序 ************/ ORG 0000H LJMP START ORG 0030H START:MOV SP,#67H
MOV BJLOW,#89H ;设置较低电压值为160V MOV BJHIGH,#0DDH ;设置较高电压值为260V ACALL INIT_7279 L1: ACALL SAMP ACALL DISP JMP L1
/**********AD0809采样子程序 *******/ SAMP: MOV DPTR,#0A000H MOVX @DPTR,A MOV R7,#20H SAMP_L1:DJNZ R7,SAMP_L1 MOVX A,@DPTR CJNE A,BJLOW,SAMP_L2
SAMP_L2:JNC SAMP_L3
SETB BUZZER
LJMP SAMP_L6
SAMP_L3:CJNE A,BJHIGH,SAMP_L4
SAMP_L4:JC SAMP_L5
SETB BUZZER
SJMP SAMP_L6
SAMP_L5:CLR BUZZER
SAMP_L6:MOV B,#33H
DIV AB
MOV 50H,A
MOV A,B
MOV B,#05H
DIV AB
MOV 51H,A
MOV A,50H
MOV B,#3CH
MUL AB
MOV 53H,A
MOV A,51H
MOV B,#06H
MUL AB
CLR C
ADDC A,53H
MOV 55H,A
JNC SAMP_L9
MOV 45H,#02H
MOV A,55H
50H 51H 60 6 ;判断采样电压是否在设定范围内 ;十位存于;个位存于;十位乘以;个位乘以
SUBB A,#0C8H
MOV B,#0AH
DIV AB
MOV 46H,A
MOV A,B
MOV 47H,A
SJMP SAMP_L10 ;大于256的算法
SAMP_L9:MOV A,55H
MOV B,#64H
DIV AB
MOV 45H,A
MOV A,B
MOV B,#0AH
DIV AB
MOV 46H,A
MOV A,B ;小于256的算法
MOV 47H,A ;将模拟量转换为数字量
SAMP_L10:RET
DISP: MOV A,#80H ;显示开及光标设置
LCALL BUSY
LCALL WRTC
MOV A,45H
LCALL DELAY
LCALL WRTD
MOV A,#81H ;显示开及光标设置
LCALL BUSY
LCALL WRTC
MOV A,46H
LCALL WRTD
MOV A,#82H ;显示开及光标设置
LCALL BUSY
LCALL WRTC
MOV A,47H
LCALL DELAY
LCALL WRTD
RET
;***************初始化*****************
RESET:
LCALL DELAY ;延时15ms
LCALL DELAY
LCALL DELAY
MOV A,#38H ;显示模式设置(8位数据线,16*2 5*7点阵) LCALL WRTC
LCALL DELAY ;延时5ms
MOV A,#01H ;清屏
LCALL BUSY
LCALL WRTC
MOV A,#06H ;显示光标移动设置
LCALL BUSY
LCALL WRTC
MOV A,#0CH ;示开关控制, 显示开,无光标,不闪烁。 LCALL BUSY
LCALL WRTC
MOV A,#40H ;写CGRAM 地址.
LCALL BUSY
RET
;***************写命令子程序***************** WRTC:
CLR RS
CLR RW
CLR E
MOV P1,A
LCALL DELAY ;延时5ms
SETB E
LCALL DELAY ;延时5ms
CLR E
RET
;*****************写数据子程序*************** WRTD: MOV DPTR,#TAB
MOVC A,@A+DPTR
SETB RS
CLR RW
CLR E
MOV P1,A
LCALL DELAY
SETB E
LCALL DELAY
CLR E
RET
TAB:DB 30H,31H,32H,33H,34H,35H,36H,37H,38H,39H ;*****************判忙子程序****************** BUSY:
PUSH ACC CLR RS
SETB RW
TT0: SETB E
MOV A,P1
CLR E
ANL A,#80H
JNZ TT0
POP ACC
RET
DELAY: MOV R6,#10
D1: MOV R7,#250
DJNZ R7,$
DJNZ R6,D1
RET