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

发布时间:2012-5-3 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[24];
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单片机
本文地址:https://www.eechina.com/thread-91075-1-1.html     【打印本页】

本站部分文章为转载或网友发布,目的在于传递和分享信息,并不代表本网赞同其观点和对其真实性负责;文章版权归原作者及原出处所有,如涉及作品内容、版权和其它问题,我们将根据著作权人的要求,第一时间更正或删除。
zbzb12345 发表于 2012-5-3 15:23:01
自己顶下
您需要登录后才可以发表评论 登录 | 立即注册

厂商推荐

相关视频

关于我们  -  服务条款  -  使用指南  -  站点地图  -  友情链接  -  联系我们
电子工程网 © 版权所有   京ICP备16069177号 | 京公网安备11010502021702
快速回复 返回顶部 返回列表