TH1621 Tinygo断电后不能驱动,原因排除
经过今天的排查,终于发现是 时序图中延时函数没有用对
一定要时序图准确,才能出图!!!
具体代码如下:
package main
import (
"machine"
"time"
)
const(
//引脚定义
//VDD VSS DATA WR RD CS VDD-LED VSS-LED
//3.3 gnd D1(5) D4(2) NC D8(15) D7(13)
csr = machine.D5 //15
dat = machine.D3 //5
wrt = machine.D2 //4
bk= machine.D7 //13
SYSEN=0X02 //0b1000 0000 0010 打开系统振荡器
SYSDIS=0X00 //0b1000 0000 0000 关振系统荡器和LCD偏压发生器
BIAS=0x52 //0b1000 0101 0010 1/3duty 4com
//LCDOFF:=uint8(0X04) //0b1000 0000 0100 关LCD偏压
LCDON=0X06 //0b1000 0000 0110 打开LCD偏压
//XTAL:=uint8(0x28) //0b1000 0010 1000 外部接时钟
RC256=0X30 //0b1000 0011 0000 内部时钟
//TONEON:=uint8(0X12) //0b1000 0001 0010 打开声音输出
//TONEOFF:=uint8(0X10) //0b1000 0001 0000 关闭声音输出
WDTDIS=0X0A
)
var Ht1621Tab=[]uint8{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00}
func Ht1621Wr_Data(Data uint8,cnt uint8){
var i uint8
for i=0;i<cnt;i++{
wrt.Low()
delay(1)
if Data&0x80>1 {dat.High()}else{dat.Low()}
wrt.High()
delay(1)
Data<<=1
}
}
//写命令
func Ht1621WrCmd(Cmd uint8){
csr.Low()
delay(1)
Ht1621Wr_Data(0x80,4)
Ht1621Wr_Data(Cmd,8)
csr.High()
delay(1)
}
//写数据
func Ht1621WrOneData(Addr uint8,Data uint8){
csr.Low()
Ht1621Wr_Data(0xa0,3)
Ht1621Wr_Data(Addr<<2,6)
Ht1621Wr_Data(Data<<4,4)
csr.High()
delay(1)
}
func Ht1621WrAllData(Addr uint8,p []uint8,cnt uint8){
var i uint8
csr.Low()
Ht1621Wr_Data(0xa0,3)
Ht1621Wr_Data(Addr<<2,6)
for i=0;i<cnt;i++{
Ht1621Wr_Data(p[i],8)
}
csr.High()
delay(1)
}
func Ht1621_Init(){
csr.Configure(machine.PinConfig{Mode: machine.PinOutput})
wrt.Configure(machine.PinConfig{Mode: machine.PinOutput})
dat.Configure(machine.PinConfig{Mode: machine.PinOutput})
bk.Configure(machine.PinConfig{Mode: machine.PinOutput})
delay(200)
csr.High()
wrt.High()
dat.High()
bk.High()
Ht1621WrCmd(BIAS)
Ht1621WrCmd(RC256)
Ht1621WrCmd(SYSDIS)
Ht1621WrCmd(WDTDIS)
Ht1621WrCmd(SYSEN)
Ht1621WrCmd(LCDON)
}
func delay(t time.Duration){
time.Sleep(time.Millisecond * t)
}
/**********************************/
func main(){
var i,j,t uint8
Ht1621_Init();
delay(10)
for{
Ht1621WrAllData(0,Ht1621Tab,16)
for i=0;i<32;i++{
t=0x01
for j=0;j<4;j++{
Ht1621WrOneData(i,t)
delay(200)
t<<=1
t++
}
}
}
}
本作品采用 知识共享署名-相同方式共享 4.0 国际许可协议 进行许可。