完整的单片机驱动TFT彩屏的程序设计
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
完整的单片机驱动TFT彩屏的程序设计
单片机驱动TFT彩屏的程序设计
一种完整的复杂的单片机驱动TFT彩屏的程序设计。
同步显示有星期;温度;时间;遥控指示;以及强大的定时功能…废话不多说,自已向下看吧…
显示效果图:
电路图:
彩屏部分数据:(网上有资料,陶宝网上有买)
以下是汇编程序:
(本程序可直接复制使用,但请指明出处。
)
本程序本人用时2. 5个月制作(当然是工作闲余的时候),本程
序是本人为学习汇编而编写(为做到“入森而不迷”)。
其已经做过实物测试,除时间不是十分精确外,其它都没有问题(因为问题已经解决了~~)。
遥控码数请参照程序中的以下两个子程序:
子程序1:遥控按键处理(码数这里面,很容易找的)
子程序2:遥控外部中断处理程序(遥控器不同码数长度也不一样,这里要注意)
;制作:王永宾
;QQ:794576441
;Email:*******************
;---------------------------------------复制以下------------------------ ---------------------------------
;TFT彩屏程序(STC89C52)
;制作:王永宾
;QQ:794576441
;Email:*******************
LCDRS EQU P2.0
LCDRW EQU P2.1
LCDRST EQU P2.4
;------------------
SU00 EQU 30H ;时间字符的地址2440(0-9)SU01 EQU 31H
SU10 EQU 32H
SU11 EQU 33H
SU20 EQU 34H
SU21 EQU 35H
SU30 EQU 36H
SU31 EQU 37H
SU40 EQU 38H
SU41 EQU 39H
SU50 EQU 3AH
SU60 EQU 3CH
SU61 EQU 3DH
SU70 EQU 3EH
SU71 EQU 3FH
SU80 EQU 40H
SU81 EQU 41H
SU90 EQU 42H
SU91 EQU 43H
;--------时间寄存器定义----------
RR0 EQU 44H
RR1 EQU 45H
RR2 EQU 46H
RR3 EQU 47H
RR4 EQU 48H
RR5 EQU 49H
RR6 EQU 4AH
RR7 EQU 4BH
SUZR0 EQU 4DH ;星期?字符的地址(日-六)SUZR1 EQU 4EH SUZ10 EQU 4FH
SUZ11 EQU 50H
SUZ20 EQU 51H
SUZ30 EQU 53H
SUZ31 EQU 54H
SUZ40 EQU 55H
SUZ41 EQU 56H
SUZ50 EQU 57H
SUZ51 EQU 58H
SUZ60 EQU 59H
SUZ61 EQU 5AH
WD2 EQU 5CH
WD3 EQU 5DH
WD4 EQU 5EH
;-------星期?寄存器定义------------ RR8 EQU 4CH ;定时字符的地址1616(六-日)GUAN0 EQU 60H GUAN1 EQU 61H
SL10 EQU 62H
SL11 EQU 63H
SL20 EQU 64H
SL21 EQU 65H
SL30 EQU 66H
SL31 EQU 67H
SL40 EQU 68H
SL41 EQU 69H
SL50 EQU 6AH
SL51 EQU 6BH
SL60 EQU 6CH
SL61 EQU 6DH
SL70 EQU 6EH
SL71 EQU 6FH
;--------定时寄存器定义---第一组-------
RA EQU 70H ;组
RAL0 EQU 71H ;时间
RAL2 EQU 73H
RAL3 EQU 74H
RAR0 EQU 75H
RAR1 EQU 76H
RAR2 EQU 77H
RAR3 EQU 78H
RA1 EQU 79H ;星期?
RA2 EQU 7AH
RA3 EQU 7BH
RA4 EQU 7CH
RA5 EQU 7DH
RA6 EQU 7EH
RA7 EQU 7FH
;TFT彩屏程序(STC89C52)
;制作:王永宾
;QQ:794576441
;Email:*******************
;===================================
;===============开始00\==========
ORG 0000H
LJMP MAIN0
ORG 03H
LJMP ITT00 ;外部中断
ORG 0BH
RETI ;计时中断如果溢出直接
ORG 1BH
LJMP TI1 ;走时中断
;============主程序开始=================; ORG 20H
MAIN0:
LCALL KAIJI ;开机初始化
LCALL CSH0
QINGPINGHAI0:
JB P3.7,$
MOV 24H,#00H ;R4 MOV 25H,#03FH ;R4 MOV 26H,#00H
MOV 27H,#03FH
MOV R3,#00H
MOV R4,#00H
LCALL QINGPING QINGPINGHAI1:
JNB P3.7,QINGPINGRED0 JNB P3.6,QINGPINGEND AJMP QINGPINGHAI1
QINGPINGRED0:
JB P3.7,$
MOV 24H,#0E0H ;R4 MOV 25H,#0FFH ;R4 MOV 26H,#0E0H MOV 27H,#0FFH
MOV R3,#00H
MOV R4,#0E0H
LCALL QINGPING QINGPINGRED1:
JNB P3.7,QINGPINGLV0 JNB P3.6,QINGPINGEND AJMP QINGPINGRED1
QINGPINGLV0:
JB P3.7,$
MOV R1,#00H
MOV R2,#03H
MOV R3,#10H
MOV R4,#0B0H
LCALL XML ;写命令LCALL XSJ ;写数据
MOV R1,#00H
MOV R2,#22H
LCALL XML ;写命令
MOV 24H,#0C3H ;底
MOV 25H,#3FH ;字
MOV 26H,#0C3H ;底
MOV 27H,#3FH ;字
MOV R3,#00H
MOV R4,#0C3H ;底
LCALL QINGPING QINGPINGLV1:
JNB P3.7,QINGPINGHAI0
JNB P3.6,QINGPINGEND
AJMP QINGPINGLV1
;========================= QINGPINGEND:
MOV R1,#00H
MOV R2,#22H
LCALL XML ;写命令
LCALL GUDING ;固定字符LCALL WINDU ;温度LCALL YAOKONG ;遥控LJMP XSU
MAIN:
LCALL DINGSHISHU ;定时数LCALL DINGSHIZU ;定时组LCALL XPX ;星期几
LCALL SHIJIAN ;时间
LCALL WENDUCHULI
LCALL WINDU ;温度LCALL TIR0
SETB P2.5 ;-----完全相等---关闹CLR P2.6 ;-----完全相等---关闹MAIN1:
CLR P2.7
LCALL SHIJIAN ;时间
LCALL JP0 ;键盘
LCALL POWER ;遥控处理
;----------------------
MOV A,2CH
CJNE A,RR3,MAIN2 ;RR3为分计
LJMP MAIN3 ;定义十秒锺扫一次温度MAIN2:
MOV 2CH,RR3
LCALL WENDUCHULI ;温度处理
LCALL WINDU ;温度
MAIN3:
MOV A,RR0 ;分有变动就扫描定时
CJNE A,RR4,MAIN4 ;RR4为分
LJMP MAIN1
MAIN4:
MOV RR0,RR4
LCALL BIJIAO ;定时比较
LJMP MAIN1
;=============温度处理====================== WENDUCHULI:
LCALL WENDUXS ;读写子程序
MOV A,21H
MOV R0,#20H
XCHD A,@R0
ANL A,#0FH
MOV 21H,A ;21H小数处理
MOV A,20H
SWAP A ;20整数处理
MOV 20H,A
JB 07H,WENDUCHULI1;是负数转MOV WD4,26H ;清除负数标示
LCALL WENDUCHULI0 ;写整数个位MOV WD2,A
LCALL WENDUCHULI0 ;写整数十位MOV WD1,A
MOV A,21H ;写小数位
MOV B,#02
DIV AB
MOV B,A
ADD A,B
ADD A,#30H
MOV WD3,A ;写小数位
RET
WENDUCHULI1:;负数处理.....
MOV WD4,27H ;负数标示
MOV A,20H ;20整数处理
CPL A ;取反
ANL A,#7FH ;清负数位
INC A ;加一
MOV 20H,A ;20整数处理
MOV A,21H ;21H小数处理
CPL A ;取反
ANL A,#0FH ;清除高位
INC A ;加一
MOV 21H,A ;21H小数处理
LCALL WENDUCHULI0 ;写整数个位MOV WD2,A LCALL WENDUCHULI0 ;写整数十位MOV WD1,A MOV A,21H ;写小数位
MOV B,#02
DIV AB
MOV B,A
ADD A,B
ADD A,#30H
MOV WD3,A ;写小数位
RET
;------------整数写子程序-------- WENDUCHULI0: MOV A,20H ;整数写子程序
MOV B,#10
DIV AB
MOV 20H,A
MOV A,B
ADD A,B
ADD A,#30H ;整数写子程序
;======写数据========= WENDUXS: LCALL WENDURST
JB 70H,WENDUXS1 ;检复位成功了转RET WENDUXS1:
MOV A,#0CCH ;跳过ROM
LCALL WENDUXS_B
MOV A,#44H
LCALL WENDUXS_B ;RAM温度转换MOV R4,#50 D1: ;等待750uS转换完成MOV R5,#13
DJNZ R5,$
DJNZ R6,D1
;======读数据==============
LCALL WENDURST
JB 70H,WENDUDS1 ;检复位成功了转RET WENDUDS1:
MOV A,#0CCH ;跳过ROM
LCALL WENDUXS_B
MOV A,#0BEH ;读RAM
LCALL WENDUXS_B
LCALL WENDUDX_B ;调读子程序RET
;-----读数子程序-----------
WENDUDX_B:
MOV R0,#20H
MOV R4,#02
WENDUDX_B0:
MOV R5,#08H
WENDUDX_B1:
CLR C
SETB P3.3
NOP
NOP
NOP
CLR P3.3
NOP
NOP
NOP
NOP
NOP
NOP
SETB P3.3
MOV R6,#18
DJNZ R6,$ ;13uS
MOV C,P3.3
MOV R6,#46
DJNZ R6,$
RRC A
DJNZ R5,WENDUDX_B1 MOV @R0,A
INC R0
DJNZ R4,WENDUDX_B0 RET
;====写数据子程序====== WENDUXS_B:
MOV R5,#08H
CLR C
WENDUXS_B0:
CLR P3.3
MOV R6,#12
RRC A
MOV P3.3,C
MOV R6,#49
DJNZ R6,$
SETB P3.3
NOP
NOP
DJNZ R5,WENDUXS_B0
SETB P3.3
RET
;===========18B20初始化子程序=============== WENDURST:
SETB P3.3
NOP
NOP
CLR P3.3
MOV R5,#255
WENDURST1: ;复位低电时间510uS
NOP
NOP
DJNZ R5,WENDURST1;复位低电时间510uS
SETB P3.3
MOV R5,#60 ;等待检测存在脉冲15uS
DJNZ R5,$ ;等待检测存在脉冲15uS
JNB P3.3,WENDURSTOK ;有存在脉冲转
CLR 70H ;无存在脉冲清除标号
RET
WENDURSTOK:
MOV R5,#180 ;测存在脉冲240uS
SETB 70H ;有存在脉冲打上标号
SETB P3.3
RET
;============遥控按键处理========================== POWER:
MOV A,5FH
CJNE A,#0B7H,POWER1
LCALL YAOKONG1
MOV 5FH,#00H
RET
POWER1:
MOV A,5FH
CJNE A,#0A7H,POWER2
LCALL YAOKONG2
MOV 5FH,#00H
RET
POWER2:
MOV A,5FH
CJNE A,#97H,POWER3
LCALL YAOKONG3
MOV 5FH,#00H
RET
POWER3:
MOV A,5FH
CJNE A,#0FH,POWER4
LCALL YAOKONG4
MOV 5FH,#00H
RET
POWER4:
MOV A,5FH
CJNE A,#0C7H,POWER5 LCALL YAOKONG5 MOV 5FH,#00H RET
POWER5:
MOV A,5FH
CJNE A,#4FH,POWER6 LCALL YAOKONG6 MOV 5FH,#00H
RET
POWER6:
MOV A,5FH
CJNE A,#0E7H,POWER7 LCALL YAOKONG7 MOV 5FH,#00H RET
POWER7:
MOV A,5FH
CJNE A,#27H,POWER8 LCALL YAOKONG8 MOV 5FH,#00H
RET
POWER8:
MOV A,5FH
CJNE A,#0D7H,POWER9 LCALL YAOKONG9 MOV 5FH,#00H RET
POWER9:
MOV A,5FH
CJNE A,#47H,POWER0 LCALL YAOKONG0 MOV 5FH,#00H POWER0:
RET
;====================================== ;=========定时比较==================== BIJIAO: BJ0:
MOV A,RR8
CJNE A,#4DH,BJ1 ;今天星期一吗?
MOV R1,#1EH
MOV R0,#10H LCALL BJ00 RET
BJ1:
CJNE A,#4FH,BJ2 MOV R1,#18H MOV R0,#10H LCALL BJ00 RET
BJ2:
CJNE A,#51H,BJ3 MOV R1,#19H MOV R0,#10H LCALL BJ00 RET
BJ3:
CJNE A,#53H,BJ4 MOV R1,#1AH MOV R0,#10H LCALL BJ00 RET
BJ4:
CJNE A,#55H,BJ5 MOV R1,#1BH MOV R0,#10H LCALL BJ00 RET。