




已阅读5页,还剩16页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
LCD1602汇编程序;* 描述: LCD1602 滚动显示 *;* 显示方式: *;* 1、从左到右逐字显示,闪动二次,清屏。 *;* 2、再从右到左逐字显示,闪动二次,清屏。 *;* 3、周期性地重复上述显示方式。 *;*LCD_RS EQU P2.0LCD_RW EQU P2.1LCD_EN EQU P2.2;*ORG 0000HAJMP MAINORG 0030H;*MAIN:MOV SP,#60HMOV R4,#02H ;设置闪烁次数ACALL LCD_INITMAIN1:ACALL LCDSET1MOV DPTR,#CHAR1ACALL WRITE1 ;MOV A,#0C0H ;显示第二行左边第一位位置ACALL LCD_CMDMOV DPTR,#CHAR2 ;显示ACALL WRITE1ACALL DELAY4 ;延时ACALL DELAY4ACALL SHAN ;闪烁两次ACALL LCDSET2MOV DPTR,#CHAR3 ;ACALL WRITE1MOV A,#0C0H ;显示第二行右边第一位位置ACALL LCD_CMDMOV DPTR,#CHAR4 ;显示ACALL WRITE1ACALL DELAY4 ;延时ACALL DELAY4ACALL SHAN ;闪烁两次ACALL MAIN1;*;LCD初始化设定子程序;*LCD_INIT:ACALL DELAY5MS ;延时15MSACALL DELAY5MS ;等待LCD 电源稳定ACALL DELAY5MSMOV A,#38H ;16*2 显示,5*7 点阵,8 位数据ACALL LCD_CMD_NC ;不进行LCD 忙检测ACALL DELAY5MSMOV A,#38H ;16*2 显示,5*7 点阵,8 位数据ACALL LCD_CMD_NC ;不进行LCD 忙检测ACALL DELAY5MSMOV A,#38H ;16*2 显示,5*7 点阵,8 位数据ACALL LCD_CMD_NC ;不进行LCD 忙检测ACALL DELAY5MSMOV A,#08H ;显示关ACALL LCD_CMD ;进行LCD 忙检测MOV A,#01H ;清除屏幕ACALL LCD_CMD ;进行LCD忙检测MOV A,#06H ;移动光标ACALL LCD_CMD ;进行LCD 忙检测MOV A,#0CH ;显示开,关光标ACALL LCD_CMD ;进行LCD 忙检测RET;*;显示位置与移动光标设定;*LCDSET1:MOV A,#01H ;清除屏幕ACALL LCD_CMDACALL DELAY5MSMOV A,#06H ;移动光标(光标加1)ACALL LCD_CMDACALL DELAY5MSMOV A,#80H ;显示第一行左边第一位位置ACALL LCD_CMDACALL DELAY5MSRETLCDSET2:MOV A,#01H ;清除屏幕ACALL LCD_CMDACALL DELAY5MSMOV A,#06H ;移动光标(光标减1)ACALL LCD_CMDACALL DELAY5MSMOV A,#80H ;显示第一行右边第一位位置ACALL LCD_CMDACALL DELAY5MSRET;*;写指令数据到LCD;RS=L,RW=L,D0-D7=指令码,E=高脉冲;*LCD_CMD:ACALL CHECKBUSYLCD_CMD_NC:CLR LCD_RSCLR LCD_RWMOV P0,ASETB LCD_ENNOPNOPNOPNOPCLR LCD_ENRET;*; 发送字符串子程序;*WRITE1:MOV R0,#16WRITE0:CLR AMOVC A,A+DPTRINC DPTRACALL LCD_WDATACALL DELAY ;加延时形成滚动效果DJNZ R0,WRITE0RET;*;写显示数据到LCD;RS=H,RW=L,D0-D7=数据,E=高脉冲;*LCD_WDATA:ACALL CHECKBUSYSETB LCD_RSCLR LCD_RWMOV P0,ASETB LCD_ENNOPNOPNOPNOPCLR LCD_ENRET;*;检测LCD 控制器忙状态;读数据;RS=L,RW=H,E=H,输出:D0-D7=数据;*CHECKBUSY:PUSH ACCMOV P0,#0FFHCLR LCD_RSSETB LCD_RWSETB LCD_ENBUSYLOOP:NOPJB P0.7,BUSYLOOPCLR LCD_ENPOP ACCRET;*;闪烁子程序;*SHAN:MOV A,#08H ;关闭显示ACALL LCD_CMDACALL DELAY4MOV A,#0CH ;开显示,关闭光标ACALL LCD_CMDACALL DELAY4DJNZ R4,SHANMOV R4,#02H ;设置闪烁次数RET;*;延时120MS 子程序;发送字符串时使用;*DELAY:MOV R7,#240DL1: MOV R6,#250DL2: DJNZ R6,DL2DJNZ R7,DL1RET;*;延时800MS 子程序;闪烁时使用;*DELAY4:MOV R0,#40DL3: MOV R1,#100DL4: MOV R2,#100DL5: DJNZ R2,DL5DJNZ R1,DL4DJNZ R0,DL3RET;*;延时5MS子程序;LCD初始化使用;*DELAY5MS:MOV R1,#10DL6: MOV R2,#249DL7: DJNZ R2,DL7DJNZ R1,DL6RET;*;延时1MS子程序;*DELAY1MS:MOV R6,#14H ;20DL8: MOV R7,#19H ;25DL9: DJNZ R7,DL9DJNZ R6,DL8RET;*CHAR1:DB Welcome to Cras-CHAR2:DB yBoye WorkGroupCHAR3:DB QQ: 15910380 CHAR4:DB TEL:*END12864汇编程序X EQU 26H ;LCD 地址变量 RS EQU P2.0 RW EQU P2.1 EN EQU P2.2 PSB EQU P2.3 RST EQU P2.5 ORG 0000H JMP MAIN ORG 0003H ;外部中断INT0入口地址MAIN: MOV SP,#40H MOV A,#00H MOV R0,#20HLOOP0: MOV R0,A ;20H-26H清零 INC R0 CJNE R0,#27H,LOOP0 MOV IE,#81H ;允许总中断中断,使能 INT0 外部中断 MOV TCON,#01H ;触发方式为脉冲负边沿触发 SETB RST NOP SETB PSB ;8位数据,并口 CALL SET_LCD ;初始化TS12864m CALL MENU1 CALL MENU2 CALL MENU3 CALL MENU4LOOP1: MOV A,22H CJNE A,#40H,LOOP2 LOOP2: CJNE A,#04H,LOOP3 LOOP3: JMP LOOP1;=; LCD 初始化设置;=-SET_LCD: CLR EN MOV A,#34H ;34H-扩充指令操作 CALL WCOM MOV A,#30H ;30H-基本指令操作 CALL WCOM MOV A,#0CH ;开显示,关光标, CALL WCOM MOV A,#01H ;清除 LCM 显示屏 CALL WCOM RET;=;在 LCM 各行显示信息字符;=LCD_SHOW: CJNE A,#1,LINE2 ;判断是否为第一行 LINE1: MOV A,#80H ;设置 LCD 的第一行地址 CALL WCOM ;写入命令 CALL CLR_LINE ;清除该行字符数据 MOV A,#80H ;设置 LCD 的第一行地址 CALL WCOM ;写入命令 JMP FILL LINE2: CJNE A,#2,LINE3 ;判断是否为第三行 MOV A,#090H ;设置 LCD 的第三行地址 CALL WCOM ;写入命令 CALL CLR_LINE ;清除该行字符数据 MOV A,#090H ;设置 LCD 的第三行地址 CALL WCOM JMP FILL LINE3: CJNE A,#3,LINE4 ;判断是否为第三行 MOV A,#088H ;设置 LCD 的第三行地址 CALL WCOM ;写入命令 CALL CLR_LINE ;清除该行字符数据 MOV A,#088H ;设置 LCD 的第三行地址 CALL WCOM JMP FILL LINE4: CJNE A,#4,LINE5 ;判断是否为第三行 MOV A,#098H ;设置 LCD 的第三行地址 CALL WCOM ;写入命令 CALL CLR_LINE ;清除该行字符数据 MOV A,#098H ;设置 LCD 的第三行地址 CALL WCOM FILL: CLR A ;填入字符 MOVC A,A+DPTR ;由消息区取出字符 CJNE A,#0,LC1 ;判断是否为结束码 LINE5: RET LC1: CALL WDATA ;写入数据 INC DPTR ;指针加1 JMP FILL ;继续填入字符 RET;=;清除该行 LCM 的字符;=CLR_LINE: MOV R0,#16 CL1: MOV A,# CALL WDATA DJNZ R0,CL1 RET;=;LCM 显示工作菜单信息;=MENU1: MOV DPTR,#MENU1A MOV A,#1 ;在第一行显示信息 CALL LCD_SHOW RETMENU1A: DB MUC 控制GPRS模块,0MENU2: MOV DPTR,#MENU2A MOV A,#2 ;在第二行显示信息 CALL LCD_SHOW RETMENU2A: DB TEL0MENU3: MOV DPTR,#MENU3A MOV A,#3 ;在第三行显示信息 CALL LCD_SHOW RETMENU3A: DB 方案设计: 龚 伟,0MENU4: MOV DPTR,#MENU4A MOV A,#4 ;在第四行显示信息 CALL LCD_SHOW RETMENU4A: DB 程序编写: 靳 鹏,0;=; 写指令使能子程序;RS=L,RW=L,D0-D7=指令码,E=高脉冲;=WCOM: MOV P0,A CLR RS CLR RW SETB EN CALL DELAY0 CLR EN RET;=;写数据使能子程序;RS=H,RW=L,D0-D7=数据,E=高脉冲;=WDATA: MOV P0,A SETB RS CLR RW SETB EN CALL DELAY0 CLR EN RETDELAY0: MOV R7,#250 ;延时500微秒 DJNZ R7,$ RET ENDDS18B20数字温度采集TEMPER_L EQU 36H;存放读出温度低位数据TEMPER_H EQU 35H;存放读出温度高位数据TEMPER_NUM EQU 60H;存放转换后的温度值FLAG1 BIT00HDQ BIT P3.3;一线总线控制端口ORG8000HLJMPMAINORG8100HMAIN:MOV SP,#70HLCALL GET_TEMPER;从DS18B20读出温度数据LCALL TEMPER_COV;转换读出的温度数据并保存SJMP $;完成一次数字温度采集;-读出转换后的温度值GET_TEMPER:SETB DQ ; 定时入口BCD:LCALL INIT_1820JB FLAG1,S22LJMP BCD ; 若DS18B20不存在则返回S22:LCALL DELAY1MOV A,#0CCH ; 跳过ROM匹配-0CCLCALL WRITE_1820MOV A,#44H ; 发出温度转换命令LCALL WRITE_1820NOPLCALL DELAYLCALL DELAYCBA:LCALL INIT_1820JB FLAG1,ABCLJMP CBAABC:LCALL DELAY1MOV A,#0CCH ; 跳过ROM匹配LCALL WRITE_1820MOV A,#0BEH ; 发出读温度命令LCALL WRITE_1820LCALL READ_18200 ;READ_1820RET;-读DS18B20的程序,从DS18B20中读出一个字节的数据READ_1820:MOV R2,#8RE1:CLR CSETB DQNOPNOPCLR DQNOPNOPNOPSETB DQMOV R3,#7DJNZ R3,$MOV C,DQMOV R3,#23DJNZ R3,$RRC ADJNZ R2,RE1RET;-写DS18B20的程序WRITE_1820:MOV R2,#8CLR CWR1:CLR DQMOV R3,#6DJNZ R3,$RRC AMOV DQ,CMOV R3,#23DJNZ R3,$SETB DQNOPDJNZ R2,WR1SETB DQRET;-读DS18B20的程序,从DS18B20中读出两个字节的温度数据READ_18200:MOV R4,#2 ; 将温度高位和低位从DS18B20中读出MOV R1,#36H ; 低位存入36H(TEMPER_L),高位存入35H(TEMPER_H)RE00:MOV R2,#8RE01:CLR CSETB DQNOPNOPCLR DQNOPNOPNOPSETB DQMOV R3,#7DJNZ R3,$MOV C,DQMOV R3,#23DJNZ R3,$RRC ADJNZ R2,RE01MOV R1,ADEC R1DJNZ R4,RE00RET;-将从DS18B20中读出的温度数据进行转换TEMPER_COV:MOV A,#0F0HANL A,TEMPER_L ; 舍去温度低位中小数点后的四位温度数值SWAP AMOV TEMPER_NUM,AMOV A,TEMPER_LJNB ACC.3,TEMPER_COV1 ; 四舍五入去温度值INC TEMPER_NUMTEMPER_COV1:MOV A,TEMPER_HANL A,#07HSWAP AADD A,TEMPER_NUMMOV TEMPER_NUM,A ; 保存变换后的温度数据LCALL BIN_BCDRET;-将16进制的温度数据转换成压缩BCD码BIN_BCD:MOV DPTR,#TEMP_TABMOV A,TEMPER_NUMMOVC A,A+DPTRMOV TEMPER_NUM,ARETTEMP_TAB:DB 00H,01H,02H,03H,04H,05H,06H,07HDB 08H,09H,10H,11H,12H,13H,14H,15HDB 16H,17H,18H,19H,20H,21H,22H,23HDB 24H,25H,26H,27H,28H,29H,30H,31HDB 32H,33H,34H,35H,36H,37H,38H,39HDB 40H,41H,42H,43H,44H,45H,46H,47HDB 48H,49H,50H,51H,52H,53H,54H,55HDB 56H,57H,58H,59H,60H,61H,62H,63HDB 64H,65H,66H,67H,68H,69H,70H,71HDB 72H,73H,74H,75H,76H,77H,78H,79HDB 80H,81H,82H,83H,84H,85H,86H,87HDB 88H,89H,90H,91H,92H,93H,94H,95HDB 96H,97H,98H,99H;-DS18B20初始化程序INIT_1820:SETB DQNOPCLR DQMOV R0,#80HTSR1:DJNZ R0,TSR1 ; 延时SETB DQMOV R0,#25H ;96US-25HTSR2:DJNZ R0,TSR2JNB DQ,TSR3LJMP TSR4 ; 延时TSR3:SETB FLAG1 ; 置标志位,表示DS1820存在LJMP TSR5TSR4:CLR FLAG1 ; 清标志位,表示DS1820不存在LJMP TSR7TSR5:MOV R0,#06BH ;200USTSR6:DJNZ R0,TSR6 ; 延时TSR7:SETB DQRET;-重新写DS18B20暂存存储器设定值RE_CONFIG:JB FLAG1,RE_CONFIG1 ; 若DS18B20存在,转RE_CONFIG1RETRE_CONFIG1:MOV A,#0CCH ; 发SKIP ROM命令LCALL WRITE_1820MOV A,#4EH ; 发写暂存存储器命令LCALL WRITE_1820MOV A,#00H ; TH(报警上限)中写入00HLCALL WRITE_1820MOV A,#00H ; TL(报警下限)中写入00HLCALL WRITE_1820MOV A,#7FH ; 选择12位温度分辨率LCALL WRITE_1820RET;-延时子程序DELAY:MOV R7,#00HMIN:DJNZ R7,YS500RETYS500:LCALL YS500USLJMP MINYS500US:MOV R6,#00HDJNZ R6,$RETDELAY1:MOV R7,#20HDJNZ R7,$RETEND此软件包是用在单主 I2C 总线上 硬件接口是 SDA SCL 使用 MCU 的 I/O 口来模拟SDA/SCL总线设计有/无子地址的子程序是根据 I2C 器件的特点 目的在于将地址和数据彻底分开 软件包的接口界面为 IRDBYTE 无子地址 读单字节数据 现行地址读 IWRBYTE 无子地址 写单字节数据 现行地址写 IRDNBYTE 有子地址 读 N 字节数据 IWRNBYTE 有子地址 写 N 字节数据 说明 现行地址读/写即专指无子地址的器件 不给定子地址的读/写操作 软件包占用内部资源 R0 R1 R2 R3 ACC Cy 使用前须定义变量 SLA 器件从地址 SUBA器件子地址 NUMBYTE 读/写的字节数 位变量 ACK 使用前须定义常量 SDA SCL 总线位 MTD 发送数据缓冲区首址 MRD 接收数据缓冲区首址 ;* ;VI2C_ASM.ASM ;I2C 软件包的底层子程序 使用前要定义好 SCL和 SDA 在标准 80C51 模式 ; 12 Clock 下,对主频要求是不高于 12MHz(1 个机器周期 1us);若 Fosc12MHz ;则要增加相应的 NOP 指令数 在使用本软件包时 请在你的程序的未尾加入 ;$INCLUDE (VI2C_ASM.ASM)即可 ;* ;启动 I2C 总线子程序 START: SETB SDA NOP SETB SCL ;起始条件建立时间大于 4.7us NOP 广州周立功单片机发展有限公司 Tel 020 38730976 38730977 Fax 38730925 Http:/ - 2 - NOP NOP NOP NOP CLR SDA NOP ;起始条件锁定时大于 4us NOP NOP NOP NOP CLR SCL ;钳住总线 准备发数据 NOP RET ;结束总线子程序 STOP: CLR SDA NOP SETB SCL ;发送结束条件的时钟信号 NOP ;结束总线时间大于 4us NOP NOP NOP NOP SETB SDA ;结束总线 NOP ;保证一个终止信号和起始信号的空闲时间大于 4.7us NOP NOP NOP RET ;发送应答信号子程序 MACK: CLR SDA ;将 SDA置 0 NOP NOP SETB SCL NOP ;保持数据时间 即 SCL为高时间大于 4.7us NOP NOP NOP NOP CLR SCL NOP NOP RET 广州周立功单片机发展有限公司 Tel 020 38730976 38730977 Fax 38730925 Http:/ - 3 - ;发送非应答信号 MNACK: SETB SDA ;将 SDA置 1 NOP NOP SETB SCL NOP NOP ;保持数据时间 即 SCL为高时间大于 4.7us NOP NOP NOP CLR SCL NOP NOP RET ; 检查应答位子程序 ; 返回值 ACK=1 时表示有应答 CACK: SETB SDA NOP NOP SETB SCL CLR ACK NOP NOP MOV C,SDA JC CEND SETB ACK ;判断应答位 CEND: NOP CLR SCL NOP RET ;发送字节子程序 ;字节数据放入 ACC ;每发送一字节要调用一次 CACK 子程序 取应答位 WRBYTE: MOV R0,#08H WLP: RLC A ;取数据位 JC WR1 SJMP WR0 ;判断数据位 WLP1: DJNZ R0,WLP NOP RET WR1: SETB SDA ;发送 1 广州周立功单片机发展有限公司 Tel 020 38730976 38730977 Fax 38730925 Http:/ - 4 - NOP SETB SCL NOP NOP NOP NOP NOP CLR SCL SJMP WLP1 WR0: CLR SDA ;发送 0 NOP SETB SCL NOP NOP NOP NOP NOP CLR SCL SJMP WLP1 ;读取字节子程序 ;读出的值在 ACC ;每取一字节要发送一个应答/非应答信号 RDBYTE: MOV R0,#08H RLP: SETB SDA NOP SETB SCL ;时钟线为高 接收数据位 NOP NOP MOV C,SDA ;读取数据位 MOV A,R2 CLR SCL ;将 SCL拉低 时间大于 4.7us RLC A ;进行数据位的处理 MOV R2,A NOP NOP NOP DJNZ R0,RLP ;未够 8 位 再来一次 RET ; 无子地址器件写字节数据 ; 入口参数: 数据为 ACC 器件从地址 SLA ; 占用: A R0 CY IWRBYTE: PUSH ACC 广州周立功单片机发展有限公司 Tel 020 38730976 38730977 Fax 38730925 Http:/ - 5 - IWBLOOP: LCALL START ;起动总线 MOV A,SLA LCALL WRBYTE ;发送器件从地址 LCALL CACK JNB ACK,RETWRB ;无应答则跳转 POP ACC ;写数据 LCALL WRBYTE LCALL CACK LCALL STOP RET RETWRB: POP ACC LCALL STOP RET ;无子地址器件读字节数据 ;入口参数: 器件从地址 SLA ;出口参数: 数据为 ACC ;占用 A R0 R2 CY IRDBYTE: LCALL START MOV A,SLA ;发送器件从地址 INC A LCALL WRBYTE LCALL CACK JNB ACK,RETRDB LCALL RDBYTE ;进行读字节操作 LCALL MNACK ;发送非应信号 RETRDB: LCALL STOP ;结束总线 RET ;向器件指定子地址写 N 个数据 ;入口参数: 器件从地址 SLA 器件子地址 SUBA 发送数据缓冲区 MTD 发送字节数 NUMBYTE ; 占用 A R0 R1 R3 CY IWRNBYTE: MOV A,NUMBYTE MOV R3,A LCALL START ;起动总线 MOV A,SLA LCALL WRBYTE ;发送器件从地址 LCALL CACK JNB ACK,RETWRN ;无应答则退出 MOV A,SUBA ;指定子地址 LCALL WRBYTE LCALL CACK MOV R1,#MTD WRDA: MOV A,R1 广州周立功单片机发展有限公司 Tel 020 38730976
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 办公设备再制造工数字化技能考核试卷及答案
- 农发行武汉市东西湖区2025秋招笔试创新题型专练及答案
- 墨制作工效率提升考核试卷及答案
- 纺织印花制版工转正考核试卷及答案
- 岗位四位一体试卷及答案
- 2025年船员英语基础考试题及答案
- 铆工焊工考试试题及答案
- 2025年花都核酸考试试题及答案
- 单相交流电路试卷及答案
- 加州卡车考试试题及答案
- 小学生创意产业的人才培养计划
- 中药白芷简介
- Unit 2 Different families Part A(说课稿)-2024-2025学年人教PEP版(2024)英语三年级上册
- 2024-2030年中国电船行业趋势预测及投融资分析报告
- 超全自考英语二词汇表-含音标4500-个单词
- 【MOOC】电工电子实验基础-东南大学 中国大学慕课MOOC答案
- 成都市公务员劳动合同
- 专题02 0-v-0模型(解析版)-2023-2024学年高中物理同步模型易点通人教版2019必修第一册
- 自然辩证法论述题146题带答案(可打印版)
- 第1课-远古时期的人类活动【同步练习】
- (校对)2023年国家公务员考试《行测》真题(地市卷)答案和解析
评论
0/150
提交评论