登录站点

用户名

密码

UPD78F9234+BU9793FS编程

已有 140 次阅读  2012-07-11 16:45   标签编程 
本例程为UPD78F9234(NEC)+BU9793FS(ROHM 88段LCDdrive)例程。
  采用I2C方式传送数据,若使用其他厂家的I2C方式通讯的LCDdrive可能需要稍加改动,ISP 通讯方式不可使用。
  
  *****************************************************/
  
  #define uchar unsigned char
  #define slave_addr 0x7c //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()
  {
  SDA=1;
  nop();
  SCL=1;
  nop();nop();nop();nop();
  SDA=0;
  nop();nop();nop();nop();
  SCL=0;
  }
  
  void stop_i2c()
  {
  SDA=0;
  nop();
  SCL=1;
  nop();nop();
  SDA=1;
  nop();
  }
  
  参考 http://www.originic.hk/Item/Show.asp?m=1&d=1368
  
  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[i]);}
  stop_i2c();
  }
  
  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();
  }
  
  NEC单片机
   
  参考 http://www.originic.hk/Item/Show.asp?m=1&d=1368

上一篇: 提高域名信任度及网站健康检查 下一篇: 电阻环上的阻值记忆诀窍

分享 举报