您的位置 首页 元件

带LCD的时刻控制器

说明:本带LCD的时间控制器,是在本人毕业时间《基于单片机的时间控制器的设计》的基础上进行修改的。使得时间的控制和修改更容易,更直…

阐明:

本带LCD时刻操控器,是在自己结业时刻《根据单片机的时刻操控器的规划》的基础上进行修正的。
使得时刻的操控和修正更简单,更直观。并扩展了红外遥控的功用,但由于条件约束,并没有把此功用
的程序加上。
按键阐明:
K1 设置当不时刻/按键超越1s,则置整点报时标志
K2 显现操控时刻/小时加
K3 设置操控时刻/分钟加
K4 操控ON/OFF设置/确认
K5 操控开/关

ELEC 继电器
SPK 蜂鸣器
Y_LED 继电器作业指示
C_LED 被控电器指示灯
W_LED 计时作业指示灯
D_LED 整点报时指示灯

实物图:

程序代码:

;=============================

; 带LCD的时刻操控器
; DIPS082-LCD
; KS0066-操控器

;=============================
LOEQU 24 ; 加载低字节
HIEQU 99 ; 加载高字节
;—————————–
COEQU 200 ; 5ms中止计数时刻常数
; 计数200次表明1s
ALBEQU 20H.0 ; 操控设置标志
CLOCK EQU 20H.1 ; 整点报时标志
HOUREQU 30H ; 寄存小时变量
MINEQU 31H ; 寄存分钟变量
SECEQU 32H ; 寄存秒钟变量
DEDAEQU 33H ; 5ms计数值
SEC0EQU 34H ; 寄存旧的秒数
;—————————–
DDRAMEQU 35H ; LCD地址变量
COM EQU 22H ; LCD指令寄存器
DAT EQU 21H ; LCD数据寄存器
COUNT EQU 22H ; 计数器

HHEQU 36H ; 操控设置小时变量
MMEQU 37H ; 操控设置分钟变量
;—————————–
; KEY4…..
K1EQU P2.1 ; 设置当不时刻
K2EQU P2.0 ; 显现操控时刻/小时加
K3EQU P3.6 ; 设置操控时刻/分钟加
K4EQU P3.7 ; 操控ON/OFF设置/确认
K5 EQU P3.1 ; 操控开/关
;—————————–
; LCD …..
RSEQU P3.4 ; 寄存器挑选
RWEQU P3.5 ; 读写操控
E EQU P3.3 ; LCD使能
;—————————–
ELEC EQU P3.0 ; 继电器
SPKEQU P2.2 ; 蜂鸣器
Y_LED EQU P2.6 ; 继电器作业指示
C_LEDEQU P2.4 ; 被控电器指示灯
W_LEDEQU P2.3 ; 计时作业指示灯
D_LEDEQU P2.5 ; 整点报时指示灯
;—————————–
ORG 0000H ; 程序代码由地址0
JMP START ; 跳至主函数开端履行
ORG 000BH ; 定时器TIMER0中止地址
JMP T0_INT ; 跳至TIMER0中止启始地址
;#############################

; 主程序

;#############################
START:
CLR Y_LED ; 继电器作业指示关
CLR ELEC ; 继电器关
CLR CLOCK ; 铲除整点报时标志
SETB D_LED ; 整点报时指示灯关
;—————————–
CLR ALB ; 铲除操控标志
MOV HH,#0 ; 内定的操控时刻为–00:00
MOV MM,#0

LCALL SET_LCD ; LCD初始化
LCALL BZ ; 蜂鸣器接连两次发音
LCALL BZ
LCALL LED_BL ; LED闪耀,表明作业开端

LCALL INIT ; 初始化变量
LCALL INIT_TIMER ; 初始化定时器
LCALL MENU ;
;@@@@@@@@@@@@@@@@@@@@@@@@@@@@@

; 循环程序

;@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
LOOP:
LCALL TIME_PRO ; 时刻计时处理
; 按键扫描…………
JB K1,L1 ; 未按下K1键则持续扫描
; K1…..时刻设置/设整点报时
; K1 : ADJ TIME K2:HOUR K3:MIN K4: OK
LCALL D_LAY ; 1s延时
JNB K1,LL ; 按键超越1s,则设整点报时
LCALL BZ ; LED闪耀
MOV DPTR,#MADJ ; 实际履行音讯
MOV A,#1 ;
LCALL LCD_PRINT ; 在LCD显现字符
LCALL SET_TIME ; 设置现在时刻
LCALL MENU ; 菜单
JMP LOOP ; 持续循环
;………………………..
L1:JB K2,L2 ; 未按下K2键则持续扫描
; K2…………操控时刻显现
JNB K2,$ ; 等候K2键开释
LCALL BZ ; 蜂鸣器发音
MOV DPTR,#MLAL ; 显现操控音讯
MOV A,#1 ;
LCALL LCD_PRINT ; 在LCD显现字符
LCALL LOOK_ATIME ; 查看操控时刻
LCALL DELAY ; 延时
LCALL LED_BL ; 作业LED闪耀
LCALL LED_BL ;
LCALL MENU ; 菜单
JMP LOOP ; 持续循环
;………………………..
L2:JB K3,L3 ; 未按下K3键则持续扫描
; K3…..操控时刻设置
; K3 : ADJ ATIME K2:HOUR K3:MIN K4: OK
JNB K3,$ ; 等候K3键开释
LCALL BZ ; 蜂鸣器发音
MOV DPTR,#MAADJ ; 显现操控音讯
MOV A,#1 ;
LCALL LCD_PRINT ; 在LCD显现字符
LCALL SET_ATIME ; 操控时刻设置
LCALL LED_BL ; 作业LED闪耀
LCALL LED_BL
LCALL MENU ; 菜单
JMP LOOP ; 持续循环
LL: SJMP L6
;………………………..
L3:JB K4,L4 ; 未按下K4键则持续扫描
; K4…….操控开关/确认
JNB K4,$ ; 等候K4键开释
CPL ALB ; 操控设置标志取反
JNB ALB,L31 ; 没有操控标志,则发音一声
; ALARM ON………………..
CLR C_LED ; 操控指示灯亮
LCALL BZ ; 有操控标志,则蜂鸣器发音三声
LCALL BZ
LCALL BZ
JMP LOOP ; 回来
L31:
; ALARM OFF……………….
SETB C_LED ; 操控指示灯灭
LCALL BZ ; 蜂鸣器发音一声
JMP LOOP ; 回来
;………………………..
L4: JB K5,L5 ; 未按下K4键则持续扫描
;K5………电器操控开/关
JNB K5,$ ; 等候K5键开释
CPL Y_LED ; LED取反
CPL ELEC
LCALL BZ ; 蜂鸣器发音一声
L5: JMP LOOP ; 回来
L6: CPL CLOCK ; 值整点报时标志
CPL D_LED ; 整点报时指示灯亮
LCALL DELAY
JMP LOOP ; 回来
;—————————–
LMESS1: DB “Wlecome!”,0
LMESS2: DB ” happy! “,0
;=============================
; 初始化操控变量子程序
;=============================
INIT:
MOV DEDA,#0 ; 5ms计数值铲除为0
MOV SEC0,#0 ; 旧的秒数铲除为0
MOV SEC,#0 ; 秒钟变量铲除为0
MOV MIN,#0 ; 分钟变量铲除为0
MOV HOUR,#1 ; 小时变量铲除为1
RET ; 子程序回来
;=============================
;初始化定时器接口子程序
;=============================
INIT_TIMER:
MOV TMOD,#00000000B ; 设置定时器T0作业方法为方法0
MOV IE, #10000010B ;
MOV TL0,#LO ; 加载低字节
MOV TH0,#HI ; 加载高字节
SETB TR0 ; 发动定时器T0开端计时
RET
;*****************************
; 定时器0中止服务程序
;*****************************
T0_INT: ; 中止程序每隔5ms中止一次
PUSH ACC ; 累加器放入仓库
MOV TL0,#LO ; 加载低字节
MOV TH0,#HI ; 加载高字节
INC DEDA ; 5ms计数值加1
; 1 SEC TIME OUT CHECK
MOV A,DEDA ; 5ms计数值
CJNE A,#CO,TT ; 是否1s到了?
MOV DEDA,#0 ; DEDA值0

CPL W_LED ; LED灯亮灭改换
INC SEC ; 秒计数加1
MOV A,SEC ; 秒数据放在累加器里,用于比较
CJNE A,#60,TT ; 是否到1 min?
; 1 MIN TIME OUT
INC MIN ; 分计数加1
MOV SEC,#0 ; 秒计数铲除为0
MOV A,MIN
CJNE A,#60,TT ; 是否到1 h ?
; 1 HOUR TIME OUT
INC HOUR ; 小时计数加1
MOV MIN,#0 ; 分计数铲除为0
MOV A,HOUR
CJNE A,#24,TT ; 是否24 h到了?
MOV SEC,#0 ; 秒钟变量清0
MOV MIN,#0 ; 分钟变量清0
MOV HOUR,#0 ; 小时变量清0
TT:
POP ACC ; 将累加器由仓库取出
RETI ; 中止回来
;=============================
; 设置当不时刻
; K2:HH K3:MM K4:OK
;=============================
; K2:HH K3:MMK4:OK
SET_TIME:
CLR TR0 ; 关定时器0
MOV SEC,#0 ; 秒钟变量清0
; SCAN 3 KEY TO ADJ………..
S0:
JB K2,S1 ; 未按下K2键则持续扫描
; 小时调整
LCALL BZ ; 蜂鸣器发音一声
INC HOUR ; 小时加1
MOV A,HOUR ; 小时值放在累加器中,用于比较
CJNE A,#24,S11 ; 是否24 h到了?
MOV HOUR,#0 ; 小时变量清0
S11:
LCALL CONV ; 转化LCD显现数据
MOV R5,#20 ;
LCALL DELAY ; 延时
JMP S0 ; 持续程序履行
;………………..
S1:JB K3,S2 ; 未按下K3键则持续扫描
; 分钟调整
LCALL BZ ; 蜂鸣器发音一声
INC MIN ; 分钟加1
MOV A, MIN ; 分钟值放在累加器中,用于比较
CJNE A,#60,S21 ; 是否60 min到了?
MOV MIN,#0 ; 分钟变量清0
S21:
LCALL CONV ; 转化LCD显现数据
MOV R5,#20 ; 20*10ms
LCALL DELAY ; 延时
JMP S0 ; 持续程序履行

;…………………
S2:JB K4,S0 ; 未按下K4键则持续扫描
JNB K4,$ ; 有键按下则等候铺开
; K4 KEYED OK ……….
LCALL BZ ; 设置完结,蜂鸣器发音两声
LCALL BZ ;
SETB TR0 ; 发动定时器
RET
;=============================
; LCD榜首行显现程序
;=============================
; A:DIG X: LCD X POS
; SHOW ON LCD LINE1
SHOW_DIG:
MOV B,#10 ; 设置被除数
DIV AB ; 除法运算,成果A存商数,B存余数
ADD A,#30H ; A为十位数,转化为字符
PUSH B ; B放入仓库暂存起来
MOV B,DDRAM ; 设置LCD显现的方位
LCALL LCDP1 ; 由LCD显现出来

POP B ; B由仓库取出来
MOV A,B ; B为个位数
ADD A,#30H ; 转化为字符
INC DDRAM ; LCD显现方位加1
MOV B,DDRAM ; 设置LCD显现方位
LCALL LCDP1 ; 由LCD显现出来
RET
;=============================
; LCD第二行显现程序
;=============================
; A:DIG X: LCD X POS
; SHOW ON LCD LINE2
SHOW_DIG2:
MOV B,#10 ; 设置被除数
DIV AB ; 除法运算,成果A存商数,B存余数
ADD A,#30H ; A为十位数,转化为字符
PUSH B ; B放入仓库暂存起来
MOV B,DDRAM ; 设置LCD显现的方位
LCALL LCDP2 ; 由LCD显现出来

POP B ; B由仓库取出来
MOV A,B ; B为个位数
ADD A,#30H ; 转化为字符
INC DDRAM ; LCD显现方位加1
MOV B,DDRAM ; 设置LCD显现方位
LCALL LCDP2 ; 由LCD显现出来
RET
;=============================
; 转化显现当不时刻子程序
; 不时:分分:秒秒
;=============================
CONV:
; SHOW HOUR……………显现小时数据
MOV A,HOUR ; 小时数据放在A中
MOV DDRAM,#0 ; 设置要显现的地址
LCALL SHOW_DIG2 ; 在第二行显现
INC DDRAM ; 显现地址加1
MOV A,#: ; 加载” : “
MOV B,DDRAM ; LCD显现地址放入B中
LCALL LCDP2 ; LCD第二行显现程序
; SHOW MIN……………显现分钟数据
MOV A,MIN ; 分钟数据放在A中
INC DDRAM ; 显现地址加1
LCALL SHOW_DIG2 ; 在第二行显现
INC DDRAM ; 显现地址加1
MOV A,#: ; 加载” : “
MOV B,DDRAM ; LCD显现地址放入B中
LCALL LCDP2 ; LCD第二行显现程序
; SHOW SEC……………显现秒钟数据
MOV A,SEC ; 秒钟数据放在A中
INC DDRAM ; 显现地址加1
LCALL SHOW_DIG2 ; 在第二行显现
RET
;****************************
; LCD初始化设置程序
; 并测验
;****************************
SET_LCD:
LCALL INIT_LCD ; 初始化LCD

MOV R5,#10 ; 10*10ms
LCALL DELAY ; 推迟一下

MOV DPTR,#LMESS1 ; 指针指在显现音讯1
MOV A,#1 ; 显现在榜首行上
LCALL LCD_PRINT ; 显现履行音讯1于LCD榜首行

MOV DPTR,#LMESS2 ; 指针指在显现音讯2
MOV A,#2 ; 显现在第二行上
LCALL LCD_PRINT ; 显现履行音讯2于LCD第二行
RET
;****************************
; LCD操控指令初始化设置
;****************************
INIT_LCD:
MOV COM,#38H ; 双行显现,8位数据,5X8点阵
LCALL W_COM
MOV COM,#06H ; 输入方法设置:AC主动加1
LCALL W_COM
MOV COM,#0CH ; 显现开,光标关
LCALL W_COM
MOV COM,#01H ; 清LCD显现屏
LCALL W_COM
RET
;****************************
; 清出LCD的榜首行字符
;****************************
CLR_LINE1:
MOV COM,#80H ; 设置榜首行地址
LCALL W_COM ; 写入地址
MOV R0,#8 ; 设置计数值
C1: MOV DAT,# ; 载入空格符至LCD
LCALL W_DAT ; 输出字符至LCD
DJNZ R0,C1 ; 计数完毕
RET
;****************************
; 在LCD显现字符
;****************************
; A=LINE 1 OR 2
; DPTR = MESSAGE POINTER
LCD_PRINT:
CJNE A,#1,LINE2 ; 判别是否为榜首行
LINE1:MOV COM,#80H ; 设置LCD的榜首行地址
LCALL W_COM ; 写入指令
LCALL CLR_LINE ; 铲除该行字符数据
MOV COM,#80H ; 设置LCD的榜首行地址
LCALL W_COM ; 写入指令
JMP FILL ; 填入字符

LINE2:MOV COM,#0C0H ; 设置LCD的第二行地址
LCALL W_COM ; 写入指令
LCALL CLR_LINE ; 铲除该行字符数据
MOV COM,#0C0H ; 设置LCD的第二行地址
LCALL W_COM ; 写入指令
FILL:
CLR A ; A清零
MOVC A,@A+DPTR ; 由音讯区取出字符
CJNE A,#0,LC1 ; 判别是否为完毕码
RET
LC1:
MOV DAT,A ; 将数据放入LCD数据寄存器
LCALL W_DAT ; 写入数据
INC DPTR ; 指针加 1
JMP FILL ; 持续填入字符
RET
;****************************
; LCD清出显现
;****************************
CLR_LINE:
MOV R0,#8 ; 设置个数
CL1: MOV DAT,# ; 载入空格符至LCD
LCALL W_DAT ; 输出字符至LCD
DJNZ R0,CL1 ; 计数完毕
RET
;****************************
; 判别忙标志程序
;****************************
B_LCD: PUSH ACC ; 把ACC压入仓库
CLR RS ; RS=1
SETB RW ; RW=1
B_LCD1: MOV P1,#0FFH ; P1口置”1″
SETB E ; E =1
MOV A,P1 ; 从P1口读出数据
NOP ; 空操作
CLR E ; E =0
JB ACC.7,B_LCD1 ; 判别忙标志
POP ACC ; 把ACC弹出仓库
RET
;***************************
; 写指令到LCD程序
;***************************
W_COM: LCALL B_LCD ; 判别忙标志
CLR RS ; RS=0
CLR RW ; RW=0
SETB E ; E =1
MOV P1,COM ; 写入指令到P1口
CLR E ; E =0
RET
;***************************
; 写数据到LCD程序
;***************************
W_DAT: LCALL B_LCD ; 判别忙标志
SETB RS ; RS=1
CLR RW ; RW=0
SETB E ; E =1
MOV P1,DAT ; 写入数据
CLR E ; E =0
RET
;============================
; LCD榜首行显现程序
;============================
LCDP1:
; LINE 1
PUSH ACC ; 将A放入仓库
MOV A,B ; 设置显现地址
ADD A,#80H ; 设置LCD的榜首行地址
MOV COM,A ; 把地址放入指令寄存器
LCALL W_COM ; 写入指令
POP ACC ; 由仓库中取出A
MOV DAT,A ; 把数据放入数据寄存器
LCALL W_DAT ; 写入数据
RET
;============================
; LCD第二行显现程序
;============================
LCDP2:
; LINE 1
PUSH ACC ; 将A放入仓库
MOV A,B ; 设置显现地址
ADD A,#0C0H ; 设置LCD的第二行地址
MOV COM,A ; 把地址放入指令寄存器
LCALL W_COM ; 写入指令
POP ACC ; 由仓库中取出 A
MOV DAT,A ; 把数据放入数据寄存器
LCALL W_DAT ; 写入数据
RET
;****************************
; 延时程序
;****************************
; 总推迟 R5*10 ms
DELAY:
MOV R6,#50 ; R6存入50
D1:MOV R7,#100 ; R7存入100
DJNZ R7,$ ; R7不为零,则持续
DJNZ R6,D1 ; R6不为零,则持续
DJNZ R5,DELAY ; R5不为零,则持续
RET
; 1s 延时
D_LAY: MOV R5,#100
LCALL DELAY
RET
;****************************
; 作业LED闪耀程序
;****************************
LED_BL:
MOV R4,#4 ; R4存入4
LE0:CPL W_LED ; 位反向
MOV R5,#10 ; 推迟 100 ms
LCALL DELAY ; 延时
DJNZ R4, LE0 ;
RET
;;***************************
; 菜单程序
;****************************
MMENU:DB “Now_Time”,0 ; 正常走时榜首显现
MADJ:DB “2H 3M 4K”,0 ; 调不时第二显现
MLAL:DB “CtrlTime”,0 ; 查看操控时刻时榜首显现
MAADJ:DB “2H 3M 4K”,0 ; 调不时第二显现

MENU: ;LCD显现菜单
MOV DPTR,#MMENU ; 存入菜单地址
MOV A,#1 ;
LCALL LCD_PRINT ; 在LCD显现字符
RET
;****************************
; 发音程序
;****************************
BZ:
MOV R6,#0 ; R6值零
B1:LCALL DEX ; 时刻短推迟
CPL SPK ; 蜂鸣器取反
DJNZ R6,B1 ;

MOV R5,#10 ; 10*10ms
LCALL DELAY ; 延时
RET
;——————–
DEX:MOV R7,#180 ; 时刻短推迟
DE1:NOP ; 空操作
DJNZ R7,DE1 ;
RET
;============================
; 查看已设置的操控时刻
;============================
LOOK_ATIME:
; 显现小时数……………
MOV A,HH ; 调小时数据
MOV DDRAM,#0 ; 设置显现地址
LCALL SHOW_DIG2 ; 在第二行显现
INC DDRAM ; 显现地址加 1
MOV A,#: ; 加载” : “
MOV B,DDRAM ; LCD显现地址放入B中
LCALL LCDP2 ; LCD第二行显现
; 显现分钟数……………
MOV A,MM ; 调小时数据
INC DDRAM ; 显现地址加 1
LCALL SHOW_DIG2 ; 在第二行显现
INC DDRAM ; 显现地址加 1
MOV A,#: ; 加载” : “
MOV B,DDRAM ; LCD显现地址放入B中
LCALL LCDP2 ; LCD第二行显现
; 显现秒钟数……………
MOV A,#0 ; 设置秒为 00
INC DDRAM ; 显现地址加 1
LCALL SHOW_DIG2 ; 在第二行显现
RET
;============================
; 设置操控时刻
; K2:HH K3:MM K4:OK
;============================
; K2:HH K3:MMK4:OK
SET_ATIME:
LCALL LOOK_ATIME ; 加载操控时刻数据
; SCAN 3 KEY TO ADJ………
AS0:
JB K2,AS1 ; 未按下K2键则持续扫描
; K2……… 调整小时
LCALL BZ ; 蜂鸣器响一声
INC HH ; 小时加1
MOV A, HH ; 小时值放在累加器中,用于比较
CJNE A,#24,AS11 ; 是否到24h?
MOV HH,#0 ; 小时清0
AS11:
LCALL LOOK_ATIME ; 加载操控时刻数据
MOV R5,#20 ; 20*10ms
LCALL DELAY ; 延时
JMP AS0 ; 持续按键扫描
;………………..
AS1:JB K3,AS2 ; 未按下K2键则持续扫描
; K3…….. 分钟调整
LCALL BZ ; 蜂鸣器响一声
INC MM ; 分钟加1
MOV A,MM ;
CJNE A,#60,AS21 ; 是否到 60 min ?
MOV MM,#0 ; 分钟数清0
AS21:
LCALL LOOK_ATIME ; 加载操控时刻数据
MOV R5,#20 ; 20*10ms
LCALL DELAY ; 延时
JMP AS0 ; 持续按键扫描
;…………………
AS2:JB K4,AS0 ; 未按下K4键则持续扫描
; K4…….. 设置完结
JNB K4,$ ; 等K4键铺开
SETB ALB ; 设置操控标志
CLR C_LED ; 操控指示灯亮
LCALL BZ ; 蜂鸣器发音三声
LCALL BZ ;
LCALL BZ
RET
;============================
; 更新时刻并查看操控时刻
;============================
TIME_PRO:
; UPDATE TIME………..
MOV A,SEC ; 加载当时秒数
MOV B,SEC0 ; 载入旧秒数
CJNE A,B,TI1 ; 是否过了1 s ?
JMP TI2 ; 查看是否发动操控器
TI1:LCALL CONV ; LCD显现时刻数据
MOV SEC0,SEC ; 记载旧的秒数
TI2:
; 查看是否发动操控器
JB ALB,TI3 ; 有发动标志,则比较时刻
JB CLOCK,TI4 ; 有发动标志,则比较时刻
RET
TI3:
; 查看闹钟时刻是否到了….
MOV A,HOUR ; 当时小不时刻
MOV B,HH ; 操控小不时刻
CJNE A,B,BK ; 查看操控小不时刻

MOV A,MIN ; 当时分钟时刻
MOV B,MM ; 操控分钟时刻
CJNE A,B,BK ; 查看操控分钟时刻
; TIME MATCH……………..
LCALL TIME_OUT ; 到点作业程序
SJMP BK
; 查看是否为整点
TI4:
MOV A,SEC
CJNE A,#0,BK ; 秒是否为0?
MOV A,MIN ; 分是否为0?
CJNE A,#0,BK
MOV A,HOUR
TI40: LCALL BZ ; 多少时刻就发音多少次
DEC A
MOV R5,#40
LCALL DELAY
CJNE A,#0,TI40
LCALL LED_BL ; W_LED闪耀
CPL CLOCK
CPL D_LED
BK:
RET
;****************************
; 到点作业程序
;****************************
TIME_OUT:
CPL Y_LED ; 继电器
CPL ELEC ; 被操控器材
M1:LCALL LED_BL ; 作业灯闪耀
LCALL BZ ; 蜂鸣器发音
; K4……….中止
JB K4,M1 ; 未按下K4键则持续扫描
JNB K4,$ ; 等候K4键开释
NOP
NOP
LCALL LED_BL ; 作业灯闪耀
CLR ALB ; 铲除操控标志
SETB C_LED ; 封闭操控标志灯
RET
END
;– 完毕 —
;—————————

声明:本文内容来自网络转载或用户投稿,文章版权归原作者和原出处所有。文中观点,不代表本站立场。若有侵权请联系本站删除(kf@86ic.com)https://www.86ic.net/xinpin/yuanjian/275869.html

为您推荐

联系我们

联系我们

在线咨询: QQ交谈

邮箱: kf@86ic.com

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

返回顶部