智能车制作

 找回密码
 注册

扫一扫,访问微社区

查看: 12334|回复: 0
打印 上一主题 下一主题

例程UPD78F9234+BU9793(ROHM 88段LCDdrive)

[复制链接]

5

主题

9

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
252
QQ
威望
192
贡献
54
兑换币
10
注册时间
2011-12-2
在线时间
3 小时
跳转到指定楼层
1#
发表于 2012-9-5 23:17:36 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本例程为UPD78F9234(NEC)+BU9793FS(ROHM 88段LCDdrive)例程。
采用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<<bit_count)&0x80) {SDA=1;}
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);
stop_i2c();
}

文章来源:http://www.originic.hk/Item/Show.asp?m=1&d=1368
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关于我们|联系我们|小黑屋|智能车制作 ( 黑ICP备2022002344号

GMT+8, 2024-12-26 03:33 , Processed in 0.053106 second(s), 30 queries , Gzip On.

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表