| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126 |
- require"pins"
- local HT1621_CMD_ID =0x80 --前3位 100有效
- local HT1621_DATA_ID =0xA0 --前3位 101有效
- local BIAS=0x29 --0x50-- 1/3 bias 4 com
- local SYSEN=0x01 --0X02--Turn on system oscillator振荡
- local LCDON=0x03 --0x06--Turn on LCD bias generator偏压发生器
- local LCDOFF=0x02 --0x04--Turn off LCD bias generator
- local RC256=0X18
-
- local LCD_CS = pins.setup(pio.P0_3,0)
- local LCD_WR = pins.setup(pio.P0_1,0)
- local LCD_DAT = pins.setup(pio.P0_0,0)
- local LCD_VCC = pins.setup(pio.P0_18,0)
- local DIGITS={["1"] =0XA0,["2"] = 0X6D,["3"] = 0XE9, ["4"] = 0XE2, ["5"] = 0XCB , ["6"] = 0XCF, ["7"] = 0XA1, ["8"] =0XEF, ["9"] =0xEB, ["0"] =0XAF }
- local DISPMEM={0X00,0X00,0X00,0X00,0X00,0X00,0X00}
- local function __NOP()
- end
- function sendbit_high(data,cnt)--传地址,高六位
- local i
- for i=1, cnt do
- if bit.band(data,0x80)==0 then
- LCD_DAT(0)
- else
- LCD_DAT(1)
- end
- LCD_WR(0)
- LCD_WR(1)
- data = bit.lshift(data,1)
- end
- end
- function sendbit_low(data, cnt)--传送数据,低四位
- local i
- for i=1,cnt do
- if bit.band(data,0x01)==0 then
- LCD_DAT(0)
- else
- LCD_DAT(1)
- end
- LCD_WR(0)
- LCD_WR(1)
- data=bit.rshift(data,1)
- end
- end
- function sendcmd( command)--写命令
- LCD_CS(0)
- sendbit_high(0x80,3)
- sendbit_high(command,8)
- sendbit_high(0x0,1)
- LCD_CS(1)
- end
- function write_1621( addr, data)--写地址和数据
- LCD_CS(0)
- sendbit_high(0xa0,3)
- sendbit_high(bit.lshift(addr, 2),6)
- sendbit_low(data,4)
- LCD_CS(1)
- end
- local coLcdTask = sys.taskInit(function()
- local i=0
- _pac=0x00
-
- LCD_VCC(1)--打开电源
- pmd.ldoset(15,pmd.LDO_VLCD)
- pmd.ldoset(15,pmd.LDO_VBACKLIGHT_R)
- sendcmd(RC256)
- sendcmd(BIAS)
- sendcmd(SYSEN)
- sendcmd(LCDON)
- local digno=0
- while true do
- --test code by JWL
- local tmpd=0
- DISPMEM[1] = DIGITS[ tostring(digno)]
- DISPMEM[2] = DIGITS[ tostring(digno)]
- DISPMEM[3] = DIGITS[ tostring(digno)]
- DISPMEM[4] = DIGITS[ tostring(digno)]
- DISPMEM[5] = DIGITS[ tostring(digno)]
- DISPMEM[6] = DIGITS[ tostring(digno)]
- DISPMEM[7] = 0x08 --只显示“元”
- log.info("tostring(digno)", tostring(digno), string.format("%X" ,DISPMEM[1]))
- digno = digno +1
- if digno>=10 then digno =0 end
- for i=1,#DISPMEM do
- tmpd = bit.band( DISPMEM[i],0x0F)
- write_1621( (i-1) *2 +0,tmpd)
- tmpd = bit.band( DISPMEM[i],0xF0)
- tmpd = bit.rshift(tmpd,4)
- if digno %2 ==0 and i~=7 then
- tmpd = bit.bor(tmpd,0x01)
- end
- write_1621( (i-1) *2 +1,tmpd)
- end
- sys.wait(800)
- end
- end)
|