一个初始化HT1621的小程序!初学ARM不知道怎么回事液晶总是不亮,请各位帮帮我
* File:SPIDISP.C * 功能:使用硬件SPI接口输出显示。(硬件:HT1621输出控制液晶显示) * 说明:将跳线器JP9短接。 ****************************************************************************/ #include "config.h"
#define CS 0x00002000 /* P0.13 */ #define WR 0x00001000 /* P0.12 */
#define CLK 0x00000800 /* P0.11 */ #define SPI_IOCON 0x00003800 #define BIAS 0x52 #define SYSEN 0x02 #define LCDON 0x06
#define LCDOFF 0x04 #define uchar unsigned char #define uint unsigned int /**************************************************************************** * 名称:DelayNS() * 功能:长软件延时 * 入口参数:dly 延时参数,值越大,延时越久 * 出口参数:无 ****************************************************************************/ void DelayNS(uint32 dly) { uint32 i;
for(; dly>0; dly--) for(i=0; i<50000; i++); }
/****************************************************************************/ void SendBit_1621(uchar id,uchar cnt) //data的高cnt位写入HT1621,高位在前 { uchar i; //har y; for(i =0; i <cnt; i ++) { if((id&0x80)==0) IOCLR=CLK; else IOSET=CLK; IOCLR=WR; DelayNS(1); IOSET=WR; id<<=1; } }
/****************************************************************************/ void SendDataBit_1621(uchar id,uchar cnt) //data的低cnt位写入HT1621,低位在前 { uchar i; for(i =0; i <cnt; i ++) { if((id&0x01)==0) IOCLR=CLK; else IOSET=CLK; IOCLR=WR; DelayNS(1); IOSET=WR; id>>=1; } } /****************************************************************************/ void SendCmd(uchar command) { IOCLR=CS; SendBit_1621(0x80,4); //写入标志码"100"和9位command命令 SendBit_1621(command,8); IOSET=CS; //直接将command的最高位写"0" } /****************************************************************************/ void Write_1621(uchar addr,uchar id) { IOCLR=CS; SendBit_1621(0xa0,3); //写入标志码"101" SendBit_1621(addr,6); //写入addr的高6位 SendDataBit_1621(id,4); //写入data的低4位 IOSET=CS; } /****************************************************************************/
/**************************************************************************** * 名称:main() ****************************************************************************/ int main(void) { PINSEL0 = 0x00000000; // 设置spi PINSEL1 = 0x00000000; IODIR = SPI_IOCON; //将端口设为输出 SendCmd(BIAS); //设置偏压和占空比 SendCmd(SYSEN); //打开系统振荡器 SendCmd(LCDON); //打开LCD偏压发生器 Write_1621(0x08,0xaa); // 发送显示数据 SendCmd(LCDOFF);
|