完整的单片机驱动TFT彩屏的程序设计.docx
《完整的单片机驱动TFT彩屏的程序设计.docx》由会员分享,可在线阅读,更多相关《完整的单片机驱动TFT彩屏的程序设计.docx(121页珍藏版)》请在冰豆网上搜索。
完整的单片机驱动TFT彩屏的程序设计
单片机驱动TFT彩屏的程序设计
一种完整的复杂的单片机驱动TFT彩屏的程序设计。
同步显示有星期;温度;时间;遥控指示;以及强大的定时功能…
废话不多说,自已向下看吧…
显示效果图:
电路图:
彩屏部分数据:
(网上有资料,陶宝网上有买)
以下是汇编程序:
(本程序可直接复制使用,但请指明出处。
)
本程序本人用时2.5个月制作(当然是工作闲余的时候),本程序是本人为学习汇编而编写(为做到“入森而不迷”)。
其已经做过实物测试,除时间不是十分精确外,其它都没有问题(因为问题已经解决了~~)。
遥控码数请参照程序中的以下两个子程序:
子程序1:
遥控按键处理(码数这里面,很容易找的)
子程序2:
遥控外部中断处理程序(遥控器不同码数长度也不一样,这里要注意)
;制作:
王永宾
;QQ:
794576441
;Email:
wyb20090311@
;---------------------------------------复制以下---------------------------------------------------------
;TFT彩屏程序(STC89C52)
;制作:
王永宾
;QQ:
794576441
;Email:
wyb20090311@
LCDRSEQUP2.0
LCDRWEQUP2.1
LCDCSEQUP2.3
LCDRSTEQUP2.4
;------------------
SU00EQU30H;时间字符的地址2440(0-9)
SU01EQU31H
SU10EQU32H
SU11EQU33H
SU20EQU34H
SU21EQU35H
SU30EQU36H
SU31EQU37H
SU40EQU38H
SU41EQU39H
SU50EQU3AH
SU51EQU3BH
SU60EQU3CH
SU61EQU3DH
SU70EQU3EH
SU71EQU3FH
SU80EQU40H
SU81EQU41H
SU90EQU42H
SU91EQU43H
;--------时间寄存器定义----------
RR0EQU44H
RR1EQU45H
RR2EQU46H
RR3EQU47H
RR4EQU48H
RR5EQU49H
RR6EQU4AH
RR7EQU4BH
SUZR0EQU4DH;星期?
字符的地址(日-六)
SUZR1EQU4EH
SUZ10EQU4FH
SUZ11EQU50H
SUZ20EQU51H
SUZ21EQU52H
SUZ30EQU53H
SUZ31EQU54H
SUZ40EQU55H
SUZ41EQU56H
SUZ50EQU57H
SUZ51EQU58H
SUZ60EQU59H
SUZ61EQU5AH
WD1EQU5BH
WD2EQU5CH
WD3EQU5DH
WD4EQU5EH
;-------星期?
寄存器定义------------
RR8EQU4CH
;定时字符的地址1616(六-日)
GUAN0EQU60H
GUAN1EQU61H
SL10EQU62H
SL11EQU63H
SL20EQU64H
SL21EQU65H
SL30EQU66H
SL31EQU67H
SL40EQU68H
SL41EQU69H
SL50EQU6AH
SL51EQU6BH
SL60EQU6CH
SL61EQU6DH
SL70EQU6EH
SL71EQU6FH
;--------定时寄存器定义---第一组-------
RAEQU70H;组
RAL0EQU71H;时间
RAL1EQU72H
RAL2EQU73H
RAL3EQU74H
RAR0EQU75H
RAR1EQU76H
RAR2EQU77H
RAR3EQU78H
RA1EQU79H;星期?
RA2EQU7AH
RA3EQU7BH
RA4EQU7CH
RA5EQU7DH
RA6EQU7EH
RA7EQU7FH
;TFT彩屏程序(STC89C52)
;制作:
王永宾
;QQ:
794576441
;Email:
wyb20090311@
;===================================
;===============开始00\==========
ORG0000H
LJMPMAIN0
ORG03H
LJMPITT00;外部中断
ORG0BH
RETI;计时中断如果溢出直接
ORG1BH
LJMPTI1;走时中断
;============主程序开始=================;
ORG20H
MAIN0:
LCALLKAIJI;开机初始化
LCALLCSH0
QINGPINGHAI0:
JBP3.7,$
MOV24H,#00H;R4
MOV25H,#03FH;R4
MOV26H,#00H
MOV27H,#03FH
MOVR3,#00H
MOVR4,#00H
LCALLQINGPING
QINGPINGHAI1:
JNBP3.7,QINGPINGRED0
JNBP3.6,QINGPINGEND
AJMPQINGPINGHAI1
QINGPINGRED0:
JBP3.7,$
MOV24H,#0E0H;R4
MOV25H,#0FFH;R4
MOV26H,#0E0H
MOV27H,#0FFH
MOVR3,#00H
MOVR4,#0E0H
LCALLQINGPING
QINGPINGRED1:
JNBP3.7,QINGPINGLV0
JNBP3.6,QINGPINGEND
AJMPQINGPINGRED1
QINGPINGLV0:
JBP3.7,$
MOVR1,#00H
MOVR2,#03H
MOVR3,#10H
MOVR4,#0B0H
LCALLXML;写命令
LCALLXSJ;写数据
MOVR1,#00H
MOVR2,#22H
LCALLXML;写命令
MOV24H,#0C3H;底
MOV25H,#3FH;字
MOV26H,#0C3H;底
MOV27H,#3FH;字
MOVR3,#00H
MOVR4,#0C3H;底
LCALLQINGPING
QINGPINGLV1:
JNBP3.7,QINGPINGHAI0
JNBP3.6,QINGPINGEND
AJMPQINGPINGLV1
;=========================
QINGPINGEND:
MOVR1,#00H
MOVR2,#22H
LCALLXML;写命令
LCALLGUDING;固定字符
LCALLWINDU;温度
LCALLYAOKONG;遥控
LJMPXSU
MAIN:
LCALLDINGSHISHU;定时数
LCALLDINGSHIZU;定时组
LCALLXPX;星期几
LCALLSHIJIAN;时间
LCALLWENDUCHULI
LCALLWINDU;温度
LCALLTIR0
SETBP2.5;-----完全相等---关闹
CLRP2.6;-----完全相等---关闹
MAIN1:
CLRP2.7
LCALLSHIJIAN;时间
LCALLJP0;键盘
LCALLPOWER;遥控处理
;----------------------
MOVA,2CH
CJNEA,RR3,MAIN2;RR3为分计
LJMPMAIN3;定义十秒锺扫一次温度
MAIN2:
MOV2CH,RR3
LCALLWENDUCHULI;温度处理
LCALLWINDU;温度
MAIN3:
MOVA,RR0;分有变动就扫描定时
CJNEA,RR4,MAIN4;RR4为分
LJMPMAIN1
MAIN4:
MOVRR0,RR4
LCALLBIJIAO;定时比较
LJMPMAIN1
;=============温度处理======================
WENDUCHULI:
LCALLWENDUXS;读写子程序
MOVA,21H
MOVR0,#20H
XCHDA,@R0
ANLA,#0FH
MOV21H,A;21H小数处理
MOVA,20H
SWAPA;20整数处理
MOV20H,A
JB07H,WENDUCHULI1;是负数转
MOVWD4,26H;清除负数标示
LCALLWENDUCHULI0;写整数个位
MOVWD2,A
LCALLWENDUCHULI0;写整数十位
MOVWD1,A
MOVA,21H;写小数位
MOVB,#02
DIVAB
MOVB,A
ADDA,B
ADDA,#30H
MOVWD3,A;写小数位
RET
WENDUCHULI1:
;负数处理.....
MOVWD4,27H;负数标示
MOVA,20H;20整数处理
CPLA;取反
ANLA,#7FH;清负数位
INCA;加一
MOV20H,A;20整数处理
MOVA,21H;21H小数处理
CPLA;取反
ANLA,#0FH;清除高位
INCA;加一
MOV21H,A;21H小数处理
LCALLWENDUCHULI0;写整数个位
MOVWD2,A
LCALLWENDUCHULI0;写整数十位
MOVWD1,A
MOVA,21H;写小数位
MOVB,#02
DIVAB
MOVB,A
ADDA,B
ADDA,#30H
MOVWD3,A;写小数位
RET
;------------整数写子程序--------
WENDUCHULI0:
MOVA,20H;整数写子程序
MOVB,#10
DIVAB
MOV20H,A
MOVA,B
ADDA,B
ADDA,#30H;整数写子程序
RET
;======写数据=========
WENDUXS:
LCALLWENDURST
JB70H,WENDUXS1;检复位成功了转
RET
WENDUXS1:
MOVA,#0CCH;跳过ROM
LCALLWENDUXS_B
MOVA,#44H
LCALLWENDUXS_B;RAM温度转换
MOVR4,#50
D1:
;等待750uS转换完成
MOVR5,#13
DJNZR5,$
DJNZR6,D1
;======读数据==============
LCALLWENDURST
JB70H,WENDUDS1;检复位成功了转
RET
WENDUDS1:
MOVA,#0CCH;跳过ROM
LCALLWENDUXS_B
MOVA,#0BEH;读RAM
LCALLWENDUXS_B
LCALLWENDUDX_B;调读子程序
RET
;-----读数子程序-----------
WENDUDX_B:
MOVR0,#20H
MOVR4,#02
WENDUDX_B0:
MOVR5,#08H
WENDUDX_B1:
CLRC
SETBP3.3
NOP
NOP
NOP
NOP
CLRP3.3
NOP
NOP
NOP
NOP
NOP
NOP
SETBP3.3
MOVR6,#18
DJNZR6,$;13uS
MOVC,P3.3
MOVR6,#46
DJNZR6,$
RRCA
DJNZR5,WENDUDX_B1
MOV@R0,A
INCR0
DJNZR4,WENDUDX_B0
RET
;====写数据子程序======
WENDUXS_B:
MOVR5,#08H
CLRC
WENDUXS_B0:
CLRP3.3
MOVR6,#12
DJNZR6,$
RRCA
MOVP3.3,C
MOVR6,#49
DJNZR6,$
SETBP3.3
NOP
NOP
DJNZR5,WENDUXS_B0
SETBP3.3
RET
;===========18B20初始化子程序===============
WENDURST:
SETBP3.3
NOP
NOP
CLRP3.3
MOVR5,#255
WENDURST1:
;复位低电时间510uS
NOP
NOP
DJNZR5,WENDURST1;复位低电时间510uS
SETBP3.3
MOVR5,#60;等待检测存在脉冲15uS
DJNZR5,$;等待检测存在脉冲15uS
JNBP3.3,WENDURSTOK;有存在脉冲转
CLR70H;无存在脉冲清除标号
RET
WENDURSTOK:
MOVR5,#180;测存在脉冲240uS
DJNZR5,$
SETB70H;有存在脉冲打上标号
SETBP3.3
RET
;============遥控按键处理==========================
POWER:
MOVA,5FH
CJNEA,#0B7H,POWER1
LCALLYAOKONG1
MOV5FH,#00H
RET
POWER1:
MOVA,5FH
CJNEA,#0A7H,POWER2
LCALLYAOKONG2
MOV5FH,#00H
RET
POWER2:
MOVA,5FH
CJNEA,#97H,POWER3
LCALLYAOKONG3
MOV5FH,#00H
RET
POWER3:
MOVA,5FH
CJNEA,#0FH,POWER4
LCALLYAOKONG4
MOV5FH,#00H
RET
POWER4:
MOVA,5FH
CJNEA,#0C7H,POWER5
LCALLYAOKONG5
MOV5FH,#00H
RET
POWER5:
MOVA,5FH
CJNEA,#4FH,POWER6
LCALLYAOKONG6
MOV5FH,#00H
RET
POWER6:
MOVA,5FH
CJNEA,#0E7H,POWER7
LCALLYAOKONG7
MOV5FH,#00H
RET
POWER7:
MOVA,5FH
CJNEA,#27H,POWER8
LCALLYAOKONG8
MOV5FH,#00H
RET
POWER8:
MOVA,5FH
CJNEA,#0D7H,POWER9
LCALLYAOKONG9
MOV5FH,#00H
RET
POWER9:
MOVA,5FH
CJNEA,#47H,POWER0
LCALLYAOKONG0
MOV5FH,#00H
POWER0:
RET
;======================================
;=========定时比较====================
BIJIAO:
BJ0:
MOVA,RR8
CJNEA,#4DH,BJ1;今天星期一吗?
MOVR1,#1EH
MOVR0,#10H
LCALLBJ00
RET
BJ1:
CJNEA,#4FH,BJ2
MOVR1,#18H
MOVR0,#10H
LCALLBJ00
RET
BJ2:
CJNEA,#51H,BJ3
MOVR1,#19H
MOVR0,#10H
LCALLBJ00
RET
BJ3:
CJNEA,#53H,BJ4
MOVR1,#1AH
MOVR0,#10H
LCALLBJ00
RET
BJ4:
CJNEA,#55H,BJ5
MOVR1,#1BH
MOVR0,#10H
LCALLBJ00
RET
BJ5:
CJNEA,#57H,BJ6
MOVR1,#1CH
MOVR0,#10H
LCALLBJ00
RET
BJ6:
CJNEA,#59H,BJ7
MOVR1,#1DH
MOVR0,#10H
LCALLBJ00
RET
BJ7:
LJMPBIJIAO
;=========================
BJ00:
;是的
MOVR5,#08H
BJ001:
MOVXA,@R1
CJNEA,#60H,BJ01;第一组的星期一\开了吗?
BJ003:
MOVA,R1
ADDA,#10H
MOVR1,A
MOVA,R0
ADDA,#10H
MOVR0,A
DJNZR5,BJ001
RET
BJ01:
LCALLBJBRAL;调比较程序
INCR0
INCR0
INCR0
INCR0
LCALLBJBRAR;调比较程序
DECR0
DECR0
DECR0
DECR0
LJMPBJ003
;----------子程序-------------
BJBRAL:
PUSH00H
MOVXA,@R0
CJNEA,RR7,BJRALRET;RAL0=RR7?
不等返回
INCR0
MOVXA,@R0
CJNEA,RR6,BJRALRET;RAL1=RR6?
不等返回
INCR0
MOVXA,@R0
CJNEA,RR5,BJRALRET;RAL2=RR5?
不等返回
INCR0
MOVXA,@R0
CJNEA,RR4,BJRALRET;RAL3=RR4?
不等返回
CLRP2.5;-----完全相等---开闹
SETBP2.6;-----完全相等---开闹
LJMPBJRALRET
BJBRAR:
PUSH00H
MOVXA,@R0
CJNEA,RR7,BJRALRET;RAL0=RR7?
不等返回
INCR0
MOVXA,@R0
CJNEA,RR6,BJRALRET;RAL1=RR6?
不等返回
INCR0
MOVXA,@R0
CJNEA,RR5,BJRALRET;RAL2=RR5?
不等返回
INCR0
MOVXA,@R0
CJNEA,RR4,BJRALRET;RAL3=RR4?
不等返回
SETBP2.5;-----完全相等---关闹
CLRP2.6;-----完全相等---关闹
BJRALRET:
POP00H
RET
;========================================
;=======键盘========================
JP0:
SETBP3.4
SETBP3.5
SETBP3.6
SETBP3.7
JP:
JNBP3.4,JP1;TEST第一次检查
JNBP3.5,JP2;ALTEST第一次检查
JNBP3.6,SNOOZE
RET;返回MAIN
JP1:
;TEST第二次检查
LCALLSHIJIAN;显示时间
LCALLXPX;显示星期几
JNBP3.4,JP1
LJMPTESET
JP2:
;ALTEST第二次检查
LCALLSHIJIAN;显示时间
LCALLXPX;显示星期几
JNBP3.5,JP2
LJMPALSET
SNOOZE:
;ALTEST第二次检查
LCALLSHIJIAN;显示时间
LCALLXPX;显示星期几
JNBP3.5,SNOOZE
SETBP2.5
CLRP2.6
RET
;-------TEST处理地址---------------
TESET:
;TEST处理地址
LCALLSHIJIAN;显示时间
JNBP3.4,TESET
TESET1:
MOVR3,#70H;选定
LCALLSHIJIAN;显示时间
LCALLXPX;显示星期几
JNBP3.5,XQ0;转星期?
JNBP3.6,HR0;转时
JNBP3.7,MIN0;转分
JNBP3.4,TESETO;转返回
LJMPTESET1;重复检查
XQ0:
;星期?
二次检查
LCALLSHIJIAN;显示时间
LCALLXPX;显示星期几
JNBP3.5,XQ0
LJMPXQ
HR0:
;时二次检查
LCALLSHIJIAN;显示时间
LCALLXPX;显示星期几
JNBP3.6,HR
LJMPTESET1
MIN0:
;分二次检查
LCALLSHIJIAN;显示时间
LCALLXPX;显示星期几
JNBP3.7,MIN
LJMPTESET1
TESETO:
;返回二次检查
MOVR3,#00H
LCALLSHIJIAN;显示时间
LCALLXPX;显示星期几
JNBP3.4,TESETO
LJMPRES
XQ:
;星期?
处理程序
INCRR8
INCRR8
LCALLXQCJM
LJMPTESET1
HR:
;时处理程序
INCRR6
INCRR6
LCALLHRCJM
LJMPTESET1
MIN:
;分处理程序
INCRR4
INCRR4
LCALLMINCJM
LJMPTESET1
RES:
MOVR3,#00H;取消选定
RET;返回MAIN
;------ALTEST处理地址---------------
ALSET:
;ALTEST处理地址
LCALLSHIJIAN
LCALLXPX
JNBP3.5,ALSET
ALSET1:
MOVR3,#00H
LCALLSHIJIAN
LCALLXPX
MOVR3,#70H
MOV05H,#70H
LCALLXRXS
LCALLDINGSHISHU
LCALLDINGSHIZU
JNBP3.5,ALSETO
JNBP3.4,ALSETRRLL00
JNBP3.6