液晶1602双机串口通信

发布者:码字探险最新更新时间:2018-01-10 来源: eefocus关键字:液晶1602  双机  串口通信 手机看文章 扫描二维码
随时随地手机看文章

/**=============发送==================**/ 
KEYB    EQU     20H.0    ;按键标致(为1时有键按下) 

        ORG 0000H 

        AJMP MAIN 
        ORG 0030H 
MAIN:    
/*         MOV  SP,#60H 
         MOV  TMOD,#20H 
         MOV  TL1,#0E6H 
         MOV  TH1,#0E6H 
         MOV  SCON,#50H 
         MOV  PCON,#80H      ;   
        SETB TR1 
*/      
BEGIN:  ACALL KEY         ;调用键盘扫描 
        JB KEYB,BEGIN_     ;判断是否有键按下    
        JMP BEGIN 
BEGIN_: CLR KEYB 
         MOV  R0,#80H 
         MOV  A,R4 
         MOV  @R0,A 
         MOV  P0,A 
/* 
;发送联络信号  
ITX4:   MOV  SBUF,#33H     ;发给从机1 
ITX2:  JBC TI,ITX1 
       JMP ITX2            ;等待发送 
ITX1:  JBC RI,ITX3        ;等待二号机回答 
       JMP ITX1 
ITX3:   MOV  A,SBUF        ;接收联络信号 
       XRL A,#33H        ;异或,等于33H的话,A就为0 
       JNZ ITX4            ;二号机未准备好,继续联络    
;串行发送 
CK2:    MOV  R0,#80H        ;开始读取,数据传送    
START:  MOV  A,@R0 
        MOV  SBUF,A 
WAIT:  JBC TI,CONT 
       JMP WAIT 
CONT:  JMP BEGIN */ 
        SJMP BEGIN 

;********键盘扫描********调用键盘扫描以后会返回一个键值存于R4中,和一个标致位KEYB     
KEY:     MOV  A,#0FH         ;查询是否有键按下    
         MOV  P1,A 
         MOV  A,P1 
        CJNE A,#0FH,KEYY 
        CLR KEYB 
        AJMP NEXT 
KEYY:   ACALL DEL            ;去抖动     
         MOV  A,P1 
        CJNE A,#0FH,GO 
         MOV  R4,#10H            ;若有抖动,则返回无效键值     
        CLR KEYB 
        AJMP NEXT 
GO:     SETB KEYB            ;置按键标致位     
         MOV  R2,A            ;R2中存放着行信息           
    X1: CJNE R2,#0EH,X2        ;若为第一行    
         MOV  A,#0F0H 
         MOV  P1,A 
         MOV  A,P1 
         MOV  R3,A            ;R3中存放着列信息         
Y0:        CJNE R3,#0E0H,Y1    ;若为第一列                 
         MOV  R4,#00H            ;R4中存放要返回的键值 
        AJMP NEXT 
Y1:     CJNE R3,#0D0H,Y2    ;若为第二列,Yn表示16个键对应的操作    
         MOV  R4,#01H 
        AJMP NEXT 
Y2:     CJNE R3,#0B0H,Y3    ;若为第三列 
         MOV  R4,#02H 
        AJMP NEXT 
Y3:     CJNE R3,#70H,X2        ;若为第四列 
         MOV  R4,#03H 
        AJMP NEXT 
    X2: CJNE R2,#0DH,X3        ;若为第二行 
         MOV  A,#0F0H 
         MOV  P1,A 
         MOV  A,P1 
         MOV  R3,A 
Y4:        CJNE R3,#0E0H,Y5    ;若为第一列 
         MOV  R4,#04H 
        AJMP NEXT 
Y5:     CJNE R3,#0D0H,Y6    ;若为第二列 
         MOV  R4,#05H 
        AJMP NEXT 
Y6:     CJNE R3,#0B0H,Y7 
         MOV  R4,#06H 
        AJMP NEXT 
Y7:     CJNE R3,#70H,X3 
         MOV  R4,#07H 
        AJMP NEXT 
   X3:  CJNE R2,#0BH,X4         ;若为第三行        
         MOV  A,#0F0H 
         MOV  P1,A 
         MOV  A,P1 
         MOV  R3,A 
Y8:        CJNE R3,#0E0H,Y9 
         MOV  R4,#08H 
        AJMP NEXT 
Y9:     CJNE R3,#0D0H,Y10 
         MOV  R4,#09H 
        AJMP NEXT 
Y10:    CJNE R3,#0B0H,Y11 
         MOV  R4,#0AH 
        AJMP NEXT 
Y11:    CJNE R3,#70H,X4 
         MOV  R4,#0BH 
        AJMP NEXT 
   X4:  CJNE R2,#07H,NEXT      ;若为第四行 
         MOV  A,#0F0H 
         MOV  P1,A 
         MOV  A,P1 
         MOV  R3,A 
Y12:    CJNE R3,#0E0H,Y13 
         MOV  R4,#0CH 
        AJMP NEXT 
Y13:    CJNE R3,#0D0H,Y14 
         MOV  R4,#0DH 
        AJMP NEXT 
Y14:    CJNE R3,#0B0H,Y15 
         MOV  R4,#0EH 
        AJMP NEXT 
Y15:    CJNE R3,#70H,NEXT 
         MOV  R4,#0FH 
NEXT:   RET 



DEL:      MOV  R7,#07H 
DEL1_:   MOV  R6,#0FFH 
        DJNZ R6,$ 
         DJNZ R7,DEL1_ 
         RET 


   END 





/**==============接收========================**/ 
;********89C51引脚定义******** 
    RS    BIT     P3.6     ;数据/命令选择(H/L) 
    R_W   BIT     P2.5     ;读/写选择(H/L) 
    E     BIT     P2.6     ;使能信号 
    DB0_DB7  EQU  P0     ;数据传送端口 
;***************程序开始**************   


        ORG 0000H 
        AJMP MAIN 
        ORG 0030H 
MAIN:    
         
         MOV  R4,#80H       ;第一行首地址从80H开始 
         MOV  R1,#0C0H      ;第一行首地址从C0H开始 
         MOV  R2,#00H 
         MOV  R3,#16 
        LCALL INITIAL        ;显示初始化程序 
        LCALL CLS          ;调用清屏子程序 
AGAIN:     
         MOV  A,R4 
        LCALL WRITE_COM       ;调用写指令程序 
         MOV  A,R2           ;取表格中的第几个字符 
         MOV  DPTR,#LINE1       ;取表格的首地址 
        LCALL DISP           ;调用显示子程序 
        INC R4 
        INC R2 
        DJNZ R3,AGAIN 
         MOV  R2,#00H 
         MOV  R3,#16 
AGAIN1:     
         MOV  A,R1 
        LCALL WRITE_COM       ;调用写指令程序 
         MOV  A,R2           ;取表格中的第几个字符 
         MOV  DPTR,#LINE3       ;取表格的首地址 
        LCALL DISP           ;调用显示子程序 
        INC R1 
        INC R2 
        DJNZ R3,AGAIN1 


;************************************************* 
         MOV  TMOD,#20H 
         MOV  TL1,#0E6H 
         MOV  TH1,#0E6H 
         MOV  SCON,#50H 
         MOV  PCON,#80H 
        SETB TR1 
      
BEGIN: JBC RI,BR2 
       JMP BEGIN 
BR2:    MOV  A,SBUF 
       XRL A,#33H 
       JNZ BEGIN 
BT1:    MOV  SBUF,#33H 
BS1:   JBC TI,BR3 
       JMP BS1 

BR3:    MOV  R0,#80H 
WAIT:  JBC RI,READ 
       JMP WAIT 
READ:   MOV  A,SBUF 
        MOV  @R0,A 
        MOV  P0,A 
;显示接收数据    
         MOV  A,#0C7H 
        LCALL WRITE_COM       ;调用写指令程序 
         MOV  A,@R0           ;取表格中的第几个字符 
         MOV  DPTR,#LINE2       ;取表格的首地址 
        LCALL DISP           ;调用显示子程序 
         
        SJMP BEGIN 

;****** 初始化LCM子程序****** 
INITIAL: MOV  A,#38H 
        LCALL WRITE_COM 
         MOV  A,#0EH  
        LCALL WRITE_COM 
         MOV  A,#06H  
        LCALL WRITE_COM  
        RET 

;*******查询忙碌标志信号子程序******** 
CHECK_BUSY:      
        PUSH ACC 
BUSY_LOOP:     
        CLR E 
        SETB R_W 
        CLR RS 
        SETB E 
         MOV  A, DB0_DB7 
        CLR E 
        JB ACC.7,BUSY_LOOP 
        POP ACC 
        LCALL DEL 
        RET 

;****** 写指令到LCM子程序******* 
WRITE_COM:      
         LCALL CHECK_BUSY 
        CLR E 
        CLR RS  
        CLR R_W 
        SETB E 
         MOV   DB0_DB7,A 
        CLR E 
        RET 

;****** 写数据到LCM子程序****** 
WRITE_DATA:      
        LCALL CHECK_BUSY 
        CLR E 
        SETB RS  
        CLR R_W 
        SETB E 
         MOV   DB0_DB7,A 
        CLR E 
        RET 
;*******显示1个字符到LCM子程序******** 
DISP:     
;    PUSH ACC 
;    CLR A 
     MOV C A,@A+DPTR 
    LCALL WRITE_DATA 
;    POP ACC 
    RET 

;*******清除LCM子程序******* 
CLS:     MOV  A,#01H 
        LCALL WRITE_COM 
        RET 

;****延时子程序**** 
DEL:     
     MOV  R6,#5 
L1:     MOV  R7,#248 
    DJNZ R7,$ 
    DJNZ R6,L1 
    RET 
;******延时0.1s子程序:  T=两个机器周期(2*1us)*R5(4)*R6(256)*R7(256)us=0.524288s 
DELL:   MOV  R7,#09H 
DEL1:  MOV  R6,#0FFH 
DEL2:  MOV  R5,#0FFH 
      DJNZ R5,$ 
      DJNZ R6,DEL2 
      DJNZ R7,DEL1 
      RET 

;*****LCM第一、二行显示字符串***** 
LINE1:    DB "*** China OK ***",00H 
LINE2:    DB "0123456789ABCDEF",00H 
LINE3:    DB "-----(   )------",00H 


   END 


关键字:液晶1602  双机  串口通信 引用地址:液晶1602双机串口通信

上一篇:12864液晶无字库液晶图形显示程序
下一篇:16X16共阳LED点阵显示屏程序

推荐阅读最新更新时间:2024-03-16 15:52

51单片机基础之串口通信
原理: 这里需要解释一下,串口通信是需要占用定时器1的,所以使用了串口通信就不能使用定时器1,除非是代码优化。 这个需要配置几个寄存器,都比较简单,TMOD寄存器设置定时器计数器的工作方式,SCON则是设置串口通信的工作方式,PCON则是波特率加倍操作,都是比较简单的。 计时器初始值的设置有专门的工具 链接:https://pan.baidu.com/s/1BSi8YCaRWtBGLaV2gslpSw 提取码:1234 使用方法: 设置定时器工作方式,单片机晶振,所需波特率,是否开启倍频,最好让误差为零。 代码: #include reg51.h typedef unsign
[单片机]
51单片机基础之<font color='red'>串口通信</font>
STM32串口通信(usart)
在开始学写STM32串口通信的代码实现前,首先先了解一下两块芯片之间通信的分类,按照数据传输方式可以分为 并行通信:数据各个位同时传输,速度快,占用引脚资源多 串行通信:数据按位传输,速度较慢,占用引脚资源少 按照数据传送的方向,可以分为 单工:只支持数据在一个方向上传输 半双工:允许数据在两个方向上传输,但在某一时刻,只允许数据在一个方向上传输,它实际上是一种切换方向的单工通信。 全双工:允许数据同时在两个方向上传输,因此全双工通信是两个单工通信方式的结合,它要求发送设备和接收设备都有独立的接收和发送能力。 串口通信就是一种串行全双工通信方式,而串行通信又可分为 同步通信:带时钟同步信号传输(如SPI , II
[单片机]
51单片机串口通信介绍
这节我们主要讲单片机上串口的工作原理和如何通过程序来对串口进行设置,以及根据所给出的实例实现与PC 机通信。 一、原理简介 51 单片机内部有一个全双工串行接口。什么叫全双工串口呢?一般来说,只能接受或只能发送的称为单工串行;既可接收又可发送,但不能同时进行的称为半双工;能同时接收和发送的串行口称为全双工串行口。串行通信是指数据一位一位地按顺序传送的通信方式,其突出优点是只需一根传输线,可大大降低硬件成本,适合远距离通信。其缺点是传输速度较低。 与之前一样,首先我们来了解单片机串口相关的寄存器。 SBUF 寄存器:它是两个在物理上独立的接收、发送缓冲器,可同时发送、接收数据,可通过指令对SBUF 的读写来区别是对接
[单片机]
51单片机<font color='red'>串口通信</font>介绍
ARM7入门10,串口通信
主程序: /******************************************************************************* *File: main.C *功能: 串口发送数据 *说明: 使用外部晶振,不使用PLL,Fpclk=Fcclk/4 *******************************************************************************/ #include config.h /*********************************************************************
[单片机]
ARM7入门10,<font color='red'>串口通信</font>
第12章 指针的基础与1602液晶的初步认识
我们在上C语言课的时候,学到指针,每一位教C语言的老师都会告诉我们一句:指针是C语言的灵魂。由此可见,指针是否学会是判断一个人是否真正学会C语言的重要指标之一,但是很多同学只知道其重要性,却没学会其灵活性。 简单的程序,100来行代码,不需要指针我们可以轻松搞定,但是当代码写到几千上万行甚至更多的时候,利用指针就可以直接而快速的处理内存中的各种数据结构中的数据,特别是数组、字符串和内存的动态分配等,它为函数之间各类数据传递提供了简洁便利的方法。说了这么多作用估计大家没用过指针也体会不到,但这里就是表达这样一个意思,指针很重要,必须要学会。 指针相对其他知识点来说比较难讲,主要在于例子不好举。简单的程序用指针去做会把简单的程
[单片机]
第12章 指针的基础与<font color='red'>1602</font><font color='red'>液晶</font>的初步认识
串口屏与stm32串口通信
串口屏与单片机的发送与接收 一.串口向单片机发送 (使用串口屏和上位机软件USART HMI) 1.波特率初始化 2.按钮控件 printh 01 二.单片机接收串口屏数据与发送给串口屏 1.单片机配置 2. 配置代码 3. 与串口通信函数 串口屏发送的 1,2,3会发送至 order里,调用order即可 单片机发送给串口屏函数: ①printf( page0.t0.txt= 111 xffxffxff );//page0页的 t0文本控件变为111 ②printf( page0.t0.txt= %d xffxffxff ,order);//传变量给t0文本控件
[单片机]
51单片机串口通信数码管显示
/********************************************************************************* * 【外部晶振】: 11.0592MHZ * 【主控芯片】: STC89C52 * 【程序功能】: 串口工作方式1,8位UART,比特率9600,接收串口数据,数码管以十 进制格式显示,并且把接收到的数据加1后通过串口发出 **********************************************************************************/ #include reg
[单片机]
基于Matlab GUI的串口通信编程实现
      0 引言       Matlab是MathWorks公司开发的一种科学计算软件。Matlab运行稳定、可靠、使用方便,是广大科研人员进行科学研究的得力助手。Matlab不仅具有强大的科学计算功能,还具有满足一般要求的数据采集以及界面设计开发功能。Matlab GUI(Graphic User Interface)就是内置于Matlab的进行图形界面开发的模块。       本文利用Matlab GUI设计通过串口进行数据发送和接收的界面,并利用内置于Matlab的串口通信API实现串口数据发送与接收功能。       1 Matlab GUl介绍       启动Matlab后,运行guide命令即可
[网络通信]
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved