|
我这里有个AVR汇编的头文件,贴出来看看能不能帮帮你.
.EQU BIAS =$52 ;1/3 偏压4 背极
.EQU RC256 =$30 ;系统时钟选用片内RC 振荡器
.EQU SYSEN =$02 ;打开系统时钟
.EQU LCDON =$06 ;打开偏压发生器
.EQU SYSDIS =$00 ;关闭系统时钟和偏压发生器
.EQU X32K =$28 ;系统时钟选择为片外晶振
.EQU ToneOn =$12 ;打开音频输出
.EQU ToneOff =$10 ;关闭音频输出
.EQU Tone4k =$80 ;音频输出频率为4K
.EQU Tone2k =$C0 ;音频输出频率为2K
.EQU TIMEREN =$0C ;时基输出使能
.EQU TIMERDIS =$08 ;时基输出禁能
.EQU CLRtime =$18 ;清零进基发生器
.EQU WDTEN =$0E ;使能WDT 溢出标志输出
.EQU WDTDIS =$0A ;禁止WDT 溢出标志输出
.EQU CLRWDT =$1C ;清零WDT
.EQU IRQEN =$10 ;使能IRQ 输出
.EQU IRQDIS =$00 ;禁止IRQ 输出
.EQU FR1 =$40 ;设置时基输出1HZ WDT 溢出时间4s
.equ lcdport =portb
.equ lcdsda =0
.equ lcdsck =1
.equ lcdcs =2
.dseg
l1disbuf: .byte 16 ;第一行显存
l2disbuf: .byte 16 ;第二行显存
l3disbuf: .byte 16 ;第三行显存
l4disbuf: .byte 16 ;第四行显存
l5disbuf: .byte 16 ;第五行显存
.cseg
ht1621init: ;HT1621初始化
ldi r16, lcdon
rcall ht1621wrcom
ldi r16, sysen
rcall ht1621wrcom
ldi r16, bias
rcall ht1621wrcom
ret
lcdwr1000: ;写命令数据头为101
sbi lcdport, lcdsda
cbi lcdport, lcdsck
sbi lcdport, lcdsck
cbi lcdport, lcdsda
cbi lcdport, lcdsck
sbi lcdport, lcdsck
cbi lcdport, lcdsck
sbi lcdport, lcdsck
cbi lcdport, lcdsck
sbi lcdport, lcdsck
ret
lcdwr101: ;写数据数据头为101
sbi lcdport, lcdsda
cbi lcdport, lcdsck
sbi lcdport, lcdsck
cbi lcdport, lcdsda
cbi lcdport, lcdsck
sbi lcdport, lcdsck
sbi lcdport, lcdsda
cbi lcdport, lcdsck
sbi lcdport, lcdsck
ret
lcdwr000000: ;向HT1621写入RAM地址为6位数,从0开始
cbi lcdport, lcdsda
push r17
ldi r17, 6
lcdwr60:
cbi lcdport, lcdsck
sbi lcdport, lcdsck
dec r17
brne lcdwr60
pop r17
ret
ht1621wrcom: ;向HT1621写入一个命令字节
cbi lcdport, lcdcs
rcall lcdwr1000
rcall ht1621wrbyte
sbi lcdport, lcdcs
sbi lcdport, lcdsda
ret
ht1621dis: ;向HT1621写入16个字节,即显示16个数字
cbi lcdport, lcdcs
rcall lcdwr101
rcall lcdwr000000
push r18
ldi r18, 15
ldi xh, high(l1disbuf)
ldi xl, low(l1disbuf)
ht1621wrda010:
ldi zh, high(numtab*2)
ldi zl, low(numtab*2)
ld r16, x+
clr r17
add zl, r16
adc zh, r17
lpm r16, z
rcall ht1621wrbyte
dec r18
brne ht1621wrda010
sbi lcdport, lcdcs
pop r18
ret
disbufinit: ;显示缓存初始化
ldi xh, high(l1disbuf)
ldi xl, low(l1disbuf)
push r17
ldi r17, 16
ldi r16, $00
disbufinit010:
st x+, r16
inc r16
dec r17
brne disbufinit010
pop r17
ret
disbufclr: ;清零显示缓存
ldi xh, high(l1disbuf)
ldi xl, low(l1disbuf)
push r17
ldi r17, 4
ldi r16, 16 ;16=空格即不显示
disbufclr010:
st x+, r16
st x+, r16
st x+, r16
st x+, r16
dec r17
brne disbufclr010
pop r17
ret
ht1621wrbyte: ;向HT1621写入一个字节
push r17
ldi r17, 8
ht1621wrbyte000:
rol r16
brcc ht1621wrbyte010
sbi lcdport, lcdsda
rjmp ht1621wrbyte020
ht1621wrbyte010:
cbi lcdport, lcdsda
ht1621wrbyte020:
cbi lcdport, lcdsck
sbi lcdport, lcdsck
dec r17
brne ht1621wrbyte000
pop r17
ret
/*
$01对应卡尔,年,月,日,2个冒号,星期
$02对应NUM1-15的C显示
$04对应NUM1-15的G显示
$08对应NUM1-15的B显示
$10对应NUM1-15的D显示
$20对应NUM1-15的E显示
$40对应NUM1-15的F显示
$80对应NUM1-15的A显示
第一行NUM1-15与第2-5行NUM1-8的显示码表格
第2-5行NUM9-15显示码要高低半字节交换*/
numtab:
.db $fb,$0b,$bd,$9f,$4f,$d7,$f7,$8b,$ff,$df,$ef,$77,$35,$3f,$f5,$e5,$00 |
|