#include <pic.h>
#include"HT1621.h"
#define uchar unsigned char
void ioInit()
{
//---------------端口方向定义
TRISA=0X1f;
TRISB=0X00;
TRISC=0xC0;
//---------------状态
PORTA=0X00;
PORTB=0x00;
PORTC=0x00;
//---------------用户端口初始化
}
void main()
{
unsigned char ucKey = 0;
ioInit();
lcdInit();
RB3=1; /* 启动定时器ID检测使用 */
while(1) {
}
}
#ifndef _HT1621_H_
#define _HT1621_H_
#include<pic.h>
#define uchar unsigned char
#define SDA_LCD1621 RC1 //数据线
#define SCL_LCD1621 RC0 //时钟线
#define CS1_LCD1621 RC5
#define CS2_LCD1621 RC4
#define T_SDA_LCD1621 TRISC1
#define T_SCL_LCD1621 TRISC0
#define T_CS1_LCD1621 TRISC5
#define T_CS2_LCD1621 TRISC4
#define BIAS 0x52
#define SYSEN 0x02
#define LCDON 0x06
#define LCDOFF 0x04
extern void lcdInit();
extern void Write_1621(uchar addr,uchar data);
extern void WriteAll_1621(uchar addr,uchar *p,uchar cnt);
#endif
#include"HT1621.h"
void __ht1621Sendbit(unsigned char a,unsigned char i)
{
if (i == 0) {
return;
}
while(i--)
{
if(a&0x01)
{
SDA_LCD1621=1; //?í "1"
}
else
{
SDA_LCD1621=0; //?í"0"
}
SCL_LCD1621=0; //ê±??
_nop();
SCL_LCD1621=1;
_nop();
SCL_LCD1621=0; //ê±??
_nop();
a=a>>1;
}
}
void SendBit_1621(uchar data,uchar cnt) //data 的高cnt 位元寫入HT1621,高位在前
{
uchar i;
for(i =0; i <cnt; i ++)
{
if((data&0x80)==0) SDA_LCD1621=0;
else SDA_LCD1621=1;
SCL_LCD1621=0;
_nop();
SCL_LCD1621=1;
data<<=1;
}
}
void SendDataBit_1621(uchar data,uchar cnt) //data 的低cnt 位寫入HT1621,低位在前
{
uchar i;
for(i =0; i <cnt; i ++)
{
if((data&0x01)==0) SDA_LCD1621=0;
else SDA_LCD1621=1;
SCL_LCD1621=0;
_nop();
SCL_LCD1621=1;
data>>=1;
}
}
void lcdClear(unsigned char ucColor)
{
unsigned char i=3;
CS1_LCD1621=0;
CS2_LCD1621=0;
//__ht1621Sendbit(0x5,9);
for(i=0;i<16;++i) {
// __ht1621Sendbit(ucColor,8);
}
CS1_LCD1621=1; //ê1?ü
CS2_LCD1621=1;
}
void SendCmd(uchar command)
{
CS1_LCD1621=0; //ê1?ü
CS2_LCD1621=0;
SendBit_1621(0x80,4); //寫入旗標碼”100”和9 位command 命令,由於
SendBit_1621(command,8); //沒有使有到更改時鐘輸出等命令,為了編程方便
CS1_LCD1621=1; //ê1?ü
CS2_LCD1621=1; //直接將command 的最高位寫”0”
}
void Write_1621(uchar addr,uchar data)
{
CS1_LCD1621=0; //ê1?ü
CS2_LCD1621=0;
SendBit_1621(0xa0,3); //寫入旗標碼”101”
SendBit_1621(addr,6); //寫入addr 的高6 位元
SendDataBit_1621(data,4); //寫入data 的低4 位元
CS1_LCD1621=1; //ê1?ü
CS2_LCD1621=1; //直接將command 的最高位寫”0”
}
void WriteAll_1621(uchar addr,uchar *p,uchar cnt)
{
uchar i;
CS1_LCD1621=0;
CS2_LCD1621=0;
SendBit_1621(0xa0,3); //寫入旗標碼”101”
SendBit_1621(addr,6); //寫入addr 的高6 位元
for(i =0; i <cnt; i ++,p++) //連續寫入資料
{
SendDataBit_1621(*p,8);
}
CS1_LCD1621=1;
CS2_LCD1621=1; //直接將command 的最高位寫”0”
}
void lcdInit()
{
unsigned char i=3;
TRISC &= ~(1 << 0);
/* CLK */
TRISC &= ~(1 << 1); /* DATA */
TRISC &= ~(1 << 4);
/* CS2 */
TRISC &= ~(1 << 5);
CS1_LCD1621=0; //ê1?ü
CS2_LCD1621=0;
__ht1621Sendbit(0x01,8);
__ht1621Sendbit(0x4,4);
CS1_LCD1621=1; //ê1?ü
CS2_LCD1621=1;
CS1_LCD1621=0; //ê1?ü
CS2_LCD1621=0;
__ht1621Sendbit(0x1,8);
__ht1621Sendbit(0x6,4);
CS1_LCD1621=1; //ê1?ü
CS2_LCD1621=1;
CS1_LCD1621=0; //ê1?ü
CS2_LCD1621=0;
__ht1621Sendbit(0xa1,8);
__ht1621Sendbit(0x4,4);
CS1_LCD1621=1; //ê1?ü
CS2_LCD1621=1;
CS1_LCD1621=0;
CS2_LCD1621=0;
__ht1621Sendbit(0x5,9);
for(i=0;i<16;++i) {
__ht1621Sendbit(0x0,8);
}
CS1_LCD1621=1; //ê1?ü
CS2_LCD1621=1;
}
各位帮忙看一下,怎么就是点不亮HT1621呢? |