UPD78F9234(NEC) BU9793FS(ROHM 88段LCDdrive)例程

2012年05月03日 14:59    发布者:zbzb12345
本例程为UPD78F9234(NEC) BU9793FS(ROHM 88段LCDdrive)例程。来自NEC单片机

采用I2C方式传送数据,若使用其他厂家的I2C方式通讯的LCDdrive可能需要稍加改动,ISP 通讯方式不可使用。
*****************************************************
#define uchar unsigned char
#define slave_addr 0x
7c//slave地址
#define ICSET 0xea //ICSET
#define BLKCTL 0xf0
//#define DISCTL 0xa0 //正常
#define DISCTL 0xbc //低功耗
#define ADSET 0x00
#define MODESET 0xc8
#define APCTL8 0xfe
#define APCTL 0xfc
#define EVRSET0 0xe0
#define EVRSET1 0xe5
#define EVRSET2 0xf8
#define SDA P6.1
#define MSDA PM6.1
#define SCL P6.2
#define MSCL PM6.2
unsigned char buff;
void start_i2c();
void stop_i2c();
void send_byte(uchar tempb);
void data_display(void);
void ini_display(void);
void on_display(void);
void main(void)
{
ini_display();
on_display();
while(1)
{data_display();
}
}
/*****************************************************
起动总线函数
函数原型: void start_i2c();
Function: start on the I2Cbus
*****************************************************/
void start_i2c()
{
SDA=1;
nop();
SCL=1;
nop();nop();nop();nop();
SDA=0;
nop();nop();nop();nop();
SCL=0;
}
/*****************************************************
停止总线函数
函数原型: void stop_i2c();
Function: stop the I2Cbus
*****************************************************/
void stop_i2c()
{
SDA=0;
nop();
SCL=1;
nop();nop();
SDA=1;
nop();
}
/*****************************************************
字节数据传送函数
函数原型: void send_byte(uchar tempb);
Function: 将数据C发送出去,可以是地址,也可以是数据,发
完后等待回应,并对此状态位进行操作(不应答或非应答都使
ack=0 ),发送数据正常,ack=1;ack=0 表示被控器无应答或损坏。
*****************************************************/
void send_byte(uchar tempb)

{


uchar bit_count;


for (bit_count=0;bit_count<8;bit_count++)


{


if ((tempb<

else {SDA=0;}


nop();


SCL=1;


nop();nop();nop();nop();nop();


SCL=0;


}


MSDA=1;


nop();nop();


// SDA=1;


nop();nop();


SCL=1;


if (SDA==1) ack=0;


else ack=1;


MSDA=0;


SCL=0;


nop();


}


void data_display(void)


{ register uchar i;


flag_dis=0;


stop_i2c();


start_i2c();


send_byte(slave_addr);


// send_byte(DISCTL);


// send_byte(BLKCTL);


// send_byte(APCTL);


// send_byte(MODESET);


// if(LVIF)


// send_byte(EVRSET0);//3V


// else


// send_byte(EVRSET1); //5V


// send_byte(EVRSET2);


send_byte(ADSET);


clrwdt();


for(i=0;i<25;i++)


{send_byte(buff);}


stop_i2c();


}


/************初始化LCD-DRIVER**************/


void ini_display(void)


{register uchar i;


MSCL=0;


MSDA=0;


stop_i2c();


start_i2c();


send_byte(slave_addr);


send_byte(ICSET);


send_byte(DISCTL);


send_byte(ADSET);


for(i=0;i<25;i++)


send_byte(0x0);


stop_i2c();


}


void on_display(void)


{start_i2c();


send_byte(slave_addr);


send_byte(DISCTL);


// send_byte(BLKCTL);


send_byte(APCTL);


send_byte(MODESET);


本文来自NEC单片机

网友评论

zbzb12345 2012年05月03日
自己顶下