CS BIT P1.0 ;片选信号
WWR BIT P1.1 ;时钟(写信号)
SDA BIT p1.2 ;数据口
DAT EQU 50H ;写入数据暂存单元
ADDR EQU 51H ;写入目标地址暂存单元
;--------------------------------------
ORG 0000H
AJMP MAIN
ORG 0030H ;保留地址给中断
MAIN:
NOP
NOP
MOV R6,#100
MAI1: MOV R7,#200
MAI2: NOP
NOP
DJNZ R7,MAI2 //减1后不为0则转移
DJNZ R6,MAI1
CLR P3.2
MOV SP,#060H
LCALL DEL_20MS
LCALL LCD_INI ;初始化
LOOP:
MOV R5,#9 ;8个循环,对应8个动作字RAM
MOV DPTR,#TABLE1
LOOP1:
CLR CS ;CS置低,对1621操作有效
LCALL DATHEAD ;数据输入模式
MOV ADDR,#0H ;准备写入的目标地址,此处为0,是准备从0 Address开始
MOV A,ADDR ;将目标地址送入A
LCALL WRIT_AD ;调用写地址子程序
MOV A,#0
MOVC A,@A+DPTR
MOV DAT,A
MOV R6,#32 ;32个循环,分别对32字节RAM的8数据位写数据
LOOP2:
MOV A,DAT
LCALL WRIT_B ;调用写数据子程序
DJNZ R6,LOOP2 ;检查所有RAM是否写完
SETB CS ;片选置高,中止操作1621
LCALL DEL_500MS ;延时等待QC检测
INC DPTR
DJNZ R5,LOOP1 ;进入下一循环,写其他显示数据
RUN:
LCALL T_4KHZ
LCALL TONE_ON
LCALL DEL_300MS
LCALL T_2KHZ
LCALL TONE_ON
LCALL DEL_300MS
LCALL TONE_OFF
LJMP LOOP
;--------------------------------------
T_4KHZ:
CLR CS
LCALL INSHEAD
MOV A,#01000000B
LCALL WRIT8
SETB CS
RET
T_2KHZ:
CLR CS
LCALL INSHEAD
MOV A,#01100000B
LCALL WRIT8
SETB CS
RET
TONE_ON:
CLR CS
LCALL INSHEAD
MOV A,#00001001B
LCALL WRIT8
SETB CS
RET
TONE_OFF:
CLR CS
LCALL INSHEAD
MOV A,#00001000B
LCALL WRIT8
SETB CS
RET
WRIT_B:
PUSH ACC
MOV R1,#8
WIB:
RRC A
MOV SDA,C
ACALL WRI ; 写入SDA上面数据至1621
DJNZ R1,WIB
POP ACC
RET
;--------------------------------------
; 写入指令子程序
WRIT8:
MOV R1,#9 ; 指令格式为9位,即使后面是X
WI:
RLC A
MOV SDA,C
ACALL WRI ; 写入SDA上面数据至1621
DJNZ R1,WI
RET
;--------------------------------------
; 写入地址子程序,地址为6位,6个循环
WRIT_AD:
RLC A ; 去掉A的高两位
RLC A ; 地址以A的后6位有效
MOV R1,#6 ; 6个循环
WII:
RLC A
MOV SDA,C
ACALL WRI ; 写入SDA上面数据至1621
DJNZ R1,WII
RET
;--------------------------------------
; 命令写入模式
INSHEAD: ; Command mode (Command code 100) ,送入100
SETB SDA ; 1
ACALL WRI ; 送入data信号,只送1 bit
CLR SDA ; 0
ACALL WRI
CLR SDA ; 0
ACALL WRI
RET
;--------------------------------------
; 数据写入模式
DATHEAD: ; Write Mode (Command code 101 )
SETB SDA ; 1
ACALL WRI
CLR SDA ; 0
ACALL WRI
SETB SDA ; 1
ACALL WRI
RET
DEL_20MS:
MOV R0,#20
D2:
MOV R1,#200
D1:
NOP
NOP
NOP
DJNZ R1,D1
DJNZ R0,D2
RET
DEL_200MS:
MOV R2,#10
DEL_1:
LCALL DEL_20MS
DJNZ R2,DEL_1
RET
TABLE1:
DB 001H,002H,004H,008H,010H,020H,040H
这是自己翻译的主程序,430的,可是不能显示,为什么,有什么硬伤吗?
void main()
{
WDTCTL = WDTPW + WDTHOLD;
P3DIR |=BIT3;//cs
P5DIR |=BIT4;//sda
P5DIR |=BIT6;//wwr
P5OUT &= ~WWR;
DEL_20MS();
LCD_INI();
while(1)
{
uchar address,i;
uchar *p=TABLE;
P3OUT &= ~CS;
for (i=0;i<9;i++)
{
for(address=0;address<32;address++) Wdata(address,*p);
P3OUT |=CS;
DEL_500MS();
p++;
}
T_4KZ();
TONE_ON();
DEL_300MS();
T_2KZ();
TONE_ON();
DEL_300MS();
TONE_OFF();
}
}
汇编通过了,能显示啊
一直用的c语言,没用过汇编,帮忙翻译一下吧
通过什么软件读取单片机里的程序
如果你想得到的是单片机里别人烧写进去的程序,这是几乎不可能的,你只能根据他的功能自己编写 如果你想吧别人写好的hex文件翻译成C语言或者汇编程序,这也几乎是不可能实现的。就和win平台的exe程序一样,一旦封装好了,解开是很困难的,绅士解开比你自己写花费的精力还要多 ...