|
楼主 |
发表于 2010-2-3 15:42:06
|
显示全部楼层
回复【2楼】Oliver 老易
这里有个用汇编写的,目前为止只让他显示两种颜色
问题是:闪的厉害
-----------------------------------------------------------------------
;适用于STC12C5A60S2,24M晶振
;P0口为红色输入端
;P1口为绿色输入端
;P2口为蓝色输入端
;P3口为时序控制端
DCLK BIT P3.0
HSYNC BIT P3.1
VSYNC BIT P3.2
DE BIT P3.3
SDA BIT P3.4
SCL BIT P3.5
NCS BIT P3.6
NRESET BIT P3.7
KEY1 BIT P2.0
KEY2 BIT P2.1
KEY3 BIT P2.2
KEY4 BIT P2.3
KEY5 BIT P2.4
KEY6 BIT P2.5
KEY7 BIT P2.6
KEY8 BIT P2.7
ORG 0000H
AJMP MAIN
ORG 0100H
MAIN: CLR KEY5
CLR KEY6
CLR KEY7
CLR KEY8
MOV P0,#00H ;125nS
MOV P1,#00H ;125nS
MOV P3,#0FFH ;125nS
MOV R0,#00H ;地址寄存器
MOV R1,#00H ;数据寄存器
MOV R2,#00H
MOV R3,#00H
MOV R4,#00H
MOV R5,#00H ;计数器
MOV R6,#00H ;计数器
MOV R7,#00H ;计数器
CLR NRESET
ACALL DEL100uS
SETB NRESET
ACALL DEL100uS
MOV R0,#04H ;地址,设定分辨率
MOV R1,#23H ;数据,设定分辨率
ACALL SPI
MOV R0,#05H ;地址
MOV R1,#82H ;数据
ACALL SPI
MOV R0,#07H ;地址
MOV R1,#0FH ;数据
ACALL SPI
MOV R0,#34H ;地址 ;T3=10Tcph
MOV R1,#18H ;数据18
ACALL SPI
MOV R0,#35H ;地址 ;T4=25Tcph
MOV R1,#28H ;数据28
ACALL SPI
MOV R0,#36H ;地址 ;Tf=1Tcph
MOV R1,#16H ;数据16
ACALL SPI
MOV R0,#37H ;地址 ;Tb=3Tcph
MOV R1,#01H ;数据01
ACALL SPI
MOV R0,#02H ;地址
MOV R1,#02H ;数据
ACALL SPI
MOV R0,#0AH ;地址
MOV R1,#0BBH ;数据
ACALL SPI
MOV R0,#09H ;地址
MOV R1,#24H ;数据
ACALL SPI
;以下是灰度设置
MOV R0,#10H ;地址
MOV R1,#7AH ;数据
ACALL SPI
MOV R0,#11H ;地址
MOV R1,#7DH ;数据
ACALL SPI
MOV R0,#12H ;地址
MOV R1,#7AH ;数据
ACALL SPI
MOV R0,#13H ;地址
MOV R1,#00H ;数据
ACALL SPI
MOV R0,#14H ;地址
MOV R1,#05H ;数据
ACALL SPI
MOV R0,#15H ;地址
MOV R1,#05H ;数据
ACALL SPI
MOV R0,#16H ;地址
MOV R1,#03H ;数据
ACALL SPI
MOV R0,#17H ;地址
MOV R1,#02H ;数据
ACALL SPI
MOV R0,#18H ;地址
MOV R1,#03H ;数据
ACALL SPI
MOV R0,#19H ;地址
MOV R1,#04H ;数据
ACALL SPI
MOV R0,#1AH ;地址
MOV R1,#0AH ;数据
ACALL SPI
MOV R0,#1BH ;地址
MOV R1,#00H ;数据
ACALL SPI
MOV R0,#1CH ;地址
MOV R1,#07H ;数据
ACALL SPI
MOV R0,#1DH ;地址
MOV R1,#05H ;数据
ACALL SPI
MOV R0,#1EH ;地址
MOV R1,#04H ;数据
ACALL SPI
MOV R0,#1FH ;地址
MOV R1,#04H ;数据
ACALL SPI
MOV R0,#20H ;地址
MOV R1,#04H ;数据
ACALL SPI
MOV R0,#21H ;地址
MOV R1,#05H ;数据
ACALL SPI
MOV R0,#22H ;地址
MOV R1,#0BH ;数据
ACALL SPI
MOV R0,#23H ;地址
MOV R1,#00H ;数据
ACALL SPI
MOV R0,#24H ;地址
MOV R1,#05H ;数据
ACALL SPI
MOV R0,#25H ;地址
MOV R1,#07H ;数据
ACALL SPI
MOV R0,#26H ;地址
MOV R1,#05H ;数据
ACALL SPI
MOV R0,#27H ;地址
MOV R1,#04H ;数据
ACALL SPI
MOV R0,#28H ;地址
MOV R1,#04H ;数据
ACALL SPI
MOV R0,#29H ;地址
MOV R1,#04H ;数据
ACALL SPI
MOV R0,#2AH ;地址
MOV R1,#09H ;数据
ACALL SPI
;以上是灰度设置
MOV R0,#06H ;地址,设置为正常模式
MOV R1,#03H ;数据,设置为正常模式
ACALL SPI
///*
LOOPA: JNB KEY1,K1
JNB KEY2,K2
JNB KEY3,K3
JNB KEY4,K4
AJMP LOOPA
K1:
NOP
NOP
NOP
NOP
NOP
JNB KEY1,$
AJMP MAINAB
AJMP LOOPA
K2:
NOP
NOP
NOP
NOP
NOP
JNB KEY2,$
AJMP MAIN12
AJMP LOOPA
K3:
NOP
NOP
NOP
NOP
NOP
JNB KEY2,$
AJMP MAIN1B
AJMP LOOPA
K4:
NOP
NOP
NOP
NOP
NOP
JNB KEY2,$
AJMP MAINA2
AJMP LOOPA //*/
MAIN12: MOV 55H,#10H
MAIN1: MOV 56H,#1H
JS1: MOV 57H,#1H
JS2: MOV DPTR,#FFF
CLR VSYNC
MAIN2: INC R6 //调用TH
ACALL TH //调用三次 main2
CJNE R6,#03H,MAIN2 //R6等于3
SETB VSYNC
MAIN3: INC R6
ACALL TH // 调用th //调用TH
CJNE R6,#14H,MAIN3 //14=20 上面有个3 ------17 R6等于20
MOV 40H,#11H //17
MAIN4: MOV 41H,#10H //16
MAIN5: ACALL RGB //调用RGB 272次//调用RGB
DJNZ 41H,MAIN5 //16
DJNZ 40H,MAIN4 //17
MAIN6: INC R6 //
ACALL TH // //调用TH
CJNE R6,#1EH,MAIN6 //30 R6等于30
MOV R6,#00H //
DJNZ 57H,JS2
DJNZ 56H,JS1
DJNZ 55H,MAIN1
// RET//ACALL LOOPA
AJMP LOOPA
MAINAB: MOV 55H,#10H
MAINA: MOV 56H,#1H
JSA: MOV 57H,#1H
JSB: MOV DPTR,#GGG
CLR VSYNC
MAINB: INC R6 //调用TH
ACALL TH //调用三次 main2
CJNE R6,#03H,MAINB //R6等于3
SETB VSYNC
MAINC: INC R6
ACALL TH // 调用th //调用TH
CJNE R6,#14H,MAINC //14=20 上面有个3 ------17 R6等于20
MOV 40H,#11H //17
MAIND: MOV 41H,#10H //16
MAINE: ACALL RGB //调用RGB 272次//调用RGB
DJNZ 41H,MAINE //16
DJNZ 40H,MAIND //17
MAINF: INC R6 //
ACALL TH // //调用TH
CJNE R6,#1EH,MAINF //30 R6等于30
MOV R6,#00H //
DJNZ 57H,JSB
DJNZ 56H,JSA
DJNZ 55H,MAINA
// RET ACALL LOOPA
AJMP LOOPA
//----------------------------------------------------------------------------------------
MAIN1B: MOV 55H,#10H
MAIN11: MOV 56H,#1H
JS11: MOV 57H,#1H
JS21: MOV DPTR,#DDD
CLR VSYNC
MAIN21: INC R6 //调用TH
ACALL TH //调用三次 main2
CJNE R6,#03H,MAIN21 //R6等于3
SETB VSYNC
MAIN31: INC R6
ACALL TH // 调用th //调用TH
CJNE R6,#14H,MAIN31 //14=20 上面有个3 ------17 R6等于20
MOV 40H,#11H //17
MAIN41: MOV 41H,#10H //16
MAIN51: ACALL RGB //调用RGB 272次//调用RGB
DJNZ 41H,MAIN51 //16
DJNZ 40H,MAIN41 //17
MAIN61: INC R6 //
ACALL TH // //调用TH
CJNE R6,#1EH,MAIN61 //30 R6等于30
MOV R6,#00H //
DJNZ 57H,JS21
DJNZ 56H,JS11
DJNZ 55H,MAIN1B
// RET//ACALL LOOPA
AJMP LOOPA
//------------------------------------------------------------------------------------------------
MAINA2: MOV 55H,#10H
MAIN121: MOV 56H,#1H
JS12: MOV 57H,#1H
JS22: MOV DPTR,#HHH
CLR VSYNC
MAIN22: INC R6 //调用TH
ACALL TH //调用三次 main2
CJNE R6,#03H,MAIN22 //R6等于3
SETB VSYNC
MAIN32: INC R6
ACALL TH // 调用th //调用TH
CJNE R6,#14H,MAIN32 //14=20 上面有个3 ------17 R6等于20
MOV 40H,#11H //17
MAIN42: MOV 41H,#10H //16
MAIN52: ACALL RGB //调用RGB 272次//调用RGB
DJNZ 41H,MAIN52 //16
DJNZ 40H,MAIN42 //17
MAIN62: INC R6 //
ACALL TH // //调用TH
CJNE R6,#1EH,MAIN62 //30 R6等于30
MOV R6,#00H //
DJNZ 57H,JS22
DJNZ 56H,JS12
DJNZ 55H,MAIN121
// RET//ACALL LOOPA
AJMP LOOPA
///-----------------------------------------------------------------------------------------------
SPI: MOV A,R0 ;传输地址
CLR C ;写操作
RLC A
CLR NCS
MOV R7,#08H
SPI1: RLC A
MOV SDA,C
CLR SCL
NOP
SETB SCL ;SCL上升沿写入数据
DJNZ R7,SPI1
MOV R7,#08H
MOV A,R1 ;传输数据
SPI2: RLC A
MOV SDA,C
CLR SCL
NOP
SETB SCL
DJNZ R7,SPI2
SETB NCS
ACALL DEL376nS ;250nS
RET ;167nS
//DB 000H, 000H, 000H, 000H, 000H, 000H, 000H, 000H, 000H, 000H, 000H, 000H, 000H, 000H, 000H, 000H
//DB 000H, 000H, 000H, 000H, 000H, 000H, 000H, 000H, 000H, 000H, 000H, 000H, 000H, 000H, 000H, 000H
//DB 000H, 000H, 000H, 000H, 000H, 000H, 000H, 000H, 000H, 000H, 000H, 000H, 000H, 000H, 000H, 000H
//DB 000H, 000H, 000H, 000H, 000H, 000H, 000H, 000H, 000H, 000H, 000H, 000H //---------60
RGB: ;一个行扫描,输入480个RGB图象数据
MOV R7,#1EH ;前30个Tcph
CLR HSYNC
RGB_30: CLR DCLK
SETB DCLK
DJNZ R7,RGB_30 ;30个Tcph //有循环
MOV R7,#48
SETB HSYNC
RGB_72: CLR DCLK
SETB DCLK ;72个Tcph //有循环
DJNZ R7,RGB_72
MOV R7,#0F0H
SETB DE
RGB_480:MOV 42H,#3CH //60
LOOP2: MOV A,#00H
MOVC A,@A+DPTR
MOV 43H,#08H
LOOP1: CLR DCLK
RLC A
JC H_HIGH // 为1时跳转
MOV P0,#0FFH ;红色 //白色
MOV P1,#0FFH ;绿色
// MOV P2,#0FFH ;蓝色
SJMP L_LOW
H_HIGH: MOV P0,#00H ;红色 //黑色
MOV P1,#00H ;绿色
//MOV P2,#00H ;蓝色
L_LOW: SETB DCLK ;480个Tcph
DJNZ 43H,LOOP1 //08
INC DPTR
DJNZ 42H,LOOP2 //有循环 60ci
MOV R7,#5AH
CLR DE
RGB_90: CLR DCLK
SETB DCLK ;90个Tcph
DJNZ R7,RGB_90
RET
TH: CLR DE ;一个HSYNC周期,期间DE为低电平
MOV R7,#1EH ;前30个Tcph
CLR HSYNC
TH_30: CLR DCLK
SETB DCLK
DJNZ R7,TH_30 ;30个Tcph //有循环
MOV R7,#48
SETB HSYNC
TH_72: CLR DCLK
SETB DCLK ;72个Tcph //有循环
DJNZ R7,TH_72
MOV R7,#0EEH
TH_238: CLR DCLK
SETB DCLK ;480个Tcph
DJNZ R7,TH_238 //有循环
MOV R7,#0F2H
TH_242: CLR DCLK
SETB DCLK ;480个Tcph
DJNZ R7,TH_242 //有循环
MOV R7,#5AH
TH_90: CLR DCLK
SETB DCLK ;90个Tcph
DJNZ R7,TH_90 //有循环
RET
DEL376nS:MOV 30H,#01H ;125nS
NOP ;42nS
NOP ;42nS
RET ;167nS
DEL100uS:MOV 31H,#64H
DEL100_1:MOV 30H,#04H ;125nS
NOP
DJNZ 30H,$ ;208nS
DJNZ 31H,DEL100_1 ;208nS
RET
GGG: |
|