导航: 老古网老古论坛XMOS公共讨论区XMOS开源项目区单片机程序设计嵌入式系统广告区域
→max6959是如何驱动4位半LED的源码,请高手指点一下,[mmppll]

 *第26534篇: max6959是如何驱动4位半LED的源码,请高手指点一下,为何led不亮

  
楼 主:mmppll 2004年10月10日09:09
 max6959是如何驱动4位半LED的源码,请高手指点一下,为何led不亮

此主题相关图片如下:
按此在新窗口浏览图片
源码:
/
#include   <AT892051.h>  
.............
extern WrToConfig();
extern WrToDisplay_test();
extern WrToDigit0();
extern void WrToLight();

extern void WrToDecode0_3();

void main()
{
 ...............
 WrToConfig();
 //WrToDisplay_test();
 WrToLight();
 WrToDecode0_3();
Loop:
 WrToDigit0();
 ...... 
goto Loop;
}


#define uchar unsigned char
#define uint unsigned int
#define Byte unsigned char
#define Word unsigned int
#define bool bit
#define true 1
#define false 0

//内存数据定义
#define BR_1K2L  0XE8
#define SlvAdr_W  0X38 //被控器地址+写命令,SLA+W max6959AAPE
#define SlvAdr_R  0XB8 //被控器地址+读命令,SLA+R max6959AAPE

uchar ByteCnt;  //I2C 数据字节计数器

uchar SubAdr; //被控器单元地址
uchar XmtDat[5]; //发送数据缓冲区

uchar Digit[10];

extern void I2CStart(void);
extern void I2CStop(void);
extern bool WaitAck(void);
extern void SendAck(void);
extern void SendNotAck(void);
extern void I2CSendByte(Byte ch);
extern Byte I2CReceiveByte(void);

void WrToConfig()
{
 I2CStart();//发送启动信号,启动I2C 总线

 I2CSendByte(SlvAdr_W);//送器件地址
 WaitAck();

 I2CSendByte(0x04);//发送单元地址=config寄存器地址
 WaitAck();

 I2CSendByte(0x21);//发送config命令not shutdown*/
 WaitAck();

 I2CStop();
}


void WrToDisplay_test()
{
 I2CStart();//发送启动信号,启动I2C 总线

 I2CSendByte(SlvAdr_W);//送器件地址
 WaitAck();

 I2CSendByte(0x07);//发送单元地址=display test 寄存器地謈
 WaitAck();

 I2CSendByte(0x00);//发送显示测试命令
 WaitAck();

 I2CStop();

}
void WrToDigit0()
{
 I2CStart();//发送启动信号,启动I2C 总线

 I2CSendByte(SlvAdr_W);//送器件地址
 WaitAck();

 I2CSendByte(0x20);//发送单元地址=dig0寄存器地址
 WaitAck();

 I2CSendByte(0x0F);//发送显示的数据
 WaitAck();

 I2CStop();
}

void WrToLight()
{
 I2CStart();//发送启动信号,启动I2C 总线

 I2CSendByte(SlvAdr_W);//送器件地址
 WaitAck();

 I2CSendByte(0x02);//发送单元地址=亮度寄存器地址
 WaitAck();

 I2CSendByte(0x3e);//发送亮度数据=22。64mA
 WaitAck();
}
void WrToDecode0_3()
{
 I2CStart();//发送启动信号,启动I2C 总线

 I2CSendByte(SlvAdr_W);//送器件地址
 WaitAck();

 I2CSendByte(0x01);//发送单元地址=亮度寄存器地址
 WaitAck();

 I2CSendByte(0x0f);//发送亮度数据=22。64mA
 WaitAck();
}

/*————————————————————
 〖说明〗I2C总线驱动程序(用两个普通IO模拟I2C总线)
  默认11.0592Mhz的晶振。
 〖版本〗V1.00A Build 0803
 —————————————————————*/
 /*whm*/
 /******* MAX6959接口与AT89C2051接口地址****/
 #include   <AT892051.H>  

 #ifndef SDA
 #define SDA P1_6
 #define SCL P1_5
 #endif

 #define uchar unsigned char
 #define uint unsigned int
 #define Byte unsigned char
 #define Word unsigned int
 #define bool bit
 #define true 1
 #define false 0

 extern uchar SystemError;
 extern void  _nop_(void);
//_nop_()为等待一个时钟周期
 #define SomeNOP(); _nop_();_nop_();_nop_();_nop_();

 
 /**--------------------------------------------------------------------------------
 调用方式:void I2CStart(void) ﹫2001/07/0 4
 函数说明:私有函数,I2C专用
 ---------------------------------------------------------------------------------*/
 void I2CStart(void)
 {
  EA=0;
  SDA=1; SCL=1; SomeNOP();//INI
  SDA=0; SomeNOP(); //START
  SCL=0;
 }

 /**--------------------------------------------------------------------------------
 调用方式:void I2CStop(void) ﹫2001/07/0 4
 函数说明:私有函数,I2C专用
 ---------------------------------------------------------------------------------*/
 void I2CStop(void)
 {
  SCL=0; SDA=0; SomeNOP(); //INI
  SCL=1; SomeNOP(); SDA=1; //STOP
  EA=1;
 }

 /**--------------------------------------------------------------------------------
 调用方式:bit I2CAck(void) ﹫2001/07/0 4
 函数说明:私有函数,I2C专用,等待从器件接收方的应答
 ---------------------------------------------------------------------------------*/
 bool WaitAck(void)
 {
  uchar errtime=255;//因故障接收方无ACK,超时值为255。
  SDA=1;SomeNOP();
  SCL=1;SomeNOP();
  while(SDA) 
  {
   errtime--; 
  if (!errtime) 
  {
   I2CStop();
   SystemError=0x11;
   return false;
  }
 }
  SCL=0;
  return true;
 }
/**--------------------------------------------------------------------------------
 调用方式:void SendAck(void) ﹫2001/07/0 4
 函数说明:私有函数,I2C专用,主器件为接收方,从器件为发送方时,应答信号。
 ---------------------------------------------------------------------------------*/
 void SendAck(void)
 {
  SDA=0; SomeNOP();
  SCL=1; SomeNOP();
  SCL=0;
 }

 /*--------------------------------------------------------------------------------
 调用方式:void SendAck(void) ﹫2001/07/0 4
 函数说明:私有函数,I2C专用,主器件为接收方,从器件为发送方时,非应答信号。
 }**--------------------------------------------------------------------------------*/
 void SendNotAck(void)
 {
  SDA=1; SomeNOP();
  SCL=1; SomeNOP();
  SCL=0;
 }

 /**--------------------------------------------------------------------------------
 调用方式:void I2CSend(uchar ch) ﹫2001/07/0 5
 函数说明:私有函数,I2C专用
 ---------------------------------------------------------------------------------*/
 void I2CSendByte(Byte ch)
 {
  uchar i=8;
  while (i--)
  {
   SCL=0;
   _nop_();
   SDA=(bit)(ch&0x80); 
   ch  <  <=1; 
   SomeNOP();
   SCL=1; 
   SomeNOP();
  }
  SCL=0;
 }

 /**--------------------------------------------------------------------------------
 调用方式:uchar I2CReceive(void) ﹫2001/07/0 5
 函数说明:私有函数,I2C专用
 ---------------------------------------------------------------------------------*/
 Byte I2CReceiveByte(void)
 {
  uchar i=8;
  Byte ddata=0;
  SDA=1;
  while (i--)
  {
   ddata  <  <=1;
   SCL=0;SomeNOP();
   SCL=1;SomeNOP();
   ddata|=SDA;
  }
  SCL=0;
  return ddata;
 }


>>>>>>对该主题发表你的看法

本主题贴数1,分页: [第1页]


[上一篇主题]:我要转行,出售2410开发板,送VGA板,QQ:81186171

[下一篇主题]:廉价出售开发成果