基于18b20和5110LCD的温度计实验2_电子·DIY的博客_百度空间

DISPLAY3:          ;第三行显示5个中文字符
     MOV   LCDYADD,#01000100B ;
     MOV   LCDXADD,#10000000B ;扫描初始位置设置
     CLR   A       ;
     MOV   DPTR,#TABLE2    ;
     MOV   R6,#7      ;
DISP3:   ACALL DISP_C     ;
     DJNZ R6,DISP3     ;
     RET        ;       ;

           
;*************************************************************************************************************************************
;子程序名:DISP_C    功能:在LCD上显示一个12x12点阵的中文字符。12x12点阵中文字符共24个字节,每次提取12字节扫描,分两次扫描完成
;入口条件:DPTR(数据表)、A(数据指针)、50H、51H(扫描初始地址存储单元)               
;使用资源:A、R5                             
;子程序嵌套:调用SENDDC/SENDDC1子程序                        
;*************************************************************************************************************************************
DISP_C:           ;
     PUSH ACC      ;保护A中的数据指针
     MOV   A,LCDXADD      ;扫描初始地址
     ACALL SENDDC     ;
     MOV   A,LCDYADD    ;
     ACALL SENDDC     ;
     POP   ACC      ;
     MOV   R5,#12     ;本次循环取12字节的数据,显示中文字符的上半部分
   LOOP: PUSH ACC      ;保护A中的数据指针
       MOVC A,@A+DPTR    ;
     ACALL SENDDC1     ;传送数据给LCD
     POP   ACC      ;取出数据指针
     INC   A      ;数据指针加1
     DJNZ R5,LOOP     ;循环次数未到12,继续取数

     INC   LCDYADD     ;扫描Y地址加1,移动到下一行继续扫描
     PUSH ACC      ;
     MOV   A,LCDXADD    ;
     ACALL SENDDC     ;设置新的扫描地址
     MOV   A,LCDYADD    ;
     ACALL SENDDC     ;
     POP   ACC      ;

     MOV   R5,#12     ;本次循环显示中文字符的下半部分
   LOOP11: PUSH ACC      ;
     MOVC A,@A+DPTR    ;
     ACALL SENDDC1     ;
     POP   ACC      ;
     INC   A      ;数据指针加1
     INC   LCDXADD     ;X地址加1,为下一个字符的扫描做准备
     DJNZ R5,LOOP11    ;循环次数未到12,继续取数
     DEC   LCDYADD     ;Y地址减1,回到初始位置
          
       RET        ;
;************************************************************************************************************************************
;子程序名:DISP_E     功能:在LCD上显示一个6x12点阵的英文或数字字符。6x12字符共12个字节,每次提取6字节数据,分两次扫描完成
;入口条件:DPTR(数据表)、A(数据指针)、50H、51H(扫描初始地址存储单元)
;使用资源:A、R5
;子程序嵌套:调用SENDDC/SENDDC1子程序
;************************************************************************************************************************************
DISP_E:           ;
     PUSH ACC      ;
     MOV   A,LCDXADD      ;扫描初始地址
     ACALL SENDDC     ;
     MOV   A,LCDYADD    ;
     ACALL SENDDC     ;
     POP   ACC      ;
     MOV   R5,#6     ;本次循环取6字节的数据,显示字符的上半部分
   LOOP22: PUSH ACC      ;保护A中的数据指针
       MOVC A,@A+DPTR    ;
     ACALL SENDDC1     ;传送数据给LCD
     POP   ACC      ;取出数据指针
     INC   A      ;数据指针加1
     DJNZ R5,LOOP22    ;循环次数未到6,继续取数

     INC   LCDYADD     ;扫描Y地址加1
     PUSH ACC      ;
     MOV   A,LCDXADD    ;
     ACALL SENDDC     ;设置新的扫描地址
     MOV   A,LCDYADD    ;
     ACALL SENDDC     ;
     POP   ACC      ;

     MOV   R5,#6     ;本次循环显示字符的下半部分
   LOOP33: PUSH ACC      ;
     MOVC A,@A+DPTR    ;
     ACALL SENDDC1     ;传送数据给LCD
     POP   ACC      ;
     INC   A      ;
     INC   LCDXADD     ;X地址加1,为下一个字符的扫描做准备
     DJNZ R5,LOOP33    ;循环次数未到6,继续取数
     DEC   LCDYADD     ;Y地址减1,回到初始位置
          
       RET


;**********************************************************
;子程序名:LCDRESET      功能:LCD复位
;入口条件:无
;使用资源:LCD_RES
;子程序嵌套:无
;**********************************************************
LCDRESET:
     CLR LCD_RES     ;LCD_RES位置0
     NOP        ;延时
     NOP        ;
     NOP        ;
     SETB LCD_RES     ;LCD_RES位置1
     RET        ;
;***************************************************************************************************
;子程序名:LCDCLR      功能:LCD清屏。5110LCD没有专用的清屏指令,采用全部写0的方式清屏
;入口条件:无
;使用资源:A、R2、R3
;子程序嵌套:调用SENDDC1子程序
;***************************************************************************************************
LCDCLR:  
     MOV R3,#84      ;x地址的循环次数
LCDCLR1: MOV R2,#6      ;y地址的循环次数
LCDCLR2: MOV A,#00H      ;要写入LCD的数据
     ACALL SENDDC1     ;
     DJNZ R2,LCDCLR2     ;
     DJNZ R3,LCDCLR1     ;
     RET

;****************************************************************************************************
;子程序名:SENDDC/SENDDC1    功能:给LCD传送数据或指令。SENDDC:传送命令;SENDDC1:传送数据
;入口条件:A(数据或指令)
;使用资源:A;R7;LCD_DC;LCD_CE;LCD_CLK;LCD_DIN;
;子程序嵌套:无
;****************************************************************************************************
SENDDC:
     CLR LCD_DC      ;DC置0,传送指令
SENDDC1:  
     CLR LCD_CE      ;芯片使能
     MOV R7,#08H     ;每次次传送8位数据
SENDDC2:  
     CLR LCD_CLK     ;时钟信号
     RLC A       ;数据每次从高位移动到CY位
     MOV LCD_DIN,C     ;传送数据
     SETB LCD_CLK     ;
     DJNZ R7,SENDDC2   ;
     SETB LCD_DC      ;DC置1,为下一次传送做准备
     SETB LCD_CE      ;
     RET    
    
;xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
TABLE:
;-- 文字: 0 --
;-- 宋体9; 此字体下对应的点阵为:宽x高=6x12   --
;-- 高度不是8的倍数,现调整为:宽度x高度=6x16 --;
DB 0F8H,004H,004H,004H,0F8H,000H,001H,002H,002H,002H,001H,000H

;-- 文字: 1 --
;-- 宋体9; 此字体下对应的点阵为:宽x高=6x12   --
;-- 高度不是8的倍数,现调整为:宽度x高度=6x16 --;
DB 000H,008H,0FCH,000H,000H,000H,000H,002H,003H,002H,000H,000H

;-- 文字: 2 --
;-- 宋体9; 此字体下对应的点阵为:宽x高=6x12   --
;-- 高度不是8的倍数,现调整为:宽度x高度=6x16 --;
DB 018H,084H,044H,024H,018H,000H,003H,002H,002H,002H,002H,000H

;-- 文字: 3 --
;-- 宋体9; 此字体下对应的点阵为:宽x高=6x12   --
;-- 高度不是8的倍数,现调整为:宽度x高度=6x16 --;
DB 008H,004H,024H,024H,0D8H,000H,001H,002H,002H,002H,001H,000H

;-- 文字: 4 --
;-- 宋体9; 此字体下对应的点阵为:宽x高=6x12   --
;-- 高度不是8的倍数,现调整为:宽度x高度=6x16 --;
DB 040H,0B0H,088H,0FCH,080H,000H,000H,000H,000H,003H,002H,000H

;-- 文字: 5 --
;-- 宋体9; 此字体下对应的点阵为:宽x高=6x12   --
;-- 高度不是8的倍数,现调整为:宽度x高度=6x16 --;
DB 03CH,024H,024H,024H,0C4H,000H,001H,002H,002H,002H,001H,000H

;-- 文字: 6 --
;-- 宋体9; 此字体下对应的点阵为:宽x高=6x12   --
;-- 高度不是8的倍数,现调整为:宽度x高度=6x16 --;
DB 0F8H,024H,024H,02CH,0C0H,000H,001H,002H,002H,002H,001H,000H

;-- 文字: 7 --
;-- 宋体9; 此字体下对应的点阵为:宽x高=6x12   --
;-- 高度不是8的倍数,现调整为:宽度x高度=6x16 --;
DB 00CH,004H,0E4H,01CH,004H,000H,000H,000H,003H,000H,000H,000H

;-- 文字: 8 --
;-- 宋体9; 此字体下对应的点阵为:宽x高=6x12   --
;-- 高度不是8的倍数,现调整为:宽度x高度=6x16 --;
DB 0D8H,024H,024H,024H,0D8H,000H,001H,002H,002H,002H,001H,000H

;-- 文字: 9 --
;-- 宋体9; 此字体下对应的点阵为:宽x高=6x12   --
;-- 高度不是8的倍数,现调整为:宽度x高度=6x16 --;
DB 038H,044H,044H,044H,0F8H,000H,000H,003H,002H,002H,001H,000H

;-- 文字: a --
;-- 宋体9; 此字体下对应的点阵为:宽x高=6x12   --
;-- 高度不是8的倍数,现调整为:宽度x高度=6x16 --;
DB 000H,040H,0A0H,0A0H,0C0H,000H,000H,001H,002H,002H,003H,002H

;-- 文字: b --
;-- 宋体9; 此字体下对应的点阵为:宽x高=6x12   --
;-- 高度不是8的倍数,现调整为:宽度x高度=6x16 --;
DB 004H,0FCH,020H,020H,0C0H,000H,000H,003H,002H,002H,001H,000H

;-- 文字: c --
;-- 宋体9; 此字体下对应的点阵为:宽x高=6x12   --
;-- 高度不是8的倍数,现调整为:宽度x高度=6x16 --;
DB 000H,0C0H,020H,020H,060H,000H,000H,001H,002H,002H,002H,000H

;-- 文字: d --
;-- 宋体9; 此字体下对应的点阵为:宽x高=6x12   --
;-- 高度不是8的倍数,现调整为:宽度x高度=6x16 --;
DB 000H,0C0H,020H,024H,0FCH,000H,000H,001H,002H,002H,003H,002H

TABLE1:
;-- 文字: 当 --
;-- 宋体9; 此字体下对应的点阵为:宽x高=12x12   --
;-- 高度不是8的倍数,现调整为:宽度x高度=12x16 --;
DB 010H,092H,094H,090H,090H,09FH,090H,098H,094H,0F2H,000H,000H,004H,004H,004H,004H
DB 004H,004H,004H,004H,004H,007H,000H,000H

;-- 文字: 前 --
;-- 宋体9; 此字体下对应的点阵为:宽x高=12x12   --
;-- 高度不是8的倍数,现调整为:宽度x高度=12x16 --;
DB 004H,0F4H,054H,055H,0F6H,004H,006H,0F5H,004H,0F6H,004H,000H,000H,007H,001H,005H
DB 007H,000H,000H,005H,004H,007H,000H,000H

;-- 文字: 温 --
;-- 宋体9; 此字体下对应的点阵为:宽x高=12x12   --
;-- 高度不是8的倍数,现调整为:宽度x高度=12x16 --;
DB 089H,072H,000H,0C0H,05FH,0D5H,055H,0D5H,055H,0DFH,000H,000H,007H,000H,004H,007H
DB 004H,007H,004H,007H,004H,007H,004H,000H

;-- 文字: 度 --
;-- 宋体9; 此字体下对应的点阵为:宽x高=12x12   --
;-- 高度不是8的倍数,现调整为:宽度x高度=12x16 --;
DB 000H,0FEH,00AH,08AH,0BEH,0AAH,0ABH,0AAH,0BEH,00AH,00AH,000H,006H,001H,004H,004H
DB 004H,003H,002H,003H,004H,004H,004H,000H

;-- 文字: : --
;-- 宋体9; 此字体下对应的点阵为:宽x高=12x12   --
;-- 高度不是8的倍数,现调整为:宽度x高度=12x16 --;
DB 000H,000H,000H,000H,08CH,08CH,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H
DB 001H,001H,000H,000H,000H,000H,000H,000H


TABLE2:
;-- 文字: 任 --
;-- 宋体9; 此字体下对应的点阵为:宽x高=12x12   --
;-- 高度不是8的倍数,现调整为:宽度x高度=12x16 --;
DB 020H,010H,0FCH,023H,024H,024H,024H,0FEH,022H,022H,020H,000H,000H,000H,007H,000H
DB 004H,004H,004H,007H,004H,004H,004H,000H

;-- 文字: 卫 --
;-- 宋体9; 此字体下对应的点阵为:宽x高=12x12   --
;-- 高度不是8的倍数,现调整为:宽度x高度=12x16 --;
DB 000H,001H,001H,001H,001H,0FFH,001H,041H,041H,07FH,000H,000H,004H,004H,004H,004H
DB 004H,007H,004H,004H,004H,004H,004H,000H

;-- 文字: 东 --
;-- 宋体9; 此字体下对应的点阵为:宽x高=12x12   --
;-- 高度不是8的倍数,现调整为:宽度x高度=12x16 --;
DB 002H,022H,032H,0AAH,026H,0FBH,022H,062H,0A2H,022H,002H,000H,002H,002H,001H,000H
DB 004H,007H,000H,000H,000H,001H,002H,000H

;-- 文字: 设 --
;-- 宋体9; 此字体下对应的点阵为:宽x高=12x12   --
;-- 高度不是8的倍数,现调整为:宽度x高度=12x16 --;
DB 010H,011H,0F2H,020H,010H,06FH,0A1H,021H,0AFH,068H,008H,000H,000H,000H,003H,005H
DB 004H,004H,002H,001H,002H,004H,004H,000H

;-- 文字: 计 --
;-- 宋体9; 此字体下对应的点阵为:宽x高=12x12   --
;-- 高度不是8的倍数,现调整为:宽度x高度=12x16 --;
DB 010H,0F1H,002H,000H,010H,010H,010H,0FFH,010H,010H,010H,000H,000H,007H,002H,001H
DB 000H,000H,000H,007H,000H,000H,000H,000H

;-- 文字: 制 --
;-- 宋体9; 此字体下对应的点阵为:宽x高=12x12   --
;-- 高度不是8的倍数,现调整为:宽度x高度=12x16 --;
DB 018H,0D6H,054H,0FFH,054H,056H,0D4H,000H,0FCH,000H,0FFH,000H,000H,003H,000H,007H
DB 000H,002H,003H,000H,004H,004H,007H,000H

;-- 文字: 造 --
;-- 宋体9; 此字体下对应的点阵为:宽x高=12x12   --
;-- 高度不是8的倍数,现调整为:宽度x高度=12x16 --;
DB 010H,0F1H,002H,010H,0D8H,056H,054H,05FH,054H,0D4H,010H,000H,006H,001H,002H,002H
DB 005H,005H,005H,005H,005H,005H,004H,000H


TABLE3:
;-- 文字: . --
;-- 宋体9; 此字体下对应的点阵为:宽x高=6x12   --
;-- 高度不是8的倍数,现调整为:宽度x高度=6x16 --;
DB 000H,000H,000H,000H,000H,000H,000H,002H,000H,000H,000H,000H
;-- 文字: - --
;-- 宋体9; 此字体下对应的点阵为:宽x高=6x12   --
;-- 高度不是8的倍数,现调整为:宽度x高度=6x16 --;
DB 020H,020H,020H,020H,020H,000H,000H,000H,000H,000H,000H,000H

TABLE4:
;-- 文字: ℃ --
;-- 宋体9; 此字体下对应的点阵为:宽x高=12x12   --
;-- 高度不是8的倍数,现调整为:宽度x高度=12x16 --;
DB 00EH,00AH,00EH,0F8H,004H,002H,002H,002H,004H,08EH,000H,000H,000H,000H,000H,000H
DB 001H,002H,002H,002H,002H,001H,000H,000H

    END

硬件电路很简单,也就是单片机最小系统+18b20+5110LCD的连接,就不画出来了



郑重声明:资讯 【基于18b20和5110LCD的温度计实验2_电子·DIY的博客_百度空间】由 发布,版权归原作者及其所在单位,其原创性以及文中陈述文字和内容未经(企业库qiyeku.com)证实,请读者仅作参考,并请自行核实相关内容。若本文有侵犯到您的版权, 请你提供相关证明及申请并与我们联系(qiyeku # qq.com)或【在线投诉】,我们审核后将会尽快处理。
—— 相关资讯 ——