18b20是51单片机中最常用的温度检测器件了,,就是时序要求严格,不太好掌握。最近搭了个板子,终于掌握了这个器件。
本程序在89S52、5110LCD上调试通过。显示部分采用了自己编写的5110LCD驱动,可以在本人博客上找到。
汇编源程序如下:
WENDU_L EQU 29H ;用于保存读出温度的低字节
WENDU_H EQU 28H ;用于保存读出温度的高字节
XIAOSHU EQU 27H ;用于保存温度的小数部分
ZHENGSHU EQU 26H ;用于保存温度的整数部分
BIAOZHI BIT F0 ;18B20检查位;1为存在,0为不存在
DQ BIT P2.7 ;18b20数据线接P2.7
FLAG BIT 20H ;正负温度标志位,1为负温度,0为正温度
LCD_CE BIT P2.0 ;芯片使能。
LCD_RES BIT P2.1 ;外部复位。
LCD_DC BIT P2.2 ;写数据指令选择。=1写数据,=0写指令。
LCD_DIN BIT P2.3 ;数据输入。
LCD_CLK BIT P2.4 ;时钟。CLK脉冲高和低宽度>100ns.
LCDXADD EQU 40H ;LCD扫描X地址
LCDYADD EQU 41H ;LCD扫描Y地址
ORG 0000H
AJMP MAIN
ORG 0030H
MAIN:
MOV SP,#5FH ;
MOV SCON,#00H ;使用18b20要禁止一切中断
ACALL DUWEN
ACALL ZHENGHE
ACALL BCD
ACALL DISPLAY ;调用显示子程序
ACALL TIME1 ;
AJMP MAIN ;
;***********************************************************************************************************************
;子程序名:DUWEN 功能:读18b20温度子程序
;入口条件:无
;使用资源:A、P2.7(DQ)
;子程序嵌套:调用FUWEI、XIE、TIME1、DUSHU子程序
;***********************************************************************************************************************
DUWEN:
SETB DQ
ACALL FUWEI ;读温度之前必须先复位
JB BIAOZHI,CUNZAI ;查看标志位看18B20是否存在,1为存在,0为不存在
RET ;不存在则返回
CUNZAI: ;存在则开始读温度
MOV A,#0CCH ;跳过ROM匹配
ACALL XIE ;调写子程序
MOV A,#44H ;发出温度转换命令
ACALL XIE ;调写子程序
ACALL TIME1 ;调1秒延时,等AD转换完成,现在分辨率为12位,温度最大转换时间为750MS
ACALL FUWEI ;读温前需要复位
MOV A,#0CCH ;跳过ROM匹配
ACALL XIE ;
MOV A,#0BEH ;发读温度命令
ACALL XIE
ACALL DUSHU ;将温度数据读出
CLR DQ
RET
;**************************************************************************************************************************************************
;子程序名:FUWEI 功能:18b24复位子程序。18B20复位需要将数据位拉低500us,收到信号后要等待16-60us,然后发出60-240us的低脉冲
;入口条件:无
;使用资源:R0、R1、F0(BIAOZHI)、P2.7(DQ)
;子程序嵌套:无
;**************************************************************************************************************************************************
FUWEI:
SETB DQ ;
NOP
CLR DQ
MOV R0,#3
INTE:
MOV R1,#107 ;设一个537us延时
KK1: DJNZ R1,KK1
DJNZ R0,INTE
SETB DQ ;拉高数据线,等待回应
NOP
NOP
NOP
MOV R0,#25;
INTE1: JNB DQ,INTE2 ;延时延时50us等待18B20回应,若返回低脉冲则说明18B20存在
DJNZ R0 ,INTE1
AJMP INTE3 ;经过反应时间而没检测到18B20的存在,则跳转去清零标志位
INTE2: SETB BIAOZHI ;检测到18B20存在,置1标志位
CLR DQ
AJMP INTE4
INTE3: CLR BIAOZHI ;没检测到18B20,清零标志位
AJMP INTE5
INTE4: MOV R0,#120 ;延时240us,确定回应信号已发完
KK: DJNZ R0,KK
INTE5: SETB DQ
RET
;*************************************************************************************
;子程序名:XIE 功能:写18B20子程序
;入口条件:A(待写入18b20的指令、数据)
;使用资源:A、C、DQ(P2.7)、R2、R3
;子程序嵌套:无
;*************************************************************************************
XIE:
MOV R2,#8 ;写计数寄存器,一共有8位数据
CLR C
LP: CLR DQ ;
MOV R3,#6 ;设一个延时
LL1: DJNZ R3,LL1
RRC A ;右循环,先输出低位
MOV DQ,C
MOV R3,#23 ;设延时
LL: DJNZ R3,LL;
SETB DQ
NOP
NOP
DJNZ R2,LP ;判断是否完成数据传送
SETB P2.0 ;完成传送拉高数据位
RET
;*************************************************************************************************
;子程序名:DUSHU 功能:从18B20中读出温度数据子程序
;入口条件:无
;使用资源:A、C、R1、R2、R3、R4、DQ(P2.7)、29H(WENDU_L)、28H(WENDU_H)
;子程序嵌套:无
;*************************************************************************************************
DUSHU:
MOV R4,#2 ;设读回数据个数指针
MOV R1,#WENDU_L ;把温度数据低位存入29H
RE: MOV R2,#8 ;设数据长度指针
RE1: CLR C
SETB DQ
NOP
NOP
CLR DQ
NOP
NOP
NOP
SETB DQ
MOV R3,#9 ;延时
DJNZ R3,$
MOV C,DQ
MOV R3,#23
NN: DJNZ R3,NN ;延时
RRC A
DJNZ R2,RE1
MOV @R1,A
DEC R1 ;高位存入28H
DJNZ R4,RE
RET
;************************************************************************************************************************************************
;子程序名:ZHENGHE 功能:数据整合子程序:读出数据的高字节的低四位决定温度的整数部分;低字节的低四位决定小数部分
;入口条件:WENDU_L(29H)、WENDU_H(28H)
;使用资源:A、C、29H(WUNDU_L)、26H(ZHENGSHU)、27H(XIAOSHU)
;子程序嵌套:无
;************************************************************************************************************************************************
ZHENGHE:
MOV A,#0FH
ANL A,WENDU_L ;低字节的低四位就是小数部分
MOV XIAOSHU,A ;获得小数部分
MOV A,WENDU_L ;将高字节的低四位移入低字节的高4位,
MOV C,40H ;WENDU_H(28H)低4位对应的位地址为40H、41H、42H、43H
RRC A
MOV C,41H
RRC A
MOV C,42H
RRC A
MOV C,43H ;
RRC A
MOV ZHENGSHU,A ;获得的新字节就是整数部分的数据
JNB ZHENGSHU.7,ZW ;整数部分最高位为0,结束子程序
CPL A ;整数部分最高位为1,温度是负数,求补码
ADD A,#1 ;
MOV ZHENGSHU,A ;
SETB FLAG ;温度标志位置1,负温度
ajmp ZH ;
ZW: CLR FLAG ;温度标志位置0,正温度
ZH: RET
;***********************************************************************************************
;子程序名:BCD 功能:显示数据拆解程序,即BCD码转换
;入口条件:26H(ZHENGSHU)、27H(XIAOSHU)
;使用资源:A、B、R0、R2、50H~53H
;子程序嵌套:无
;***********************************************************************************************
BCD:
MOV A,ZHENGSHU ;整数部分送A
MOV B,#10
DIV AB ;整数部分除以10
MOV 50H,A
MOV 51H,B ;商和余数分别存入50H、51H
MOV A,XIAOSHU ;小数部分送A
MOV R0,#52H ;小数部分存储地址
MOV R2,#2 ;小数位数
D0: MOV B,#10
MUL AB ;小数部分乘以10
MOV B,#16
DIV AB ;小数部分除以16
MOV @R0,A ;商存入以52H为起始地址的连续存储单元
INC R0
MOV A,B ;余数送A
DJNZ R2,D0
RET
;***********************************************************
;子程序名:TIME1、TIME、D1MS 功能:延时
;入口条件:无
;使用资源:R5、R6、R7
;子程序嵌套:无
;************************************************************
TIME1:
MOV R6,#4
LOOP2: MOV R5,#250
LOOP1: ACALL D1MS
DJNZ R5,LOOP1
DJNZ R6,LOOP2
RET
TIME:
MOV R6,#200
LOOP3: ACALL D1MS
DJNZ R6,LOOP3
RET
D1MS:
MOV R7,#250
LOOP0: NOP
NOP
NOP
DJNZ R7,LOOP0
RET
;********************************************************************************************************
;子程序名:DISPLAY 功能:显示子程序
;
;********************************************************************************************************
DISPLAY:
MOV LCDXADD,#10000000B ;x初始地址
MOV LCDYADD,#01000000B ;y初始地址
ACALL LCDRESET ;LCD复位
MOV A,#00100001B ;
ACALL SENDDC ;基本操作指令,使用扩展指令
MOV A,#11000100B ;
ACALL SENDDC ;设置Vop0~Vop6,调整对比度。Vop0~Vop6取值范围:00H~7FH
MOV A,#00100000B ;
ACALL SENDDC ;使用基本指令,水平寻址方式
MOV A,#00001100B ;显示配置,普通显示模式
ACALL SENDDC ;
MOV A,LCDYADD ;
ACALL SENDDC ;传送y初始地址
MOV A,LCDXADD ;
ACALL SENDDC ;传送x初始地址
ACALL LCDCLR ;初始化完成,清屏
DISPLAY1: ;
MOV LCDYADD,#01000000B ;
MOV LCDXADD,#10000000B ;扫描初始地址
CLR A ;
MOV DPTR,#TABLE1 ;
MOV R6,#5 ;共5个中文字符
DISP1: ACALL DISP_C ;
DJNZ R6,DISP1 ;
DISPLAY2:
JNB FLAG,DISP2 ;温度标志位为0,转DISP2
MOV LCDYADD,#01000010B ;
MOV LCDXADD,#10010010B ;
MOV DPTR,#TABLE3 ;温度标志位为1,显示-号
MOV A,#12 ;
ACALL DISP_E ;
DISP2:
MOV LCDYADD,#01000010B ;显示温度的整数部分
MOV LCDXADD,#10011000B ;
MOV R1,#50H ;50H中的数据是温度整数部分的10位
MOV A,@R1 ;
MOV DPTR,#TABLE ;数据表首地址
MOV B,#12 ;
MUL AB ;每个数字字符共12个字节,所以乘以12就是该数字在表中的起始位置
ACALL DISP_E ;
INC R1 ;
MOV LCDYADD,#01000010B ;
MOV LCDXADD,#10011110B ;
MOV A,@R1 ;
MOV DPTR,#TABLE ;
MOV B,#12 ;
MUL AB ;
ACALL DISP_E ;
MOV LCDYADD,#01000010B ;显示小数点
MOV LCDXADD,#10100100B ;
CLR A ;
MOV DPTR,#TABLE3 ;
ACALL DISP_E ;
MOV LCDYADD,#01000010B ;显示温度的小数部分
MOV LCDXADD,#10101010B ;
MOV R1,#52H ;
MOV A,@R1 ;
MOV DPTR,#TABLE ;
MOV B,#12 ;
MUL AB ;
ACALL DISP_E ;
INC R1 ;
MOV LCDYADD,#01000010B ;
MOV LCDXADD,#10110000B ;
MOV A,@R1 ;
MOV DPTR,#TABLE ;
MOV B,#12 ;
MUL AB ;
ACALL DISP_E ;
MOV LCDYADD,#01000010B ;显示温度符号℃
MOV LCDXADD,#10110110B ;
CLR A ;
MOV DPTR,#TABLE4 ;
ACALL DISP_C ;
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的连接,就不画出来了
用户1584993 2009-12-16 15:29
tengjingshu_112148725 2009-7-26 13:37