⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 c51led.txt

📁 描述用8051驱动lcd显示屏显示的全部程序及解释。
💻 TXT
字号:
//单片机I/O 口驱动LCD 显示
NAME LcdDriver
$include(STC89C51RC.h)
;**************************************************************************************
;the LCD is 1/3 duty and 1/3 bias; 3Com*24Seg; 9 display RAM;
;
; Bit7 Bit6 Bit5 Bit4 Bit3 Bit2 Bit1 Bit0
;Com0: Com0Data0: Seg7 Seg6 Seg5 Seg4 Seg3 Seg2 Seg1 Seg0
; Com0Data1: Seg15 Seg14 Seg13 Seg12 Seg11 Seg10 Seg9 Seg8
; Com0Data2: Seg23 Seg22 Seg21 Seg20 Seg19 Seg18 Seg17 Seg16
;Com1: Com1Data0: Seg7 Seg6 Seg5 Seg4 Seg3 Seg2 Seg1 Seg0
; Com1Data1: Seg15 Seg14 Seg13 Seg12 Seg11 Seg10 Seg9 Seg8
; Com1Data2: Seg23 Seg22 Seg21 Seg20 Seg19 Seg18 Seg17 Seg16
;Com2: Com2Data0: Seg7 Seg6 Seg5 Seg4 Seg3 Seg2 Seg1 Seg0
; Com2Data1: Seg15 Seg14 Seg13 Seg12 Seg11 Seg10 Seg9 Seg8
; Com2Data2: Seg23 Seg22 Seg21 Seg20 Seg19 Seg18 Seg17 Seg16
;**************************************************************************************
;Com0: P3^0,P3^1 when P3^0 = P3^1 = 1 then Com0=VCC(=5V);
; P3^0 = P3^1 = 0 then Com0=GND(=0V);
; P3^0 = 1, P3^1=0 then Com0=1/2 VCC;
;Com1: P3^2,P3^3 the same as the Com0
;Com2: P3^4,P3^5 the same as the Com0
;
sbit SEG0 =P0^0
sbit SEG1 =P0^1
sbit SEG2 =P0^2
sbit SEG3 =P0^3
sbit SEG4 =P0^4
sbit SEG5 =P0^5
sbit SEG6 =P0^6
sbit SEG7 =P0^7
sbit SEG8 =P1^0
sbit SEG9 =P1^1
sbit SEG10 =P1^2
sbit SEG11 =P1^3
sbit SEG12 =P1^4
sbit SEG13 =P1^5
sbit SEG14 =P1^6
sbit SEG15 =P1^7
sbit SEG16 =P2^0
sbit SEG17 =P2^1
sbit SEG18 =P2^2
sbit SEG19 =P2^3
sbit SEG20 =P2^4
sbit SEG21 =P2^5
sbit SEG22 =P2^6
sbit SEG23 =P2^7
;******************************************************************************************
;======Interrupt===============================
CSEG AT 0000H
LJMP start
CSEG AT 000BH
LJMP int_t0
;======register===============================
lcdd_bit SEGMENT BIT
RSEG lcdd_bit
OutFlag: DBIT 1 ;the output display reverse flag
lcdd_data SEGMENT DATA
RSEG lcdd_data
Com0Data0: DS 1
Com0Data1: DS 1
Com0Data2: DS 1
Com1Data0: DS 1
Com1Data1: DS 1
Com1Data2: DS 1
Com2Data0: DS 1
Com2Data1: DS 1
Com2Data2: DS 1
TimeS: DS 1
;======Interrupt Code==========================
t0_int SEGMENT CODE
RSEG t0_int
USING 1
;*****************************************************************
;Time0 interrupt
;ths system crystalloid is 22.1184MHz
;the time to get the Time0 interrupr is 2.5mS
;the whole duty is 2.5mS*6=15mS, including reverse
;*****************************************************************
int_t0:
ORL TL0,#00H
MOV TH0,#0EEH
PUSH ACC
PUSH PSW
MOV PSW,#08H
ACALL OutData
POP PSW
POP ACC
RETI
;======SUB CODE================================
uart_sub SEGMENT CODE
RSEG uart_sub
USING 0
;******************************************************************
;initial the display RAM data
;if want to display other,then you may add other data to this RAM
;Com0: Com0Data0,Com0Data1,Com0Data2
;Com1: Com1Data0,Com1Data1,Com1Data2
;Com2: Com2Data0,Com0Data1,Com0Data2
;*******************************************************************
InitComData: ;it will display "11111111"
MOV Com0Data0,#24H
MOV Com0Data1,#49H
MOV Com0Data2,#92H
MOV Com1Data0,#92H
MOV Com1Data1,#24H
MOV Com1Data2,#49H
MOV Com2Data0,#00H
MOV Com2Data1,#00H
MOV Com2Data2,#00H
RET
;********************************************************************
;reverse the display data
;********************************************************************
RetComData:
MOV R0,#Com0Data0 ;get the first data address
MOV R7,#9
RetCom_0:
MOV A,@R0
CPL A
MOV @R0,A
INC R0
DJNZ R7,RetCom_0
RET
;**********************************************************************
;get the display Data and send to Output register
;**********************************************************************
OutData:
INC TimeS
MOV A,TimeS
MOV P3,#11010101B ;clear display,all Com are 1/2VCC and invalidate
CJNE A,#01H,OutData_1 ;judge the duty
MOV P0,Com0Data0
MOV P1,Com0Data1
MOV P2,Com0Data2
JNB OutFlag,OutData_00
MOV P3,#11010111B ;Com0 is work and is VCC
RET
OutData_00:
MOV P3,#11010100B ;Com0 is work and is GND
RET
OutData_1:
CJNE A,#02H,OutData_2
MOV P0,Com1Data0
MOV P1,Com1Data1
MOV P2,Com1Data2
JNB OutFlag,OutData_10
MOV P3,#11011101B ;Com1 is work and is VCC
RET
OutData_10:
MOV P3,#11010001B ;Com1 is work and is GND
RET
OutData_2:
MOV P0,Com2Data0
MOV P1,Com2Data1
MOV P2,Com2Data2
JNB OutFlag,OutData_20
MOV P3,#11110101B ;Com2 is work and is VCC
SJMP OutData_21
OutData_20:
MOV P3,#11000101B ;Com2 is work and is GND
OutData_21:
MOV TimeS,#00H
ACALL RetComData
CPL OutFlag
RET
;======Main Code===============================
uart_main SEGMENT CODE
RSEG uart_main
USING 0
start:
MOV SP,#40H
CLR OutFlag
MOV TimeS,#00H
MOV TL0,#00H
MOV TH0,#0EEH
MOV TMOD,#01H
MOV IE,#82H
ACALL InitComData
SETB TR0
Main:
NOP
SJMP Main
END

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -